[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 4/6] spapr: Split memory nodes to power-of-two bl
From: |
Alexey Kardashevskiy |
Subject: |
[Qemu-devel] [PATCH v2 4/6] spapr: Split memory nodes to power-of-two blocks |
Date: |
Wed, 25 Jun 2014 02:43:09 +1000 |
Linux kernel expects nodes to have power-of-two size and
does WARN_ON if this is not the case:
[ 0.041456] WARNING: at drivers/base/memory.c:115
which is:
===
/* Validate blk_sz is a power of 2 and not less than section size */
if ((block_sz & (block_sz - 1)) || (block_sz < MIN_MEMORY_BLOCK_SIZE)) {
WARN_ON(1);
block_sz = MIN_MEMORY_BLOCK_SIZE;
}
===
This splits memory nodes into set of smaller blocks with
a size which is a power of two. This makes sure the start
address of every node is aligned to the node size.
Signed-off-by: Alexey Kardashevskiy <address@hidden>
---
Changes:
v2:
* tiny code cleanup in "sizetmp = MIN(sizetmp, 1 << (ffs(mem_start) - 1))"
* updated commit log with a piece of kernel code doing WARN_ON
---
hw/ppc/spapr.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 64f48de..0ec1dfc 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -719,8 +719,18 @@ static int spapr_populate_memory(sPAPREnvironment *spapr,
void *fdt)
mem_start += spapr->rma_size;
node_size -= spapr->rma_size;
}
- spapr_populate_memory_node(fdt, i, mem_start, node_size);
- mem_start += node_size;
+ for ( ; node_size; ) {
+ hwaddr sizetmp = pow2floor(node_size);
+
+ /* mem_start != 0 here */
+ if (ffs(mem_start) < ffs(sizetmp)) {
+ sizetmp = 1 << (ffs(mem_start) - 1);
+ }
+
+ spapr_populate_memory_node(fdt, i, mem_start, sizetmp);
+ node_size -= sizetmp;
+ mem_start += sizetmp;
+ }
}
return 0;
--
2.0.0
- [Qemu-devel] [PATCH v2 0/6] spapr: rework memory nodes, Alexey Kardashevskiy, 2014/06/24
- [Qemu-devel] [PATCH v2 1/6] spapr: Move DT memory node rendering to a helper, Alexey Kardashevskiy, 2014/06/24
- [Qemu-devel] [PATCH v2 5/6] spapr: Add a helper for node0_size calculation, Alexey Kardashevskiy, 2014/06/24
- [Qemu-devel] [PATCH v2 6/6] spapr: Fix ibm, associativity for memory nodes, Alexey Kardashevskiy, 2014/06/24
- [Qemu-devel] [PATCH v2 2/6] spapr: Use DT memory node rendering helper for other nodes, Alexey Kardashevskiy, 2014/06/24
- [Qemu-devel] [PATCH v2 4/6] spapr: Split memory nodes to power-of-two blocks,
Alexey Kardashevskiy <=
- [Qemu-devel] [PATCH v2 3/6] spapr: Refactor spapr_populate_memory() to allow memoryless nodes, Alexey Kardashevskiy, 2014/06/24
- Re: [Qemu-devel] [PATCH v2 0/6] spapr: rework memory nodes, Alexander Graf, 2014/06/25