KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(22)
接前一篇文章:KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(21)
上一回进行了“承上启下”的工作,从本回开始,正式回归到之前的主线,对于intel_user_framebuffer_create()的第1个调用函数i915_gem_object_lookup()进行深入解析。为了便于理解和加深印象,再次贴出intel_user_framebuffer_create()和i915_gem_object_lookup()的源码。
intel_user_framebuffer_create函数在drivers\gpu\drm\i915\display\intel_fb.c中,代码如下:
struct drm_framebuffer *
intel_user_framebuffer_create(struct drm_device *dev,
struct drm_file *filp,
const struct drm_mode_fb_cmd2 *user_mode_cmd)
{
struct drm_framebuffer *fb;
struct drm_i915_gem_object *obj;
struct drm_mode_fb_cmd2 mode_cmd = *user_mode_cmd;
struct drm_i915_private *i915;
obj = i915_gem_object_lookup(filp, mode_cmd.handles[0]);
if (!obj)
return ERR_PTR(-ENOENT);