summaryrefslogtreecommitdiff
path: root/source/include
diff options
context:
space:
mode:
Diffstat (limited to 'source/include')
-rw-r--r--source/include/acmacros.h5
-rw-r--r--source/include/acoutput.h7
-rw-r--r--source/include/acpiosxf.h1
-rw-r--r--source/include/acpixf.h8
-rw-r--r--source/include/platform/acgcc.h15
-rw-r--r--source/include/platform/aclinux.h4
6 files changed, 40 insertions, 0 deletions
diff --git a/source/include/acmacros.h b/source/include/acmacros.h
index 1255be5c5..90dcc7714 100644
--- a/source/include/acmacros.h
+++ b/source/include/acmacros.h
@@ -531,8 +531,13 @@
* the plist contains a set of parens to allow variable-length lists.
* These macros are used for both the debug and non-debug versions of the code.
*/
+#if defined (ACPI_USE_DO_ONCE_MACRO) && defined (ACPI_DO_ONCE)
+#define ACPI_ERROR_NAMESPACE(s, e) ACPI_DO_ONCE(AcpiUtNamespaceError (AE_INFO, s, e));
+#define ACPI_ERROR_METHOD(s, n, p, e) ACPI_DO_ONCE(AcpiUtMethodError (AE_INFO, s, n, p, e));
+#else
#define ACPI_ERROR_NAMESPACE(s, e) AcpiUtNamespaceError (AE_INFO, s, e);
#define ACPI_ERROR_METHOD(s, n, p, e) AcpiUtMethodError (AE_INFO, s, n, p, e);
+#endif
#define ACPI_WARN_PREDEFINED(plist) AcpiUtPredefinedWarning plist
#define ACPI_INFO_PREDEFINED(plist) AcpiUtPredefinedInfo plist
#define ACPI_BIOS_ERROR_PREDEFINED(plist) AcpiUtPredefinedBiosError plist
diff --git a/source/include/acoutput.h b/source/include/acoutput.h
index 717a2c31c..39e09365c 100644
--- a/source/include/acoutput.h
+++ b/source/include/acoutput.h
@@ -302,10 +302,17 @@
* the plist contains a set of parens to allow variable-length lists.
* These macros are used for both the debug and non-debug versions of the code.
*/
+#if defined (ACPI_USE_DO_ONCE_MACRO) && defined (ACPI_DO_ONCE)
+#define ACPI_INFO(plist) ACPI_DO_ONCE(AcpiInfo plist)
+#define ACPI_WARNING(plist) ACPI_DO_ONCE(AcpiWarning plist)
+#define ACPI_EXCEPTION(plist) ACPI_DO_ONCE(AcpiException plist)
+#define ACPI_ERROR(plist) ACPI_DO_ONCE(AcpiError plist)
+#else
#define ACPI_INFO(plist) AcpiInfo plist
#define ACPI_WARNING(plist) AcpiWarning plist
#define ACPI_EXCEPTION(plist) AcpiException plist
#define ACPI_ERROR(plist) AcpiError plist
+#endif
#define ACPI_BIOS_WARNING(plist) AcpiBiosWarning plist
#define ACPI_BIOS_ERROR(plist) AcpiBiosError plist
#define ACPI_DEBUG_OBJECT(obj,l,i) AcpiExDoDebugObject(obj,l,i)
diff --git a/source/include/acpiosxf.h b/source/include/acpiosxf.h
index c4d160685..400a68df3 100644
--- a/source/include/acpiosxf.h
+++ b/source/include/acpiosxf.h
@@ -541,6 +541,7 @@ AcpiOsEnterSleep (
* Debug print routines
*/
#ifndef ACPI_USE_ALTERNATE_PROTOTYPE_AcpiOsPrintf
+ACPI_PRINTF_LIKE(1)
void ACPI_INTERNAL_VAR_XFACE
AcpiOsPrintf (
const char *Format,
diff --git a/source/include/acpixf.h b/source/include/acpixf.h
index c491ae159..40c201318 100644
--- a/source/include/acpixf.h
+++ b/source/include/acpixf.h
@@ -248,6 +248,14 @@ ACPI_INIT_GLOBAL (UINT8, AcpiGbl_VerifyTableChecksum, TRUE);
ACPI_INIT_GLOBAL (UINT8, AcpiGbl_EnableAmlDebugObject, FALSE);
/*
+ * Optionally enable ACPI_DO_ONCE to avoid log flodding. Default is TRUE
+ * so that when ACPI_USE_DO_ONCE_MACRO is enabled, log flooding can be
+ * avoided by default. And this option is provided so that OSPMs can
+ * disable it during runtime.
+ */
+ACPI_INIT_GLOBAL (UINT8, AcpiGbl_EnableDoOnceMacro, TRUE);
+
+/*
* Optionally copy the entire DSDT to local memory (instead of simply
* mapping it.) There are some BIOSs that corrupt or replace the original
* DSDT, creating the need for this option. Default is FALSE, do not copy
diff --git a/source/include/platform/acgcc.h b/source/include/platform/acgcc.h
index 097539ca8..5ec3ffd32 100644
--- a/source/include/platform/acgcc.h
+++ b/source/include/platform/acgcc.h
@@ -146,4 +146,19 @@
#define COMPILER_VA_MACRO 1
+/* GCC supports _ONCE macros */
+
+#define ACPI_DO_ONCE(plist) \
+({ \
+ static BOOLEAN __AcpiErrorOnce__ = FALSE; \
+ if (!__AcpiErrorOnce__) \
+ { \
+ if (AcpiGbl_EnableDoOnceMacro) \
+ { \
+ __AcpiErrorOnce__ = TRUE; \
+ } \
+ plist; \
+ } \
+})
+
#endif /* __ACGCC_H__ */
diff --git a/source/include/platform/aclinux.h b/source/include/platform/aclinux.h
index 27803ad31..665756fba 100644
--- a/source/include/platform/aclinux.h
+++ b/source/include/platform/aclinux.h
@@ -146,6 +146,10 @@
#define ACPI_DEBUGGER
#endif
+#ifdef CONFIG_ACPI_MESSAGE_ONCE
+#define ACPI_USE_DO_ONCE_MACRO 1
+#endif
+
#include <linux/string.h>
#include <linux/kernel.h>
#include <linux/ctype.h>