dri-devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Vetter <daniel@ffwll.ch>
To: "Noralf Trønnes" <noralf@tronnes.org>
Cc: daniel.vetter@ffwll.ch, intel-gfx@lists.freedesktop.org,
	dri-devel@lists.freedesktop.org,
	laurent.pinchart@ideasonboard.com, mstaudt@suse.de
Subject: Re: [RFC v4 00/25] drm: Add generic fbdev emulation
Date: Mon, 16 Apr 2018 09:47:02 +0200	[thread overview]
Message-ID: <20180416074702.GI31310@phenom.ffwll.local> (raw)
In-Reply-To: <374be970-9c57-2dce-e022-2f451b6ed478@tronnes.org>

On Thu, Apr 12, 2018 at 06:34:46PM +0200, Noralf Trønnes wrote:
> I hit a 'Sending rate exceeded' error with this patchset, so it didn't go
> out as it should.
> I will resend the patchset when I find out how to avoid this problem.

That's generally an issue with your ISP. gmail works ime for mail bombs,
even big ones.
-Daniel

> 
> Noralf.
> 
> 
> Den 12.04.2018 15.17, skrev Noralf Trønnes:
> > This patchset explores the possibility of having generic fbdev emulation
> > in DRM for drivers that supports dumb buffers which they can export. An
> > API is added to support in-kernel clients in general.
> > 
> > In this version I was able to reuse the modesetting code from
> > drm_fb_helper in the client API. This avoids code duplication, carries
> > over lessons learned and the modesetting code is bisectable. The
> > downside is that it takes +10 patches to rip drm_fb_helper in two, so
> > maybe it's not worth it wrt possible breakage and a challenging review.
> > 
> > Does the Intel CI test the fbdev emulation?
> > 
> > Daniel had this concern with the previous version:
> > 
> >      The register/unregister model needs more thought. Allowing both clients
> >      to register whenever they want to, and drm_device instances to come and
> >      go is what fbcon has done, and the resulting locking is a horror show.
> > 
> >      I think if we require that all in-kernel drm_clients are registers when
> >      loading drm.ko (and enabled/disabled only per module options and
> >      Kconfig), then we can throw out all the locking. That avoids a lot of
> >      the headaches.
> > 
> > I have solved this by adding a notifier that fires when a new DRM device
> > is registered (I've removed the new() callback). Currently only
> > bootsplash uses this. The fbdev client needs to be setup from the driver
> > since it can't know on device registration if the driver will setup it's
> > own fbdev emulation later and the vtcon client hooks up to a user
> > provided device id.
> > 
> > Since fbcon can't handle fb_open failing, the buffer has to be
> > pre-allocated. Exporting a GEM buffer pins the driver module making it
> > impossible to unload it.
> > I have included 2 solutions to the problem:
> > - sysfs file to remove/close clients: remove_internal_clients
> > - Change drm_gem_prime_export() so it doesn't pin on client buffers
> > 
> > If a dumb buffer is exported from a kernel thread (worker) context, the
> > file descriptor isn't closed and I leak a reference so the buffer isn't
> > freed. Please look at drm_client_buffer_create() in patch
> > 'drm/client: Finish the in-kernel client API'.
> > This is a blocker that needs a solution.
> > 
> > 
> > Noralf.
> > 
> > Changes since version 3:
> > Client API changes:
> > - Drop drm_client_register_funcs() which attached clients indirectly.
> >    Let clients attach directly using drm_client_new{_from_id}(). Clients
> >    that wants to attach to all devices must be linked into drm.ko and use
> >    the DRM device notifier. This is done to avoid the lock/race
> >    register/unregister hell we have with fbcon. (Daniel Vetter)
> > - drm_client_display_restore() checks if there is a master and if so
> >    returns -EBUSY. (Daniel Vetter)
> > - Allocate drm_file up front instead of on-demand. Since fbdev can't do
> >    on demand buffer allocation because of fbcon, there's no need for this.
> > - Add sysfs file to remove clients
> > - Don't pin driver module when exporting gem client buffers
> > - Dropped page flip support since drm_fb_helper is now used for fbdev
> >    emulation.
> > 
> > - The bootsplash client now switches over to fbdev on keypress.
> > 
> > Changes since version 2:
> > - Don't set drm master for in-kernel clients. (Daniel Vetter)
> > - Add in-kernel client API
> > 
> > Changes since version 1:
> > - Don't add drm_fb_helper_fb_open() and drm_fb_helper_fb_release() to
> >    DRM_FB_HELPER_DEFAULT_OPS(). (Fi.CI.STATIC)
> >    The following uses that macro and sets fb_open/close: udlfb_ops,
> >    amdgpufb_ops, drm_fb_helper_generic_fbdev_ops, nouveau_fbcon_ops,
> >    nouveau_fbcon_sw_ops, radeonfb_ops.
> >    This results in: warning: Initializer entry defined twice
> > - Support CONFIG_DRM_KMS_HELPER=m (kbuild test robot)
> >    ERROR: <function> [drivers/gpu/drm/drm_kms_helper.ko] undefined!
> > - Drop buggy patch: (Chris Wilson)
> >    drm/prime: Clear drm_gem_object->dma_buf on release
> > - Defer buffer creation until fb_open.
> > 
> > 
> > David Herrmann (1):
> >    drm: provide management functions for drm_file
> > 
> > Noralf Trønnes (24):
> >    drm/file: Don't set master on in-kernel clients
> >    drm/fb-helper: No need to cache rotation and sw_rotations
> >    drm/fb-helper: Remove drm_fb_helper_debug_enter/leave()
> >    drm/fb-helper: dpms_legacy(): Only set on connectors in use
> >    drm/atomic: Move __drm_atomic_helper_disable_plane/set_config()
> >    drm: Begin an API for in-kernel clients
> >    drm/fb-helper: Use struct drm_client_display
> >    drm/fb-helper: Move modeset commit code to drm_client
> >    drm/connector: Add
> >      drm_connector_has_preferred_mode/pick_cmdline_mode()
> >    drm/connector: Add connector array functions
> >    drm/i915: Add drm_driver->initial_client_display callback
> >    drm/fb-helper: Remove struct drm_fb_helper_crtc
> >    drm/fb-helper: Remove struct drm_fb_helper_connector
> >    drm/fb-helper: Move modeset config code to drm_client
> >    drm: Make ioctls available for in-kernel clients
> >    drm/client: Bail out if there's a DRM master
> >    drm/client: Make the display modes available to clients
> >    drm/client: Finish the in-kernel client API
> >    drm/prime: Don't pin module on export for in-kernel clients
> >    drm/fb-helper: Add drm_fb_helper_fb_open/release()
> >    drm/fb-helper: Add generic fbdev emulation
> >    drm: Add DRM device registered notifier
> >    drm/client: Hack: Add bootsplash
> >    drm/client: Hack: Add DRM VT console client
> > 
> >   drivers/gpu/drm/Kconfig                 |    2 +
> >   drivers/gpu/drm/Makefile                |    4 +-
> >   drivers/gpu/drm/client/Kconfig          |   14 +
> >   drivers/gpu/drm/client/Makefile         |    3 +
> >   drivers/gpu/drm/client/drm_bootsplash.c |  248 ++++++
> >   drivers/gpu/drm/client/drm_vtcon.c      |  785 +++++++++++++++++
> >   drivers/gpu/drm/client/internal.h       |   19 +
> >   drivers/gpu/drm/drm_atomic.c            |  168 ++++
> >   drivers/gpu/drm/drm_atomic_helper.c     |  168 +---
> >   drivers/gpu/drm/drm_auth.c              |   33 +
> >   drivers/gpu/drm/drm_client.c            | 1448 +++++++++++++++++++++++++++++++
> >   drivers/gpu/drm/drm_connector.c         |  199 +++++
> >   drivers/gpu/drm/drm_crtc_internal.h     |   18 +-
> >   drivers/gpu/drm/drm_debugfs.c           |    7 +
> >   drivers/gpu/drm/drm_drv.c               |   43 +
> >   drivers/gpu/drm/drm_dumb_buffers.c      |   33 +-
> >   drivers/gpu/drm/drm_fb_helper.c         | 1420 ++++++++----------------------
> >   drivers/gpu/drm/drm_file.c              |  304 ++++---
> >   drivers/gpu/drm/drm_framebuffer.c       |   50 +-
> >   drivers/gpu/drm/drm_internal.h          |    7 +
> >   drivers/gpu/drm/drm_ioc32.c             |    2 +-
> >   drivers/gpu/drm/drm_ioctl.c             |    4 +-
> >   drivers/gpu/drm/drm_prime.c             |   37 +-
> >   drivers/gpu/drm/drm_probe_helper.c      |    3 +
> >   drivers/gpu/drm/drm_sysfs.c             |   20 +
> >   drivers/gpu/drm/i915/i915_drv.c         |    1 +
> >   drivers/gpu/drm/i915/intel_drv.h        |   11 +
> >   drivers/gpu/drm/i915/intel_fbdev.c      |  112 +--
> >   include/drm/drm_atomic.h                |    5 +
> >   include/drm/drm_atomic_helper.h         |    4 -
> >   include/drm/drm_client.h                |  182 ++++
> >   include/drm/drm_connector.h             |   11 +
> >   include/drm/drm_device.h                |    4 +
> >   include/drm/drm_drv.h                   |   25 +
> >   include/drm/drm_fb_helper.h             |  126 ++-
> >   35 files changed, 4007 insertions(+), 1513 deletions(-)
> >   create mode 100644 drivers/gpu/drm/client/Kconfig
> >   create mode 100644 drivers/gpu/drm/client/Makefile
> >   create mode 100644 drivers/gpu/drm/client/drm_bootsplash.c
> >   create mode 100644 drivers/gpu/drm/client/drm_vtcon.c
> >   create mode 100644 drivers/gpu/drm/client/internal.h
> >   create mode 100644 drivers/gpu/drm/drm_client.c
> >   create mode 100644 include/drm/drm_client.h
> > 
> > --
> > 2.15.1
> > 
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

  reply	other threads:[~2018-04-16  7:47 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-12 13:17 [RFC v4 00/25] drm: Add generic fbdev emulation Noralf Trønnes
2018-04-12 13:17 ` [RFC v4 01/25] drm: provide management functions for drm_file Noralf Trønnes
2018-04-12 13:17 ` [RFC v4 02/25] drm/file: Don't set master on in-kernel clients Noralf Trønnes
2018-04-12 13:17 ` [RFC v4 03/25] drm/fb-helper: No need to cache rotation and sw_rotations Noralf Trønnes
2018-04-12 13:17 ` [RFC v4 04/25] drm/fb-helper: Remove drm_fb_helper_debug_enter/leave() Noralf Trønnes
2018-04-12 13:17 ` [RFC v4 05/25] drm/fb-helper: dpms_legacy(): Only set on connectors in use Noralf Trønnes
2018-04-12 13:17 ` [RFC v4 06/25] drm/atomic: Move __drm_atomic_helper_disable_plane/set_config() Noralf Trønnes
2018-04-12 13:17 ` [RFC v4 07/25] drm: Begin an API for in-kernel clients Noralf Trønnes
2018-04-12 13:17 ` [RFC v4 08/25] drm/fb-helper: Use struct drm_client_display Noralf Trønnes
2018-04-12 13:17 ` [RFC v4 09/25] drm/fb-helper: Move modeset commit code to drm_client Noralf Trønnes
2018-04-12 13:17 ` [RFC v4 10/25] drm/connector: Add drm_connector_has_preferred_mode/pick_cmdline_mode() Noralf Trønnes
2018-04-12 13:17 ` [RFC v4 11/25] drm/connector: Add connector array functions Noralf Trønnes
2018-04-12 16:34 ` [RFC v4 00/25] drm: Add generic fbdev emulation Noralf Trønnes
2018-04-16  7:47   ` Daniel Vetter [this message]
  -- strict thread matches above, loose matches on Subject: below --
2018-04-13 16:53 Noralf Trønnes
2018-04-13 17:06 ` Noralf Trønnes
2018-04-14 11:52 Noralf Trønnes
2018-04-16  8:21 ` Daniel Vetter
2018-04-16 18:49   ` Noralf Trønnes

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180416074702.GI31310@phenom.ffwll.local \
    --to=daniel@ffwll.ch \
    --cc=daniel.vetter@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=mstaudt@suse.de \
    --cc=noralf@tronnes.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox