xen-use-correct-end-address-of-kernel-for-conflict-c.patch
xen-introduce-generic-helper-checking-for-memory-map.patch
xen-move-max_pfn-in-xen_memory_setup-out-of-function.patch
-xen-add-capability-to-remap-non-ram-pages-to-differe.patch
xen-swiotlb-simplify-range_straddles_page_boundary.patch
xen-swiotlb-add-alignment-check-for-dma-buffers.patch
selftests-bpf-fix-error-compiling-test_lru_map.c.patch
+++ /dev/null
-From 0a544f1cb96b13fc2453635d1dc9ff49852e6137 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Wed, 14 Aug 2024 16:47:25 +0200
-Subject: xen: add capability to remap non-RAM pages to different PFNs
-
-From: Juergen Gross <jgross@suse.com>
-
-[ Upstream commit d05208cf7f05420ad10cc7f9550f91d485523659 ]
-
-When running as a Xen PV dom0 it can happen that the kernel is being
-loaded to a guest physical address conflicting with the host memory
-map.
-
-In order to be able to resolve this conflict, add the capability to
-remap non-RAM areas to different guest PFNs. A function to use this
-remapping information for other purposes than doing the remap will be
-added when needed.
-
-As the number of conflicts should be rather low (currently only
-machines with max. 1 conflict are known), save the remap data in a
-small statically allocated array.
-
-Signed-off-by: Juergen Gross <jgross@suse.com>
-Reviewed-by: Jan Beulich <jbeulich@suse.com>
-Signed-off-by: Juergen Gross <jgross@suse.com>
-Stable-dep-of: be35d91c8880 ("xen: tolerate ACPI NVS memory overlapping with Xen allocated memory")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- arch/x86/xen/p2m.c | 63 ++++++++++++++++++++++++++++++++++++++++++
- arch/x86/xen/xen-ops.h | 3 ++
- 2 files changed, 66 insertions(+)
-
-diff --git a/arch/x86/xen/p2m.c b/arch/x86/xen/p2m.c
-index 8cbdc5e6863c3..3828271697f94 100644
---- a/arch/x86/xen/p2m.c
-+++ b/arch/x86/xen/p2m.c
-@@ -78,6 +78,7 @@
- #include <asm/xen/hypervisor.h>
- #include <xen/balloon.h>
- #include <xen/grant_table.h>
-+#include <xen/hvc-console.h>
-
- #include "multicalls.h"
- #include "xen-ops.h"
-@@ -798,6 +799,68 @@ int clear_foreign_p2m_mapping(struct gnttab_unmap_grant_ref *unmap_ops,
- }
- EXPORT_SYMBOL_GPL(clear_foreign_p2m_mapping);
-
-+/* Remapped non-RAM areas */
-+#define NR_NONRAM_REMAP 4
-+static struct nonram_remap {
-+ phys_addr_t maddr;
-+ phys_addr_t paddr;
-+ size_t size;
-+} xen_nonram_remap[NR_NONRAM_REMAP] __ro_after_init;
-+static unsigned int nr_nonram_remap __ro_after_init;
-+
-+/*
-+ * Do the real remapping of non-RAM regions as specified in the
-+ * xen_nonram_remap[] array.
-+ * In case of an error just crash the system.
-+ */
-+void __init xen_do_remap_nonram(void)
-+{
-+ unsigned int i;
-+ unsigned int remapped = 0;
-+ const struct nonram_remap *remap = xen_nonram_remap;
-+ unsigned long pfn, mfn, end_pfn;
-+
-+ for (i = 0; i < nr_nonram_remap; i++) {
-+ end_pfn = PFN_UP(remap->paddr + remap->size);
-+ pfn = PFN_DOWN(remap->paddr);
-+ mfn = PFN_DOWN(remap->maddr);
-+ while (pfn < end_pfn) {
-+ if (!set_phys_to_machine(pfn, mfn))
-+ panic("Failed to set p2m mapping for pfn=%lx mfn=%lx\n",
-+ pfn, mfn);
-+
-+ pfn++;
-+ mfn++;
-+ remapped++;
-+ }
-+
-+ remap++;
-+ }
-+
-+ pr_info("Remapped %u non-RAM page(s)\n", remapped);
-+}
-+
-+/*
-+ * Add a new non-RAM remap entry.
-+ * In case of no free entry found, just crash the system.
-+ */
-+void __init xen_add_remap_nonram(phys_addr_t maddr, phys_addr_t paddr,
-+ unsigned long size)
-+{
-+ BUG_ON((maddr & ~PAGE_MASK) != (paddr & ~PAGE_MASK));
-+
-+ if (nr_nonram_remap == NR_NONRAM_REMAP) {
-+ xen_raw_console_write("Number of required E820 entry remapping actions exceed maximum value\n");
-+ BUG();
-+ }
-+
-+ xen_nonram_remap[nr_nonram_remap].maddr = maddr;
-+ xen_nonram_remap[nr_nonram_remap].paddr = paddr;
-+ xen_nonram_remap[nr_nonram_remap].size = size;
-+
-+ nr_nonram_remap++;
-+}
-+
- #ifdef CONFIG_XEN_DEBUG_FS
- #include <linux/debugfs.h>
- #include "debugfs.h"
-diff --git a/arch/x86/xen/xen-ops.h b/arch/x86/xen/xen-ops.h
-index 83f980867bc0b..932fb167bc990 100644
---- a/arch/x86/xen/xen-ops.h
-+++ b/arch/x86/xen/xen-ops.h
-@@ -45,6 +45,9 @@ void xen_mm_unpin_all(void);
- #ifdef CONFIG_X86_64
- void __init xen_relocate_p2m(void);
- #endif
-+void __init xen_do_remap_nonram(void);
-+void __init xen_add_remap_nonram(phys_addr_t maddr, phys_addr_t paddr,
-+ unsigned long size);
-
- void __init xen_chk_is_e820_usable(phys_addr_t start, phys_addr_t size,
- const char *component);
---
-2.43.0
-
xen-use-correct-end-address-of-kernel-for-conflict-c.patch
xen-introduce-generic-helper-checking-for-memory-map.patch
xen-move-max_pfn-in-xen_memory_setup-out-of-function.patch
-xen-add-capability-to-remap-non-ram-pages-to-differe.patch
xen-swiotlb-add-alignment-check-for-dma-buffers.patch
tpm-clean-up-tpm-space-after-command-failure.patch
selftests-bpf-fix-compile-error-from-rlim_t-in-sk_st.patch
+++ /dev/null
-From 5c0568356000a349fb130419b5d53f8f357add75 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Wed, 14 Aug 2024 16:47:25 +0200
-Subject: xen: add capability to remap non-RAM pages to different PFNs
-
-From: Juergen Gross <jgross@suse.com>
-
-[ Upstream commit d05208cf7f05420ad10cc7f9550f91d485523659 ]
-
-When running as a Xen PV dom0 it can happen that the kernel is being
-loaded to a guest physical address conflicting with the host memory
-map.
-
-In order to be able to resolve this conflict, add the capability to
-remap non-RAM areas to different guest PFNs. A function to use this
-remapping information for other purposes than doing the remap will be
-added when needed.
-
-As the number of conflicts should be rather low (currently only
-machines with max. 1 conflict are known), save the remap data in a
-small statically allocated array.
-
-Signed-off-by: Juergen Gross <jgross@suse.com>
-Reviewed-by: Jan Beulich <jbeulich@suse.com>
-Signed-off-by: Juergen Gross <jgross@suse.com>
-Stable-dep-of: be35d91c8880 ("xen: tolerate ACPI NVS memory overlapping with Xen allocated memory")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- arch/x86/xen/p2m.c | 63 ++++++++++++++++++++++++++++++++++++++++++
- arch/x86/xen/xen-ops.h | 3 ++
- 2 files changed, 66 insertions(+)
-
-diff --git a/arch/x86/xen/p2m.c b/arch/x86/xen/p2m.c
-index bfa972f7e8745..17df3143ae65c 100644
---- a/arch/x86/xen/p2m.c
-+++ b/arch/x86/xen/p2m.c
-@@ -80,6 +80,7 @@
- #include <asm/xen/hypervisor.h>
- #include <xen/balloon.h>
- #include <xen/grant_table.h>
-+#include <xen/hvc-console.h>
-
- #include "multicalls.h"
- #include "xen-ops.h"
-@@ -801,6 +802,68 @@ int clear_foreign_p2m_mapping(struct gnttab_unmap_grant_ref *unmap_ops,
- }
- EXPORT_SYMBOL_GPL(clear_foreign_p2m_mapping);
-
-+/* Remapped non-RAM areas */
-+#define NR_NONRAM_REMAP 4
-+static struct nonram_remap {
-+ phys_addr_t maddr;
-+ phys_addr_t paddr;
-+ size_t size;
-+} xen_nonram_remap[NR_NONRAM_REMAP] __ro_after_init;
-+static unsigned int nr_nonram_remap __ro_after_init;
-+
-+/*
-+ * Do the real remapping of non-RAM regions as specified in the
-+ * xen_nonram_remap[] array.
-+ * In case of an error just crash the system.
-+ */
-+void __init xen_do_remap_nonram(void)
-+{
-+ unsigned int i;
-+ unsigned int remapped = 0;
-+ const struct nonram_remap *remap = xen_nonram_remap;
-+ unsigned long pfn, mfn, end_pfn;
-+
-+ for (i = 0; i < nr_nonram_remap; i++) {
-+ end_pfn = PFN_UP(remap->paddr + remap->size);
-+ pfn = PFN_DOWN(remap->paddr);
-+ mfn = PFN_DOWN(remap->maddr);
-+ while (pfn < end_pfn) {
-+ if (!set_phys_to_machine(pfn, mfn))
-+ panic("Failed to set p2m mapping for pfn=%lx mfn=%lx\n",
-+ pfn, mfn);
-+
-+ pfn++;
-+ mfn++;
-+ remapped++;
-+ }
-+
-+ remap++;
-+ }
-+
-+ pr_info("Remapped %u non-RAM page(s)\n", remapped);
-+}
-+
-+/*
-+ * Add a new non-RAM remap entry.
-+ * In case of no free entry found, just crash the system.
-+ */
-+void __init xen_add_remap_nonram(phys_addr_t maddr, phys_addr_t paddr,
-+ unsigned long size)
-+{
-+ BUG_ON((maddr & ~PAGE_MASK) != (paddr & ~PAGE_MASK));
-+
-+ if (nr_nonram_remap == NR_NONRAM_REMAP) {
-+ xen_raw_console_write("Number of required E820 entry remapping actions exceed maximum value\n");
-+ BUG();
-+ }
-+
-+ xen_nonram_remap[nr_nonram_remap].maddr = maddr;
-+ xen_nonram_remap[nr_nonram_remap].paddr = paddr;
-+ xen_nonram_remap[nr_nonram_remap].size = size;
-+
-+ nr_nonram_remap++;
-+}
-+
- #ifdef CONFIG_XEN_DEBUG_FS
- #include <linux/debugfs.h>
- #include "debugfs.h"
-diff --git a/arch/x86/xen/xen-ops.h b/arch/x86/xen/xen-ops.h
-index d205686d92054..6ea24e08c4e6c 100644
---- a/arch/x86/xen/xen-ops.h
-+++ b/arch/x86/xen/xen-ops.h
-@@ -43,6 +43,9 @@ void xen_mm_unpin_all(void);
- #ifdef CONFIG_X86_64
- void __init xen_relocate_p2m(void);
- #endif
-+void __init xen_do_remap_nonram(void);
-+void __init xen_add_remap_nonram(phys_addr_t maddr, phys_addr_t paddr,
-+ unsigned long size);
-
- void __init xen_chk_is_e820_usable(phys_addr_t start, phys_addr_t size,
- const char *component);
---
-2.43.0
-
xen-use-correct-end-address-of-kernel-for-conflict-c.patch
xen-introduce-generic-helper-checking-for-memory-map.patch
xen-move-max_pfn-in-xen_memory_setup-out-of-function.patch
-xen-add-capability-to-remap-non-ram-pages-to-differe.patch
xen-swiotlb-add-alignment-check-for-dma-buffers.patch
tpm-clean-up-tpm-space-after-command-failure.patch
selftests-bpf-fix-compile-error-from-rlim_t-in-sk_st.patch
+++ /dev/null
-From 42e67170cdf91439034af299778b592a8f6dee83 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Wed, 14 Aug 2024 16:47:25 +0200
-Subject: xen: add capability to remap non-RAM pages to different PFNs
-
-From: Juergen Gross <jgross@suse.com>
-
-[ Upstream commit d05208cf7f05420ad10cc7f9550f91d485523659 ]
-
-When running as a Xen PV dom0 it can happen that the kernel is being
-loaded to a guest physical address conflicting with the host memory
-map.
-
-In order to be able to resolve this conflict, add the capability to
-remap non-RAM areas to different guest PFNs. A function to use this
-remapping information for other purposes than doing the remap will be
-added when needed.
-
-As the number of conflicts should be rather low (currently only
-machines with max. 1 conflict are known), save the remap data in a
-small statically allocated array.
-
-Signed-off-by: Juergen Gross <jgross@suse.com>
-Reviewed-by: Jan Beulich <jbeulich@suse.com>
-Signed-off-by: Juergen Gross <jgross@suse.com>
-Stable-dep-of: be35d91c8880 ("xen: tolerate ACPI NVS memory overlapping with Xen allocated memory")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- arch/x86/xen/p2m.c | 63 ++++++++++++++++++++++++++++++++++++++++++
- arch/x86/xen/xen-ops.h | 3 ++
- 2 files changed, 66 insertions(+)
-
-diff --git a/arch/x86/xen/p2m.c b/arch/x86/xen/p2m.c
-index 9b3a9fa4a0ade..d458f2f960ac8 100644
---- a/arch/x86/xen/p2m.c
-+++ b/arch/x86/xen/p2m.c
-@@ -80,6 +80,7 @@
- #include <asm/xen/hypervisor.h>
- #include <xen/balloon.h>
- #include <xen/grant_table.h>
-+#include <xen/hvc-console.h>
-
- #include "multicalls.h"
- #include "xen-ops.h"
-@@ -799,6 +800,68 @@ int clear_foreign_p2m_mapping(struct gnttab_unmap_grant_ref *unmap_ops,
- return ret;
- }
-
-+/* Remapped non-RAM areas */
-+#define NR_NONRAM_REMAP 4
-+static struct nonram_remap {
-+ phys_addr_t maddr;
-+ phys_addr_t paddr;
-+ size_t size;
-+} xen_nonram_remap[NR_NONRAM_REMAP] __ro_after_init;
-+static unsigned int nr_nonram_remap __ro_after_init;
-+
-+/*
-+ * Do the real remapping of non-RAM regions as specified in the
-+ * xen_nonram_remap[] array.
-+ * In case of an error just crash the system.
-+ */
-+void __init xen_do_remap_nonram(void)
-+{
-+ unsigned int i;
-+ unsigned int remapped = 0;
-+ const struct nonram_remap *remap = xen_nonram_remap;
-+ unsigned long pfn, mfn, end_pfn;
-+
-+ for (i = 0; i < nr_nonram_remap; i++) {
-+ end_pfn = PFN_UP(remap->paddr + remap->size);
-+ pfn = PFN_DOWN(remap->paddr);
-+ mfn = PFN_DOWN(remap->maddr);
-+ while (pfn < end_pfn) {
-+ if (!set_phys_to_machine(pfn, mfn))
-+ panic("Failed to set p2m mapping for pfn=%lx mfn=%lx\n",
-+ pfn, mfn);
-+
-+ pfn++;
-+ mfn++;
-+ remapped++;
-+ }
-+
-+ remap++;
-+ }
-+
-+ pr_info("Remapped %u non-RAM page(s)\n", remapped);
-+}
-+
-+/*
-+ * Add a new non-RAM remap entry.
-+ * In case of no free entry found, just crash the system.
-+ */
-+void __init xen_add_remap_nonram(phys_addr_t maddr, phys_addr_t paddr,
-+ unsigned long size)
-+{
-+ BUG_ON((maddr & ~PAGE_MASK) != (paddr & ~PAGE_MASK));
-+
-+ if (nr_nonram_remap == NR_NONRAM_REMAP) {
-+ xen_raw_console_write("Number of required E820 entry remapping actions exceed maximum value\n");
-+ BUG();
-+ }
-+
-+ xen_nonram_remap[nr_nonram_remap].maddr = maddr;
-+ xen_nonram_remap[nr_nonram_remap].paddr = paddr;
-+ xen_nonram_remap[nr_nonram_remap].size = size;
-+
-+ nr_nonram_remap++;
-+}
-+
- #ifdef CONFIG_XEN_DEBUG_FS
- #include <linux/debugfs.h>
- #include "debugfs.h"
-diff --git a/arch/x86/xen/xen-ops.h b/arch/x86/xen/xen-ops.h
-index 55e6e7efb426e..680e26ad436ee 100644
---- a/arch/x86/xen/xen-ops.h
-+++ b/arch/x86/xen/xen-ops.h
-@@ -43,6 +43,9 @@ void xen_mm_unpin_all(void);
- #ifdef CONFIG_X86_64
- void __init xen_relocate_p2m(void);
- #endif
-+void __init xen_do_remap_nonram(void);
-+void __init xen_add_remap_nonram(phys_addr_t maddr, phys_addr_t paddr,
-+ unsigned long size);
-
- void __init xen_chk_is_e820_usable(phys_addr_t start, phys_addr_t size,
- const char *component);
---
-2.43.0
-
xen-use-correct-end-address-of-kernel-for-conflict-c.patch
xen-introduce-generic-helper-checking-for-memory-map.patch
xen-move-max_pfn-in-xen_memory_setup-out-of-function.patch
-xen-add-capability-to-remap-non-ram-pages-to-differe.patch
xen-swiotlb-add-alignment-check-for-dma-buffers.patch
tpm-clean-up-tpm-space-after-command-failure.patch
selftests-bpf-fix-compile-error-from-rlim_t-in-sk_st.patch
+++ /dev/null
-From 293d92229a4dee751519ac8bb6a07ce39e8a5259 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Wed, 14 Aug 2024 16:47:25 +0200
-Subject: xen: add capability to remap non-RAM pages to different PFNs
-
-From: Juergen Gross <jgross@suse.com>
-
-[ Upstream commit d05208cf7f05420ad10cc7f9550f91d485523659 ]
-
-When running as a Xen PV dom0 it can happen that the kernel is being
-loaded to a guest physical address conflicting with the host memory
-map.
-
-In order to be able to resolve this conflict, add the capability to
-remap non-RAM areas to different guest PFNs. A function to use this
-remapping information for other purposes than doing the remap will be
-added when needed.
-
-As the number of conflicts should be rather low (currently only
-machines with max. 1 conflict are known), save the remap data in a
-small statically allocated array.
-
-Signed-off-by: Juergen Gross <jgross@suse.com>
-Reviewed-by: Jan Beulich <jbeulich@suse.com>
-Signed-off-by: Juergen Gross <jgross@suse.com>
-Stable-dep-of: be35d91c8880 ("xen: tolerate ACPI NVS memory overlapping with Xen allocated memory")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- arch/x86/xen/p2m.c | 63 ++++++++++++++++++++++++++++++++++++++++++
- arch/x86/xen/xen-ops.h | 3 ++
- 2 files changed, 66 insertions(+)
-
-diff --git a/arch/x86/xen/p2m.c b/arch/x86/xen/p2m.c
-index bfe6e862e13e2..3e9b655a26cae 100644
---- a/arch/x86/xen/p2m.c
-+++ b/arch/x86/xen/p2m.c
-@@ -80,6 +80,7 @@
- #include <asm/xen/hypervisor.h>
- #include <xen/balloon.h>
- #include <xen/grant_table.h>
-+#include <xen/hvc-console.h>
-
- #include "multicalls.h"
- #include "xen-ops.h"
-@@ -806,6 +807,68 @@ int clear_foreign_p2m_mapping(struct gnttab_unmap_grant_ref *unmap_ops,
- }
- EXPORT_SYMBOL_GPL(clear_foreign_p2m_mapping);
-
-+/* Remapped non-RAM areas */
-+#define NR_NONRAM_REMAP 4
-+static struct nonram_remap {
-+ phys_addr_t maddr;
-+ phys_addr_t paddr;
-+ size_t size;
-+} xen_nonram_remap[NR_NONRAM_REMAP] __ro_after_init;
-+static unsigned int nr_nonram_remap __ro_after_init;
-+
-+/*
-+ * Do the real remapping of non-RAM regions as specified in the
-+ * xen_nonram_remap[] array.
-+ * In case of an error just crash the system.
-+ */
-+void __init xen_do_remap_nonram(void)
-+{
-+ unsigned int i;
-+ unsigned int remapped = 0;
-+ const struct nonram_remap *remap = xen_nonram_remap;
-+ unsigned long pfn, mfn, end_pfn;
-+
-+ for (i = 0; i < nr_nonram_remap; i++) {
-+ end_pfn = PFN_UP(remap->paddr + remap->size);
-+ pfn = PFN_DOWN(remap->paddr);
-+ mfn = PFN_DOWN(remap->maddr);
-+ while (pfn < end_pfn) {
-+ if (!set_phys_to_machine(pfn, mfn))
-+ panic("Failed to set p2m mapping for pfn=%lx mfn=%lx\n",
-+ pfn, mfn);
-+
-+ pfn++;
-+ mfn++;
-+ remapped++;
-+ }
-+
-+ remap++;
-+ }
-+
-+ pr_info("Remapped %u non-RAM page(s)\n", remapped);
-+}
-+
-+/*
-+ * Add a new non-RAM remap entry.
-+ * In case of no free entry found, just crash the system.
-+ */
-+void __init xen_add_remap_nonram(phys_addr_t maddr, phys_addr_t paddr,
-+ unsigned long size)
-+{
-+ BUG_ON((maddr & ~PAGE_MASK) != (paddr & ~PAGE_MASK));
-+
-+ if (nr_nonram_remap == NR_NONRAM_REMAP) {
-+ xen_raw_console_write("Number of required E820 entry remapping actions exceed maximum value\n");
-+ BUG();
-+ }
-+
-+ xen_nonram_remap[nr_nonram_remap].maddr = maddr;
-+ xen_nonram_remap[nr_nonram_remap].paddr = paddr;
-+ xen_nonram_remap[nr_nonram_remap].size = size;
-+
-+ nr_nonram_remap++;
-+}
-+
- #ifdef CONFIG_XEN_DEBUG_FS
- #include <linux/debugfs.h>
- #include "debugfs.h"
-diff --git a/arch/x86/xen/xen-ops.h b/arch/x86/xen/xen-ops.h
-index 4e2cc1e23f843..5e398ae5943bd 100644
---- a/arch/x86/xen/xen-ops.h
-+++ b/arch/x86/xen/xen-ops.h
-@@ -45,6 +45,9 @@ void xen_mm_unpin_all(void);
- #ifdef CONFIG_X86_64
- void __init xen_relocate_p2m(void);
- #endif
-+void __init xen_do_remap_nonram(void);
-+void __init xen_add_remap_nonram(phys_addr_t maddr, phys_addr_t paddr,
-+ unsigned long size);
-
- void __init xen_chk_is_e820_usable(phys_addr_t start, phys_addr_t size,
- const char *component);
---
-2.43.0
-
hid-wacom-do-not-warn-about-dropped-packets-for-firs.patch
xen-introduce-generic-helper-checking-for-memory-map.patch
xen-move-max_pfn-in-xen_memory_setup-out-of-function.patch
-xen-add-capability-to-remap-non-ram-pages-to-differe.patch
xen-swiotlb-add-alignment-check-for-dma-buffers.patch
xen-swiotlb-fix-allocated-size.patch
tpm-clean-up-tpm-space-after-command-failure.patch
+++ /dev/null
-From a8dfa1230459c1eb2274b6428e17472cfcf2b29b Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Wed, 14 Aug 2024 16:47:25 +0200
-Subject: xen: add capability to remap non-RAM pages to different PFNs
-
-From: Juergen Gross <jgross@suse.com>
-
-[ Upstream commit d05208cf7f05420ad10cc7f9550f91d485523659 ]
-
-When running as a Xen PV dom0 it can happen that the kernel is being
-loaded to a guest physical address conflicting with the host memory
-map.
-
-In order to be able to resolve this conflict, add the capability to
-remap non-RAM areas to different guest PFNs. A function to use this
-remapping information for other purposes than doing the remap will be
-added when needed.
-
-As the number of conflicts should be rather low (currently only
-machines with max. 1 conflict are known), save the remap data in a
-small statically allocated array.
-
-Signed-off-by: Juergen Gross <jgross@suse.com>
-Reviewed-by: Jan Beulich <jbeulich@suse.com>
-Signed-off-by: Juergen Gross <jgross@suse.com>
-Stable-dep-of: be35d91c8880 ("xen: tolerate ACPI NVS memory overlapping with Xen allocated memory")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- arch/x86/xen/p2m.c | 63 ++++++++++++++++++++++++++++++++++++++++++
- arch/x86/xen/xen-ops.h | 3 ++
- 2 files changed, 66 insertions(+)
-
-diff --git a/arch/x86/xen/p2m.c b/arch/x86/xen/p2m.c
-index a02cc54338897..7376892730cd5 100644
---- a/arch/x86/xen/p2m.c
-+++ b/arch/x86/xen/p2m.c
-@@ -80,6 +80,7 @@
- #include <asm/xen/hypervisor.h>
- #include <xen/balloon.h>
- #include <xen/grant_table.h>
-+#include <xen/hvc-console.h>
-
- #include "multicalls.h"
- #include "xen-ops.h"
-@@ -799,6 +800,68 @@ int clear_foreign_p2m_mapping(struct gnttab_unmap_grant_ref *unmap_ops,
- return ret;
- }
-
-+/* Remapped non-RAM areas */
-+#define NR_NONRAM_REMAP 4
-+static struct nonram_remap {
-+ phys_addr_t maddr;
-+ phys_addr_t paddr;
-+ size_t size;
-+} xen_nonram_remap[NR_NONRAM_REMAP] __ro_after_init;
-+static unsigned int nr_nonram_remap __ro_after_init;
-+
-+/*
-+ * Do the real remapping of non-RAM regions as specified in the
-+ * xen_nonram_remap[] array.
-+ * In case of an error just crash the system.
-+ */
-+void __init xen_do_remap_nonram(void)
-+{
-+ unsigned int i;
-+ unsigned int remapped = 0;
-+ const struct nonram_remap *remap = xen_nonram_remap;
-+ unsigned long pfn, mfn, end_pfn;
-+
-+ for (i = 0; i < nr_nonram_remap; i++) {
-+ end_pfn = PFN_UP(remap->paddr + remap->size);
-+ pfn = PFN_DOWN(remap->paddr);
-+ mfn = PFN_DOWN(remap->maddr);
-+ while (pfn < end_pfn) {
-+ if (!set_phys_to_machine(pfn, mfn))
-+ panic("Failed to set p2m mapping for pfn=%lx mfn=%lx\n",
-+ pfn, mfn);
-+
-+ pfn++;
-+ mfn++;
-+ remapped++;
-+ }
-+
-+ remap++;
-+ }
-+
-+ pr_info("Remapped %u non-RAM page(s)\n", remapped);
-+}
-+
-+/*
-+ * Add a new non-RAM remap entry.
-+ * In case of no free entry found, just crash the system.
-+ */
-+void __init xen_add_remap_nonram(phys_addr_t maddr, phys_addr_t paddr,
-+ unsigned long size)
-+{
-+ BUG_ON((maddr & ~PAGE_MASK) != (paddr & ~PAGE_MASK));
-+
-+ if (nr_nonram_remap == NR_NONRAM_REMAP) {
-+ xen_raw_console_write("Number of required E820 entry remapping actions exceed maximum value\n");
-+ BUG();
-+ }
-+
-+ xen_nonram_remap[nr_nonram_remap].maddr = maddr;
-+ xen_nonram_remap[nr_nonram_remap].paddr = paddr;
-+ xen_nonram_remap[nr_nonram_remap].size = size;
-+
-+ nr_nonram_remap++;
-+}
-+
- #ifdef CONFIG_XEN_DEBUG_FS
- #include <linux/debugfs.h>
- #include "debugfs.h"
-diff --git a/arch/x86/xen/xen-ops.h b/arch/x86/xen/xen-ops.h
-index 35670a44ef4c5..793caab79055b 100644
---- a/arch/x86/xen/xen-ops.h
-+++ b/arch/x86/xen/xen-ops.h
-@@ -43,6 +43,9 @@ void xen_mm_unpin_all(void);
- #ifdef CONFIG_X86_64
- void __init xen_relocate_p2m(void);
- #endif
-+void __init xen_do_remap_nonram(void);
-+void __init xen_add_remap_nonram(phys_addr_t maddr, phys_addr_t paddr,
-+ unsigned long size);
-
- void __init xen_chk_is_e820_usable(phys_addr_t start, phys_addr_t size,
- const char *component);
---
-2.43.0
-