Message ID | 20230222073507.788705-5-radhakrishna.sripada@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Misc Meteorlake patches | expand |
On Tue, Feb 21, 2023 at 11:35:02PM -0800, Radhakrishna Sripada wrote: > From: Tejas Upadhyay <tejas.upadhyay@intel.com> > > lock the fbdev obj before calling into > i915_vma_pin_iomap(). This helps to solve below : > > <7>[ 93.563308] i915 0000:00:02.0: [drm:intelfb_create [i915]] no BIOS fb, allocating a new one > <4>[ 93.581844] ------------[ cut here ]------------ > <4>[ 93.581855] WARNING: CPU: 12 PID: 625 at drivers/gpu/drm/i915/gem/i915_gem_pages.c:424 i915_gem_object_pin_map+0x152/0x1c0 [i915] > > Fixes: b473df22760f9 ("backport "drm/i915: Add ww context to intel_dpt_pin, v2.") This Fixes line isn't correct. I think you wanted: Fixes: f0b6b01b3efe ("drm/i915: Add ww context to intel_dpt_pin, v2.") Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> BTW, your git-sendemail configuration seems to be incorrect; even though there are Cc's in the body of several of your patches, they're not being picked up to send copies to the necessary people. Matt > Cc: Chris Wilson <chris.p.wilson@intel.com> > Cc: Matthew Auld <matthew.auld@intel.com> > Signed-off-by: Tejas Upadhyay <tejas.upadhyay@intel.com> > Signed-off-by: Radhakrishna Sripada <radhakrishna.sripada@intel.com> > --- > drivers/gpu/drm/i915/display/intel_fbdev.c | 24 ++++++++++++++++------ > 1 file changed, 18 insertions(+), 6 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_fbdev.c b/drivers/gpu/drm/i915/display/intel_fbdev.c > index 3659350061a7..2766d7ef0128 100644 > --- a/drivers/gpu/drm/i915/display/intel_fbdev.c > +++ b/drivers/gpu/drm/i915/display/intel_fbdev.c > @@ -210,6 +210,7 @@ static int intelfb_create(struct drm_fb_helper *helper, > bool prealloc = false; > void __iomem *vaddr; > struct drm_i915_gem_object *obj; > + struct i915_gem_ww_ctx ww; > int ret; > > mutex_lock(&ifbdev->hpd_lock); > @@ -283,13 +284,24 @@ static int intelfb_create(struct drm_fb_helper *helper, > info->fix.smem_len = vma->size; > } > > - vaddr = i915_vma_pin_iomap(vma); > - if (IS_ERR(vaddr)) { > - drm_err(&dev_priv->drm, > - "Failed to remap framebuffer into virtual memory (%pe)\n", vaddr); > - ret = PTR_ERR(vaddr); > - goto out_unpin; > + for_i915_gem_ww(&ww, ret, false) { > + ret = i915_gem_object_lock(vma->obj, &ww); > + > + if (ret) > + continue; > + > + vaddr = i915_vma_pin_iomap(vma); > + if (IS_ERR(vaddr)) { > + drm_err(&dev_priv->drm, > + "Failed to remap framebuffer into virtual memory (%pe)\n", vaddr); > + ret = PTR_ERR(vaddr); > + continue; > + } > } > + > + if (ret) > + goto out_unpin; > + > info->screen_base = vaddr; > info->screen_size = vma->size; > > -- > 2.34.1 >
diff --git a/drivers/gpu/drm/i915/display/intel_fbdev.c b/drivers/gpu/drm/i915/display/intel_fbdev.c index 3659350061a7..2766d7ef0128 100644 --- a/drivers/gpu/drm/i915/display/intel_fbdev.c +++ b/drivers/gpu/drm/i915/display/intel_fbdev.c @@ -210,6 +210,7 @@ static int intelfb_create(struct drm_fb_helper *helper, bool prealloc = false; void __iomem *vaddr; struct drm_i915_gem_object *obj; + struct i915_gem_ww_ctx ww; int ret; mutex_lock(&ifbdev->hpd_lock); @@ -283,13 +284,24 @@ static int intelfb_create(struct drm_fb_helper *helper, info->fix.smem_len = vma->size; } - vaddr = i915_vma_pin_iomap(vma); - if (IS_ERR(vaddr)) { - drm_err(&dev_priv->drm, - "Failed to remap framebuffer into virtual memory (%pe)\n", vaddr); - ret = PTR_ERR(vaddr); - goto out_unpin; + for_i915_gem_ww(&ww, ret, false) { + ret = i915_gem_object_lock(vma->obj, &ww); + + if (ret) + continue; + + vaddr = i915_vma_pin_iomap(vma); + if (IS_ERR(vaddr)) { + drm_err(&dev_priv->drm, + "Failed to remap framebuffer into virtual memory (%pe)\n", vaddr); + ret = PTR_ERR(vaddr); + continue; + } } + + if (ret) + goto out_unpin; + info->screen_base = vaddr; info->screen_size = vma->size;