• Mathias Krause's avatar
    drm/i915: Clarify type evolution of uabi_node/uabi_engines · 9c303439
    Mathias Krause authored
    Chaining user engines happens in multiple passes during driver
    initialization, mutating its type along the way. It starts off with a
    simple lock-less linked list (struct llist_node/head) populated by
    intel_engine_add_user() which later gets sorted and converted to an
    intermediate regular list (struct list_head) just to be converted once
    more to its final rb-tree structure (struct rb_node/root) in
    intel_engines_driver_register().
    
    All of these types overlay the uabi_node/uabi_engines members which is
    unfortunate but safe if one takes care about using the rb-tree based
    structure only after the conversion has completed. However, mistakes
    happen and commit 1ec23ed7 ("drm/i915: Use uabi engines for the
    default engine map") violated that assumption, as the multiple type
    evolution was all to easy hidden behind casts papering over it.
    
    Make the type evolution of uabi_node/uabi_engines more visible by
    putting all members into an anonymous union and use the correctly typed
    member in its various users. This allows us to drop quite some ugly
    casts and, hopefully, make the evolution of the members better
    recognisable to avoid future mistakes.
    Signed-off-by: default avatarMathias Krause <minipli@grsecurity.net>
    Reviewed-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
    Signed-off-by: default avatarTvrtko Ursulin <tvrtko.ursulin@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20230928182019.10256-3-minipli@grsecurity.net
    9c303439
i915_drv.h 27.7 KB