diff options
Diffstat (limited to 'meta-openembedded/meta-oe/recipes-devtools/pmtools/pmtools/pmtools-switch-to-dynamic-buffer-for-huge-ACPI-table.patch')
-rw-r--r-- | meta-openembedded/meta-oe/recipes-devtools/pmtools/pmtools/pmtools-switch-to-dynamic-buffer-for-huge-ACPI-table.patch | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/meta-openembedded/meta-oe/recipes-devtools/pmtools/pmtools/pmtools-switch-to-dynamic-buffer-for-huge-ACPI-table.patch b/meta-openembedded/meta-oe/recipes-devtools/pmtools/pmtools/pmtools-switch-to-dynamic-buffer-for-huge-ACPI-table.patch new file mode 100644 index 000000000..7ccdab0f2 --- /dev/null +++ b/meta-openembedded/meta-oe/recipes-devtools/pmtools/pmtools/pmtools-switch-to-dynamic-buffer-for-huge-ACPI-table.patch @@ -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 + |