Re: [PATCH] drm: refcnt drm_framebuffer

2012-08-01 Thread Ville Syrjälä
On Tue, Jul 31, 2012 at 02:28:29PM -0500, Rob Clark wrote:
 On Tue, Jul 31, 2012 at 12:47 PM, Chris Wilson ch...@chris-wilson.co.uk 
 wrote:
  On Tue, 31 Jul 2012 12:41:28 -0500, Rob Clark rob.cl...@linaro.org wrote:
  On Tue, Jul 31, 2012 at 12:00 PM, Chris Wilson ch...@chris-wilson.co.uk 
  wrote:
   On Tue, 31 Jul 2012 11:20:21 -0500, Rob Clark rob.cl...@linaro.org 
   wrote:
   From: Rob Clark r...@ti.com
  
   This simplifies drm fb lifetime, and if the crtc/plane needs to hold
   a ref to the fb when disabling a pipe until the next vblank, this
   avoids the need to make disabling an overlay synchronous.  This is a
   problem that shows up when userspace is using a drm plane to
   implement a hw cursor.. making overlay disable synchronous causes
   a performance problem when x11 is rapidly enabling/disabling the
   hw cursor.  But not making it synchronous opens up a race condition
   for crashing if userspace turns around and immediately deletes the
   fb.  Refcnt'ing the fb makes it possible to solve this problem.
  
   Presumably you have a follow-on patch putting the new refcnt to use so
   that we can judge whether you truly need refcnting on the fb itself in
   addition to the refcnted object and the various hw bookkeeping that
   needs to be performed?
 
  Yes, I do.. although it is a bit experimental at this point, so not
  really ready to be submitted as anything other than an RFC.. it is
  part of omapdrm kms re-write to use dispc directly rather than go thru
  omapdss.  (With omapdss we don't hit this issue because disabling
  overlays is forced to be synchronous.. so instead we have the
  performance problem I mentioned.)
 
  I *could* just rely on the GEM refcnt, but that gets messier when you
  take into account multi-planar formats.  I suppose I also could have
  my own internal refcnt'd object to hold the set of GEM objects
  associated w/ the fb, but, well, that seems a bit silly.  And
  refcnt'ing the fb had been mentioned previously as a good thing to do
  (I think it was danvet?)
 
  Sure, there are a few places in the code that have caused ordering
  issues in the past due to lack of refcnting the fb... But since you
  haven't fixed up those cases, I'm looking for justification for adding
  that extra bit of complexity. Adding a new interface and no users is
  just asking for trouble.
 
 hmm, I did realize that drm_plane cleanup only happens as a result of
 drm_framebuffer_cleanup().. which doesn't work too well if the driver
 is holding a ref to the fb :-/
 
 so I guess at a minimum I need to fix plane cleanup to be part of
 drm_fb_helper_restore_fbdev_mode()

Your patch would still significantly change the behavior of
drm_mode_rmfb(). Currently it disables all planes and crtcs which
currently use the fb, and it removes the fb id from the idr so that
no new users of the fb can appear afterwards.

Not that I really like the current behaviour of drm_mode_rmfb(), but
it's been like that always, so changing it doesn't seem acceptable.

-- 
Ville Syrjälä
Intel OTC
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] drm: refcnt drm_framebuffer

2012-08-01 Thread Rob Clark
On Wed, Aug 1, 2012 at 6:36 AM, Ville Syrjälä
ville.syrj...@linux.intel.com wrote:
 On Tue, Jul 31, 2012 at 02:28:29PM -0500, Rob Clark wrote:
 On Tue, Jul 31, 2012 at 12:47 PM, Chris Wilson ch...@chris-wilson.co.uk 
 wrote:
  On Tue, 31 Jul 2012 12:41:28 -0500, Rob Clark rob.cl...@linaro.org wrote:
  On Tue, Jul 31, 2012 at 12:00 PM, Chris Wilson ch...@chris-wilson.co.uk 
  wrote:
   On Tue, 31 Jul 2012 11:20:21 -0500, Rob Clark rob.cl...@linaro.org 
   wrote:
   From: Rob Clark r...@ti.com
  
   This simplifies drm fb lifetime, and if the crtc/plane needs to hold
   a ref to the fb when disabling a pipe until the next vblank, this
   avoids the need to make disabling an overlay synchronous.  This is a
   problem that shows up when userspace is using a drm plane to
   implement a hw cursor.. making overlay disable synchronous causes
   a performance problem when x11 is rapidly enabling/disabling the
   hw cursor.  But not making it synchronous opens up a race condition
   for crashing if userspace turns around and immediately deletes the
   fb.  Refcnt'ing the fb makes it possible to solve this problem.
  
   Presumably you have a follow-on patch putting the new refcnt to use so
   that we can judge whether you truly need refcnting on the fb itself in
   addition to the refcnted object and the various hw bookkeeping that
   needs to be performed?
 
  Yes, I do.. although it is a bit experimental at this point, so not
  really ready to be submitted as anything other than an RFC.. it is
  part of omapdrm kms re-write to use dispc directly rather than go thru
  omapdss.  (With omapdss we don't hit this issue because disabling
  overlays is forced to be synchronous.. so instead we have the
  performance problem I mentioned.)
 
  I *could* just rely on the GEM refcnt, but that gets messier when you
  take into account multi-planar formats.  I suppose I also could have
  my own internal refcnt'd object to hold the set of GEM objects
  associated w/ the fb, but, well, that seems a bit silly.  And
  refcnt'ing the fb had been mentioned previously as a good thing to do
  (I think it was danvet?)
 
  Sure, there are a few places in the code that have caused ordering
  issues in the past due to lack of refcnting the fb... But since you
  haven't fixed up those cases, I'm looking for justification for adding
  that extra bit of complexity. Adding a new interface and no users is
  just asking for trouble.

 hmm, I did realize that drm_plane cleanup only happens as a result of
 drm_framebuffer_cleanup().. which doesn't work too well if the driver
 is holding a ref to the fb :-/

 so I guess at a minimum I need to fix plane cleanup to be part of
 drm_fb_helper_restore_fbdev_mode()

 Your patch would still significantly change the behavior of
 drm_mode_rmfb(). Currently it disables all planes and crtcs which
 currently use the fb, and it removes the fb id from the idr so that
 no new users of the fb can appear afterwards.

 Not that I really like the current behaviour of drm_mode_rmfb(), but
 it's been like that always, so changing it doesn't seem acceptable.

yeah, I'm working on an update that decouples the crtc/plane shutdown
from deleting the fb, which should address these issues

BR,
-R

 --
 Ville Syrjälä
 Intel OTC
 --
 To unsubscribe from this list: send the line unsubscribe linux-omap in
 the body of a message to majord...@vger.kernel.org
 More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] drm: refcnt drm_framebuffer

2012-07-31 Thread Chris Wilson
On Tue, 31 Jul 2012 11:20:21 -0500, Rob Clark rob.cl...@linaro.org wrote:
 From: Rob Clark r...@ti.com
 
 This simplifies drm fb lifetime, and if the crtc/plane needs to hold
 a ref to the fb when disabling a pipe until the next vblank, this
 avoids the need to make disabling an overlay synchronous.  This is a
 problem that shows up when userspace is using a drm plane to
 implement a hw cursor.. making overlay disable synchronous causes
 a performance problem when x11 is rapidly enabling/disabling the
 hw cursor.  But not making it synchronous opens up a race condition
 for crashing if userspace turns around and immediately deletes the
 fb.  Refcnt'ing the fb makes it possible to solve this problem.

Presumably you have a follow-on patch putting the new refcnt to use so
that we can judge whether you truly need refcnting on the fb itself in
addition to the refcnted object and the various hw bookkeeping that
needs to be performed?
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] drm: refcnt drm_framebuffer

2012-07-31 Thread Rob Clark
On Tue, Jul 31, 2012 at 12:00 PM, Chris Wilson ch...@chris-wilson.co.uk wrote:
 On Tue, 31 Jul 2012 11:20:21 -0500, Rob Clark rob.cl...@linaro.org wrote:
 From: Rob Clark r...@ti.com

 This simplifies drm fb lifetime, and if the crtc/plane needs to hold
 a ref to the fb when disabling a pipe until the next vblank, this
 avoids the need to make disabling an overlay synchronous.  This is a
 problem that shows up when userspace is using a drm plane to
 implement a hw cursor.. making overlay disable synchronous causes
 a performance problem when x11 is rapidly enabling/disabling the
 hw cursor.  But not making it synchronous opens up a race condition
 for crashing if userspace turns around and immediately deletes the
 fb.  Refcnt'ing the fb makes it possible to solve this problem.

 Presumably you have a follow-on patch putting the new refcnt to use so
 that we can judge whether you truly need refcnting on the fb itself in
 addition to the refcnted object and the various hw bookkeeping that
 needs to be performed?

Yes, I do.. although it is a bit experimental at this point, so not
really ready to be submitted as anything other than an RFC.. it is
part of omapdrm kms re-write to use dispc directly rather than go thru
omapdss.  (With omapdss we don't hit this issue because disabling
overlays is forced to be synchronous.. so instead we have the
performance problem I mentioned.)

I *could* just rely on the GEM refcnt, but that gets messier when you
take into account multi-planar formats.  I suppose I also could have
my own internal refcnt'd object to hold the set of GEM objects
associated w/ the fb, but, well, that seems a bit silly.  And
refcnt'ing the fb had been mentioned previously as a good thing to do
(I think it was danvet?)

BR,
-R

 -Chris

 --
 Chris Wilson, Intel Open Source Technology Centre
 ___
 dri-devel mailing list
 dri-de...@lists.freedesktop.org
 http://lists.freedesktop.org/mailman/listinfo/dri-devel
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] drm: refcnt drm_framebuffer

2012-07-31 Thread Chris Wilson
On Tue, 31 Jul 2012 12:41:28 -0500, Rob Clark rob.cl...@linaro.org wrote:
 On Tue, Jul 31, 2012 at 12:00 PM, Chris Wilson ch...@chris-wilson.co.uk 
 wrote:
  On Tue, 31 Jul 2012 11:20:21 -0500, Rob Clark rob.cl...@linaro.org wrote:
  From: Rob Clark r...@ti.com
 
  This simplifies drm fb lifetime, and if the crtc/plane needs to hold
  a ref to the fb when disabling a pipe until the next vblank, this
  avoids the need to make disabling an overlay synchronous.  This is a
  problem that shows up when userspace is using a drm plane to
  implement a hw cursor.. making overlay disable synchronous causes
  a performance problem when x11 is rapidly enabling/disabling the
  hw cursor.  But not making it synchronous opens up a race condition
  for crashing if userspace turns around and immediately deletes the
  fb.  Refcnt'ing the fb makes it possible to solve this problem.
 
  Presumably you have a follow-on patch putting the new refcnt to use so
  that we can judge whether you truly need refcnting on the fb itself in
  addition to the refcnted object and the various hw bookkeeping that
  needs to be performed?
 
 Yes, I do.. although it is a bit experimental at this point, so not
 really ready to be submitted as anything other than an RFC.. it is
 part of omapdrm kms re-write to use dispc directly rather than go thru
 omapdss.  (With omapdss we don't hit this issue because disabling
 overlays is forced to be synchronous.. so instead we have the
 performance problem I mentioned.)
 
 I *could* just rely on the GEM refcnt, but that gets messier when you
 take into account multi-planar formats.  I suppose I also could have
 my own internal refcnt'd object to hold the set of GEM objects
 associated w/ the fb, but, well, that seems a bit silly.  And
 refcnt'ing the fb had been mentioned previously as a good thing to do
 (I think it was danvet?)

Sure, there are a few places in the code that have caused ordering
issues in the past due to lack of refcnting the fb... But since you
haven't fixed up those cases, I'm looking for justification for adding
that extra bit of complexity. Adding a new interface and no users is
just asking for trouble.
-Chris

-- 
Chris Wilson, Intel Open Source Technology Centre
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] drm: refcnt drm_framebuffer

2012-07-31 Thread Rob Clark
On Tue, Jul 31, 2012 at 12:47 PM, Chris Wilson ch...@chris-wilson.co.uk wrote:
 On Tue, 31 Jul 2012 12:41:28 -0500, Rob Clark rob.cl...@linaro.org wrote:
 On Tue, Jul 31, 2012 at 12:00 PM, Chris Wilson ch...@chris-wilson.co.uk 
 wrote:
  On Tue, 31 Jul 2012 11:20:21 -0500, Rob Clark rob.cl...@linaro.org wrote:
  From: Rob Clark r...@ti.com
 
  This simplifies drm fb lifetime, and if the crtc/plane needs to hold
  a ref to the fb when disabling a pipe until the next vblank, this
  avoids the need to make disabling an overlay synchronous.  This is a
  problem that shows up when userspace is using a drm plane to
  implement a hw cursor.. making overlay disable synchronous causes
  a performance problem when x11 is rapidly enabling/disabling the
  hw cursor.  But not making it synchronous opens up a race condition
  for crashing if userspace turns around and immediately deletes the
  fb.  Refcnt'ing the fb makes it possible to solve this problem.
 
  Presumably you have a follow-on patch putting the new refcnt to use so
  that we can judge whether you truly need refcnting on the fb itself in
  addition to the refcnted object and the various hw bookkeeping that
  needs to be performed?

 Yes, I do.. although it is a bit experimental at this point, so not
 really ready to be submitted as anything other than an RFC.. it is
 part of omapdrm kms re-write to use dispc directly rather than go thru
 omapdss.  (With omapdss we don't hit this issue because disabling
 overlays is forced to be synchronous.. so instead we have the
 performance problem I mentioned.)

 I *could* just rely on the GEM refcnt, but that gets messier when you
 take into account multi-planar formats.  I suppose I also could have
 my own internal refcnt'd object to hold the set of GEM objects
 associated w/ the fb, but, well, that seems a bit silly.  And
 refcnt'ing the fb had been mentioned previously as a good thing to do
 (I think it was danvet?)

 Sure, there are a few places in the code that have caused ordering
 issues in the past due to lack of refcnting the fb... But since you
 haven't fixed up those cases, I'm looking for justification for adding
 that extra bit of complexity. Adding a new interface and no users is
 just asking for trouble.

fwiw, my line of reasoning was: from userspace perspective, once you
do drm_mode_rmfb(), the fb is gone, so I didn't change where it gets
removed from the list of fb's or anything like that.  Instead I just
left it so that a driver could, if it wants, take an extra ref
temporarily to the fb to keep it around for a bit.  I didn't change
any of the existing drivers, other than update the to call
drm_framebuffer_unreference() instead of fb-funcs-delete() directly,
because I didn't want to break anything in existing drivers, and I
figured the new behavior was better as an opt-in by individual drivers
when they want to take advantage of refcnt'ing.  But if you have
suggestions about related cleanups that should be made, I'm willing to
take that on.

Anyways, like I mentioned, I'm still a little ways from being ready to
submit anything other than RFC patches in omapdrm to use fb
refcnt'ing, so this isn't something that needs to be merged
immediately.  But it seemed like low risk and like it would be
something that other drivers could take advantage of, so I figured it
was worth sending this patch now.

BR,
-R

 -Chris

 --
 Chris Wilson, Intel Open Source Technology Centre
 --
 To unsubscribe from this list: send the line unsubscribe linux-omap in
 the body of a message to majord...@vger.kernel.org
 More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] drm: refcnt drm_framebuffer

2012-07-31 Thread Rob Clark
On Tue, Jul 31, 2012 at 12:47 PM, Chris Wilson ch...@chris-wilson.co.uk wrote:
 On Tue, 31 Jul 2012 12:41:28 -0500, Rob Clark rob.cl...@linaro.org wrote:
 On Tue, Jul 31, 2012 at 12:00 PM, Chris Wilson ch...@chris-wilson.co.uk 
 wrote:
  On Tue, 31 Jul 2012 11:20:21 -0500, Rob Clark rob.cl...@linaro.org wrote:
  From: Rob Clark r...@ti.com
 
  This simplifies drm fb lifetime, and if the crtc/plane needs to hold
  a ref to the fb when disabling a pipe until the next vblank, this
  avoids the need to make disabling an overlay synchronous.  This is a
  problem that shows up when userspace is using a drm plane to
  implement a hw cursor.. making overlay disable synchronous causes
  a performance problem when x11 is rapidly enabling/disabling the
  hw cursor.  But not making it synchronous opens up a race condition
  for crashing if userspace turns around and immediately deletes the
  fb.  Refcnt'ing the fb makes it possible to solve this problem.
 
  Presumably you have a follow-on patch putting the new refcnt to use so
  that we can judge whether you truly need refcnting on the fb itself in
  addition to the refcnted object and the various hw bookkeeping that
  needs to be performed?

 Yes, I do.. although it is a bit experimental at this point, so not
 really ready to be submitted as anything other than an RFC.. it is
 part of omapdrm kms re-write to use dispc directly rather than go thru
 omapdss.  (With omapdss we don't hit this issue because disabling
 overlays is forced to be synchronous.. so instead we have the
 performance problem I mentioned.)

 I *could* just rely on the GEM refcnt, but that gets messier when you
 take into account multi-planar formats.  I suppose I also could have
 my own internal refcnt'd object to hold the set of GEM objects
 associated w/ the fb, but, well, that seems a bit silly.  And
 refcnt'ing the fb had been mentioned previously as a good thing to do
 (I think it was danvet?)

 Sure, there are a few places in the code that have caused ordering
 issues in the past due to lack of refcnting the fb... But since you
 haven't fixed up those cases, I'm looking for justification for adding
 that extra bit of complexity. Adding a new interface and no users is
 just asking for trouble.

hmm, I did realize that drm_plane cleanup only happens as a result of
drm_framebuffer_cleanup().. which doesn't work too well if the driver
is holding a ref to the fb :-/

so I guess at a minimum I need to fix plane cleanup to be part of
drm_fb_helper_restore_fbdev_mode()

BR,
-R

 -Chris

 --
 Chris Wilson, Intel Open Source Technology Centre
 --
 To unsubscribe from this list: send the line unsubscribe linux-omap in
 the body of a message to majord...@vger.kernel.org
 More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html