On 02/08/2016 09:15 AM, Paolo Bonzini wrote: > A QemuLockCnt comprises a counter and a mutex, with primitives > to increment and decrement the counter, and to take and release the > mutex. It can be used to do lock-free visits to a data structure > whenever mutexes would be too heavy-weight and the critical section > is too long for RCU. > > This could be implemented simply by protecting the counter with the > mutex, but QemuLockCnt is harder to misuse and more efficient. > > Signed-off-by: Paolo Bonzini > --- > docs/lockcnt.txt | 343 ++++++++++++++++++++++++++++++++++++++++++++++++++ > include/qemu/thread.h | 17 +++ > util/Makefile.objs | 1 + > util/lockcnt.c | 122 ++++++++++++++++++ > 4 files changed, 483 insertions(+) > create mode 100644 docs/lockcnt.txt > create mode 100644 util/lockcnt.c > > diff --git a/docs/lockcnt.txt b/docs/lockcnt.txt > new file mode 100644 > index 0000000..fc5d240 > --- /dev/null > +++ b/docs/lockcnt.txt > @@ -0,0 +1,343 @@ > +DOCUMENTATION FOR LOCKED COUNTERS (aka QemuLockCnt) > +=================================================== Worth an explicit mention that this document is GPLv2+ (or an explicit choice of a different license)? > + > +QEMU often uses reference counts to track data structures that are being > +accessed and should not be freed. For example, a loop that invoke s/invoke/invokes/ > +callbacks like this is not safe: > + but overall a nice writeup. I'll leave the code review to others, though. > +++ b/util/lockcnt.c > @@ -0,0 +1,122 @@ > +/* > + * QemuLockCnt implementation > + * > + * Copyright Red Hat, Inc. 2015 > + * > + * Author: > + * Paolo Bonzini > + */ > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include > +#include You'll want to use qemu/osdep.h in place of several of these headers. -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org