接前一篇文章:KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(27)
上回书在探究i915_gem_object_lookup_rcu函数调用idr_find函数时所传递的参数的时候,由第1个实参&file->object_idr引出了对于它是在何时何处赋值的探索。
static inline struct drm_i915_gem_object *
i915_gem_object_lookup_rcu(struct drm_file *file, u32 handle)
{
#ifdef CONFIG_LOCKDEP
WARN_ON(debug_locks && !lock_is_held(&rcu_lock_map));
#endif
return idr_find(&file->object_idr, handle);
}
而后经过定位和排查,最终锁定在drivers/gpu/drm/drm_gem.c中的两个函数:drm_gem_handle_create_tail()和drm_gem_open()。本回就开始对这两个函数进行深入解析,探究它们是如何与object_idr以及Linux Radix Tree建立联系的。
为了便于理解,再次贴出两个函数源码:
/**
* drm_gem_handle_create_tail - internal fu