• Peter Wu's avatar
    qxl: refactor to use drm_fb_helper_fbdev_setup · bf8744e4
    Peter Wu authored
    Lots of code can be removed by relying on fb-helper:
    - "struct drm_framebuffer" moves to fb_helper.fb.
    - "struct drm_gem_object" moves to fb_helper.obj[0].
    - "struct qxl_device" can be inferred as drm_fb_helper is embedded.
    - qxl_user_framebuffer_create -> drm_gem_fb_create.
    - qxl_user_framebuffer_destroy -> drm_gem_fb_destroy.
    - qxl_fbdev_destroy -> drm_fb_helper_fbdev_teardown + vfree(shadow).
    
    Remove unused code:
    - qxl_fbdev_qobj_is_fb, qxl_fbdev_set_suspend.
    - Unused fields of qxl_fbdev: delayed_ops, delayed_ops_lock, size.
    
    Misc notes:
    - The dirty callback is preserved as it is necessary to trigger update
      commands in the hw (the screen stays black otherwise).
    - No idea when .create_handle in drm_framebuffer_funcs is used, but use
      the same drm_gem_fb_create_handle to match drm_gem_fb_funcs.
    - I don't know why qxl_fb_find_or_create_single used to check for an
      existing framebuffer and removed that check to match other drivers.
    - Use of drm_fb_helper_fbdev_teardown also requires "info->fbdefio" to
      be dynamically allocated. Replace the existing defio config by
      drm_fb_helper_defio_init to accomodate this.
    
    Testing results: startx with fbdev, modesetting and qxl all seems to
    work. Tested also with CONFIG_DRM_FBDEV_EMULATION=n, fbdev obviously
    fails but others are fine. QEMU -spice and QEMU -spice with vdagent and
    multiple (resized) displays (via remote-viewer) also works.
    unbind vtconsole and rmmod has *not* regressed (i.e. it still trips on a
    use-after-free in qxl_check_idle via qxl_ttm_fini).
    
    Ideally setup/teardown is replaced by drm_fbdev_generic_setup as that
    would result in further code reduction, improve error handling (like not
    leaking shadow memory), but unfortunately QXL has no implementation for
    qxl_gem_prime_vmap.
    Signed-off-by: default avatarPeter Wu <peter@lekensteyn.nl>
    Link: http://patchwork.freedesktop.org/patch/msgid/20180910132156.23201-1-peter@lekensteyn.nlSigned-off-by: default avatarGerd Hoffmann <kraxel@redhat.com>
    bf8744e4
qxl_drv.h 14.5 KB