diff mbox series

[v2,2/2] drm/komeda: Adds komeda_kms_drop_master

Message ID 1560251589-31827-3-git-send-email-lowry.li@arm.com (mailing list archive)
State New, archived
Headers show
Series Adds slave pipeline support | expand

Commit Message

Lowry Li (Arm Technology China) June 11, 2019, 11:13 a.m. UTC
From: "Lowry Li (Arm Technology China)" <Lowry.Li@arm.com>

The komeda internal resources (pipelines) are shared between crtcs,
and resources release by disable_crtc. This commit is working for once
user forgot disabling crtc like app quit abnomally, and then the
resources can not be used by another crtc. Adds drop_master to
shutdown the device and make sure all the komeda resources have been
released and can be used for the next usage.

Signed-off-by: Lowry Li (Arm Technology China) <lowry.li@arm.com>
---
 drivers/gpu/drm/arm/display/komeda/komeda_kms.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

Comments

Daniel Vetter June 11, 2019, 12:30 p.m. UTC | #1
On Tue, Jun 11, 2019 at 11:13:45AM +0000, Lowry Li (Arm Technology China) wrote:
> From: "Lowry Li (Arm Technology China)" <Lowry.Li@arm.com>
> 
> The komeda internal resources (pipelines) are shared between crtcs,
> and resources release by disable_crtc. This commit is working for once
> user forgot disabling crtc like app quit abnomally, and then the
> resources can not be used by another crtc. Adds drop_master to
> shutdown the device and make sure all the komeda resources have been
> released and can be used for the next usage.
> 
> Signed-off-by: Lowry Li (Arm Technology China) <lowry.li@arm.com>
> ---
>  drivers/gpu/drm/arm/display/komeda/komeda_kms.c | 13 +++++++++++++
>  1 file changed, 13 insertions(+)
> 
> diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> index 8543860..647bce5 100644
> --- a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> +++ b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> @@ -54,11 +54,24 @@ static irqreturn_t komeda_kms_irq_handler(int irq, void *data)
>  	return status;
>  }
>  
> +/* Komeda internal resources (pipelines) are shared between crtcs, and resources
> + * are released by disable_crtc. But if user forget disabling crtc like app quit
> + * abnormally, the resources can not be used by another crtc.
> + * Use drop_master to shutdown the device and make sure all the komeda resources
> + * have been released, and can be used for the next usage.
> + */

No. If we want this, we need to implement this across drivers, not with
per-vendor hacks.

The kerneldoc should have been a solid hint: "Only used by vmwgfx."
-Daniel

> +static void komeda_kms_drop_master(struct drm_device *dev,
> +				   struct drm_file *file_priv)
> +{
> +	drm_atomic_helper_shutdown(dev);
> +}
> +
>  static struct drm_driver komeda_kms_driver = {
>  	.driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC |
>  			   DRIVER_PRIME | DRIVER_HAVE_IRQ,
>  	.lastclose			= drm_fb_helper_lastclose,
>  	.irq_handler			= komeda_kms_irq_handler,
> +	.master_drop			= komeda_kms_drop_master,
>  	.gem_free_object_unlocked	= drm_gem_cma_free_object,
>  	.gem_vm_ops			= &drm_gem_cma_vm_ops,
>  	.dumb_create			= komeda_gem_cma_dumb_create,
> -- 
> 1.9.1
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
James Qian Wang June 12, 2019, 2:26 a.m. UTC | #2
On Tue, Jun 11, 2019 at 02:30:38PM +0200, Daniel Vetter wrote:
> On Tue, Jun 11, 2019 at 11:13:45AM +0000, Lowry Li (Arm Technology China) wrote:
> > From: "Lowry Li (Arm Technology China)" <Lowry.Li@arm.com>
> >
> > The komeda internal resources (pipelines) are shared between crtcs,
> > and resources release by disable_crtc. This commit is working for once
> > user forgot disabling crtc like app quit abnomally, and then the
> > resources can not be used by another crtc. Adds drop_master to
> > shutdown the device and make sure all the komeda resources have been
> > released and can be used for the next usage.
> >
> > Signed-off-by: Lowry Li (Arm Technology China) <lowry.li@arm.com>
> > ---
> >  drivers/gpu/drm/arm/display/komeda/komeda_kms.c | 13 +++++++++++++
> >  1 file changed, 13 insertions(+)
> >
> > diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> > index 8543860..647bce5 100644
> > --- a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> > +++ b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> > @@ -54,11 +54,24 @@ static irqreturn_t komeda_kms_irq_handler(int irq, void *data)
> >  return status;
> >  }
> >
> > +/* Komeda internal resources (pipelines) are shared between crtcs, and resources
> > + * are released by disable_crtc. But if user forget disabling crtc like app quit
> > + * abnormally, the resources can not be used by another crtc.
> > + * Use drop_master to shutdown the device and make sure all the komeda resources
> > + * have been released, and can be used for the next usage.
> > + */
>
> No. If we want this, we need to implement this across drivers, not with
> per-vendor hacks.
>
> The kerneldoc should have been a solid hint: "Only used by vmwgfx."
> -Daniel

Hi Daniel:
This drop_master is really what we want, can we update the doc and
add komeda as a user of this hacks like "used by vmwfgx and komeda",
or maybe directly promote this per-vendor hacks as an optional chip
function ?

James

> > +static void komeda_kms_drop_master(struct drm_device *dev,
> > +   struct drm_file *file_priv)
> > +{
> > +drm_atomic_helper_shutdown(dev);
> > +}
> > +
> >  static struct drm_driver komeda_kms_driver = {
> >  .driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC |
> >     DRIVER_PRIME | DRIVER_HAVE_IRQ,
> >  .lastclose= drm_fb_helper_lastclose,
> >  .irq_handler= komeda_kms_irq_handler,
> > +.master_drop= komeda_kms_drop_master,
> >  .gem_free_object_unlocked= drm_gem_cma_free_object,
> >  .gem_vm_ops= &drm_gem_cma_vm_ops,
> >  .dumb_create= komeda_gem_cma_dumb_create,
> > --
> > 1.9.1
> >
> > _______________________________________________
> > dri-devel mailing list
> > dri-devel@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/dri-devel
>
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> http://blog.ffwll.ch
IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
Daniel Vetter June 13, 2019, 8:17 a.m. UTC | #3
On Wed, Jun 12, 2019 at 02:26:24AM +0000, james qian wang (Arm Technology China) wrote:
> On Tue, Jun 11, 2019 at 02:30:38PM +0200, Daniel Vetter wrote:
> > On Tue, Jun 11, 2019 at 11:13:45AM +0000, Lowry Li (Arm Technology China) wrote:
> > > From: "Lowry Li (Arm Technology China)" <Lowry.Li@arm.com>
> > >
> > > The komeda internal resources (pipelines) are shared between crtcs,
> > > and resources release by disable_crtc. This commit is working for once
> > > user forgot disabling crtc like app quit abnomally, and then the
> > > resources can not be used by another crtc. Adds drop_master to
> > > shutdown the device and make sure all the komeda resources have been
> > > released and can be used for the next usage.
> > >
> > > Signed-off-by: Lowry Li (Arm Technology China) <lowry.li@arm.com>
> > > ---
> > >  drivers/gpu/drm/arm/display/komeda/komeda_kms.c | 13 +++++++++++++
> > >  1 file changed, 13 insertions(+)
> > >
> > > diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> > > index 8543860..647bce5 100644
> > > --- a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> > > +++ b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> > > @@ -54,11 +54,24 @@ static irqreturn_t komeda_kms_irq_handler(int irq, void *data)
> > >  return status;
> > >  }
> > >
> > > +/* Komeda internal resources (pipelines) are shared between crtcs, and resources
> > > + * are released by disable_crtc. But if user forget disabling crtc like app quit
> > > + * abnormally, the resources can not be used by another crtc.
> > > + * Use drop_master to shutdown the device and make sure all the komeda resources
> > > + * have been released, and can be used for the next usage.
> > > + */
> >
> > No. If we want this, we need to implement this across drivers, not with
> > per-vendor hacks.
> >
> > The kerneldoc should have been a solid hint: "Only used by vmwgfx."
> > -Daniel
> 
> Hi Daniel:
> This drop_master is really what we want, can we update the doc and
> add komeda as a user of this hacks like "used by vmwfgx and komeda",
> or maybe directly promote this per-vendor hacks as an optional chip
> function ?

Still no, because it would mean different behaviour for arm/komeda
compared to everyone else. And we really don't want this, because this
would completely break flicker-less vt-switching.

Currently the only fallback for this case is the lastclose handler, which
atm just restores fbcon/fbdev. If you want to change/extend that to work
without fbdev, then that's the place to do the change. And across _all_
drm kms drivers, so that we have consistent behaviour.

kms is a cross-vendor api, vendor hacks are very, very much not cool.
-Daniel

> 
> James
> 
> > > +static void komeda_kms_drop_master(struct drm_device *dev,
> > > +   struct drm_file *file_priv)
> > > +{
> > > +drm_atomic_helper_shutdown(dev);
> > > +}
> > > +
> > >  static struct drm_driver komeda_kms_driver = {
> > >  .driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC |
> > >     DRIVER_PRIME | DRIVER_HAVE_IRQ,
> > >  .lastclose= drm_fb_helper_lastclose,
> > >  .irq_handler= komeda_kms_irq_handler,
> > > +.master_drop= komeda_kms_drop_master,
> > >  .gem_free_object_unlocked= drm_gem_cma_free_object,
> > >  .gem_vm_ops= &drm_gem_cma_vm_ops,
> > >  .dumb_create= komeda_gem_cma_dumb_create,
> > > --
> > > 1.9.1
> > >
> > > _______________________________________________
> > > dri-devel mailing list
> > > dri-devel@lists.freedesktop.org
> > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> >
> > --
> > Daniel Vetter
> > Software Engineer, Intel Corporation
> > http://blog.ffwll.ch
> IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
Liviu Dudau June 13, 2019, 8:28 a.m. UTC | #4
On Thu, Jun 13, 2019 at 10:17:27AM +0200, Daniel Vetter wrote:
> On Wed, Jun 12, 2019 at 02:26:24AM +0000, james qian wang (Arm Technology China) wrote:
> > On Tue, Jun 11, 2019 at 02:30:38PM +0200, Daniel Vetter wrote:
> > > On Tue, Jun 11, 2019 at 11:13:45AM +0000, Lowry Li (Arm Technology China) wrote:
> > > > From: "Lowry Li (Arm Technology China)" <Lowry.Li@arm.com>
> > > >
> > > > The komeda internal resources (pipelines) are shared between crtcs,
> > > > and resources release by disable_crtc. This commit is working for once
> > > > user forgot disabling crtc like app quit abnomally, and then the
> > > > resources can not be used by another crtc. Adds drop_master to
> > > > shutdown the device and make sure all the komeda resources have been
> > > > released and can be used for the next usage.
> > > >
> > > > Signed-off-by: Lowry Li (Arm Technology China) <lowry.li@arm.com>
> > > > ---
> > > >  drivers/gpu/drm/arm/display/komeda/komeda_kms.c | 13 +++++++++++++
> > > >  1 file changed, 13 insertions(+)
> > > >
> > > > diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> > > > index 8543860..647bce5 100644
> > > > --- a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> > > > +++ b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> > > > @@ -54,11 +54,24 @@ static irqreturn_t komeda_kms_irq_handler(int irq, void *data)
> > > >  return status;
> > > >  }
> > > >
> > > > +/* Komeda internal resources (pipelines) are shared between crtcs, and resources
> > > > + * are released by disable_crtc. But if user forget disabling crtc like app quit
> > > > + * abnormally, the resources can not be used by another crtc.
> > > > + * Use drop_master to shutdown the device and make sure all the komeda resources
> > > > + * have been released, and can be used for the next usage.
> > > > + */
> > >
> > > No. If we want this, we need to implement this across drivers, not with
> > > per-vendor hacks.
> > >
> > > The kerneldoc should have been a solid hint: "Only used by vmwgfx."
> > > -Daniel
> > 
> > Hi Daniel:
> > This drop_master is really what we want, can we update the doc and
> > add komeda as a user of this hacks like "used by vmwfgx and komeda",
> > or maybe directly promote this per-vendor hacks as an optional chip
> > function ?
> 
> Still no, because it would mean different behaviour for arm/komeda
> compared to everyone else. And we really don't want this, because this
> would completely break flicker-less vt-switching.
> 
> Currently the only fallback for this case is the lastclose handler, which
> atm just restores fbcon/fbdev. If you want to change/extend that to work
> without fbdev, then that's the place to do the change. And across _all_
> drm kms drivers, so that we have consistent behaviour.

Slightly unrelated, just thinking of a solution and wanted confirmation/double
checking: can a CRTC be instantiated without any planes (or without a primary
plane)?

Best regards,
Liviu

> 
> kms is a cross-vendor api, vendor hacks are very, very much not cool.
> -Daniel
> 
> > 
> > James
> > 
> > > > +static void komeda_kms_drop_master(struct drm_device *dev,
> > > > +   struct drm_file *file_priv)
> > > > +{
> > > > +drm_atomic_helper_shutdown(dev);
> > > > +}
> > > > +
> > > >  static struct drm_driver komeda_kms_driver = {
> > > >  .driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC |
> > > >     DRIVER_PRIME | DRIVER_HAVE_IRQ,
> > > >  .lastclose= drm_fb_helper_lastclose,
> > > >  .irq_handler= komeda_kms_irq_handler,
> > > > +.master_drop= komeda_kms_drop_master,
> > > >  .gem_free_object_unlocked= drm_gem_cma_free_object,
> > > >  .gem_vm_ops= &drm_gem_cma_vm_ops,
> > > >  .dumb_create= komeda_gem_cma_dumb_create,
> > > > --
> > > > 1.9.1
> > > >
> > > > _______________________________________________
> > > > dri-devel mailing list
> > > > dri-devel@lists.freedesktop.org
> > > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> > >
> > > --
> > > Daniel Vetter
> > > Software Engineer, Intel Corporation
> > > http://blog.ffwll.ch
> > IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
> > _______________________________________________
> > dri-devel mailing list
> > dri-devel@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> 
> -- 
> Daniel Vetter
> Software Engineer, Intel Corporation
> http://blog.ffwll.ch
Daniel Vetter June 13, 2019, 9:08 a.m. UTC | #5
On Thu, Jun 13, 2019 at 09:28:13AM +0100, Liviu Dudau wrote:
> On Thu, Jun 13, 2019 at 10:17:27AM +0200, Daniel Vetter wrote:
> > On Wed, Jun 12, 2019 at 02:26:24AM +0000, james qian wang (Arm Technology China) wrote:
> > > On Tue, Jun 11, 2019 at 02:30:38PM +0200, Daniel Vetter wrote:
> > > > On Tue, Jun 11, 2019 at 11:13:45AM +0000, Lowry Li (Arm Technology China) wrote:
> > > > > From: "Lowry Li (Arm Technology China)" <Lowry.Li@arm.com>
> > > > >
> > > > > The komeda internal resources (pipelines) are shared between crtcs,
> > > > > and resources release by disable_crtc. This commit is working for once
> > > > > user forgot disabling crtc like app quit abnomally, and then the
> > > > > resources can not be used by another crtc. Adds drop_master to
> > > > > shutdown the device and make sure all the komeda resources have been
> > > > > released and can be used for the next usage.
> > > > >
> > > > > Signed-off-by: Lowry Li (Arm Technology China) <lowry.li@arm.com>
> > > > > ---
> > > > >  drivers/gpu/drm/arm/display/komeda/komeda_kms.c | 13 +++++++++++++
> > > > >  1 file changed, 13 insertions(+)
> > > > >
> > > > > diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> > > > > index 8543860..647bce5 100644
> > > > > --- a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> > > > > +++ b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> > > > > @@ -54,11 +54,24 @@ static irqreturn_t komeda_kms_irq_handler(int irq, void *data)
> > > > >  return status;
> > > > >  }
> > > > >
> > > > > +/* Komeda internal resources (pipelines) are shared between crtcs, and resources
> > > > > + * are released by disable_crtc. But if user forget disabling crtc like app quit
> > > > > + * abnormally, the resources can not be used by another crtc.
> > > > > + * Use drop_master to shutdown the device and make sure all the komeda resources
> > > > > + * have been released, and can be used for the next usage.
> > > > > + */
> > > >
> > > > No. If we want this, we need to implement this across drivers, not with
> > > > per-vendor hacks.
> > > >
> > > > The kerneldoc should have been a solid hint: "Only used by vmwgfx."
> > > > -Daniel
> > > 
> > > Hi Daniel:
> > > This drop_master is really what we want, can we update the doc and
> > > add komeda as a user of this hacks like "used by vmwfgx and komeda",
> > > or maybe directly promote this per-vendor hacks as an optional chip
> > > function ?
> > 
> > Still no, because it would mean different behaviour for arm/komeda
> > compared to everyone else. And we really don't want this, because this
> > would completely break flicker-less vt-switching.
> > 
> > Currently the only fallback for this case is the lastclose handler, which
> > atm just restores fbcon/fbdev. If you want to change/extend that to work
> > without fbdev, then that's the place to do the change. And across _all_
> > drm kms drivers, so that we have consistent behaviour.
> 
> Slightly unrelated, just thinking of a solution and wanted confirmation/double
> checking: can a CRTC be instantiated without any planes (or without a primary
> plane)?

Without a primary plane maybe not so recommended, because it would break
all the legacy userspace. Might even result in some oopses, not sure we
check for crtc->primary != NULL.

I'm not sure what you mean about instantiating it without any plane at
all. That would be rather useless.
-Daniel

> 
> Best regards,
> Liviu
> 
> > 
> > kms is a cross-vendor api, vendor hacks are very, very much not cool.
> > -Daniel
> > 
> > > 
> > > James
> > > 
> > > > > +static void komeda_kms_drop_master(struct drm_device *dev,
> > > > > +   struct drm_file *file_priv)
> > > > > +{
> > > > > +drm_atomic_helper_shutdown(dev);
> > > > > +}
> > > > > +
> > > > >  static struct drm_driver komeda_kms_driver = {
> > > > >  .driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC |
> > > > >     DRIVER_PRIME | DRIVER_HAVE_IRQ,
> > > > >  .lastclose= drm_fb_helper_lastclose,
> > > > >  .irq_handler= komeda_kms_irq_handler,
> > > > > +.master_drop= komeda_kms_drop_master,
> > > > >  .gem_free_object_unlocked= drm_gem_cma_free_object,
> > > > >  .gem_vm_ops= &drm_gem_cma_vm_ops,
> > > > >  .dumb_create= komeda_gem_cma_dumb_create,
> > > > > --
> > > > > 1.9.1
> > > > >
> > > > > _______________________________________________
> > > > > dri-devel mailing list
> > > > > dri-devel@lists.freedesktop.org
> > > > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> > > >
> > > > --
> > > > Daniel Vetter
> > > > Software Engineer, Intel Corporation
> > > > http://blog.ffwll.ch
> > > IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
> > > _______________________________________________
> > > dri-devel mailing list
> > > dri-devel@lists.freedesktop.org
> > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> > 
> > -- 
> > Daniel Vetter
> > Software Engineer, Intel Corporation
> > http://blog.ffwll.ch
> 
> -- 
> ====================
> | I would like to |
> | fix the world,  |
> | but they're not |
> | giving me the   |
>  \ source code!  /
>   ---------------
>     ¯\_(ツ)_/¯
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
Liviu Dudau June 13, 2019, 1:24 p.m. UTC | #6
On Thu, Jun 13, 2019 at 11:08:14AM +0200, Daniel Vetter wrote:
> On Thu, Jun 13, 2019 at 09:28:13AM +0100, Liviu Dudau wrote:
> > On Thu, Jun 13, 2019 at 10:17:27AM +0200, Daniel Vetter wrote:
> > > On Wed, Jun 12, 2019 at 02:26:24AM +0000, james qian wang (Arm Technology China) wrote:
> > > > On Tue, Jun 11, 2019 at 02:30:38PM +0200, Daniel Vetter wrote:
> > > > > On Tue, Jun 11, 2019 at 11:13:45AM +0000, Lowry Li (Arm Technology China) wrote:
> > > > > > From: "Lowry Li (Arm Technology China)" <Lowry.Li@arm.com>
> > > > > >
> > > > > > The komeda internal resources (pipelines) are shared between crtcs,
> > > > > > and resources release by disable_crtc. This commit is working for once
> > > > > > user forgot disabling crtc like app quit abnomally, and then the
> > > > > > resources can not be used by another crtc. Adds drop_master to
> > > > > > shutdown the device and make sure all the komeda resources have been
> > > > > > released and can be used for the next usage.
> > > > > >
> > > > > > Signed-off-by: Lowry Li (Arm Technology China) <lowry.li@arm.com>
> > > > > > ---
> > > > > >  drivers/gpu/drm/arm/display/komeda/komeda_kms.c | 13 +++++++++++++
> > > > > >  1 file changed, 13 insertions(+)
> > > > > >
> > > > > > diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> > > > > > index 8543860..647bce5 100644
> > > > > > --- a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> > > > > > +++ b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> > > > > > @@ -54,11 +54,24 @@ static irqreturn_t komeda_kms_irq_handler(int irq, void *data)
> > > > > >  return status;
> > > > > >  }
> > > > > >
> > > > > > +/* Komeda internal resources (pipelines) are shared between crtcs, and resources
> > > > > > + * are released by disable_crtc. But if user forget disabling crtc like app quit
> > > > > > + * abnormally, the resources can not be used by another crtc.
> > > > > > + * Use drop_master to shutdown the device and make sure all the komeda resources
> > > > > > + * have been released, and can be used for the next usage.
> > > > > > + */
> > > > >
> > > > > No. If we want this, we need to implement this across drivers, not with
> > > > > per-vendor hacks.
> > > > >
> > > > > The kerneldoc should have been a solid hint: "Only used by vmwgfx."
> > > > > -Daniel
> > > > 
> > > > Hi Daniel:
> > > > This drop_master is really what we want, can we update the doc and
> > > > add komeda as a user of this hacks like "used by vmwfgx and komeda",
> > > > or maybe directly promote this per-vendor hacks as an optional chip
> > > > function ?
> > > 
> > > Still no, because it would mean different behaviour for arm/komeda
> > > compared to everyone else. And we really don't want this, because this
> > > would completely break flicker-less vt-switching.
> > > 
> > > Currently the only fallback for this case is the lastclose handler, which
> > > atm just restores fbcon/fbdev. If you want to change/extend that to work
> > > without fbdev, then that's the place to do the change. And across _all_
> > > drm kms drivers, so that we have consistent behaviour.
> > 
> > Slightly unrelated, just thinking of a solution and wanted confirmation/double
> > checking: can a CRTC be instantiated without any planes (or without a primary
> > plane)?
> 
> Without a primary plane maybe not so recommended, because it would break
> all the legacy userspace. Might even result in some oopses, not sure we
> check for crtc->primary != NULL.
> 
> I'm not sure what you mean about instantiating it without any plane at
> all. That would be rather useless.

Agree, and I think I have one way of solving the scenario Lowry and James are
trying to cover. Basically, komeda has 2 pipelines that are exposed as 2 crtcs.
However, layers (planes in DRM) can be associated with any of the pipelines and
it is possible to have a DRM master open up crtc0 and enable all possible planes,
which would leave crtc1 with no available layer to use (but technically still visible to
userspace, as it has been drm_crtc_init-ed. James and Lowry are trying to give
another master a chance of enabling crtc1 if previous master drops the
ownership of crtc0 without disabling it. So one solution I'm thinking of is to
tie one of the layers/planes to crtc1 regardless if that pipeline is enabled or
not.

Alternatively, we need a more generic solution for re-allocating resources
between CRTCs that might be enabled at different times. Ideas on how userspace
should handle it first are welcome as well.

Best regards,
Liviu

> -Daniel
> 
> > 
> > Best regards,
> > Liviu
> > 
> > > 
> > > kms is a cross-vendor api, vendor hacks are very, very much not cool.
> > > -Daniel
> > > 
> > > > 
> > > > James
> > > > 
> > > > > > +static void komeda_kms_drop_master(struct drm_device *dev,
> > > > > > +   struct drm_file *file_priv)
> > > > > > +{
> > > > > > +drm_atomic_helper_shutdown(dev);
> > > > > > +}
> > > > > > +
> > > > > >  static struct drm_driver komeda_kms_driver = {
> > > > > >  .driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC |
> > > > > >     DRIVER_PRIME | DRIVER_HAVE_IRQ,
> > > > > >  .lastclose= drm_fb_helper_lastclose,
> > > > > >  .irq_handler= komeda_kms_irq_handler,
> > > > > > +.master_drop= komeda_kms_drop_master,
> > > > > >  .gem_free_object_unlocked= drm_gem_cma_free_object,
> > > > > >  .gem_vm_ops= &drm_gem_cma_vm_ops,
> > > > > >  .dumb_create= komeda_gem_cma_dumb_create,
> > > > > > --
> > > > > > 1.9.1
> > > > > >
> > > > > > _______________________________________________
> > > > > > dri-devel mailing list
> > > > > > dri-devel@lists.freedesktop.org
> > > > > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> > > > >
> > > > > --
> > > > > Daniel Vetter
> > > > > Software Engineer, Intel Corporation
> > > > > http://blog.ffwll.ch
> > > > IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
> > > > _______________________________________________
> > > > dri-devel mailing list
> > > > dri-devel@lists.freedesktop.org
> > > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> > > 
> > > -- 
> > > Daniel Vetter
> > > Software Engineer, Intel Corporation
> > > http://blog.ffwll.ch
> > 
> > -- 
> > ====================
> > | I would like to |
> > | fix the world,  |
> > | but they're not |
> > | giving me the   |
> >  \ source code!  /
> >   ---------------
> >     ¯\_(ツ)_/¯
> > _______________________________________________
> > dri-devel mailing list
> > dri-devel@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> 
> -- 
> Daniel Vetter
> Software Engineer, Intel Corporation
> http://blog.ffwll.ch
Daniel Vetter June 13, 2019, 2:30 p.m. UTC | #7
On Thu, Jun 13, 2019 at 02:24:37PM +0100, Liviu Dudau wrote:
> On Thu, Jun 13, 2019 at 11:08:14AM +0200, Daniel Vetter wrote:
> > On Thu, Jun 13, 2019 at 09:28:13AM +0100, Liviu Dudau wrote:
> > > On Thu, Jun 13, 2019 at 10:17:27AM +0200, Daniel Vetter wrote:
> > > > On Wed, Jun 12, 2019 at 02:26:24AM +0000, james qian wang (Arm Technology China) wrote:
> > > > > On Tue, Jun 11, 2019 at 02:30:38PM +0200, Daniel Vetter wrote:
> > > > > > On Tue, Jun 11, 2019 at 11:13:45AM +0000, Lowry Li (Arm Technology China) wrote:
> > > > > > > From: "Lowry Li (Arm Technology China)" <Lowry.Li@arm.com>
> > > > > > >
> > > > > > > The komeda internal resources (pipelines) are shared between crtcs,
> > > > > > > and resources release by disable_crtc. This commit is working for once
> > > > > > > user forgot disabling crtc like app quit abnomally, and then the
> > > > > > > resources can not be used by another crtc. Adds drop_master to
> > > > > > > shutdown the device and make sure all the komeda resources have been
> > > > > > > released and can be used for the next usage.
> > > > > > >
> > > > > > > Signed-off-by: Lowry Li (Arm Technology China) <lowry.li@arm.com>
> > > > > > > ---
> > > > > > >  drivers/gpu/drm/arm/display/komeda/komeda_kms.c | 13 +++++++++++++
> > > > > > >  1 file changed, 13 insertions(+)
> > > > > > >
> > > > > > > diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> > > > > > > index 8543860..647bce5 100644
> > > > > > > --- a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> > > > > > > +++ b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> > > > > > > @@ -54,11 +54,24 @@ static irqreturn_t komeda_kms_irq_handler(int irq, void *data)
> > > > > > >  return status;
> > > > > > >  }
> > > > > > >
> > > > > > > +/* Komeda internal resources (pipelines) are shared between crtcs, and resources
> > > > > > > + * are released by disable_crtc. But if user forget disabling crtc like app quit
> > > > > > > + * abnormally, the resources can not be used by another crtc.
> > > > > > > + * Use drop_master to shutdown the device and make sure all the komeda resources
> > > > > > > + * have been released, and can be used for the next usage.
> > > > > > > + */
> > > > > >
> > > > > > No. If we want this, we need to implement this across drivers, not with
> > > > > > per-vendor hacks.
> > > > > >
> > > > > > The kerneldoc should have been a solid hint: "Only used by vmwgfx."
> > > > > > -Daniel
> > > > > 
> > > > > Hi Daniel:
> > > > > This drop_master is really what we want, can we update the doc and
> > > > > add komeda as a user of this hacks like "used by vmwfgx and komeda",
> > > > > or maybe directly promote this per-vendor hacks as an optional chip
> > > > > function ?
> > > > 
> > > > Still no, because it would mean different behaviour for arm/komeda
> > > > compared to everyone else. And we really don't want this, because this
> > > > would completely break flicker-less vt-switching.
> > > > 
> > > > Currently the only fallback for this case is the lastclose handler, which
> > > > atm just restores fbcon/fbdev. If you want to change/extend that to work
> > > > without fbdev, then that's the place to do the change. And across _all_
> > > > drm kms drivers, so that we have consistent behaviour.
> > > 
> > > Slightly unrelated, just thinking of a solution and wanted confirmation/double
> > > checking: can a CRTC be instantiated without any planes (or without a primary
> > > plane)?
> > 
> > Without a primary plane maybe not so recommended, because it would break
> > all the legacy userspace. Might even result in some oopses, not sure we
> > check for crtc->primary != NULL.
> > 
> > I'm not sure what you mean about instantiating it without any plane at
> > all. That would be rather useless.
> 
> Agree, and I think I have one way of solving the scenario Lowry and James are
> trying to cover. Basically, komeda has 2 pipelines that are exposed as 2 crtcs.
> However, layers (planes in DRM) can be associated with any of the pipelines and
> it is possible to have a DRM master open up crtc0 and enable all possible planes,
> which would leave crtc1 with no available layer to use (but technically still visible to
> userspace, as it has been drm_crtc_init-ed. James and Lowry are trying to give
> another master a chance of enabling crtc1 if previous master drops the
> ownership of crtc0 without disabling it. So one solution I'm thinking of is to
> tie one of the layers/planes to crtc1 regardless if that pipeline is enabled or
> not.
> 
> Alternatively, we need a more generic solution for re-allocating resources
> between CRTCs that might be enabled at different times. Ideas on how userspace
> should handle it first are welcome as well.

Uh, you can't have more than one active master. And that other master
needs to clean up the mess left behind by the previous one. Generally that
means disabling all the planes, like e.g. fbdev emulation does (but
there's a lot more we should probably clean up, current code is kinda just
good enough).

If you want multiple concurrent masters on the same hw, then you need drm
leases, and there you can limit the leases to however many planes you
think they need.
-Daniel

> 
> Best regards,
> Liviu
> 
> > -Daniel
> > 
> > > 
> > > Best regards,
> > > Liviu
> > > 
> > > > 
> > > > kms is a cross-vendor api, vendor hacks are very, very much not cool.
> > > > -Daniel
> > > > 
> > > > > 
> > > > > James
> > > > > 
> > > > > > > +static void komeda_kms_drop_master(struct drm_device *dev,
> > > > > > > +   struct drm_file *file_priv)
> > > > > > > +{
> > > > > > > +drm_atomic_helper_shutdown(dev);
> > > > > > > +}
> > > > > > > +
> > > > > > >  static struct drm_driver komeda_kms_driver = {
> > > > > > >  .driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC |
> > > > > > >     DRIVER_PRIME | DRIVER_HAVE_IRQ,
> > > > > > >  .lastclose= drm_fb_helper_lastclose,
> > > > > > >  .irq_handler= komeda_kms_irq_handler,
> > > > > > > +.master_drop= komeda_kms_drop_master,
> > > > > > >  .gem_free_object_unlocked= drm_gem_cma_free_object,
> > > > > > >  .gem_vm_ops= &drm_gem_cma_vm_ops,
> > > > > > >  .dumb_create= komeda_gem_cma_dumb_create,
> > > > > > > --
> > > > > > > 1.9.1
> > > > > > >
> > > > > > > _______________________________________________
> > > > > > > dri-devel mailing list
> > > > > > > dri-devel@lists.freedesktop.org
> > > > > > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> > > > > >
> > > > > > --
> > > > > > Daniel Vetter
> > > > > > Software Engineer, Intel Corporation
> > > > > > http://blog.ffwll.ch
> > > > > IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
> > > > > _______________________________________________
> > > > > dri-devel mailing list
> > > > > dri-devel@lists.freedesktop.org
> > > > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> > > > 
> > > > -- 
> > > > Daniel Vetter
> > > > Software Engineer, Intel Corporation
> > > > http://blog.ffwll.ch
> > > 
> > > -- 
> > > ====================
> > > | I would like to |
> > > | fix the world,  |
> > > | but they're not |
> > > | giving me the   |
> > >  \ source code!  /
> > >   ---------------
> > >     ¯\_(ツ)_/¯
> > > _______________________________________________
> > > dri-devel mailing list
> > > dri-devel@lists.freedesktop.org
> > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> > 
> > -- 
> > Daniel Vetter
> > Software Engineer, Intel Corporation
> > http://blog.ffwll.ch
> 
> -- 
> ====================
> | I would like to |
> | fix the world,  |
> | but they're not |
> | giving me the   |
>  \ source code!  /
>   ---------------
>     ¯\_(ツ)_/¯
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
James Qian Wang June 14, 2019, 5:46 a.m. UTC | #8
On Thu, Jun 13, 2019 at 04:30:08PM +0200, Daniel Vetter wrote:
> On Thu, Jun 13, 2019 at 02:24:37PM +0100, Liviu Dudau wrote:
> > On Thu, Jun 13, 2019 at 11:08:14AM +0200, Daniel Vetter wrote:
> > > On Thu, Jun 13, 2019 at 09:28:13AM +0100, Liviu Dudau wrote:
> > > > On Thu, Jun 13, 2019 at 10:17:27AM +0200, Daniel Vetter wrote:
> > > > > On Wed, Jun 12, 2019 at 02:26:24AM +0000, james qian wang (Arm Technology China) wrote:
> > > > > > On Tue, Jun 11, 2019 at 02:30:38PM +0200, Daniel Vetter wrote:
> > > > > > > On Tue, Jun 11, 2019 at 11:13:45AM +0000, Lowry Li (Arm Technology China) wrote:
> > > > > > > > From: "Lowry Li (Arm Technology China)" <Lowry.Li@arm.com>
> > > > > > > >
> > > > > > > > The komeda internal resources (pipelines) are shared between crtcs,
> > > > > > > > and resources release by disable_crtc. This commit is working for once
> > > > > > > > user forgot disabling crtc like app quit abnomally, and then the
> > > > > > > > resources can not be used by another crtc. Adds drop_master to
> > > > > > > > shutdown the device and make sure all the komeda resources have been
> > > > > > > > released and can be used for the next usage.
> > > > > > > >
> > > > > > > > Signed-off-by: Lowry Li (Arm Technology China) <lowry.li@arm.com>
> > > > > > > > ---
> > > > > > > >  drivers/gpu/drm/arm/display/komeda/komeda_kms.c | 13 +++++++++++++
> > > > > > > >  1 file changed, 13 insertions(+)
> > > > > > > >
> > > > > > > > diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> > > > > > > > index 8543860..647bce5 100644
> > > > > > > > --- a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> > > > > > > > +++ b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> > > > > > > > @@ -54,11 +54,24 @@ static irqreturn_t komeda_kms_irq_handler(int irq, void *data)
> > > > > > > >  return status;
> > > > > > > >  }
> > > > > > > >
> > > > > > > > +/* Komeda internal resources (pipelines) are shared between crtcs, and resources
> > > > > > > > + * are released by disable_crtc. But if user forget disabling crtc like app quit
> > > > > > > > + * abnormally, the resources can not be used by another crtc.
> > > > > > > > + * Use drop_master to shutdown the device and make sure all the komeda resources
> > > > > > > > + * have been released, and can be used for the next usage.
> > > > > > > > + */
> > > > > > >
> > > > > > > No. If we want this, we need to implement this across drivers, not with
> > > > > > > per-vendor hacks.
> > > > > > >
> > > > > > > The kerneldoc should have been a solid hint: "Only used by vmwgfx."
> > > > > > > -Daniel
> > > > > >
> > > > > > Hi Daniel:
> > > > > > This drop_master is really what we want, can we update the doc and
> > > > > > add komeda as a user of this hacks like "used by vmwfgx and komeda",
> > > > > > or maybe directly promote this per-vendor hacks as an optional chip
> > > > > > function ?
> > > > >
> > > > > Still no, because it would mean different behaviour for arm/komeda
> > > > > compared to everyone else. And we really don't want this, because this
> > > > > would completely break flicker-less vt-switching.
> > > > >
> > > > > Currently the only fallback for this case is the lastclose handler, which
> > > > > atm just restores fbcon/fbdev. If you want to change/extend that to work
> > > > > without fbdev, then that's the place to do the change. And across _all_
> > > > > drm kms drivers, so that we have consistent behaviour.
> > > >
> > > > Slightly unrelated, just thinking of a solution and wanted confirmation/double
> > > > checking: can a CRTC be instantiated without any planes (or without a primary
> > > > plane)?
> > >
> > > Without a primary plane maybe not so recommended, because it would break
> > > all the legacy userspace. Might even result in some oopses, not sure we
> > > check for crtc->primary != NULL.
> > >
> > > I'm not sure what you mean about instantiating it without any plane at
> > > all. That would be rather useless.
> >
> > Agree, and I think I have one way of solving the scenario Lowry and James are
> > trying to cover. Basically, komeda has 2 pipelines that are exposed as 2 crtcs.
> > However, layers (planes in DRM) can be associated with any of the pipelines and
> > it is possible to have a DRM master open up crtc0 and enable all possible planes,
> > which would leave crtc1 with no available layer to use (but technically still visible to
> > userspace, as it has been drm_crtc_init-ed. James and Lowry are trying to give
> > another master a chance of enabling crtc1 if previous master drops the
> > ownership of crtc0 without disabling it. So one solution I'm thinking of is to
> > tie one of the layers/planes to crtc1 regardless if that pipeline is enabled or
> > not.
> >
> > Alternatively, we need a more generic solution for re-allocating resources
> > between CRTCs that might be enabled at different times. Ideas on how userspace
> > should handle it first are welcome as well.
>
> Uh, you can't have more than one active master. And that other master
> needs to clean up the mess left behind by the previous one. Generally that

Yes komeda needs such clean up (disableing all planes is
enough for such cleanup), but no matter it handles by old master or
the new master, just before the new master enable the crtc is enouth
for komeda.
I think the problem here is which place we should do such cleanup:
USER or KERNEL mode.

For kernel: set_master/drop_master is a good place.
For user: enter_vt and leave_vt.

Why I decide to add it to kernel:
- So many users: X/wayland/Android, avoid duplidated code.
- we also plan to support third-part user. they may not do such
  cleanup for komeda.

Thanks
James

> means disabling all the planes, like e.g. fbdev emulation does (but
> there's a lot more we should probably clean up, current code is kinda just
> good enough).
>
> If you want multiple concurrent masters on the same hw, then you need drm
> leases, and there you can limit the leases to however many planes you
> think they need.
> -Daniel
>
> >
> > Best regards,
> > Liviu
> >
> > > -Daniel
> > >
> > > >
> > > > Best regards,
> > > > Liviu
> > > >
> > > > >
> > > > > kms is a cross-vendor api, vendor hacks are very, very much not cool.
> > > > > -Daniel
> > > > >
> > > > > >
> > > > > > James
> > > > > >
> > > > > > > > +static void komeda_kms_drop_master(struct drm_device *dev,
> > > > > > > > +   struct drm_file *file_priv)
> > > > > > > > +{
> > > > > > > > +drm_atomic_helper_shutdown(dev);
> > > > > > > > +}
> > > > > > > > +
> > > > > > > >  static struct drm_driver komeda_kms_driver = {
> > > > > > > >  .driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC |
> > > > > > > >     DRIVER_PRIME | DRIVER_HAVE_IRQ,
> > > > > > > >  .lastclose= drm_fb_helper_lastclose,
> > > > > > > >  .irq_handler= komeda_kms_irq_handler,
> > > > > > > > +.master_drop= komeda_kms_drop_master,
> > > > > > > >  .gem_free_object_unlocked= drm_gem_cma_free_object,
> > > > > > > >  .gem_vm_ops= &drm_gem_cma_vm_ops,
> > > > > > > >  .dumb_create= komeda_gem_cma_dumb_create,
> > > > > > > > --
> > > > > > > > 1.9.1
> > > > > > > >
> > > > > > > > _______________________________________________
> > > > > > > > dri-devel mailing list
> > > > > > > > dri-devel@lists.freedesktop.org
> > > > > > > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> > > > > > >
> > > > > > > --
> > > > > > > Daniel Vetter
> > > > > > > Software Engineer, Intel Corporation
> > > > > > > http://blog.ffwll.ch
> > > > > > IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
> > > > > > _______________________________________________
> > > > > > dri-devel mailing list
> > > > > > dri-devel@lists.freedesktop.org
> > > > > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> > > > >
> > > > > --
> > > > > Daniel Vetter
> > > > > Software Engineer, Intel Corporation
> > > > > http://blog.ffwll.ch
> > > >
> > > > --
> > > > ====================
> > > > | I would like to |
> > > > | fix the world,  |
> > > > | but they're not |
> > > > | giving me the   |
> > > >  \ source code!  /
> > > >   ---------------
> > > >     ¯\_(ツ)_/¯
> > > > _______________________________________________
> > > > dri-devel mailing list
> > > > dri-devel@lists.freedesktop.org
> > > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> > >
> > > --
> > > Daniel Vetter
> > > Software Engineer, Intel Corporation
> > > http://blog.ffwll.ch
> >
> > --
> > ====================
> > | I would like to |
> > | fix the world,  |
> > | but they're not |
> > | giving me the   |
> >  \ source code!  /
> >   ---------------
> >     ¯\_(ツ)_/¯
> > _______________________________________________
> > dri-devel mailing list
> > dri-devel@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/dri-devel
>
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> http://blog.ffwll.ch

--
Reviewed-by: James Qian Wang (Arm Technology China) <james.qian.wang@arm.com>
IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
Daniel Vetter June 14, 2019, 7:01 a.m. UTC | #9
On Fri, Jun 14, 2019 at 05:46:04AM +0000, james qian wang (Arm Technology China) wrote:
> On Thu, Jun 13, 2019 at 04:30:08PM +0200, Daniel Vetter wrote:
> > On Thu, Jun 13, 2019 at 02:24:37PM +0100, Liviu Dudau wrote:
> > > On Thu, Jun 13, 2019 at 11:08:14AM +0200, Daniel Vetter wrote:
> > > > On Thu, Jun 13, 2019 at 09:28:13AM +0100, Liviu Dudau wrote:
> > > > > On Thu, Jun 13, 2019 at 10:17:27AM +0200, Daniel Vetter wrote:
> > > > > > On Wed, Jun 12, 2019 at 02:26:24AM +0000, james qian wang (Arm Technology China) wrote:
> > > > > > > On Tue, Jun 11, 2019 at 02:30:38PM +0200, Daniel Vetter wrote:
> > > > > > > > On Tue, Jun 11, 2019 at 11:13:45AM +0000, Lowry Li (Arm Technology China) wrote:
> > > > > > > > > From: "Lowry Li (Arm Technology China)" <Lowry.Li@arm.com>
> > > > > > > > >
> > > > > > > > > The komeda internal resources (pipelines) are shared between crtcs,
> > > > > > > > > and resources release by disable_crtc. This commit is working for once
> > > > > > > > > user forgot disabling crtc like app quit abnomally, and then the
> > > > > > > > > resources can not be used by another crtc. Adds drop_master to
> > > > > > > > > shutdown the device and make sure all the komeda resources have been
> > > > > > > > > released and can be used for the next usage.
> > > > > > > > >
> > > > > > > > > Signed-off-by: Lowry Li (Arm Technology China) <lowry.li@arm.com>
> > > > > > > > > ---
> > > > > > > > >  drivers/gpu/drm/arm/display/komeda/komeda_kms.c | 13 +++++++++++++
> > > > > > > > >  1 file changed, 13 insertions(+)
> > > > > > > > >
> > > > > > > > > diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> > > > > > > > > index 8543860..647bce5 100644
> > > > > > > > > --- a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> > > > > > > > > +++ b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> > > > > > > > > @@ -54,11 +54,24 @@ static irqreturn_t komeda_kms_irq_handler(int irq, void *data)
> > > > > > > > >  return status;
> > > > > > > > >  }
> > > > > > > > >
> > > > > > > > > +/* Komeda internal resources (pipelines) are shared between crtcs, and resources
> > > > > > > > > + * are released by disable_crtc. But if user forget disabling crtc like app quit
> > > > > > > > > + * abnormally, the resources can not be used by another crtc.
> > > > > > > > > + * Use drop_master to shutdown the device and make sure all the komeda resources
> > > > > > > > > + * have been released, and can be used for the next usage.
> > > > > > > > > + */
> > > > > > > >
> > > > > > > > No. If we want this, we need to implement this across drivers, not with
> > > > > > > > per-vendor hacks.
> > > > > > > >
> > > > > > > > The kerneldoc should have been a solid hint: "Only used by vmwgfx."
> > > > > > > > -Daniel
> > > > > > >
> > > > > > > Hi Daniel:
> > > > > > > This drop_master is really what we want, can we update the doc and
> > > > > > > add komeda as a user of this hacks like "used by vmwfgx and komeda",
> > > > > > > or maybe directly promote this per-vendor hacks as an optional chip
> > > > > > > function ?
> > > > > >
> > > > > > Still no, because it would mean different behaviour for arm/komeda
> > > > > > compared to everyone else. And we really don't want this, because this
> > > > > > would completely break flicker-less vt-switching.
> > > > > >
> > > > > > Currently the only fallback for this case is the lastclose handler, which
> > > > > > atm just restores fbcon/fbdev. If you want to change/extend that to work
> > > > > > without fbdev, then that's the place to do the change. And across _all_
> > > > > > drm kms drivers, so that we have consistent behaviour.
> > > > >
> > > > > Slightly unrelated, just thinking of a solution and wanted confirmation/double
> > > > > checking: can a CRTC be instantiated without any planes (or without a primary
> > > > > plane)?
> > > >
> > > > Without a primary plane maybe not so recommended, because it would break
> > > > all the legacy userspace. Might even result in some oopses, not sure we
> > > > check for crtc->primary != NULL.
> > > >
> > > > I'm not sure what you mean about instantiating it without any plane at
> > > > all. That would be rather useless.
> > >
> > > Agree, and I think I have one way of solving the scenario Lowry and James are
> > > trying to cover. Basically, komeda has 2 pipelines that are exposed as 2 crtcs.
> > > However, layers (planes in DRM) can be associated with any of the pipelines and
> > > it is possible to have a DRM master open up crtc0 and enable all possible planes,
> > > which would leave crtc1 with no available layer to use (but technically still visible to
> > > userspace, as it has been drm_crtc_init-ed. James and Lowry are trying to give
> > > another master a chance of enabling crtc1 if previous master drops the
> > > ownership of crtc0 without disabling it. So one solution I'm thinking of is to
> > > tie one of the layers/planes to crtc1 regardless if that pipeline is enabled or
> > > not.
> > >
> > > Alternatively, we need a more generic solution for re-allocating resources
> > > between CRTCs that might be enabled at different times. Ideas on how userspace
> > > should handle it first are welcome as well.
> >
> > Uh, you can't have more than one active master. And that other master
> > needs to clean up the mess left behind by the previous one. Generally that
> 
> Yes komeda needs such clean up (disableing all planes is
> enough for such cleanup), but no matter it handles by old master or
> the new master, just before the new master enable the crtc is enouth
> for komeda.
> I think the problem here is which place we should do such cleanup:
> USER or KERNEL mode.
> 
> For kernel: set_master/drop_master is a good place.
> For user: enter_vt and leave_vt.

Well someone else already made that decision for you, userspace needs to
clean up.

If we want to change that, then we need to have a subsystem wide
discussion, and roll out the new behaviour (without breaking any
expectations of current userspace, which your patch does) for everyone.

For more context, I've written up what could all be possible new/existing
solutions in this space quite a while ago:

https://blog.ffwll.ch/2016/01/vt-switching-with-atomic-modeset.html

> Why I decide to add it to kernel:
> - So many users: X/wayland/Android, avoid duplidated code.
> - we also plan to support third-part user. they may not do such
>   cleanup for komeda.

Fix your userspace :-)

Cheers, Daniel

> 
> Thanks
> James
> 
> > means disabling all the planes, like e.g. fbdev emulation does (but
> > there's a lot more we should probably clean up, current code is kinda just
> > good enough).
> >
> > If you want multiple concurrent masters on the same hw, then you need drm
> > leases, and there you can limit the leases to however many planes you
> > think they need.
> > -Daniel
> >
> > >
> > > Best regards,
> > > Liviu
> > >
> > > > -Daniel
> > > >
> > > > >
> > > > > Best regards,
> > > > > Liviu
> > > > >
> > > > > >
> > > > > > kms is a cross-vendor api, vendor hacks are very, very much not cool.
> > > > > > -Daniel
> > > > > >
> > > > > > >
> > > > > > > James
> > > > > > >
> > > > > > > > > +static void komeda_kms_drop_master(struct drm_device *dev,
> > > > > > > > > +   struct drm_file *file_priv)
> > > > > > > > > +{
> > > > > > > > > +drm_atomic_helper_shutdown(dev);
> > > > > > > > > +}
> > > > > > > > > +
> > > > > > > > >  static struct drm_driver komeda_kms_driver = {
> > > > > > > > >  .driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC |
> > > > > > > > >     DRIVER_PRIME | DRIVER_HAVE_IRQ,
> > > > > > > > >  .lastclose= drm_fb_helper_lastclose,
> > > > > > > > >  .irq_handler= komeda_kms_irq_handler,
> > > > > > > > > +.master_drop= komeda_kms_drop_master,
> > > > > > > > >  .gem_free_object_unlocked= drm_gem_cma_free_object,
> > > > > > > > >  .gem_vm_ops= &drm_gem_cma_vm_ops,
> > > > > > > > >  .dumb_create= komeda_gem_cma_dumb_create,
> > > > > > > > > --
> > > > > > > > > 1.9.1
> > > > > > > > >
> > > > > > > > > _______________________________________________
> > > > > > > > > dri-devel mailing list
> > > > > > > > > dri-devel@lists.freedesktop.org
> > > > > > > > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> > > > > > > >
> > > > > > > > --
> > > > > > > > Daniel Vetter
> > > > > > > > Software Engineer, Intel Corporation
> > > > > > > > http://blog.ffwll.ch
> > > > > > > IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
> > > > > > > _______________________________________________
> > > > > > > dri-devel mailing list
> > > > > > > dri-devel@lists.freedesktop.org
> > > > > > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> > > > > >
> > > > > > --
> > > > > > Daniel Vetter
> > > > > > Software Engineer, Intel Corporation
> > > > > > http://blog.ffwll.ch
> > > > >
> > > > > --
> > > > > ====================
> > > > > | I would like to |
> > > > > | fix the world,  |
> > > > > | but they're not |
> > > > > | giving me the   |
> > > > >  \ source code!  /
> > > > >   ---------------
> > > > >     ¯\_(ツ)_/¯
> > > > > _______________________________________________
> > > > > dri-devel mailing list
> > > > > dri-devel@lists.freedesktop.org
> > > > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> > > >
> > > > --
> > > > Daniel Vetter
> > > > Software Engineer, Intel Corporation
> > > > http://blog.ffwll.ch
> > >
> > > --
> > > ====================
> > > | I would like to |
> > > | fix the world,  |
> > > | but they're not |
> > > | giving me the   |
> > >  \ source code!  /
> > >   ---------------
> > >     ¯\_(ツ)_/¯
> > > _______________________________________________
> > > dri-devel mailing list
> > > dri-devel@lists.freedesktop.org
> > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> >
> > --
> > Daniel Vetter
> > Software Engineer, Intel Corporation
> > http://blog.ffwll.ch
> 
> --
> Reviewed-by: James Qian Wang (Arm Technology China) <james.qian.wang@arm.com>
> IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
James Qian Wang June 14, 2019, 8:53 a.m. UTC | #10
On Fri, Jun 14, 2019 at 09:01:11AM +0200, Daniel Vetter wrote:
> On Fri, Jun 14, 2019 at 05:46:04AM +0000, james qian wang (Arm Technology China) wrote:
> > On Thu, Jun 13, 2019 at 04:30:08PM +0200, Daniel Vetter wrote:
> > > On Thu, Jun 13, 2019 at 02:24:37PM +0100, Liviu Dudau wrote:
> > > > On Thu, Jun 13, 2019 at 11:08:14AM +0200, Daniel Vetter wrote:
> > > > > On Thu, Jun 13, 2019 at 09:28:13AM +0100, Liviu Dudau wrote:
> > > > > > On Thu, Jun 13, 2019 at 10:17:27AM +0200, Daniel Vetter wrote:
> > > > > > > On Wed, Jun 12, 2019 at 02:26:24AM +0000, james qian wang (Arm Technology China) wrote:
> > > > > > > > On Tue, Jun 11, 2019 at 02:30:38PM +0200, Daniel Vetter wrote:
> > > > > > > > > On Tue, Jun 11, 2019 at 11:13:45AM +0000, Lowry Li (Arm Technology China) wrote:
> > > > > > > > > > From: "Lowry Li (Arm Technology China)" <Lowry.Li@arm.com>
> > > > > > > > > >
> > > > > > > > > > The komeda internal resources (pipelines) are shared between crtcs,
> > > > > > > > > > and resources release by disable_crtc. This commit is working for once
> > > > > > > > > > user forgot disabling crtc like app quit abnomally, and then the
> > > > > > > > > > resources can not be used by another crtc. Adds drop_master to
> > > > > > > > > > shutdown the device and make sure all the komeda resources have been
> > > > > > > > > > released and can be used for the next usage.
> > > > > > > > > >
> > > > > > > > > > Signed-off-by: Lowry Li (Arm Technology China) <lowry.li@arm.com>
> > > > > > > > > > ---
> > > > > > > > > >  drivers/gpu/drm/arm/display/komeda/komeda_kms.c | 13 +++++++++++++
> > > > > > > > > >  1 file changed, 13 insertions(+)
> > > > > > > > > >
> > > > > > > > > > diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> > > > > > > > > > index 8543860..647bce5 100644
> > > > > > > > > > --- a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> > > > > > > > > > +++ b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> > > > > > > > > > @@ -54,11 +54,24 @@ static irqreturn_t komeda_kms_irq_handler(int irq, void *data)
> > > > > > > > > >  return status;
> > > > > > > > > >  }
> > > > > > > > > >
> > > > > > > > > > +/* Komeda internal resources (pipelines) are shared between crtcs, and resources
> > > > > > > > > > + * are released by disable_crtc. But if user forget disabling crtc like app quit
> > > > > > > > > > + * abnormally, the resources can not be used by another crtc.
> > > > > > > > > > + * Use drop_master to shutdown the device and make sure all the komeda resources
> > > > > > > > > > + * have been released, and can be used for the next usage.
> > > > > > > > > > + */
> > > > > > > > >
> > > > > > > > > No. If we want this, we need to implement this across drivers, not with
> > > > > > > > > per-vendor hacks.
> > > > > > > > >
> > > > > > > > > The kerneldoc should have been a solid hint: "Only used by vmwgfx."
> > > > > > > > > -Daniel
> > > > > > > >
> > > > > > > > Hi Daniel:
> > > > > > > > This drop_master is really what we want, can we update the doc and
> > > > > > > > add komeda as a user of this hacks like "used by vmwfgx and komeda",
> > > > > > > > or maybe directly promote this per-vendor hacks as an optional chip
> > > > > > > > function ?
> > > > > > >
> > > > > > > Still no, because it would mean different behaviour for arm/komeda
> > > > > > > compared to everyone else. And we really don't want this, because this
> > > > > > > would completely break flicker-less vt-switching.
> > > > > > >
> > > > > > > Currently the only fallback for this case is the lastclose handler, which
> > > > > > > atm just restores fbcon/fbdev. If you want to change/extend that to work
> > > > > > > without fbdev, then that's the place to do the change. And across _all_
> > > > > > > drm kms drivers, so that we have consistent behaviour.
> > > > > >
> > > > > > Slightly unrelated, just thinking of a solution and wanted confirmation/double
> > > > > > checking: can a CRTC be instantiated without any planes (or without a primary
> > > > > > plane)?
> > > > >
> > > > > Without a primary plane maybe not so recommended, because it would break
> > > > > all the legacy userspace. Might even result in some oopses, not sure we
> > > > > check for crtc->primary != NULL.
> > > > >
> > > > > I'm not sure what you mean about instantiating it without any plane at
> > > > > all. That would be rather useless.
> > > >
> > > > Agree, and I think I have one way of solving the scenario Lowry and James are
> > > > trying to cover. Basically, komeda has 2 pipelines that are exposed as 2 crtcs.
> > > > However, layers (planes in DRM) can be associated with any of the pipelines and
> > > > it is possible to have a DRM master open up crtc0 and enable all possible planes,
> > > > which would leave crtc1 with no available layer to use (but technically still visible to
> > > > userspace, as it has been drm_crtc_init-ed. James and Lowry are trying to give
> > > > another master a chance of enabling crtc1 if previous master drops the
> > > > ownership of crtc0 without disabling it. So one solution I'm thinking of is to
> > > > tie one of the layers/planes to crtc1 regardless if that pipeline is enabled or
> > > > not.
> > > >
> > > > Alternatively, we need a more generic solution for re-allocating resources
> > > > between CRTCs that might be enabled at different times. Ideas on how userspace
> > > > should handle it first are welcome as well.
> > >
> > > Uh, you can't have more than one active master. And that other master
> > > needs to clean up the mess left behind by the previous one. Generally that
> >
> > Yes komeda needs such clean up (disableing all planes is
> > enough for such cleanup), but no matter it handles by old master or
> > the new master, just before the new master enable the crtc is enouth
> > for komeda.
> > I think the problem here is which place we should do such cleanup:
> > USER or KERNEL mode.
> >
> > For kernel: set_master/drop_master is a good place.
> > For user: enter_vt and leave_vt.
>
> Well someone else already made that decision for you, userspace needs to
> clean up.
>
> If we want to change that, then we need to have a subsystem wide
> discussion, and roll out the new behaviour (without breaking any
> expectations of current userspace, which your patch does) for everyone.
>
> For more context, I've written up what could all be possible new/existing
> solutions in this space quite a while ago:
>
> https://blog.ffwll.ch/2016/01/vt-switching-with-atomic-modeset.html
>
> > Why I decide to add it to kernel:
> > - So many users: X/wayland/Android, avoid duplidated code.
> > - we also plan to support third-part user. they may not do such
> >   cleanup for komeda.
>
> Fix your userspace :-)
>

Hi Daniel:
Thank you, it's very good article, very clear for why we adopt
user-mode to do save/restore for VT-switching.

I think I should follow.

Actually our komeda user has such logic already. :)

Hi Lowry:

Per Daniel, we should drop this patch.

Thanks
James

> Cheers, Daniel
>
> >
> > Thanks
> > James
> >
> > > means disabling all the planes, like e.g. fbdev emulation does (but
> > > there's a lot more we should probably clean up, current code is kinda just
> > > good enough).
> > >
> > > If you want multiple concurrent masters on the same hw, then you need drm
> > > leases, and there you can limit the leases to however many planes you
> > > think they need.
> > > -Daniel
> > >
> > > >
> > > > Best regards,
> > > > Liviu
> > > >
> > > > > -Daniel
> > > > >
> > > > > >
> > > > > > Best regards,
> > > > > > Liviu
> > > > > >
> > > > > > >
> > > > > > > kms is a cross-vendor api, vendor hacks are very, very much not cool.
> > > > > > > -Daniel
> > > > > > >
> > > > > > > >
> > > > > > > > James
> > > > > > > >
> > > > > > > > > > +static void komeda_kms_drop_master(struct drm_device *dev,
> > > > > > > > > > +   struct drm_file *file_priv)
> > > > > > > > > > +{
> > > > > > > > > > +drm_atomic_helper_shutdown(dev);
> > > > > > > > > > +}
> > > > > > > > > > +
> > > > > > > > > >  static struct drm_driver komeda_kms_driver = {
> > > > > > > > > >  .driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC |
> > > > > > > > > >     DRIVER_PRIME | DRIVER_HAVE_IRQ,
> > > > > > > > > >  .lastclose= drm_fb_helper_lastclose,
> > > > > > > > > >  .irq_handler= komeda_kms_irq_handler,
> > > > > > > > > > +.master_drop= komeda_kms_drop_master,
> > > > > > > > > >  .gem_free_object_unlocked= drm_gem_cma_free_object,
> > > > > > > > > >  .gem_vm_ops= &drm_gem_cma_vm_ops,
> > > > > > > > > >  .dumb_create= komeda_gem_cma_dumb_create,
> > > > > > > > > > --
> > > > > > > > > > 1.9.1
> > > > > > > > > >
> > > > > > > > > > _______________________________________________
> > > > > > > > > > dri-devel mailing list
> > > > > > > > > > dri-devel@lists.freedesktop.org
> > > > > > > > > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> > > > > > > > >
> > > > > > > > > --
> > > > > > > > > Daniel Vetter
> > > > > > > > > Software Engineer, Intel Corporation
> > > > > > > > > http://blog.ffwll.ch
> > > > > > > > IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
> > > > > > > > _______________________________________________
> > > > > > > > dri-devel mailing list
> > > > > > > > dri-devel@lists.freedesktop.org
> > > > > > > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> > > > > > >
> > > > > > > --
> > > > > > > Daniel Vetter
> > > > > > > Software Engineer, Intel Corporation
> > > > > > > http://blog.ffwll.ch
> > > > > >
> > > > > > --
> > > > > > ====================
> > > > > > | I would like to |
> > > > > > | fix the world,  |
> > > > > > | but they're not |
> > > > > > | giving me the   |
> > > > > >  \ source code!  /
> > > > > >   ---------------
> > > > > >     ¯\_(ツ)_/¯
> > > > > > _______________________________________________
> > > > > > dri-devel mailing list
> > > > > > dri-devel@lists.freedesktop.org
> > > > > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> > > > >
> > > > > --
> > > > > Daniel Vetter
> > > > > Software Engineer, Intel Corporation
> > > > > http://blog.ffwll.ch
> > > >
> > > > --
> > > > ====================
> > > > | I would like to |
> > > > | fix the world,  |
> > > > | but they're not |
> > > > | giving me the   |
> > > >  \ source code!  /
> > > >   ---------------
> > > >     ¯\_(ツ)_/¯
> > > > _______________________________________________
> > > > dri-devel mailing list
> > > > dri-devel@lists.freedesktop.org
> > > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> > >
> > > --
> > > Daniel Vetter
> > > Software Engineer, Intel Corporation
> > > http://blog.ffwll.ch
> >
> > --
> > Reviewed-by: James Qian Wang (Arm Technology China) <james.qian.wang@arm.com>
> > IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
> > _______________________________________________
> > dri-devel mailing list
> > dri-devel@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/dri-devel
>
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> http://blog.ffwll.ch

--
Reviewed-by: James Qian Wang (Arm Technology China) <james.qian.wang@arm.com>
IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
Lowry Li (Arm Technology China) June 17, 2019, 10:18 a.m. UTC | #11
Hi Daniel,
On Fri, Jun 14, 2019 at 04:53:08PM +0800, james qian wang (Arm Technology China) wrote:
> On Fri, Jun 14, 2019 at 09:01:11AM +0200, Daniel Vetter wrote:
> > On Fri, Jun 14, 2019 at 05:46:04AM +0000, james qian wang (Arm Technology China) wrote:
> > > On Thu, Jun 13, 2019 at 04:30:08PM +0200, Daniel Vetter wrote:
> > > > On Thu, Jun 13, 2019 at 02:24:37PM +0100, Liviu Dudau wrote:
> > > > > On Thu, Jun 13, 2019 at 11:08:14AM +0200, Daniel Vetter wrote:
> > > > > > On Thu, Jun 13, 2019 at 09:28:13AM +0100, Liviu Dudau wrote:
> > > > > > > On Thu, Jun 13, 2019 at 10:17:27AM +0200, Daniel Vetter wrote:
> > > > > > > > On Wed, Jun 12, 2019 at 02:26:24AM +0000, james qian wang (Arm Technology China) wrote:
> > > > > > > > > On Tue, Jun 11, 2019 at 02:30:38PM +0200, Daniel Vetter wrote:
> > > > > > > > > > On Tue, Jun 11, 2019 at 11:13:45AM +0000, Lowry Li (Arm Technology China) wrote:
> > > > > > > > > > > From: "Lowry Li (Arm Technology China)" <Lowry.Li@arm.com>
> > > > > > > > > > >
> > > > > > > > > > > The komeda internal resources (pipelines) are shared between crtcs,
> > > > > > > > > > > and resources release by disable_crtc. This commit is working for once
> > > > > > > > > > > user forgot disabling crtc like app quit abnomally, and then the
> > > > > > > > > > > resources can not be used by another crtc. Adds drop_master to
> > > > > > > > > > > shutdown the device and make sure all the komeda resources have been
> > > > > > > > > > > released and can be used for the next usage.
> > > > > > > > > > >
> > > > > > > > > > > Signed-off-by: Lowry Li (Arm Technology China) <lowry.li@arm.com>
> > > > > > > > > > > ---
> > > > > > > > > > >  drivers/gpu/drm/arm/display/komeda/komeda_kms.c | 13 +++++++++++++
> > > > > > > > > > >  1 file changed, 13 insertions(+)
> > > > > > > > > > >
> > > > > > > > > > > diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> > > > > > > > > > > index 8543860..647bce5 100644
> > > > > > > > > > > --- a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> > > > > > > > > > > +++ b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
> > > > > > > > > > > @@ -54,11 +54,24 @@ static irqreturn_t komeda_kms_irq_handler(int irq, void *data)
> > > > > > > > > > >  return status;
> > > > > > > > > > >  }
> > > > > > > > > > >
> > > > > > > > > > > +/* Komeda internal resources (pipelines) are shared between crtcs, and resources
> > > > > > > > > > > + * are released by disable_crtc. But if user forget disabling crtc like app quit
> > > > > > > > > > > + * abnormally, the resources can not be used by another crtc.
> > > > > > > > > > > + * Use drop_master to shutdown the device and make sure all the komeda resources
> > > > > > > > > > > + * have been released, and can be used for the next usage.
> > > > > > > > > > > + */
> > > > > > > > > >
> > > > > > > > > > No. If we want this, we need to implement this across drivers, not with
> > > > > > > > > > per-vendor hacks.
> > > > > > > > > >
> > > > > > > > > > The kerneldoc should have been a solid hint: "Only used by vmwgfx."
> > > > > > > > > > -Daniel
> > > > > > > > >
> > > > > > > > > Hi Daniel:
> > > > > > > > > This drop_master is really what we want, can we update the doc and
> > > > > > > > > add komeda as a user of this hacks like "used by vmwfgx and komeda",
> > > > > > > > > or maybe directly promote this per-vendor hacks as an optional chip
> > > > > > > > > function ?
> > > > > > > >
> > > > > > > > Still no, because it would mean different behaviour for arm/komeda
> > > > > > > > compared to everyone else. And we really don't want this, because this
> > > > > > > > would completely break flicker-less vt-switching.
> > > > > > > >
> > > > > > > > Currently the only fallback for this case is the lastclose handler, which
> > > > > > > > atm just restores fbcon/fbdev. If you want to change/extend that to work
> > > > > > > > without fbdev, then that's the place to do the change. And across _all_
> > > > > > > > drm kms drivers, so that we have consistent behaviour.
> > > > > > >
> > > > > > > Slightly unrelated, just thinking of a solution and wanted confirmation/double
> > > > > > > checking: can a CRTC be instantiated without any planes (or without a primary
> > > > > > > plane)?
> > > > > >
> > > > > > Without a primary plane maybe not so recommended, because it would break
> > > > > > all the legacy userspace. Might even result in some oopses, not sure we
> > > > > > check for crtc->primary != NULL.
> > > > > >
> > > > > > I'm not sure what you mean about instantiating it without any plane at
> > > > > > all. That would be rather useless.
> > > > >
> > > > > Agree, and I think I have one way of solving the scenario Lowry and James are
> > > > > trying to cover. Basically, komeda has 2 pipelines that are exposed as 2 crtcs.
> > > > > However, layers (planes in DRM) can be associated with any of the pipelines and
> > > > > it is possible to have a DRM master open up crtc0 and enable all possible planes,
> > > > > which would leave crtc1 with no available layer to use (but technically still visible to
> > > > > userspace, as it has been drm_crtc_init-ed. James and Lowry are trying to give
> > > > > another master a chance of enabling crtc1 if previous master drops the
> > > > > ownership of crtc0 without disabling it. So one solution I'm thinking of is to
> > > > > tie one of the layers/planes to crtc1 regardless if that pipeline is enabled or
> > > > > not.
> > > > >
> > > > > Alternatively, we need a more generic solution for re-allocating resources
> > > > > between CRTCs that might be enabled at different times. Ideas on how userspace
> > > > > should handle it first are welcome as well.
> > > >
> > > > Uh, you can't have more than one active master. And that other master
> > > > needs to clean up the mess left behind by the previous one. Generally that
> > > 
> > > Yes komeda needs such clean up (disableing all planes is
> > > enough for such cleanup), but no matter it handles by old master or
> > > the new master, just before the new master enable the crtc is enouth
> > > for komeda.
> > > I think the problem here is which place we should do such cleanup:
> > > USER or KERNEL mode.
> > > 
> > > For kernel: set_master/drop_master is a good place.
> > > For user: enter_vt and leave_vt.
> > 
> > Well someone else already made that decision for you, userspace needs to
> > clean up.
> > 
> > If we want to change that, then we need to have a subsystem wide
> > discussion, and roll out the new behaviour (without breaking any
> > expectations of current userspace, which your patch does) for everyone.
> > 
> > For more context, I've written up what could all be possible new/existing
> > solutions in this space quite a while ago:
> > 
> > https://blog.ffwll.ch/2016/01/vt-switching-with-atomic-modeset.html
> > 
> > > Why I decide to add it to kernel:
> > > - So many users: X/wayland/Android, avoid duplidated code.
> > > - we also plan to support third-part user. they may not do such
> > >   cleanup for komeda.
> > 
> > Fix your userspace :-)
> >
> 
> Hi Daniel:
> Thank you, it's very good article, very clear for why we adopt
> user-mode to do save/restore for VT-switching.
> 
> I think I should follow.
> 
> Actually our komeda user has such logic already. :)
> 
> Hi Lowry:
> 
> Per Daniel, we should drop this patch.
> 
> Thanks
> James

Hi Daniel,

Thanks a lot for this. I will send a new patchset to drop this patch.

Regards,
Lowry

> > Cheers, Daniel
> > 
> > > 
> > > Thanks
> > > James
> > > 
> > > > means disabling all the planes, like e.g. fbdev emulation does (but
> > > > there's a lot more we should probably clean up, current code is kinda just
> > > > good enough).
> > > >
> > > > If you want multiple concurrent masters on the same hw, then you need drm
> > > > leases, and there you can limit the leases to however many planes you
> > > > think they need.
> > > > -Daniel
> > > >
> > > > >
> > > > > Best regards,
> > > > > Liviu
> > > > >
> > > > > > -Daniel
> > > > > >
> > > > > > >
> > > > > > > Best regards,
> > > > > > > Liviu
> > > > > > >
> > > > > > > >
> > > > > > > > kms is a cross-vendor api, vendor hacks are very, very much not cool.
> > > > > > > > -Daniel
> > > > > > > >
> > > > > > > > >
> > > > > > > > > James
> > > > > > > > >
> > > > > > > > > > > +static void komeda_kms_drop_master(struct drm_device *dev,
> > > > > > > > > > > +   struct drm_file *file_priv)
> > > > > > > > > > > +{
> > > > > > > > > > > +drm_atomic_helper_shutdown(dev);
> > > > > > > > > > > +}
> > > > > > > > > > > +
> > > > > > > > > > >  static struct drm_driver komeda_kms_driver = {
> > > > > > > > > > >  .driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC |
> > > > > > > > > > >     DRIVER_PRIME | DRIVER_HAVE_IRQ,
> > > > > > > > > > >  .lastclose= drm_fb_helper_lastclose,
> > > > > > > > > > >  .irq_handler= komeda_kms_irq_handler,
> > > > > > > > > > > +.master_drop= komeda_kms_drop_master,
> > > > > > > > > > >  .gem_free_object_unlocked= drm_gem_cma_free_object,
> > > > > > > > > > >  .gem_vm_ops= &drm_gem_cma_vm_ops,
> > > > > > > > > > >  .dumb_create= komeda_gem_cma_dumb_create,
> > > > > > > > > > > --
> > > > > > > > > > > 1.9.1
> > > > > > > > > > >
> > > > > > > > > > > _______________________________________________
> > > > > > > > > > > dri-devel mailing list
> > > > > > > > > > > dri-devel@lists.freedesktop.org
> > > > > > > > > > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> > > > > > > > > >
> > > > > > > > > > --
> > > > > > > > > > Daniel Vetter
> > > > > > > > > > Software Engineer, Intel Corporation
> > > > > > > > > > http://blog.ffwll.ch
> > > > > > > > > IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
> > > > > > > > > _______________________________________________
> > > > > > > > > dri-devel mailing list
> > > > > > > > > dri-devel@lists.freedesktop.org
> > > > > > > > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> > > > > > > >
> > > > > > > > --
> > > > > > > > Daniel Vetter
> > > > > > > > Software Engineer, Intel Corporation
> > > > > > > > http://blog.ffwll.ch
> > > > > > >
> > > > > > > --
> > > > > > > ====================
> > > > > > > | I would like to |
> > > > > > > | fix the world,  |
> > > > > > > | but they're not |
> > > > > > > | giving me the   |
> > > > > > >  \ source code!  /
> > > > > > >   ---------------
> > > > > > >     ¯\_(ツ)_/¯
> > > > > > > _______________________________________________
> > > > > > > dri-devel mailing list
> > > > > > > dri-devel@lists.freedesktop.org
> > > > > > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> > > > > >
> > > > > > --
> > > > > > Daniel Vetter
> > > > > > Software Engineer, Intel Corporation
> > > > > > http://blog.ffwll.ch
> > > > >
> > > > > --
> > > > > ====================
> > > > > | I would like to |
> > > > > | fix the world,  |
> > > > > | but they're not |
> > > > > | giving me the   |
> > > > >  \ source code!  /
> > > > >   ---------------
> > > > >     ¯\_(ツ)_/¯
> > > > > _______________________________________________
> > > > > dri-devel mailing list
> > > > > dri-devel@lists.freedesktop.org
> > > > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> > > >
> > > > --
> > > > Daniel Vetter
> > > > Software Engineer, Intel Corporation
> > > > http://blog.ffwll.ch
> > > 
> > > --
> > > Reviewed-by: James Qian Wang (Arm Technology China) <james.qian.wang@arm.com>
> > > IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
> > > _______________________________________________
> > > dri-devel mailing list
> > > dri-devel@lists.freedesktop.org
> > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> > 
> > -- 
> > Daniel Vetter
> > Software Engineer, Intel Corporation
> > http://blog.ffwll.ch
> 
> -- 
> Reviewed-by: James Qian Wang (Arm Technology China) <james.qian.wang@arm.com>
diff mbox series

Patch

diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
index 8543860..647bce5 100644
--- a/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
+++ b/drivers/gpu/drm/arm/display/komeda/komeda_kms.c
@@ -54,11 +54,24 @@  static irqreturn_t komeda_kms_irq_handler(int irq, void *data)
 	return status;
 }
 
+/* Komeda internal resources (pipelines) are shared between crtcs, and resources
+ * are released by disable_crtc. But if user forget disabling crtc like app quit
+ * abnormally, the resources can not be used by another crtc.
+ * Use drop_master to shutdown the device and make sure all the komeda resources
+ * have been released, and can be used for the next usage.
+ */
+static void komeda_kms_drop_master(struct drm_device *dev,
+				   struct drm_file *file_priv)
+{
+	drm_atomic_helper_shutdown(dev);
+}
+
 static struct drm_driver komeda_kms_driver = {
 	.driver_features = DRIVER_GEM | DRIVER_MODESET | DRIVER_ATOMIC |
 			   DRIVER_PRIME | DRIVER_HAVE_IRQ,
 	.lastclose			= drm_fb_helper_lastclose,
 	.irq_handler			= komeda_kms_irq_handler,
+	.master_drop			= komeda_kms_drop_master,
 	.gem_free_object_unlocked	= drm_gem_cma_free_object,
 	.gem_vm_ops			= &drm_gem_cma_vm_ops,
 	.dumb_create			= komeda_gem_cma_dumb_create,