Depending on the configuration, a passthrough device may produce recurring DMA mapping errors at runtime and produce a lot of output. It is useful to report only once.
Cc: Markus Armbruster <arm...@redhat.com> Signed-off-by: Cédric Le Goater <c...@redhat.com> --- include/qapi/error.h | 5 +++++ util/error.c | 9 +++++++++ 2 files changed, 14 insertions(+) diff --git a/include/qapi/error.h b/include/qapi/error.h index 71f8fb2c50eee9a544992d0c05263c9793956fe1..b6ea274882b9788b64d4bb213c3458d7c674a881 100644 --- a/include/qapi/error.h +++ b/include/qapi/error.h @@ -448,6 +448,11 @@ void error_free_or_abort(Error **errp); */ void warn_report_err(Error *err); +/* + * Convenience function to call warn_report_err() once. + */ +void warn_report_once_err(Error *err); + /* * Convenience function to error_report() and free @err. * The report includes hints added with error_append_hint(). diff --git a/util/error.c b/util/error.c index e5e247209a9e0796074a9794f5598325f22f8d35..b8a211cccaa609a93091b86316144a0ad0a02662 100644 --- a/util/error.c +++ b/util/error.c @@ -247,6 +247,15 @@ void warn_report_err(Error *err) error_free(err); } +void warn_report_once_err(Error *err) +{ + static bool print_once_; + if (!print_once_) { + warn_report_err(err); + print_once_ = true; + } +} + void error_reportf_err(Error *err, const char *fmt, ...) { va_list ap; -- 2.48.1