• Thomas Zimmermann's avatar
    drm/qxl: Pin buffer objects for internal mappings · c537fb4e
    Thomas Zimmermann authored
    Add qxl_bo_pin_and_vmap() that pins and vmaps a buffer object in one
    step. Update callers of the regular qxl_bo_vmap(). Fixes a bug where
    qxl accesses an unpinned buffer object while it is being moved; such
    as with the monitor-description BO. An typical error is shown below.
    
    [    4.303586] [drm:drm_atomic_helper_commit_planes] *ERROR* head 1 wrong: 65376256x16777216+0+0
    [    4.586883] [drm:drm_atomic_helper_commit_planes] *ERROR* head 1 wrong: 65376256x16777216+0+0
    [    4.904036] [drm:drm_atomic_helper_commit_planes] *ERROR* head 1 wrong: 65335296x16777216+0+0
    [    5.374347] [drm:qxl_release_from_id_locked] *ERROR* failed to find id in release_idr
    
    Commit b33651a5 ("drm/qxl: Do not pin buffer objects for vmap")
    removed the implicit pin operation from qxl's vmap code. This is the
    correct behavior for GEM and PRIME interfaces, but the pin is still
    needed for qxl internal operation.
    
    Also add a corresponding function qxl_bo_vunmap_and_unpin() and remove
    the old qxl_bo_vmap() helpers.
    
    Future directions: BOs should not be pinned or vmapped unnecessarily.
    The pin-and-vmap operation should be removed from the driver and a
    temporary mapping should be established with a vmap_local-like helper.
    See the client helper drm_client_buffer_vmap_local() for semantics.
    
    v2:
    - unreserve BO on errors in qxl_bo_pin_and_vmap() (Dmitry)
    Signed-off-by: default avatarThomas Zimmermann <tzimmermann@suse.de>
    Fixes: b33651a5 ("drm/qxl: Do not pin buffer objects for vmap")
    Reported-by: default avatarDavid Kaplan <david.kaplan@amd.com>
    Closes: https://lore.kernel.org/dri-devel/ab0fb17d-0f96-4ee6-8b21-65d02bb02655@suse.de/Tested-by: default avatarDavid Kaplan <david.kaplan@amd.com>
    Reviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    Cc: Thomas Zimmermann <tzimmermann@suse.de>
    Cc: Dmitry Osipenko <dmitry.osipenko@collabora.com>
    Cc: Christian König <christian.koenig@amd.com>
    Cc: Zack Rusin <zack.rusin@broadcom.com>
    Cc: Dave Airlie <airlied@redhat.com>
    Cc: Gerd Hoffmann <kraxel@redhat.com>
    Cc: virtualization@lists.linux.dev
    Cc: spice-devel@lists.freedesktop.org
    Reviewed-by: default avatarDmitry Osipenko <dmitry.osipenko@collabora.com>
    Reviewed-by: default avatarZack Rusin <zack.rusin@broadcom.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240708142208.194361-1-tzimmermann@suse.de
    c537fb4e
qxl_object.c 9.26 KB