On Wed, Oct 21, 2015 at 01:22:22PM +0100, Peter Maydell wrote: > On 21 October 2015 at 11:41, Stefan Hajnoczi <stefa...@redhat.com> wrote: > > DPRINTF() falls under both #1 and #2. Care needs to be taken to > > separate the logging from the tracing when converting DPRINTF(). > > > > Side note: we don't have effect "once only" or rate-limiting built into > > error_report(). Guest-triggerable errors or warnings should be limited > > to prevent log flooding. > > > > It would be nice to unify TCG's "qemu log" and error_report() into a > > single logging mechanism that is thread-safe and has rate-limiting. > > As long as you can disable the rate-limiting: for almost all > of the use cases for the qemu-log code you really don't want > to have it drop logging messages.
In the Linux kernel there are a few primitives: printk() - plain old printf printk_once() - uses a static bool for once-only semantics, modulo races between CPUs printk_ratelimited() - time-based rate-limiting (And if you need to configure the ratelimit threshold, you can use the underlying __ratelimit() function.) The same could work for QEMU. Existing "qemu log" stuff is mostly printk(). Any messages that are not errors or warnings don't need rate-limiting because they shouldn't be enabled by default (and when you do want them for troubleshooting, then rate-limiting gets in the way). Stefan