| 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 |
| |