[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 NUM_FIXMAP_ACPI_PAGES 4 +#define NUM_FIXMAP_ACPI_PAGES 256 #define BAD_MADT_ENTRY(entry, end) ( \ (!(entry)) || (unsigned long)(entry) + sizeof(*(entry)) > (end) || \ _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |