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

[Xen-devel] [PATCH] acpi: enlarge NUM_FIXMAP_ACPI_PAGES to support larger scale boards

In acpi_tb_verify_table()->__acpi_map_table(), it suppose all ACPI tables
may not exceed 4 pages, the tables includes SRAT/APIC/ERST etc. Please
note that the table DSDT is not mapped through acpi_tb_verify_table(),
thus we don't care its size although it's usually the largest table among
all the ACPI tables. Then the biggest table we concern is SRAT. From
experience, its size is mostly affected by CPU number, it costs about 100B
for each CPU. for example, on my BIOS board, 30336B for 288 CPUs and
14128B for 144 CPUs.(memory size is around 2TB)
Please note: even on the board with 128 CPUs, whose SRAT table is 14128B,
although it's within 4 pages, but in __acpi_map_table(), it maps
pages to get the table. suppose the start address is near the end of the
first page:

       1000B    4096B         4096B          4096B      840B

although the total page is within 4 pages , but it may be in fact across 5
pages, as shown above. Thus the NUM_FIXMAP_ACPI_PAGES should be much
larger nowadays. If not, xen would wrongly thinks no NUMA configuration
could be found as that it could not get SRAT table.

Thus, we make NUM_FIXMAP_ACPI_PAGES much larger, to 256(1MB). it's
calculated for that the theoretical largest CPU number on main Linux
distros is about 8000, 100B for each gets the sum of 800KB. Meanwhile,
because IOREMAP_VIRT_*  region is 16GB, thus I think extending it to 1MB
is safe enough.

Of course, there's much more work to do to support large scale boards of
that many(8000) CPUs. We just make life easier for boards with serveral
hundreds of CPUs.

Signed-off-by: Zhang Bo <oscar.zhangbo@xxxxxxxxxx>
 xen/include/xen/acpi.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/xen/include/xen/acpi.h b/xen/include/xen/acpi.h
index 30ec0ee..88ea2f5 100644
--- a/xen/include/xen/acpi.h
+++ b/xen/include/xen/acpi.h
@@ -41,9 +41,9 @@

  * Fixmap pages to reserve for ACPI boot-time tables (see asm-x86/fixmap.h or
- * asm-arm/config.h)
+ * asm-arm/config.h, 256 pages(1MB) is large enough for most cases.)

 #define BAD_MADT_ENTRY(entry, end) (                                        \
                 (!(entry)) || (unsigned long)(entry) + sizeof(*(entry)) > 
(end) ||  \

Xen-devel mailing list



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