linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH V4 0/6] xen: Add support of extended regions (safe ranges) on Arm
@ 2021-12-09 20:05 Oleksandr Tyshchenko
  2021-12-09 20:05 ` [PATCH V4 2/6] arm/xen: Switch to use gnttab_setup_auto_xlat_frames() for DT Oleksandr Tyshchenko
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: Oleksandr Tyshchenko @ 2021-12-09 20:05 UTC (permalink / raw)
  To: xen-devel, linux-arm-kernel, linux-kernel
  Cc: Oleksandr Tyshchenko, Stefano Stabellini, Russell King,
	Boris Ostrovsky, Juergen Gross, Julien Grall, Bertrand Marquis,
	Wei Chen, Henry Wang, Kaly Xin, Jiamei Xie

From: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>

Hello all.

You can find the RFC-V3 patch series at [1],[2] and [3].

The corresponding Xen support (for both Dom0 and DomU) is already committed and
is available in mainline Xen since the following commit:
57f87857dc2de452a796d6bad4f476510efd2aba libxl/arm: Add handling of extended regions for DomU

The extended region (safe range) is a region of guest physical address space
which is unused and could be safely used to create grant/foreign mappings instead
of ballooning out real RAM pages to obtain a physical address space for creating
these mappings (which simply results in wasting domain memory and shattering super
pages in P2M table).

The problem is that we cannot follow Linux advise which memory ranges are unused
on Arm as there might be some identity mappings in P2M table (stage 2) the guest is not
aware of or not all device I/O regions might be known (registered) by the time the guest
starts creating grant/foreign mappings. This is why we need some hints from the hypervisor
which knows all details in advance to be able to choose extended regions (which won't
clash with other resources).

The extended regions are chosen at the domain creation time and advertised to it via
"reg" property under hypervisor node in the guest device-tree [4]. As region 0 is reserved
for grant table space (always present), the indexes for extended regions are 1...N.
No device tree bindings update is needed, guest infers the presence of extended regions
from the number of regions in "reg" property.

Please note the following:
- The ACPI case is not covered for now
- patch series was created in a way to retain existing behavior on x86

The patch series is based on v5.16-rc3 and also available at [5], it was fully
tested on Arm64 and only compile tested on x86.

[1] https://lore.kernel.org/all/1627490656-1267-1-git-send-email-olekstysh@gmail.com/
    https://lore.kernel.org/all/1627490656-1267-2-git-send-email-olekstysh@gmail.com/
[2] https://lore.kernel.org/all/1635264312-3796-1-git-send-email-olekstysh@gmail.com/
[3] https://lore.kernel.org/all/1637787223-21129-1-git-send-email-olekstysh@gmail.com/
[4] https://xenbits.xen.org/gitweb/?p=xen.git;a=blob_plain;f=docs/misc/arm/device-tree/guest.txt;hb=refs/heads/master
[5] https://github.com/otyshchenko1/linux/commits/map_opt_ml7

Oleksandr Tyshchenko (6):
  xen/unpopulated-alloc: Drop check for virt_addr_valid() in fill_list()
  arm/xen: Switch to use gnttab_setup_auto_xlat_frames() for DT
  xen/balloon: Bring alloc(free)_xenballooned_pages helpers back
  xen/unpopulated-alloc: Add mechanism to use Xen resource
  arm/xen: Read extended regions from DT and init Xen resource
  dt-bindings: xen: Clarify "reg" purpose

 Documentation/devicetree/bindings/arm/xen.txt |  14 +--
 arch/arm/xen/enlighten.c                      | 132 ++++++++++++++++++++++++--
 drivers/xen/Kconfig                           |   2 +-
 drivers/xen/balloon.c                         |  20 ++--
 drivers/xen/unpopulated-alloc.c               |  87 ++++++++++++++++-
 include/xen/balloon.h                         |   3 +
 include/xen/xen.h                             |  16 ++++
 7 files changed, 245 insertions(+), 29 deletions(-)

-- 
2.7.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH V4 2/6] arm/xen: Switch to use gnttab_setup_auto_xlat_frames() for DT
  2021-12-09 20:05 [PATCH V4 0/6] xen: Add support of extended regions (safe ranges) on Arm Oleksandr Tyshchenko
@ 2021-12-09 20:05 ` Oleksandr Tyshchenko
  2021-12-09 20:05 ` [PATCH V4 5/6] arm/xen: Read extended regions from DT and init Xen resource Oleksandr Tyshchenko
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 9+ messages in thread
From: Oleksandr Tyshchenko @ 2021-12-09 20:05 UTC (permalink / raw)
  To: xen-devel, linux-arm-kernel, linux-kernel
  Cc: Oleksandr Tyshchenko, Stefano Stabellini, Russell King, Julien Grall

From: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>

Read the start address of the grant table space from DT
(region 0).

This patch mostly restores behaviour before commit 3cf4095d7446
("arm/xen: Use xen_xlate_map_ballooned_pages to setup grant table")
but trying not to break the ACPI support added after that commit.
So the patch touches DT part only and leaves the ACPI part with
xen_xlate_map_ballooned_pages(). Also in order to make a code more
resilient use a fallback to xen_xlate_map_ballooned_pages() if grant
table region wasn't found.

This is a preparation for using Xen extended region feature
where unused regions of guest physical address space (provided
by the hypervisor) will be used to create grant/foreign/whatever
mappings instead of wasting real RAM pages from the domain memory
for establishing these mappings.

The immediate benefit of this change:
- Avoid superpage shattering in Xen P2M when establishing
  stage-2 mapping (GFN <-> MFN) for the grant table space
- Avoid wasting real RAM pages (reducing the amount of memory
  usuable) for mapping grant table space
- The grant table space is always mapped at the exact
  same place (region 0 is reserved for the grant table)

Signed-off-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
---
Changes RFC -> V2:
   - new patch

Changes V2 -> V3:
   - add __read_mostly specifier to xen_grant_frames
   - retain a fallback to xen_xlate_map_ballooned_pages() if
     xen_grant_frames is invalid
   - process xen_events_irq before xen_grant_frames in
     xen_dt_guest_init()
   - update patch description

Changes V3 -> V4:
   - add Stefano's R-b
   - remove first condition in "if (!acpi_disabled || !xen_grant_frames)"
---
 arch/arm/xen/enlighten.c | 26 ++++++++++++++++++++------
 1 file changed, 20 insertions(+), 6 deletions(-)

diff --git a/arch/arm/xen/enlighten.c b/arch/arm/xen/enlighten.c
index 7619fbf..49bb675 100644
--- a/arch/arm/xen/enlighten.c
+++ b/arch/arm/xen/enlighten.c
@@ -59,6 +59,9 @@ unsigned long xen_released_pages;
 struct xen_memory_region xen_extra_mem[XEN_EXTRA_MEM_MAX_REGIONS] __initdata;
 
 static __read_mostly unsigned int xen_events_irq;
+static __read_mostly phys_addr_t xen_grant_frames;
+
+#define GRANT_TABLE_INDEX   0
 
 uint32_t xen_start_flags;
 EXPORT_SYMBOL(xen_start_flags);
@@ -303,6 +306,7 @@ static void __init xen_acpi_guest_init(void)
 static void __init xen_dt_guest_init(void)
 {
 	struct device_node *xen_node;
+	struct resource res;
 
 	xen_node = of_find_compatible_node(NULL, NULL, "xen,xen");
 	if (!xen_node) {
@@ -311,13 +315,19 @@ static void __init xen_dt_guest_init(void)
 	}
 
 	xen_events_irq = irq_of_parse_and_map(xen_node, 0);
+
+	if (of_address_to_resource(xen_node, GRANT_TABLE_INDEX, &res)) {
+		pr_err("Xen grant table region is not found\n");
+		return;
+	}
+	xen_grant_frames = res.start;
 }
 
 static int __init xen_guest_init(void)
 {
 	struct xen_add_to_physmap xatp;
 	struct shared_info *shared_info_page = NULL;
-	int cpu;
+	int rc, cpu;
 
 	if (!xen_domain())
 		return 0;
@@ -370,12 +380,16 @@ static int __init xen_guest_init(void)
 	for_each_possible_cpu(cpu)
 		per_cpu(xen_vcpu_id, cpu) = cpu;
 
-	xen_auto_xlat_grant_frames.count = gnttab_max_grant_frames();
-	if (xen_xlate_map_ballooned_pages(&xen_auto_xlat_grant_frames.pfn,
-					  &xen_auto_xlat_grant_frames.vaddr,
-					  xen_auto_xlat_grant_frames.count)) {
+	if (!xen_grant_frames) {
+		xen_auto_xlat_grant_frames.count = gnttab_max_grant_frames();
+		rc = xen_xlate_map_ballooned_pages(&xen_auto_xlat_grant_frames.pfn,
+										   &xen_auto_xlat_grant_frames.vaddr,
+										   xen_auto_xlat_grant_frames.count);
+	} else
+		rc = gnttab_setup_auto_xlat_frames(xen_grant_frames);
+	if (rc) {
 		free_percpu(xen_vcpu_info);
-		return -ENOMEM;
+		return rc;
 	}
 	gnttab_init();
 
-- 
2.7.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* [PATCH V4 5/6] arm/xen: Read extended regions from DT and init Xen resource
  2021-12-09 20:05 [PATCH V4 0/6] xen: Add support of extended regions (safe ranges) on Arm Oleksandr Tyshchenko
  2021-12-09 20:05 ` [PATCH V4 2/6] arm/xen: Switch to use gnttab_setup_auto_xlat_frames() for DT Oleksandr Tyshchenko
@ 2021-12-09 20:05 ` Oleksandr Tyshchenko
  2021-12-16 22:02 ` [PATCH V4 0/6] xen: Add support of extended regions (safe ranges) on Arm Oleksandr
  2022-01-07 11:31 ` Juergen Gross
  3 siblings, 0 replies; 9+ messages in thread
From: Oleksandr Tyshchenko @ 2021-12-09 20:05 UTC (permalink / raw)
  To: xen-devel, linux-arm-kernel, linux-kernel
  Cc: Oleksandr Tyshchenko, Boris Ostrovsky, Juergen Gross,
	Stefano Stabellini, Russell King, Julien Grall

From: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>

This patch implements arch_xen_unpopulated_init() on Arm where
the extended regions (if any) are gathered from DT and inserted
into specific Xen resource to be used as unused address space
for Xen scratch pages by unpopulated-alloc code.

The extended region (safe range) is a region of guest physical
address space which is unused and could be safely used to create
grant/foreign mappings instead of wasting real RAM pages from
the domain memory for establishing these mappings.

The extended regions are chosen by the hypervisor at the domain
creation time and advertised to it via "reg" property under
hypervisor node in the guest device-tree. As region 0 is reserved
for grant table space (always present), the indexes for extended
regions are 1...N.

If arch_xen_unpopulated_init() fails for some reason the default
behaviour will be restored (allocate xenballooned pages).

This patch also removes XEN_UNPOPULATED_ALLOC dependency on x86.

Signed-off-by: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
---
Changes RFC -> V2:
   - new patch, instead of
    "[RFC PATCH 2/2] xen/unpopulated-alloc: Query hypervisor to provide unallocated space"

Changes V2 -> V3:
   - update comments in code
   - drop the checks that a region is within the hotpluggable range,
     now the common code takes care of
   - update arch_xen_unpopulated_init() according to interface change,
     move xen_resource here, etc
   - use %pR specifier in error message
   - bait out in arch_xen_unpopulated_init() if !acpi_disabled
   - update checks in second loop in arch_xen_unpopulated_init()
     for the sake of clarity

Changes V3 -> V4:
   - add Stefano's R-b
---
 arch/arm/xen/enlighten.c | 106 +++++++++++++++++++++++++++++++++++++++++++++++
 drivers/xen/Kconfig      |   2 +-
 2 files changed, 107 insertions(+), 1 deletion(-)

diff --git a/arch/arm/xen/enlighten.c b/arch/arm/xen/enlighten.c
index 49bb675..ec5b082 100644
--- a/arch/arm/xen/enlighten.c
+++ b/arch/arm/xen/enlighten.c
@@ -62,6 +62,7 @@ static __read_mostly unsigned int xen_events_irq;
 static __read_mostly phys_addr_t xen_grant_frames;
 
 #define GRANT_TABLE_INDEX   0
+#define EXT_REGION_INDEX    1
 
 uint32_t xen_start_flags;
 EXPORT_SYMBOL(xen_start_flags);
@@ -303,6 +304,111 @@ static void __init xen_acpi_guest_init(void)
 #endif
 }
 
+#ifdef CONFIG_XEN_UNPOPULATED_ALLOC
+/*
+ * A type-less specific Xen resource which contains extended regions
+ * (unused regions of guest physical address space provided by the hypervisor).
+ */
+static struct resource xen_resource = {
+	.name = "Xen unused space",
+};
+
+int __init arch_xen_unpopulated_init(struct resource **res)
+{
+	struct device_node *np;
+	struct resource *regs, *tmp_res;
+	uint64_t min_gpaddr = -1, max_gpaddr = 0;
+	unsigned int i, nr_reg = 0;
+	int rc;
+
+	if (!xen_domain())
+		return -ENODEV;
+
+	if (!acpi_disabled)
+		return -ENODEV;
+
+	np = of_find_compatible_node(NULL, NULL, "xen,xen");
+	if (WARN_ON(!np))
+		return -ENODEV;
+
+	/* Skip region 0 which is reserved for grant table space */
+	while (of_get_address(np, nr_reg + EXT_REGION_INDEX, NULL, NULL))
+		nr_reg++;
+
+	if (!nr_reg) {
+		pr_err("No extended regions are found\n");
+		return -EINVAL;
+	}
+
+	regs = kcalloc(nr_reg, sizeof(*regs), GFP_KERNEL);
+	if (!regs)
+		return -ENOMEM;
+
+	/*
+	 * Create resource from extended regions provided by the hypervisor to be
+	 * used as unused address space for Xen scratch pages.
+	 */
+	for (i = 0; i < nr_reg; i++) {
+		rc = of_address_to_resource(np, i + EXT_REGION_INDEX, &regs[i]);
+		if (rc)
+			goto err;
+
+		if (max_gpaddr < regs[i].end)
+			max_gpaddr = regs[i].end;
+		if (min_gpaddr > regs[i].start)
+			min_gpaddr = regs[i].start;
+	}
+
+	xen_resource.start = min_gpaddr;
+	xen_resource.end = max_gpaddr;
+
+	/*
+	 * Mark holes between extended regions as unavailable. The rest of that
+	 * address space will be available for the allocation.
+	 */
+	for (i = 1; i < nr_reg; i++) {
+		resource_size_t start, end;
+
+		/* There is an overlap between regions */
+		if (regs[i - 1].end + 1 > regs[i].start) {
+			rc = -EINVAL;
+			goto err;
+		}
+
+		/* There is no hole between regions */
+		if (regs[i - 1].end + 1 == regs[i].start)
+			continue;
+
+		start = regs[i - 1].end + 1;
+		end = regs[i].start - 1;
+
+		tmp_res = kzalloc(sizeof(*tmp_res), GFP_KERNEL);
+		if (!tmp_res) {
+			rc = -ENOMEM;
+			goto err;
+		}
+
+		tmp_res->name = "Unavailable space";
+		tmp_res->start = start;
+		tmp_res->end = end;
+
+		rc = insert_resource(&xen_resource, tmp_res);
+		if (rc) {
+			pr_err("Cannot insert resource %pR (%d)\n", tmp_res, rc);
+			kfree(tmp_res);
+			goto err;
+		}
+	}
+
+	*res = &xen_resource;
+
+err:
+	kfree(regs);
+
+	return rc;
+}
+#endif
+
 static void __init xen_dt_guest_init(void)
 {
 	struct device_node *xen_node;
diff --git a/drivers/xen/Kconfig b/drivers/xen/Kconfig
index 33e941e..120d32f 100644
--- a/drivers/xen/Kconfig
+++ b/drivers/xen/Kconfig
@@ -327,7 +327,7 @@ config XEN_FRONT_PGDIR_SHBUF
 
 config XEN_UNPOPULATED_ALLOC
 	bool "Use unpopulated memory ranges for guest mappings"
-	depends on X86 && ZONE_DEVICE
+	depends on ZONE_DEVICE
 	default XEN_BACKEND || XEN_GNTDEV || XEN_DOM0
 	help
 	  Use unpopulated memory ranges in order to create mappings for guest
-- 
2.7.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH V4 0/6] xen: Add support of extended regions (safe ranges) on Arm
  2021-12-09 20:05 [PATCH V4 0/6] xen: Add support of extended regions (safe ranges) on Arm Oleksandr Tyshchenko
  2021-12-09 20:05 ` [PATCH V4 2/6] arm/xen: Switch to use gnttab_setup_auto_xlat_frames() for DT Oleksandr Tyshchenko
  2021-12-09 20:05 ` [PATCH V4 5/6] arm/xen: Read extended regions from DT and init Xen resource Oleksandr Tyshchenko
@ 2021-12-16 22:02 ` Oleksandr
  2021-12-17 19:13   ` Boris Ostrovsky
  2021-12-17 19:17   ` Boris Ostrovsky
  2022-01-07 11:31 ` Juergen Gross
  3 siblings, 2 replies; 9+ messages in thread
From: Oleksandr @ 2021-12-16 22:02 UTC (permalink / raw)
  To: Boris Ostrovsky, Juergen Gross
  Cc: xen-devel, linux-arm-kernel, linux-kernel, Oleksandr Tyshchenko,
	Stefano Stabellini, Russell King, Julien Grall, Bertrand Marquis,
	Wei Chen, Henry Wang, Kaly Xin, Jiamei Xie


On 09.12.21 22:05, Oleksandr Tyshchenko wrote:


Hello Juergen, Boris


May I please ask, are you happy (or otherwise) with current patch series 
(I assume, especially with commits #3-4)?

For the convenience:

   1. xen/unpopulated-alloc: Drop check for virt_addr_valid() in fill_list()
- Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>

   2. arm/xen: Switch to use gnttab_setup_auto_xlat_frames() for DT
- Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>

   3. xen/balloon: Bring alloc(free)_xenballooned_pages helpers back
- Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>

   4. xen/unpopulated-alloc: Add mechanism to use Xen resource
- Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>

   5. arm/xen: Read extended regions from DT and init Xen resource
- Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>

   6. dt-bindings: xen: Clarify "reg" purpose
- Reviewed-by: Bertrand Marquis <bertrand.marquis@arm.com>
- Acked-by: Rob Herring <robh@kernel.org>
- Acked-by: Stefano Stabellini <sstabellini@kernel.org>


> From: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
>
> Hello all.
>
> You can find the RFC-V3 patch series at [1],[2] and [3].
>
> The corresponding Xen support (for both Dom0 and DomU) is already committed and
> is available in mainline Xen since the following commit:
> 57f87857dc2de452a796d6bad4f476510efd2aba libxl/arm: Add handling of extended regions for DomU
>
> The extended region (safe range) is a region of guest physical address space
> which is unused and could be safely used to create grant/foreign mappings instead
> of ballooning out real RAM pages to obtain a physical address space for creating
> these mappings (which simply results in wasting domain memory and shattering super
> pages in P2M table).
>
> The problem is that we cannot follow Linux advise which memory ranges are unused
> on Arm as there might be some identity mappings in P2M table (stage 2) the guest is not
> aware of or not all device I/O regions might be known (registered) by the time the guest
> starts creating grant/foreign mappings. This is why we need some hints from the hypervisor
> which knows all details in advance to be able to choose extended regions (which won't
> clash with other resources).
>
> The extended regions are chosen at the domain creation time and advertised to it via
> "reg" property under hypervisor node in the guest device-tree [4]. As region 0 is reserved
> for grant table space (always present), the indexes for extended regions are 1...N.
> No device tree bindings update is needed, guest infers the presence of extended regions
> from the number of regions in "reg" property.
>
> Please note the following:
> - The ACPI case is not covered for now
> - patch series was created in a way to retain existing behavior on x86
>
> The patch series is based on v5.16-rc3 and also available at [5], it was fully
> tested on Arm64 and only compile tested on x86.
>
> [1] https://lore.kernel.org/all/1627490656-1267-1-git-send-email-olekstysh@gmail.com/
>      https://lore.kernel.org/all/1627490656-1267-2-git-send-email-olekstysh@gmail.com/
> [2] https://lore.kernel.org/all/1635264312-3796-1-git-send-email-olekstysh@gmail.com/
> [3] https://lore.kernel.org/all/1637787223-21129-1-git-send-email-olekstysh@gmail.com/
> [4] https://xenbits.xen.org/gitweb/?p=xen.git;a=blob_plain;f=docs/misc/arm/device-tree/guest.txt;hb=refs/heads/master
> [5] https://github.com/otyshchenko1/linux/commits/map_opt_ml7
>
> Oleksandr Tyshchenko (6):
>    xen/unpopulated-alloc: Drop check for virt_addr_valid() in fill_list()
>    arm/xen: Switch to use gnttab_setup_auto_xlat_frames() for DT
>    xen/balloon: Bring alloc(free)_xenballooned_pages helpers back
>    xen/unpopulated-alloc: Add mechanism to use Xen resource
>    arm/xen: Read extended regions from DT and init Xen resource
>    dt-bindings: xen: Clarify "reg" purpose
>
>   Documentation/devicetree/bindings/arm/xen.txt |  14 +--
>   arch/arm/xen/enlighten.c                      | 132 ++++++++++++++++++++++++--
>   drivers/xen/Kconfig                           |   2 +-
>   drivers/xen/balloon.c                         |  20 ++--
>   drivers/xen/unpopulated-alloc.c               |  87 ++++++++++++++++-
>   include/xen/balloon.h                         |   3 +
>   include/xen/xen.h                             |  16 ++++
>   7 files changed, 245 insertions(+), 29 deletions(-)
>
-- 
Regards,

Oleksandr Tyshchenko


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH V4 0/6] xen: Add support of extended regions (safe ranges) on Arm
  2021-12-16 22:02 ` [PATCH V4 0/6] xen: Add support of extended regions (safe ranges) on Arm Oleksandr
@ 2021-12-17 19:13   ` Boris Ostrovsky
  2021-12-17 19:19     ` Oleksandr
  2021-12-17 19:17   ` Boris Ostrovsky
  1 sibling, 1 reply; 9+ messages in thread
From: Boris Ostrovsky @ 2021-12-17 19:13 UTC (permalink / raw)
  To: Oleksandr, Juergen Gross
  Cc: xen-devel, linux-arm-kernel, linux-kernel, Oleksandr Tyshchenko,
	Stefano Stabellini, Russell King, Julien Grall, Bertrand Marquis,
	Wei Chen, Henry Wang, Kaly Xin, Jiamei Xie


On 12/16/21 5:02 PM, Oleksandr wrote:
>
> On 09.12.21 22:05, Oleksandr Tyshchenko wrote:
>
>
> Hello Juergen, Boris
>
>
> May I please ask, are you happy (or otherwise) with current patch series (I assume, especially with commits #3-4)?


I think I mentioned last time, in patch 4:


+	if (target_resource != &iomem_resource) {
+		tmp_res = kzalloc(sizeof(*tmp_res), GFP_KERNEL);
+		if (!res) {


Other than that --- LGTM.


-boris


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH V4 0/6] xen: Add support of extended regions (safe ranges) on Arm
  2021-12-16 22:02 ` [PATCH V4 0/6] xen: Add support of extended regions (safe ranges) on Arm Oleksandr
  2021-12-17 19:13   ` Boris Ostrovsky
@ 2021-12-17 19:17   ` Boris Ostrovsky
  1 sibling, 0 replies; 9+ messages in thread
From: Boris Ostrovsky @ 2021-12-17 19:17 UTC (permalink / raw)
  To: Oleksandr, Juergen Gross
  Cc: xen-devel, linux-arm-kernel, linux-kernel, Oleksandr Tyshchenko,
	Stefano Stabellini, Russell King, Julien Grall, Bertrand Marquis,
	Wei Chen, Henry Wang, Kaly Xin, Jiamei Xie


On 12/16/21 5:02 PM, Oleksandr wrote:
>
> On 09.12.21 22:05, Oleksandr Tyshchenko wrote:
>
>
> Hello Juergen, Boris
>
>
> May I please ask, are you happy (or otherwise) with current patch series (I assume, especially with commits #3-4)?


LGTM, I have no more comments.


-boris




_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH V4 0/6] xen: Add support of extended regions (safe ranges) on Arm
  2021-12-17 19:13   ` Boris Ostrovsky
@ 2021-12-17 19:19     ` Oleksandr
  2021-12-17 19:23       ` Boris Ostrovsky
  0 siblings, 1 reply; 9+ messages in thread
From: Oleksandr @ 2021-12-17 19:19 UTC (permalink / raw)
  To: Boris Ostrovsky
  Cc: Juergen Gross, xen-devel, linux-arm-kernel, linux-kernel,
	Oleksandr Tyshchenko, Stefano Stabellini, Russell King,
	Julien Grall, Bertrand Marquis, Wei Chen, Henry Wang, Kaly Xin,
	Jiamei Xie


On 17.12.21 21:13, Boris Ostrovsky wrote:

Hi Boris

>
> On 12/16/21 5:02 PM, Oleksandr wrote:
>>
>> On 09.12.21 22:05, Oleksandr Tyshchenko wrote:
>>
>>
>> Hello Juergen, Boris
>>
>>
>> May I please ask, are you happy (or otherwise) with current patch 
>> series (I assume, especially with commits #3-4)?
>
>
> I think I mentioned last time, in patch 4:
>
>
> +    if (target_resource != &iomem_resource) {
> +        tmp_res = kzalloc(sizeof(*tmp_res), GFP_KERNEL);
> +        if (!res) {

Yes, this is already fixed in V4 of patch [1]



>
>
> Other than that --- LGTM.
Thank you!


[1] 
https://lore.kernel.org/xen-devel/1639080336-26573-5-git-send-email-olekstysh@gmail.com/


>
>
> -boris
>
-- 
Regards,

Oleksandr Tyshchenko


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH V4 0/6] xen: Add support of extended regions (safe ranges) on Arm
  2021-12-17 19:19     ` Oleksandr
@ 2021-12-17 19:23       ` Boris Ostrovsky
  0 siblings, 0 replies; 9+ messages in thread
From: Boris Ostrovsky @ 2021-12-17 19:23 UTC (permalink / raw)
  To: Oleksandr
  Cc: Juergen Gross, xen-devel, linux-arm-kernel, linux-kernel,
	Oleksandr Tyshchenko, Stefano Stabellini, Russell King,
	Julien Grall, Bertrand Marquis, Wei Chen, Henry Wang, Kaly Xin,
	Jiamei Xie


On 12/17/21 2:19 PM, Oleksandr wrote:
>
> On 17.12.21 21:13, Boris Ostrovsky wrote:
>
> Hi Boris
>
>>
>> On 12/16/21 5:02 PM, Oleksandr wrote:
>>>
>>> On 09.12.21 22:05, Oleksandr Tyshchenko wrote:
>>>
>>>
>>> Hello Juergen, Boris
>>>
>>>
>>> May I please ask, are you happy (or otherwise) with current patch series (I assume, especially with commits #3-4)?
>>
>>
>> I think I mentioned last time, in patch 4:
>>
>>
>> +    if (target_resource != &iomem_resource) {
>> +        tmp_res = kzalloc(sizeof(*tmp_res), GFP_KERNEL);
>> +        if (!res) {
>
> Yes, this is already fixed in V4 of patch [1]



So this email did escape. Yes, I realized I was looking at V3 but apparently didn't hit ^C quickly enough ;-)



-boris





_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

* Re: [PATCH V4 0/6] xen: Add support of extended regions (safe ranges) on Arm
  2021-12-09 20:05 [PATCH V4 0/6] xen: Add support of extended regions (safe ranges) on Arm Oleksandr Tyshchenko
                   ` (2 preceding siblings ...)
  2021-12-16 22:02 ` [PATCH V4 0/6] xen: Add support of extended regions (safe ranges) on Arm Oleksandr
@ 2022-01-07 11:31 ` Juergen Gross
  3 siblings, 0 replies; 9+ messages in thread
From: Juergen Gross @ 2022-01-07 11:31 UTC (permalink / raw)
  To: Oleksandr Tyshchenko, xen-devel, linux-arm-kernel, linux-kernel
  Cc: Oleksandr Tyshchenko, Stefano Stabellini, Russell King,
	Boris Ostrovsky, Julien Grall, Bertrand Marquis, Wei Chen,
	Henry Wang, Kaly Xin, Jiamei Xie


[-- Attachment #1.1.1.1: Type: text/plain, Size: 3544 bytes --]

On 09.12.21 21:05, Oleksandr Tyshchenko wrote:
> From: Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>
> 
> Hello all.
> 
> You can find the RFC-V3 patch series at [1],[2] and [3].
> 
> The corresponding Xen support (for both Dom0 and DomU) is already committed and
> is available in mainline Xen since the following commit:
> 57f87857dc2de452a796d6bad4f476510efd2aba libxl/arm: Add handling of extended regions for DomU
> 
> The extended region (safe range) is a region of guest physical address space
> which is unused and could be safely used to create grant/foreign mappings instead
> of ballooning out real RAM pages to obtain a physical address space for creating
> these mappings (which simply results in wasting domain memory and shattering super
> pages in P2M table).
> 
> The problem is that we cannot follow Linux advise which memory ranges are unused
> on Arm as there might be some identity mappings in P2M table (stage 2) the guest is not
> aware of or not all device I/O regions might be known (registered) by the time the guest
> starts creating grant/foreign mappings. This is why we need some hints from the hypervisor
> which knows all details in advance to be able to choose extended regions (which won't
> clash with other resources).
> 
> The extended regions are chosen at the domain creation time and advertised to it via
> "reg" property under hypervisor node in the guest device-tree [4]. As region 0 is reserved
> for grant table space (always present), the indexes for extended regions are 1...N.
> No device tree bindings update is needed, guest infers the presence of extended regions
> from the number of regions in "reg" property.
> 
> Please note the following:
> - The ACPI case is not covered for now
> - patch series was created in a way to retain existing behavior on x86
> 
> The patch series is based on v5.16-rc3 and also available at [5], it was fully
> tested on Arm64 and only compile tested on x86.
> 
> [1] https://lore.kernel.org/all/1627490656-1267-1-git-send-email-olekstysh@gmail.com/
>      https://lore.kernel.org/all/1627490656-1267-2-git-send-email-olekstysh@gmail.com/
> [2] https://lore.kernel.org/all/1635264312-3796-1-git-send-email-olekstysh@gmail.com/
> [3] https://lore.kernel.org/all/1637787223-21129-1-git-send-email-olekstysh@gmail.com/
> [4] https://xenbits.xen.org/gitweb/?p=xen.git;a=blob_plain;f=docs/misc/arm/device-tree/guest.txt;hb=refs/heads/master
> [5] https://github.com/otyshchenko1/linux/commits/map_opt_ml7
> 
> Oleksandr Tyshchenko (6):
>    xen/unpopulated-alloc: Drop check for virt_addr_valid() in fill_list()
>    arm/xen: Switch to use gnttab_setup_auto_xlat_frames() for DT
>    xen/balloon: Bring alloc(free)_xenballooned_pages helpers back
>    xen/unpopulated-alloc: Add mechanism to use Xen resource
>    arm/xen: Read extended regions from DT and init Xen resource
>    dt-bindings: xen: Clarify "reg" purpose
> 
>   Documentation/devicetree/bindings/arm/xen.txt |  14 +--
>   arch/arm/xen/enlighten.c                      | 132 ++++++++++++++++++++++++--
>   drivers/xen/Kconfig                           |   2 +-
>   drivers/xen/balloon.c                         |  20 ++--
>   drivers/xen/unpopulated-alloc.c               |  87 ++++++++++++++++-
>   include/xen/balloon.h                         |   3 +
>   include/xen/xen.h                             |  16 ++++
>   7 files changed, 245 insertions(+), 29 deletions(-)
> 

Series pushed to xen/tip.git for-linus-5.17


Juergen

[-- Attachment #1.1.1.2: OpenPGP public key --]
[-- Type: application/pgp-keys, Size: 3135 bytes --]

[-- Attachment #1.2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 495 bytes --]

[-- Attachment #2: Type: text/plain, Size: 176 bytes --]

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

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

end of thread, other threads:[~2022-01-07 11:33 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-12-09 20:05 [PATCH V4 0/6] xen: Add support of extended regions (safe ranges) on Arm Oleksandr Tyshchenko
2021-12-09 20:05 ` [PATCH V4 2/6] arm/xen: Switch to use gnttab_setup_auto_xlat_frames() for DT Oleksandr Tyshchenko
2021-12-09 20:05 ` [PATCH V4 5/6] arm/xen: Read extended regions from DT and init Xen resource Oleksandr Tyshchenko
2021-12-16 22:02 ` [PATCH V4 0/6] xen: Add support of extended regions (safe ranges) on Arm Oleksandr
2021-12-17 19:13   ` Boris Ostrovsky
2021-12-17 19:19     ` Oleksandr
2021-12-17 19:23       ` Boris Ostrovsky
2021-12-17 19:17   ` Boris Ostrovsky
2022-01-07 11:31 ` Juergen Gross

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).