pmtools: support huge ACPI table

For some servers such as Canoe Pass or Thunder Ridge, they have much
more entries in ACPI table, so original 1K buffer is insufficient.

Switch to dynamic buffer for this situation.

Remove 'protocol' field in SRC_URI as well which cause warning:

| WARNING: Failed to fetch URL git://github.com/anyc/pmtools.git;protocol=https,
| attempting MIRRORS if available

Signed-off-by: Kai Kang <kai.kang@windriver.com>
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
Signed-off-by: Armin Kuster <akuster808@gmail.com>
This commit is contained in:
Kai Kang 2015-12-03 13:58:25 +08:00 committed by Armin Kuster
parent ae951ebb35
commit b544906e29
2 changed files with 69 additions and 1 deletions

View File

@ -0,0 +1,66 @@
From 03a886252f6555d6b0af76b654e76459642b89da Mon Sep 17 00:00:00 2001
From: Yunguo Wei <yunguo.wei@windriver.com>
Date: Tue, 3 Dec 2013 18:12:50 +0800
Subject: [PATCH] pmtools: switch to dynamic buffer for huge ACPI tables
For servers like Canoe Pass or Thunder Ridge, there are much more
entries in ACPI table, so original 1K buffer is insufficient.
We switch to dynamic buffer on this situation.
Signed-off-by: Yunguo Wei <yunguo.wei@windriver.com>
Upstream-Status: Pending
Signed-off-by: Kai Kang <kai.kang@windriver.com>
---
madt/madt.c | 18 +++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/madt/madt.c b/madt/madt.c
index aed965c..8770cd5 100644
--- a/madt/madt.c
+++ b/madt/madt.c
@@ -51,7 +51,9 @@ get_next_entry(acpi_table_entry_header * entry_header)
return retval;
}
-u8 buffer[1024];
+
+u8 buf[1024];
+u8 *buffer = buf;
main()
{
@@ -75,6 +77,17 @@ main()
if (verbose) printf("header.length %d\n", madt_header->header.length);
+ /* if 1K buffer is insufficient for acpi table, switch to a larger memory buffer */
+ if(expected_length > sizeof(buf)) {
+ buffer = malloc(expected_length);
+ if (!buffer) {
+ perror("malloc");
+ exit(1);
+ }
+ memset(buffer, 0, expected_length);
+ memcpy(buffer, buf, sizeof(struct acpi_table_madt));
+ }
+
acpi_table_print((void*)&(buffer[bytes_read]), 0);
bytes_read = sizeof(struct acpi_table_madt);
@@ -118,6 +131,9 @@ done:
printf("Checksum 0x%x != 0; 0x%x in header ERROR\n", csum,
madt_header->header.checksum);
+ if(buffer != buf)
+ free(buffer);
+
return 0;
}
--
1.8.1.2

View File

@ -6,7 +6,9 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3"
PV = "20130209+git${SRCPV}"
SRC_URI = "git://github.com/anyc/pmtools.git;protocol=https"
SRC_URI = "git://github.com/anyc/pmtools.git \
file://pmtools-switch-to-dynamic-buffer-for-huge-ACPI-table.patch \
"
SRCREV = "3ebe0e54c54061b4c627236cbe35d820de2e1168"
COMPATIBLE_HOST = "(i.86|x86_64).*-linux"