summaryrefslogtreecommitdiffstats
path: root/meta-openembedded/meta-oe/recipes-devtools/pmtools/pmtools/pmtools-switch-to-dynamic-buffer-for-huge-ACPI-table.patch
diff options
context:
space:
mode:
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.patch66
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
+
OpenPOWER on IntegriCloud