接前一篇文章:KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(16)
上一回重点讲解了intel_user_framebuffer_create函数中的第一个函数i915_gem_object_lookup()中的RCU相关接口和机制,本回开始对于i915_gem_object_lookup函数临界区中的代码进行解析。为了便于理解,再次贴出该函数代码,在drivers/gpu/drm/i915/gem/i915_gem_object.h中,如下:
- static inline struct drm_i915_gem_object *
- i915_gem_object_lookup(struct drm_file *file, u32 handle)
- {
- struct drm_i915_gem_object *obj;
-
- rcu_read_lock();
- obj = i915_gem_object_lookup_rcu(file, handle);
- obj = i915_gem_object_get_rcu(obj);
- rcu_read_unlock();
-
- return obj;
- }
先来看第1个函数调用,代码片段如下:
obj = i915_gem_object_lookup_rcu(file, handle);
在讲解这个函数之前,先要弄清楚传给i915_gem_object_lookup函数的实参都是什么。前文讲