[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[XEN RFC PATCH 05/40] xen/arm: Fix lowmem_bitsize when arch_get_dma_bitsize return 0


  • To: <wei.chen@xxxxxxx>, <xen-devel@xxxxxxxxxxxxxxxxxxxx>, <sstabellini@xxxxxxxxxx>, <julien@xxxxxxx>, <jbeulich@xxxxxxxx>
  • From: Wei Chen <wei.chen@xxxxxxx>
  • Date: Wed, 11 Aug 2021 18:23:48 +0800
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 40.67.248.234) smtp.rcpttodomain=lists.xenproject.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=none (message not signed); arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=X9Quh0tEBLns+ar8JRFuw/KOQmJhLjKjIBZgg0xnsXg=; b=aOZbkqqIJezjhrLmlLgFRT2T8wHr1sVZSWrC4NdRh8ej6EPlXiZRTs7ozRFnyghTGdHSVnE/F8lp2VrB+ui8ufImHOogQFwq9DKuxvZvKQ5+oHMATnaXHQT4cqVOhFd0wmcakQKzrSa4QaaYrtKB+E6qbOwJqFMLiTAqPG5cUZXtC+Q+1KaBdR0MUujjILcYOOppSlWo5D+W2xzjovtXX1nGXNrsSCf2YXDls21U2Kk5d0V0a8q4FpQtgjGNlAtNy6Ra6jXPeB7z+2YOa/x2tJN+TTBdnsBr9bebb4sZTkoMNmROI/Bh/7xfn5vvMySsOUGVo9opQHDW+jmnlc2hOw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HBMuQOK7uD9l1ovvWUo902MSVKdGnsrqP2B7kdd0qo/QVvBsGegoJvd2MO4ganAw90dkn/AUxsZ8kGVzqLocuvugdKzkJ81A0zN24XOo+Gjmr9KxDBDaomSV5f283HYZQWUdxSIymRaHGXMktX9awCDD1SAql0gQC2bXU/yag18v6uT98iP4QMudNbDDksNVpHa1FmKNrE6MPfArr6CRV9n3SyA689IZA2DkMHLVFUJ4K57sY+9l/rAA94r0EZQ0FsfZQ3nSa+G/+qzLAS0p9jglNSmEV4xWh1zdJ+8+o7QLCvPqtFa7ksy0F6BcAyNLFQ+8WuUyl0nwjVaRNCTx8w==
  • Cc: <Bertrand.Marquis@xxxxxxx>
  • Delivery-date: Wed, 11 Aug 2021 10:25:15 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Nodisclaimer: true

From: Hongda Deng <Hongda.Deng@xxxxxxx>

In previous patch, we make arch_get_dma_bitsize return 0 when
dma_bitsize and platform->dma_bitsize are not set. But this
will affect lowmem_bitsize in allocate_memory_11 for domain0.
Because this function depends lowmem_bitsize to allocate memory
below 4GB.

In current code, when arch_get_dma_bitsize return 0, lowmem_bitsize
will be set to 0. In this case, we will get "No bank has been
allocated below 0-bit." message while allocating domain0 memory.
And the lowmem will be set to false.

This behavior is inconsistent with what allocate_memory_11 done
before, and doesn't meet this functions requirements. So we
check arch_get_dma_bitsize's return value before set lowmem_bitsize.
Avoid setting lowmem_bitsize to 0 by mistake.

Signed-off-by: Wei Chen <wei.chen@xxxxxxx>
Signed-off-by: Hongda Deng <Hongda.Deng@xxxxxxx>
---
 xen/arch/arm/domain_build.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/xen/arch/arm/domain_build.c b/xen/arch/arm/domain_build.c
index 6c86d52781..cf341f349f 100644
--- a/xen/arch/arm/domain_build.c
+++ b/xen/arch/arm/domain_build.c
@@ -265,9 +265,18 @@ static void __init allocate_memory_11(struct domain *d,
     int i;
 
     bool lowmem = true;
-    unsigned int lowmem_bitsize = min(32U, arch_get_dma_bitsize());
+    unsigned int lowmem_bitsize = arch_get_dma_bitsize();
     unsigned int bits;
 
+    /*
+       When dma_bitsize and platform->dma_bitsize are not set,
+       arch_get_dma_bitsize will return 0. That means this system
+       doesn't need to reserve memory for DMA. But in order to
+       meet above requirements, we still need to try to allocate
+       memory below 4GB for Dom0.
+    */
+    lowmem_bitsize = lowmem_bitsize ? min(32U, lowmem_bitsize) : 32U;
+
     /*
      * TODO: Implement memory bank allocation when DOM0 is not direct
      * mapped
-- 
2.25.1




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.