lkml.org 
[lkml]   [2022]   [Aug]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.19 0310/1157] drm/mgag200: Acquire I/O lock while reading EDID
    Date
    From: Thomas Zimmermann <tzimmermann@suse.de>

    [ Upstream commit 5913ab941d6ea782e841234c76958c6872ea752d ]

    DDC operation conflicts with concurrent mode setting. Acquire the
    driver's I/O lock in get_modes to prevent this. This change should
    have been part of commit 931e3f3a0e99 ("drm/mgag200: Protect
    concurrent access to I/O registers with lock"), but apparently got
    lost somewhere.

    v3:
    * fix commit message to say 'drm/mgag200' (Jocelyn)

    Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
    Fixes: 931e3f3a0e99 ("drm/mgag200: Protect concurrent access to I/O registers with lock")
    Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com>
    Tested-by: Jocelyn Falempe <jfalempe@redhat.com>
    Cc: Thomas Zimmermann <tzimmermann@suse.de>
    Cc: Jocelyn Falempe <jfalempe@redhat.com>
    Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
    Cc: Dave Airlie <airlied@redhat.com>
    Cc: dri-devel@lists.freedesktop.org
    Link: https://patchwork.freedesktop.org/patch/msgid/20220516134343.6085-2-tzimmermann@suse.de
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/gpu/drm/mgag200/mgag200_mode.c | 10 ++++++++++
    1 file changed, 10 insertions(+)

    diff --git a/drivers/gpu/drm/mgag200/mgag200_mode.c b/drivers/gpu/drm/mgag200/mgag200_mode.c
    index abde7655477d..4ad8d62c5631 100644
    --- a/drivers/gpu/drm/mgag200/mgag200_mode.c
    +++ b/drivers/gpu/drm/mgag200/mgag200_mode.c
    @@ -667,16 +667,26 @@ static void mgag200_disable_display(struct mga_device *mdev)

    static int mga_vga_get_modes(struct drm_connector *connector)
    {
    + struct mga_device *mdev = to_mga_device(connector->dev);
    struct mga_connector *mga_connector = to_mga_connector(connector);
    struct edid *edid;
    int ret = 0;

    + /*
    + * Protect access to I/O registers from concurrent modesetting
    + * by acquiring the I/O-register lock.
    + */
    + mutex_lock(&mdev->rmmio_lock);
    +
    edid = drm_get_edid(connector, &mga_connector->i2c->adapter);
    if (edid) {
    drm_connector_update_edid_property(connector, edid);
    ret = drm_add_edid_modes(connector, edid);
    kfree(edid);
    }
    +
    + mutex_unlock(&mdev->rmmio_lock);
    +
    return ret;
    }

    --
    2.35.1


    \
     
     \ /
      Last update: 2022-08-16 01:25    [W:4.034 / U:0.400 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site