On Tue, Apr 11, 2023 at 10:27:45PM +0000, Volodymyr Babchuk wrote: > > Hello Roger, > > Sorry for the late answer. > > Roger Pau Monné <[email protected]> writes: > > > On Tue, Mar 14, 2023 at 08:56:29PM +0000, Volodymyr Babchuk wrote: > >> We can use reference counter to ease up object lifetime management. > >> This patch adds very basic support for reference counters. refcnt > >> should be used in the following way: > >> > >> 1. Protected structure should have refcnt_t field > >> > >> 2. This field should be initialized with refcnt_init() during object > >> construction. > >> > >> 3. If code holds a valid pointer to a structure/object it can increase > >> refcount with refcnt_get(). No additional locking is required. > >> > >> 4. Code should call refcnt_put() before dropping pointer to a > >> protected structure. `destructor` is a call back function that should > >> destruct object and free all resources, including structure protected > >> itself. Destructor will be called if reference counter reaches zero. > >> > >> 5. If code does not hold a valid pointer to a protected structure it > >> should use other locking mechanism to obtain a pointer. For example, > >> it should lock a list that hold protected objects. > > > > Sorry, I didn't look at the previous versions, but did we consider > > importing refcount_t and related logic from Linux? > > Well, I considered this. But it is more complex. It has separate > refcount module, which just counts references + kref code, that is > capable of calling destructors. I am not sure if Xen need this > division. In any case, I tried to replicate Linux behavior as close as > possible. On other hand, Jan suggests to rework API, so it will be > differ from Linux one...
OK, just asking because it's likely for the interface to grow if there are more users of refcounting, and at some point we might need a set of features similar to Linux. Thanks, Roger.
