aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2018-08-27 16:44:20 +0100
committerPeter Maydell <peter.maydell@linaro.org>2018-08-27 16:44:20 +0100
commit19b599f7664b2ebfd0f405fb79c14dd241557452 (patch)
treeb393f7e0dba1d81af703c27cf747b704eb37a3a4 /include
parente1e388900d84f978c35c66125b546576bf7e4019 (diff)
parent4e4abd111a2af0179a4467368d695958844bf113 (diff)
Merge remote-tracking branch 'remotes/armbru/tags/pull-error-2018-08-27-v2' into staging
Error reporting patches for 2018-08-27 # gpg: Signature made Mon 27 Aug 2018 14:18:15 BST # gpg: using RSA key 3870B400EB918653 # gpg: Good signature from "Markus Armbruster <armbru@redhat.com>" # gpg: aka "Markus Armbruster <armbru@pond.sub.org>" # Primary key fingerprint: 354B C8B3 D7EB 2A6B 6867 4E5F 3870 B400 EB91 8653 * remotes/armbru/tags/pull-error-2018-08-27-v2: intel-iommu: replace more vtd_err_* traces intel-iommu: start to use error_report_once qemu-error: introduce {error|warn}_report_once Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'include')
-rw-r--r--include/qemu/error-report.h32
1 files changed, 32 insertions, 0 deletions
diff --git a/include/qemu/error-report.h b/include/qemu/error-report.h
index e1c8ae1a52..72fab2b031 100644
--- a/include/qemu/error-report.h
+++ b/include/qemu/error-report.h
@@ -44,6 +44,38 @@ void error_report(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
void warn_report(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
void info_report(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
+/*
+ * Similar to error_report(), except it prints the message just once.
+ * Return true when it prints, false otherwise.
+ */
+#define error_report_once(fmt, ...) \
+ ({ \
+ static bool print_once_; \
+ bool ret_print_once_ = !print_once_; \
+ \
+ if (!print_once_) { \
+ print_once_ = true; \
+ error_report(fmt, ##__VA_ARGS__); \
+ } \
+ unlikely(ret_print_once_); \
+ })
+
+/*
+ * Similar to warn_report(), except it prints the message just once.
+ * Return true when it prints, false otherwise.
+ */
+#define warn_report_once(fmt, ...) \
+ ({ \
+ static bool print_once_; \
+ bool ret_print_once_ = !print_once_; \
+ \
+ if (!print_once_) { \
+ print_once_ = true; \
+ warn_report(fmt, ##__VA_ARGS__); \
+ } \
+ unlikely(ret_print_once_); \
+ })
+
const char *error_get_progname(void);
extern bool enable_timestamp_msg;