linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/3] xen: re-enable booting as Xen PVH guest
@ 2018-02-19 10:09 Juergen Gross
  2018-02-19 10:09 ` [PATCH v3 1/3] acpi: introduce acpi_arch_get_root_pointer() for getting rsdp address Juergen Gross
                   ` (3 more replies)
  0 siblings, 4 replies; 12+ messages in thread
From: Juergen Gross @ 2018-02-19 10:09 UTC (permalink / raw)
  To: linux-kernel, xen-devel, linux-acpi, x86
  Cc: rafael.j.wysocki, lenb, boris.ostrovsky, hpa, tglx, mingo, Juergen Gross

The Xen PVH boot protocol passes vital information to the kernel via
a start_info block. One of the data transferred is the physical address
of the RSDP table.

Unfortunately PVH support in the kernel didn't use that passed address
for RSDP, but relied on the legacy mechanism searching for the RSDP in
low memory. After a recent change in Xen putting the RSDP to a higher
address booting as PVH guest is now failing.

This small series repairs that by passing the RSDP address from the
start_info block to ACPI handling.

Changes in V3:
- instead of using a weak function add a function pointer to x86_init
  for obtaining the RSDP address

Juergen Gross (3):
  acpi: introduce acpi_arch_get_root_pointer() for getting rsdp address
  x86/acpi: add a new x86_init_acpi structure to x86_init_ops
  x86/xen: add pvh specific rsdp address retrieval function

 arch/x86/include/asm/acpi.h     |  7 +++++++
 arch/x86/include/asm/x86_init.h |  9 +++++++++
 arch/x86/kernel/x86_init.c      |  5 +++++
 arch/x86/xen/enlighten_pvh.c    | 14 +++++++++++---
 drivers/acpi/osl.c              |  5 ++++-
 include/linux/acpi.h            |  7 +++++++
 6 files changed, 43 insertions(+), 4 deletions(-)

-- 
2.13.6

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH v3 1/3] acpi: introduce acpi_arch_get_root_pointer() for getting rsdp address
  2018-02-19 10:09 [PATCH v3 0/3] xen: re-enable booting as Xen PVH guest Juergen Gross
@ 2018-02-19 10:09 ` Juergen Gross
  2018-02-20 10:24   ` [tip:x86/boot] acpi: Introduce " tip-bot for Juergen Gross
  2018-02-26  8:46   ` [tip:x86/mm] " tip-bot for Juergen Gross
  2018-02-19 10:09 ` [PATCH v3 2/3] x86/acpi: add a new x86_init_acpi structure to x86_init_ops Juergen Gross
                   ` (2 subsequent siblings)
  3 siblings, 2 replies; 12+ messages in thread
From: Juergen Gross @ 2018-02-19 10:09 UTC (permalink / raw)
  To: linux-kernel, xen-devel, linux-acpi, x86
  Cc: rafael.j.wysocki, lenb, boris.ostrovsky, hpa, tglx, mingo,
	Juergen Gross, stable

Add an architecture specific function to get the address of the RSDP
table. Per default it will just return 0 indicating falling back to
the current mechanism.

Cc: <stable@vger.kernel.org> # 4.11
Signed-off-by: Juergen Gross <jgross@suse.com>
---
 drivers/acpi/osl.c   | 5 ++++-
 include/linux/acpi.h | 7 +++++++
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
index 3bb46cb24a99..ff812243bac3 100644
--- a/drivers/acpi/osl.c
+++ b/drivers/acpi/osl.c
@@ -189,12 +189,15 @@ early_param("acpi_rsdp", setup_acpi_rsdp);
 
 acpi_physical_address __init acpi_os_get_root_pointer(void)
 {
-	acpi_physical_address pa = 0;
+	acpi_physical_address pa;
 
 #ifdef CONFIG_KEXEC
 	if (acpi_rsdp)
 		return acpi_rsdp;
 #endif
+	pa = acpi_arch_get_root_pointer();
+	if (pa)
+		return pa;
 
 	if (efi_enabled(EFI_CONFIG_TABLES)) {
 		if (efi.acpi20 != EFI_INVALID_TABLE_ADDR)
diff --git a/include/linux/acpi.h b/include/linux/acpi.h
index 968173ec2726..15bfb15c2fa5 100644
--- a/include/linux/acpi.h
+++ b/include/linux/acpi.h
@@ -623,6 +623,13 @@ bool acpi_gtdt_c3stop(int type);
 int acpi_arch_timer_mem_init(struct arch_timer_mem *timer_mem, int *timer_count);
 #endif
 
+#ifndef ACPI_HAVE_ARCH_GET_ROOT_POINTER
+static inline u64 acpi_arch_get_root_pointer(void)
+{
+	return 0;
+}
+#endif
+
 #else	/* !CONFIG_ACPI */
 
 #define acpi_disabled 1
-- 
2.13.6

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v3 2/3] x86/acpi: add a new x86_init_acpi structure to x86_init_ops
  2018-02-19 10:09 [PATCH v3 0/3] xen: re-enable booting as Xen PVH guest Juergen Gross
  2018-02-19 10:09 ` [PATCH v3 1/3] acpi: introduce acpi_arch_get_root_pointer() for getting rsdp address Juergen Gross
@ 2018-02-19 10:09 ` Juergen Gross
  2018-02-20 10:24   ` [tip:x86/boot] x86/acpi: Add " tip-bot for Juergen Gross
  2018-02-26  8:46   ` [tip:x86/mm] " tip-bot for Juergen Gross
  2018-02-19 10:09 ` [PATCH v3 3/3] x86/xen: add pvh specific rsdp address retrieval function Juergen Gross
  2018-02-19 10:27 ` [PATCH v3 0/3] xen: re-enable booting as Xen PVH guest Rafael J. Wysocki
  3 siblings, 2 replies; 12+ messages in thread
From: Juergen Gross @ 2018-02-19 10:09 UTC (permalink / raw)
  To: linux-kernel, xen-devel, linux-acpi, x86
  Cc: rafael.j.wysocki, lenb, boris.ostrovsky, hpa, tglx, mingo,
	Juergen Gross, stable

Add a new struct x86_init_acpi to x86_init_ops. For now it contains
only one init function to get the RSDP table address.

Cc: <stable@vger.kernel.org> # 4.11
Signed-off-by: Juergen Gross <jgross@suse.com>
---
 arch/x86/include/asm/acpi.h     | 7 +++++++
 arch/x86/include/asm/x86_init.h | 9 +++++++++
 arch/x86/kernel/x86_init.c      | 5 +++++
 3 files changed, 21 insertions(+)

diff --git a/arch/x86/include/asm/acpi.h b/arch/x86/include/asm/acpi.h
index 11881726ed37..6609dd7289b5 100644
--- a/arch/x86/include/asm/acpi.h
+++ b/arch/x86/include/asm/acpi.h
@@ -31,6 +31,7 @@
 #include <asm/mmu.h>
 #include <asm/mpspec.h>
 #include <asm/realmode.h>
+#include <asm/x86_init.h>
 
 #ifdef CONFIG_ACPI_APEI
 # include <asm/pgtable_types.h>
@@ -133,6 +134,12 @@ static inline bool acpi_has_cpu_in_madt(void)
 	return !!acpi_lapic;
 }
 
+#define ACPI_HAVE_ARCH_GET_ROOT_POINTER
+static inline u64 acpi_arch_get_root_pointer(void)
+{
+	return x86_init.acpi.get_root_pointer();
+}
+
 #else /* !CONFIG_ACPI */
 
 #define acpi_lapic 0
diff --git a/arch/x86/include/asm/x86_init.h b/arch/x86/include/asm/x86_init.h
index fc2f082ac635..2e2c34d2bb00 100644
--- a/arch/x86/include/asm/x86_init.h
+++ b/arch/x86/include/asm/x86_init.h
@@ -131,6 +131,14 @@ struct x86_hyper_init {
 };
 
 /**
+ * struct x86_init_acpi - x86 ACPI init functions
+ * @get_root_pointer:		get RSDP address
+ */
+struct x86_init_acpi {
+	u64 (*get_root_pointer)(void);
+};
+
+/**
  * struct x86_init_ops - functions for platform specific setup
  *
  */
@@ -144,6 +152,7 @@ struct x86_init_ops {
 	struct x86_init_iommu		iommu;
 	struct x86_init_pci		pci;
 	struct x86_hyper_init		hyper;
+	struct x86_init_acpi		acpi;
 };
 
 /**
diff --git a/arch/x86/kernel/x86_init.c b/arch/x86/kernel/x86_init.c
index 1151ccd72ce9..9e4e994a4836 100644
--- a/arch/x86/kernel/x86_init.c
+++ b/arch/x86/kernel/x86_init.c
@@ -30,6 +30,7 @@ int __init iommu_init_noop(void) { return 0; }
 void iommu_shutdown_noop(void) { }
 bool __init bool_x86_init_noop(void) { return false; }
 void x86_op_int_noop(int cpu) { }
+u64 u64_x86_init_noop(void) { return 0; }
 
 /*
  * The platform setup functions are preset with the default functions
@@ -91,6 +92,10 @@ struct x86_init_ops x86_init __initdata = {
 		.x2apic_available	= bool_x86_init_noop,
 		.init_mem_mapping	= x86_init_noop,
 	},
+
+	.acpi = {
+		.get_root_pointer	= u64_x86_init_noop,
+	},
 };
 
 struct x86_cpuinit_ops x86_cpuinit = {
-- 
2.13.6

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH v3 3/3] x86/xen: add pvh specific rsdp address retrieval function
  2018-02-19 10:09 [PATCH v3 0/3] xen: re-enable booting as Xen PVH guest Juergen Gross
  2018-02-19 10:09 ` [PATCH v3 1/3] acpi: introduce acpi_arch_get_root_pointer() for getting rsdp address Juergen Gross
  2018-02-19 10:09 ` [PATCH v3 2/3] x86/acpi: add a new x86_init_acpi structure to x86_init_ops Juergen Gross
@ 2018-02-19 10:09 ` Juergen Gross
  2018-02-20 10:25   ` [tip:x86/boot] x86/xen: Add " tip-bot for Juergen Gross
  2018-02-26  8:47   ` [tip:x86/mm] " tip-bot for Juergen Gross
  2018-02-19 10:27 ` [PATCH v3 0/3] xen: re-enable booting as Xen PVH guest Rafael J. Wysocki
  3 siblings, 2 replies; 12+ messages in thread
From: Juergen Gross @ 2018-02-19 10:09 UTC (permalink / raw)
  To: linux-kernel, xen-devel, linux-acpi, x86
  Cc: rafael.j.wysocki, lenb, boris.ostrovsky, hpa, tglx, mingo,
	Juergen Gross, stable

Add pvh_get_root_pointer() for Xen PVH guests to communicate the
address of the RSDP table given to the kernel via Xen start info.

This makes the kernel boot again in PVH mode after on recent Xen the
RSDP was moved to higher addresses. So up to that change it was pure
luck that the legacy method to locate the RSDP was working when
running as PVH mode.

Cc: <stable@vger.kernel.org> # 4.11
Signed-off-by: Juergen Gross <jgross@suse.com>
---
 arch/x86/xen/enlighten_pvh.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/arch/x86/xen/enlighten_pvh.c b/arch/x86/xen/enlighten_pvh.c
index 436c4f003e17..aa1c6a6831a9 100644
--- a/arch/x86/xen/enlighten_pvh.c
+++ b/arch/x86/xen/enlighten_pvh.c
@@ -6,6 +6,7 @@
 #include <asm/io_apic.h>
 #include <asm/hypervisor.h>
 #include <asm/e820/api.h>
+#include <asm/x86_init.h>
 
 #include <asm/xen/interface.h>
 #include <asm/xen/hypercall.h>
@@ -16,15 +17,20 @@
 /*
  * PVH variables.
  *
- * xen_pvh and pvh_bootparams need to live in data segment since they
- * are used after startup_{32|64}, which clear .bss, are invoked.
+ * xen_pvh pvh_bootparams and pvh_start_info need to live in data segment
+ * since they are used after startup_{32|64}, which clear .bss, are invoked.
  */
 bool xen_pvh __attribute__((section(".data"))) = 0;
 struct boot_params pvh_bootparams __attribute__((section(".data")));
+struct hvm_start_info pvh_start_info __attribute__((section(".data")));
 
-struct hvm_start_info pvh_start_info;
 unsigned int pvh_start_info_sz = sizeof(pvh_start_info);
 
+static u64 pvh_get_root_pointer(void)
+{
+	return pvh_start_info.rsdp_paddr;
+}
+
 static void __init init_pvh_bootparams(void)
 {
 	struct xen_memory_map memmap;
@@ -71,6 +77,8 @@ static void __init init_pvh_bootparams(void)
 	 */
 	pvh_bootparams.hdr.version = 0x212;
 	pvh_bootparams.hdr.type_of_loader = (9 << 4) | 0; /* Xen loader */
+
+	x86_init.acpi.get_root_pointer = pvh_get_root_pointer;
 }
 
 /*
-- 
2.13.6

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH v3 0/3] xen: re-enable booting as Xen PVH guest
  2018-02-19 10:09 [PATCH v3 0/3] xen: re-enable booting as Xen PVH guest Juergen Gross
                   ` (2 preceding siblings ...)
  2018-02-19 10:09 ` [PATCH v3 3/3] x86/xen: add pvh specific rsdp address retrieval function Juergen Gross
@ 2018-02-19 10:27 ` Rafael J. Wysocki
  2018-02-19 13:43   ` Andy Shevchenko
  3 siblings, 1 reply; 12+ messages in thread
From: Rafael J. Wysocki @ 2018-02-19 10:27 UTC (permalink / raw)
  To: Juergen Gross, linux-kernel, xen-devel, linux-acpi, x86
  Cc: lenb, boris.ostrovsky, hpa, tglx, mingo

On 2/19/2018 11:09 AM, Juergen Gross wrote:
> The Xen PVH boot protocol passes vital information to the kernel via
> a start_info block. One of the data transferred is the physical address
> of the RSDP table.
>
> Unfortunately PVH support in the kernel didn't use that passed address
> for RSDP, but relied on the legacy mechanism searching for the RSDP in
> low memory. After a recent change in Xen putting the RSDP to a higher
> address booting as PVH guest is now failing.
>
> This small series repairs that by passing the RSDP address from the
> start_info block to ACPI handling.
>
> Changes in V3:
> - instead of using a weak function add a function pointer to x86_init
>    for obtaining the RSDP address
>
> Juergen Gross (3):
>    acpi: introduce acpi_arch_get_root_pointer() for getting rsdp address
>    x86/acpi: add a new x86_init_acpi structure to x86_init_ops
>    x86/xen: add pvh specific rsdp address retrieval function
>
>   arch/x86/include/asm/acpi.h     |  7 +++++++
>   arch/x86/include/asm/x86_init.h |  9 +++++++++
>   arch/x86/kernel/x86_init.c      |  5 +++++
>   arch/x86/xen/enlighten_pvh.c    | 14 +++++++++++---
>   drivers/acpi/osl.c              |  5 ++++-
>   include/linux/acpi.h            |  7 +++++++
>   6 files changed, 43 insertions(+), 4 deletions(-)
>
The series is fine by me:

Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH v3 0/3] xen: re-enable booting as Xen PVH guest
  2018-02-19 10:27 ` [PATCH v3 0/3] xen: re-enable booting as Xen PVH guest Rafael J. Wysocki
@ 2018-02-19 13:43   ` Andy Shevchenko
  0 siblings, 0 replies; 12+ messages in thread
From: Andy Shevchenko @ 2018-02-19 13:43 UTC (permalink / raw)
  To: Rafael J. Wysocki
  Cc: Juergen Gross, Linux Kernel Mailing List, xen-devel,
	ACPI Devel Maling List, x86, Len Brown, Boris Ostrovsky,
	H. Peter Anvin, Thomas Gleixner, Ingo Molnar

On Mon, Feb 19, 2018 at 12:27 PM, Rafael J. Wysocki
<rafael.j.wysocki@intel.com> wrote:
> On 2/19/2018 11:09 AM, Juergen Gross wrote:
>>
>> The Xen PVH boot protocol passes vital information to the kernel via
>> a start_info block. One of the data transferred is the physical address
>> of the RSDP table.
>>
>> Unfortunately PVH support in the kernel didn't use that passed address
>> for RSDP, but relied on the legacy mechanism searching for the RSDP in
>> low memory. After a recent change in Xen putting the RSDP to a higher
>> address booting as PVH guest is now failing.
>>
>> This small series repairs that by passing the RSDP address from the
>> start_info block to ACPI handling.
>>
>> Changes in V3:
>> - instead of using a weak function add a function pointer to x86_init
>>    for obtaining the RSDP address
>>
>> Juergen Gross (3):
>>    acpi: introduce acpi_arch_get_root_pointer() for getting rsdp address
>>    x86/acpi: add a new x86_init_acpi structure to x86_init_ops
>>    x86/xen: add pvh specific rsdp address retrieval function
>>
>>   arch/x86/include/asm/acpi.h     |  7 +++++++
>>   arch/x86/include/asm/x86_init.h |  9 +++++++++
>>   arch/x86/kernel/x86_init.c      |  5 +++++
>>   arch/x86/xen/enlighten_pvh.c    | 14 +++++++++++---
>>   drivers/acpi/osl.c              |  5 ++++-
>>   include/linux/acpi.h            |  7 +++++++
>>   6 files changed, 43 insertions(+), 4 deletions(-)
>>
> The series is fine by me:
>
> Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>

Don't know much about Xen, though the ACPI / x86 stubs are exactly
what I'm wanting!
Thanks.

Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>

-- 
With Best Regards,
Andy Shevchenko

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [tip:x86/boot] acpi: Introduce acpi_arch_get_root_pointer() for getting rsdp address
  2018-02-19 10:09 ` [PATCH v3 1/3] acpi: introduce acpi_arch_get_root_pointer() for getting rsdp address Juergen Gross
@ 2018-02-20 10:24   ` tip-bot for Juergen Gross
  2018-02-26  8:46   ` [tip:x86/mm] " tip-bot for Juergen Gross
  1 sibling, 0 replies; 12+ messages in thread
From: tip-bot for Juergen Gross @ 2018-02-20 10:24 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: linux-kernel, jgross, ebiederm, rafael.j.wysocki, hpa, bp,
	torvalds, tglx, kirill.shutemov, keescook, mingo, peterz,
	andy.shevchenko

Commit-ID:  795e2963a1afef44ed9ec7e6d16c8052fcd8d886
Gitweb:     https://git.kernel.org/tip/795e2963a1afef44ed9ec7e6d16c8052fcd8d886
Author:     Juergen Gross <jgross@suse.com>
AuthorDate: Mon, 19 Feb 2018 11:09:04 +0100
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Tue, 20 Feb 2018 09:00:55 +0100

acpi: Introduce acpi_arch_get_root_pointer() for getting rsdp address

Add an architecture specific function to get the address of the RSDP
table. Per default it will just return 0 indicating falling back to
the current mechanism.

Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Eric Biederman <ebiederm@xmission.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: boris.ostrovsky@oracle.com
Cc: lenb@kernel.org
Cc: linux-acpi@vger.kernel.org
Cc: xen-devel@lists.xenproject.org
Link: http://lkml.kernel.org/r/20180219100906.14265-2-jgross@suse.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 drivers/acpi/osl.c   | 5 ++++-
 include/linux/acpi.h | 7 +++++++
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
index 3bb46cb..7ca41bf 100644
--- a/drivers/acpi/osl.c
+++ b/drivers/acpi/osl.c
@@ -189,12 +189,15 @@ early_param("acpi_rsdp", setup_acpi_rsdp);
 
 acpi_physical_address __init acpi_os_get_root_pointer(void)
 {
-	acpi_physical_address pa = 0;
+	acpi_physical_address pa;
 
 #ifdef CONFIG_KEXEC
 	if (acpi_rsdp)
 		return acpi_rsdp;
 #endif
+	pa = acpi_arch_get_root_pointer();
+	if (pa)
+		return pa;
 
 	if (efi_enabled(EFI_CONFIG_TABLES)) {
 		if (efi.acpi20 != EFI_INVALID_TABLE_ADDR)
diff --git a/include/linux/acpi.h b/include/linux/acpi.h
index 968173e..15bfb15 100644
--- a/include/linux/acpi.h
+++ b/include/linux/acpi.h
@@ -623,6 +623,13 @@ bool acpi_gtdt_c3stop(int type);
 int acpi_arch_timer_mem_init(struct arch_timer_mem *timer_mem, int *timer_count);
 #endif
 
+#ifndef ACPI_HAVE_ARCH_GET_ROOT_POINTER
+static inline u64 acpi_arch_get_root_pointer(void)
+{
+	return 0;
+}
+#endif
+
 #else	/* !CONFIG_ACPI */
 
 #define acpi_disabled 1

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [tip:x86/boot] x86/acpi: Add a new x86_init_acpi structure to x86_init_ops
  2018-02-19 10:09 ` [PATCH v3 2/3] x86/acpi: add a new x86_init_acpi structure to x86_init_ops Juergen Gross
@ 2018-02-20 10:24   ` tip-bot for Juergen Gross
  2018-02-26  8:46   ` [tip:x86/mm] " tip-bot for Juergen Gross
  1 sibling, 0 replies; 12+ messages in thread
From: tip-bot for Juergen Gross @ 2018-02-20 10:24 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: keescook, torvalds, tglx, rafael.j.wysocki, kirill.shutemov,
	andy.shevchenko, jgross, linux-kernel, bp, hpa, ebiederm, mingo,
	peterz

Commit-ID:  62d8b7fba8d3ba9c046b7a1a95946c6aaf7c5da9
Gitweb:     https://git.kernel.org/tip/62d8b7fba8d3ba9c046b7a1a95946c6aaf7c5da9
Author:     Juergen Gross <jgross@suse.com>
AuthorDate: Mon, 19 Feb 2018 11:09:05 +0100
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Tue, 20 Feb 2018 09:00:56 +0100

x86/acpi: Add a new x86_init_acpi structure to x86_init_ops

Add a new struct x86_init_acpi to x86_init_ops. For now it contains
only one init function to get the RSDP table address.

Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Eric Biederman <ebiederm@xmission.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: boris.ostrovsky@oracle.com
Cc: lenb@kernel.org
Cc: linux-acpi@vger.kernel.org
Cc: xen-devel@lists.xenproject.org
Link: http://lkml.kernel.org/r/20180219100906.14265-3-jgross@suse.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 arch/x86/include/asm/acpi.h     | 7 +++++++
 arch/x86/include/asm/x86_init.h | 9 +++++++++
 arch/x86/kernel/x86_init.c      | 5 +++++
 3 files changed, 21 insertions(+)

diff --git a/arch/x86/include/asm/acpi.h b/arch/x86/include/asm/acpi.h
index 1188172..6609dd7 100644
--- a/arch/x86/include/asm/acpi.h
+++ b/arch/x86/include/asm/acpi.h
@@ -31,6 +31,7 @@
 #include <asm/mmu.h>
 #include <asm/mpspec.h>
 #include <asm/realmode.h>
+#include <asm/x86_init.h>
 
 #ifdef CONFIG_ACPI_APEI
 # include <asm/pgtable_types.h>
@@ -133,6 +134,12 @@ static inline bool acpi_has_cpu_in_madt(void)
 	return !!acpi_lapic;
 }
 
+#define ACPI_HAVE_ARCH_GET_ROOT_POINTER
+static inline u64 acpi_arch_get_root_pointer(void)
+{
+	return x86_init.acpi.get_root_pointer();
+}
+
 #else /* !CONFIG_ACPI */
 
 #define acpi_lapic 0
diff --git a/arch/x86/include/asm/x86_init.h b/arch/x86/include/asm/x86_init.h
index fc2f082..2e2c34d 100644
--- a/arch/x86/include/asm/x86_init.h
+++ b/arch/x86/include/asm/x86_init.h
@@ -131,6 +131,14 @@ struct x86_hyper_init {
 };
 
 /**
+ * struct x86_init_acpi - x86 ACPI init functions
+ * @get_root_pointer:		get RSDP address
+ */
+struct x86_init_acpi {
+	u64 (*get_root_pointer)(void);
+};
+
+/**
  * struct x86_init_ops - functions for platform specific setup
  *
  */
@@ -144,6 +152,7 @@ struct x86_init_ops {
 	struct x86_init_iommu		iommu;
 	struct x86_init_pci		pci;
 	struct x86_hyper_init		hyper;
+	struct x86_init_acpi		acpi;
 };
 
 /**
diff --git a/arch/x86/kernel/x86_init.c b/arch/x86/kernel/x86_init.c
index 1151ccd..9e4e994 100644
--- a/arch/x86/kernel/x86_init.c
+++ b/arch/x86/kernel/x86_init.c
@@ -30,6 +30,7 @@ int __init iommu_init_noop(void) { return 0; }
 void iommu_shutdown_noop(void) { }
 bool __init bool_x86_init_noop(void) { return false; }
 void x86_op_int_noop(int cpu) { }
+u64 u64_x86_init_noop(void) { return 0; }
 
 /*
  * The platform setup functions are preset with the default functions
@@ -91,6 +92,10 @@ struct x86_init_ops x86_init __initdata = {
 		.x2apic_available	= bool_x86_init_noop,
 		.init_mem_mapping	= x86_init_noop,
 	},
+
+	.acpi = {
+		.get_root_pointer	= u64_x86_init_noop,
+	},
 };
 
 struct x86_cpuinit_ops x86_cpuinit = {

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [tip:x86/boot] x86/xen: Add pvh specific rsdp address retrieval function
  2018-02-19 10:09 ` [PATCH v3 3/3] x86/xen: add pvh specific rsdp address retrieval function Juergen Gross
@ 2018-02-20 10:25   ` tip-bot for Juergen Gross
  2018-02-26  8:47   ` [tip:x86/mm] " tip-bot for Juergen Gross
  1 sibling, 0 replies; 12+ messages in thread
From: tip-bot for Juergen Gross @ 2018-02-20 10:25 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: rafael.j.wysocki, tglx, hpa, jgross, bp, peterz, keescook,
	linux-kernel, mingo, ebiederm, torvalds, kirill.shutemov,
	andy.shevchenko

Commit-ID:  e9cb8fc2e5ca5996417f900ed5149bd9150f6abd
Gitweb:     https://git.kernel.org/tip/e9cb8fc2e5ca5996417f900ed5149bd9150f6abd
Author:     Juergen Gross <jgross@suse.com>
AuthorDate: Mon, 19 Feb 2018 11:09:06 +0100
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Tue, 20 Feb 2018 09:00:56 +0100

x86/xen: Add pvh specific rsdp address retrieval function

Add pvh_get_root_pointer() for Xen PVH guests to communicate the
address of the RSDP table given to the kernel via Xen start info.

This makes the kernel boot again in PVH mode after on recent Xen the
RSDP was moved to higher addresses. So up to that change it was pure
luck that the legacy method to locate the RSDP was working when
running as PVH mode.

Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Eric Biederman <ebiederm@xmission.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: boris.ostrovsky@oracle.com
Cc: lenb@kernel.org
Cc: linux-acpi@vger.kernel.org
Cc: xen-devel@lists.xenproject.org
Link: http://lkml.kernel.org/r/20180219100906.14265-4-jgross@suse.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 arch/x86/xen/enlighten_pvh.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/arch/x86/xen/enlighten_pvh.c b/arch/x86/xen/enlighten_pvh.c
index 436c4f0..aa1c6a68 100644
--- a/arch/x86/xen/enlighten_pvh.c
+++ b/arch/x86/xen/enlighten_pvh.c
@@ -6,6 +6,7 @@
 #include <asm/io_apic.h>
 #include <asm/hypervisor.h>
 #include <asm/e820/api.h>
+#include <asm/x86_init.h>
 
 #include <asm/xen/interface.h>
 #include <asm/xen/hypercall.h>
@@ -16,15 +17,20 @@
 /*
  * PVH variables.
  *
- * xen_pvh and pvh_bootparams need to live in data segment since they
- * are used after startup_{32|64}, which clear .bss, are invoked.
+ * xen_pvh pvh_bootparams and pvh_start_info need to live in data segment
+ * since they are used after startup_{32|64}, which clear .bss, are invoked.
  */
 bool xen_pvh __attribute__((section(".data"))) = 0;
 struct boot_params pvh_bootparams __attribute__((section(".data")));
+struct hvm_start_info pvh_start_info __attribute__((section(".data")));
 
-struct hvm_start_info pvh_start_info;
 unsigned int pvh_start_info_sz = sizeof(pvh_start_info);
 
+static u64 pvh_get_root_pointer(void)
+{
+	return pvh_start_info.rsdp_paddr;
+}
+
 static void __init init_pvh_bootparams(void)
 {
 	struct xen_memory_map memmap;
@@ -71,6 +77,8 @@ static void __init init_pvh_bootparams(void)
 	 */
 	pvh_bootparams.hdr.version = 0x212;
 	pvh_bootparams.hdr.type_of_loader = (9 << 4) | 0; /* Xen loader */
+
+	x86_init.acpi.get_root_pointer = pvh_get_root_pointer;
 }
 
 /*

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [tip:x86/mm] acpi: Introduce acpi_arch_get_root_pointer() for getting rsdp address
  2018-02-19 10:09 ` [PATCH v3 1/3] acpi: introduce acpi_arch_get_root_pointer() for getting rsdp address Juergen Gross
  2018-02-20 10:24   ` [tip:x86/boot] acpi: Introduce " tip-bot for Juergen Gross
@ 2018-02-26  8:46   ` tip-bot for Juergen Gross
  1 sibling, 0 replies; 12+ messages in thread
From: tip-bot for Juergen Gross @ 2018-02-26  8:46 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: keescook, tglx, hpa, peterz, bp, torvalds, rafael.j.wysocki,
	mingo, kirill.shutemov, ebiederm, linux-kernel, jgross,
	andy.shevchenko

Commit-ID:  dfc9327ab7c99bc13e12106448615efba833886b
Gitweb:     https://git.kernel.org/tip/dfc9327ab7c99bc13e12106448615efba833886b
Author:     Juergen Gross <jgross@suse.com>
AuthorDate: Mon, 19 Feb 2018 11:09:04 +0100
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Mon, 26 Feb 2018 08:43:20 +0100

acpi: Introduce acpi_arch_get_root_pointer() for getting rsdp address

Add an architecture specific function to get the address of the RSDP
table. Per default it will just return 0 indicating falling back to
the current mechanism.

Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Eric Biederman <ebiederm@xmission.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: boris.ostrovsky@oracle.com
Cc: lenb@kernel.org
Cc: linux-acpi@vger.kernel.org
Cc: xen-devel@lists.xenproject.org
Link: http://lkml.kernel.org/r/20180219100906.14265-2-jgross@suse.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 drivers/acpi/osl.c   | 5 ++++-
 include/linux/acpi.h | 7 +++++++
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
index 3bb46cb24a99..7ca41bf023c9 100644
--- a/drivers/acpi/osl.c
+++ b/drivers/acpi/osl.c
@@ -189,12 +189,15 @@ early_param("acpi_rsdp", setup_acpi_rsdp);
 
 acpi_physical_address __init acpi_os_get_root_pointer(void)
 {
-	acpi_physical_address pa = 0;
+	acpi_physical_address pa;
 
 #ifdef CONFIG_KEXEC
 	if (acpi_rsdp)
 		return acpi_rsdp;
 #endif
+	pa = acpi_arch_get_root_pointer();
+	if (pa)
+		return pa;
 
 	if (efi_enabled(EFI_CONFIG_TABLES)) {
 		if (efi.acpi20 != EFI_INVALID_TABLE_ADDR)
diff --git a/include/linux/acpi.h b/include/linux/acpi.h
index 968173ec2726..15bfb15c2fa5 100644
--- a/include/linux/acpi.h
+++ b/include/linux/acpi.h
@@ -623,6 +623,13 @@ bool acpi_gtdt_c3stop(int type);
 int acpi_arch_timer_mem_init(struct arch_timer_mem *timer_mem, int *timer_count);
 #endif
 
+#ifndef ACPI_HAVE_ARCH_GET_ROOT_POINTER
+static inline u64 acpi_arch_get_root_pointer(void)
+{
+	return 0;
+}
+#endif
+
 #else	/* !CONFIG_ACPI */
 
 #define acpi_disabled 1

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [tip:x86/mm] x86/acpi: Add a new x86_init_acpi structure to x86_init_ops
  2018-02-19 10:09 ` [PATCH v3 2/3] x86/acpi: add a new x86_init_acpi structure to x86_init_ops Juergen Gross
  2018-02-20 10:24   ` [tip:x86/boot] x86/acpi: Add " tip-bot for Juergen Gross
@ 2018-02-26  8:46   ` tip-bot for Juergen Gross
  1 sibling, 0 replies; 12+ messages in thread
From: tip-bot for Juergen Gross @ 2018-02-26  8:46 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: rafael.j.wysocki, andy.shevchenko, linux-kernel, hpa, bp,
	ebiederm, mingo, keescook, tglx, kirill.shutemov, peterz,
	torvalds, jgross

Commit-ID:  038bac2b02989acf1fc938cedcb7944c02672b9f
Gitweb:     https://git.kernel.org/tip/038bac2b02989acf1fc938cedcb7944c02672b9f
Author:     Juergen Gross <jgross@suse.com>
AuthorDate: Mon, 19 Feb 2018 11:09:05 +0100
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Mon, 26 Feb 2018 08:43:20 +0100

x86/acpi: Add a new x86_init_acpi structure to x86_init_ops

Add a new struct x86_init_acpi to x86_init_ops. For now it contains
only one init function to get the RSDP table address.

Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Eric Biederman <ebiederm@xmission.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: boris.ostrovsky@oracle.com
Cc: lenb@kernel.org
Cc: linux-acpi@vger.kernel.org
Cc: xen-devel@lists.xenproject.org
Link: http://lkml.kernel.org/r/20180219100906.14265-3-jgross@suse.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 arch/x86/include/asm/acpi.h     | 7 +++++++
 arch/x86/include/asm/x86_init.h | 9 +++++++++
 arch/x86/kernel/x86_init.c      | 5 +++++
 3 files changed, 21 insertions(+)

diff --git a/arch/x86/include/asm/acpi.h b/arch/x86/include/asm/acpi.h
index 11881726ed37..6609dd7289b5 100644
--- a/arch/x86/include/asm/acpi.h
+++ b/arch/x86/include/asm/acpi.h
@@ -31,6 +31,7 @@
 #include <asm/mmu.h>
 #include <asm/mpspec.h>
 #include <asm/realmode.h>
+#include <asm/x86_init.h>
 
 #ifdef CONFIG_ACPI_APEI
 # include <asm/pgtable_types.h>
@@ -133,6 +134,12 @@ static inline bool acpi_has_cpu_in_madt(void)
 	return !!acpi_lapic;
 }
 
+#define ACPI_HAVE_ARCH_GET_ROOT_POINTER
+static inline u64 acpi_arch_get_root_pointer(void)
+{
+	return x86_init.acpi.get_root_pointer();
+}
+
 #else /* !CONFIG_ACPI */
 
 #define acpi_lapic 0
diff --git a/arch/x86/include/asm/x86_init.h b/arch/x86/include/asm/x86_init.h
index fc2f082ac635..2e2c34d2bb00 100644
--- a/arch/x86/include/asm/x86_init.h
+++ b/arch/x86/include/asm/x86_init.h
@@ -130,6 +130,14 @@ struct x86_hyper_init {
 	void (*init_mem_mapping)(void);
 };
 
+/**
+ * struct x86_init_acpi - x86 ACPI init functions
+ * @get_root_pointer:		get RSDP address
+ */
+struct x86_init_acpi {
+	u64 (*get_root_pointer)(void);
+};
+
 /**
  * struct x86_init_ops - functions for platform specific setup
  *
@@ -144,6 +152,7 @@ struct x86_init_ops {
 	struct x86_init_iommu		iommu;
 	struct x86_init_pci		pci;
 	struct x86_hyper_init		hyper;
+	struct x86_init_acpi		acpi;
 };
 
 /**
diff --git a/arch/x86/kernel/x86_init.c b/arch/x86/kernel/x86_init.c
index 1151ccd72ce9..9e4e994a4836 100644
--- a/arch/x86/kernel/x86_init.c
+++ b/arch/x86/kernel/x86_init.c
@@ -30,6 +30,7 @@ int __init iommu_init_noop(void) { return 0; }
 void iommu_shutdown_noop(void) { }
 bool __init bool_x86_init_noop(void) { return false; }
 void x86_op_int_noop(int cpu) { }
+u64 u64_x86_init_noop(void) { return 0; }
 
 /*
  * The platform setup functions are preset with the default functions
@@ -91,6 +92,10 @@ struct x86_init_ops x86_init __initdata = {
 		.x2apic_available	= bool_x86_init_noop,
 		.init_mem_mapping	= x86_init_noop,
 	},
+
+	.acpi = {
+		.get_root_pointer	= u64_x86_init_noop,
+	},
 };
 
 struct x86_cpuinit_ops x86_cpuinit = {

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [tip:x86/mm] x86/xen: Add pvh specific rsdp address retrieval function
  2018-02-19 10:09 ` [PATCH v3 3/3] x86/xen: add pvh specific rsdp address retrieval function Juergen Gross
  2018-02-20 10:25   ` [tip:x86/boot] x86/xen: Add " tip-bot for Juergen Gross
@ 2018-02-26  8:47   ` tip-bot for Juergen Gross
  1 sibling, 0 replies; 12+ messages in thread
From: tip-bot for Juergen Gross @ 2018-02-26  8:47 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: andy.shevchenko, torvalds, keescook, ebiederm, rafael.j.wysocki,
	peterz, jgross, mingo, tglx, hpa, bp, linux-kernel,
	kirill.shutemov

Commit-ID:  b17d9d1df3c33a4f1d2bf397e2257aecf9dc56d4
Gitweb:     https://git.kernel.org/tip/b17d9d1df3c33a4f1d2bf397e2257aecf9dc56d4
Author:     Juergen Gross <jgross@suse.com>
AuthorDate: Mon, 19 Feb 2018 11:09:06 +0100
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Mon, 26 Feb 2018 08:43:20 +0100

x86/xen: Add pvh specific rsdp address retrieval function

Add pvh_get_root_pointer() for Xen PVH guests to communicate the
address of the RSDP table given to the kernel via Xen start info.

This makes the kernel boot again in PVH mode after on recent Xen the
RSDP was moved to higher addresses. So up to that change it was pure
luck that the legacy method to locate the RSDP was working when
running as PVH mode.

Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Eric Biederman <ebiederm@xmission.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: boris.ostrovsky@oracle.com
Cc: lenb@kernel.org
Cc: linux-acpi@vger.kernel.org
Cc: xen-devel@lists.xenproject.org
Link: http://lkml.kernel.org/r/20180219100906.14265-4-jgross@suse.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 arch/x86/xen/enlighten_pvh.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/arch/x86/xen/enlighten_pvh.c b/arch/x86/xen/enlighten_pvh.c
index 436c4f003e17..aa1c6a6831a9 100644
--- a/arch/x86/xen/enlighten_pvh.c
+++ b/arch/x86/xen/enlighten_pvh.c
@@ -6,6 +6,7 @@
 #include <asm/io_apic.h>
 #include <asm/hypervisor.h>
 #include <asm/e820/api.h>
+#include <asm/x86_init.h>
 
 #include <asm/xen/interface.h>
 #include <asm/xen/hypercall.h>
@@ -16,15 +17,20 @@
 /*
  * PVH variables.
  *
- * xen_pvh and pvh_bootparams need to live in data segment since they
- * are used after startup_{32|64}, which clear .bss, are invoked.
+ * xen_pvh pvh_bootparams and pvh_start_info need to live in data segment
+ * since they are used after startup_{32|64}, which clear .bss, are invoked.
  */
 bool xen_pvh __attribute__((section(".data"))) = 0;
 struct boot_params pvh_bootparams __attribute__((section(".data")));
+struct hvm_start_info pvh_start_info __attribute__((section(".data")));
 
-struct hvm_start_info pvh_start_info;
 unsigned int pvh_start_info_sz = sizeof(pvh_start_info);
 
+static u64 pvh_get_root_pointer(void)
+{
+	return pvh_start_info.rsdp_paddr;
+}
+
 static void __init init_pvh_bootparams(void)
 {
 	struct xen_memory_map memmap;
@@ -71,6 +77,8 @@ static void __init init_pvh_bootparams(void)
 	 */
 	pvh_bootparams.hdr.version = 0x212;
 	pvh_bootparams.hdr.type_of_loader = (9 << 4) | 0; /* Xen loader */
+
+	x86_init.acpi.get_root_pointer = pvh_get_root_pointer;
 }
 
 /*

^ permalink raw reply related	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2018-02-26  8:48 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-02-19 10:09 [PATCH v3 0/3] xen: re-enable booting as Xen PVH guest Juergen Gross
2018-02-19 10:09 ` [PATCH v3 1/3] acpi: introduce acpi_arch_get_root_pointer() for getting rsdp address Juergen Gross
2018-02-20 10:24   ` [tip:x86/boot] acpi: Introduce " tip-bot for Juergen Gross
2018-02-26  8:46   ` [tip:x86/mm] " tip-bot for Juergen Gross
2018-02-19 10:09 ` [PATCH v3 2/3] x86/acpi: add a new x86_init_acpi structure to x86_init_ops Juergen Gross
2018-02-20 10:24   ` [tip:x86/boot] x86/acpi: Add " tip-bot for Juergen Gross
2018-02-26  8:46   ` [tip:x86/mm] " tip-bot for Juergen Gross
2018-02-19 10:09 ` [PATCH v3 3/3] x86/xen: add pvh specific rsdp address retrieval function Juergen Gross
2018-02-20 10:25   ` [tip:x86/boot] x86/xen: Add " tip-bot for Juergen Gross
2018-02-26  8:47   ` [tip:x86/mm] " tip-bot for Juergen Gross
2018-02-19 10:27 ` [PATCH v3 0/3] xen: re-enable booting as Xen PVH guest Rafael J. Wysocki
2018-02-19 13:43   ` Andy Shevchenko

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).