Eric Blake <ebl...@redhat.com> writes: > On 10/22/2015 06:00 AM, Markus Armbruster wrote: >> Peter Maydell <peter.mayd...@linaro.org> writes: >> >>> On 21 October 2015 at 23:49, Eric Blake <ebl...@redhat.com> wrote: >>>> I much prefer the name container_of() (which is a bit more obvious that >>>> it is finding the container or derived type that embeds the parent >>>> type), but if we have to keep the ugly name, could we at least clean up >>>> the comment to make sense, and fix the name to be DO_DOWNCAST to match >>>> what it is actually doing? >> >> DO_UPCAST() needs deletion, not renaming. >> >>> You can't call this one container_of, because it's doing >>> container_of plus extra checking. >>> > > The only extra checking is that the derived class has the parent class > as its first member. > >> Any DO_UPCAST() that have crept into other code could be simply replaced >> by container_of(). If we want to keep the extra checking Peter >> mentioned, we could have a container_of_checked() or something. *Not* a >> renamed DO_UPCAST(), because DO_UPCAST() pointlessly takes its arguments >> in a different order than container_of(). > > Or maybe container_of_first(), to make it obvious that the parent class > is the first member. > > But how often does it really matter whether the container of the parent > class had the parent as the first member? I guess we'll find out as we > try to nuke DO_UPCAST.
I don't know. I dimly remember discussing a "parent must be first" restriction in qdev a long time ago. Perhaps all that's left of it by now is this check.