Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

drm/ast: Turn ioregs_lock to modeset_lock

The lock for the I/O registers is only relevant during mode-setting
operations. It protects the registers from concurrent access from
reading EDID information.

Reduce lock coverage to mode setting, rename the lock and move it
entirely into the mode-setting code. No functional changes, as the
I/O lock was never used for anything else than mode setting.

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20231116100240.22975-2-tzimmermann@suse.de

+17 -16
+2 -1
drivers/gpu/drm/ast/ast_drv.h
··· 192 192 struct ast_device { 193 193 struct drm_device base; 194 194 195 - struct mutex ioregs_lock; /* Protects access to I/O registers in ioregs */ 196 195 void __iomem *regs; 197 196 void __iomem *ioregs; 198 197 void __iomem *dp501_fw_buf; ··· 205 206 unsigned long vram_base; 206 207 unsigned long vram_size; 207 208 unsigned long vram_fb_available; 209 + 210 + struct mutex modeset_lock; /* Protects access to modeset I/O registers in ioregs */ 208 211 209 212 struct ast_plane primary_plane; 210 213 struct ast_plane cursor_plane;
-4
drivers/gpu/drm/ast/ast_main.c
··· 440 440 441 441 pci_set_drvdata(pdev, dev); 442 442 443 - ret = drmm_mutex_init(dev, &ast->ioregs_lock); 444 - if (ret) 445 - return ERR_PTR(ret); 446 - 447 443 ast->regs = pcim_iomap(pdev, 1, 0); 448 444 if (!ast->regs) 449 445 return ERR_PTR(-EIO);
+15 -11
drivers/gpu/drm/ast/ast_mode.c
··· 1358 1358 * Protect access to I/O registers from concurrent modesetting 1359 1359 * by acquiring the I/O-register lock. 1360 1360 */ 1361 - mutex_lock(&ast->ioregs_lock); 1361 + mutex_lock(&ast->modeset_lock); 1362 1362 1363 1363 edid = drm_get_edid(connector, &ast_vga_connector->i2c->adapter); 1364 1364 if (!edid) 1365 1365 goto err_mutex_unlock; 1366 1366 1367 - mutex_unlock(&ast->ioregs_lock); 1367 + mutex_unlock(&ast->modeset_lock); 1368 1368 1369 1369 count = drm_add_edid_modes(connector, edid); 1370 1370 kfree(edid); ··· 1372 1372 return count; 1373 1373 1374 1374 err_mutex_unlock: 1375 - mutex_unlock(&ast->ioregs_lock); 1375 + mutex_unlock(&ast->modeset_lock); 1376 1376 err_drm_connector_update_edid_property: 1377 1377 drm_connector_update_edid_property(connector, NULL); 1378 1378 return 0; ··· 1464 1464 * Protect access to I/O registers from concurrent modesetting 1465 1465 * by acquiring the I/O-register lock. 1466 1466 */ 1467 - mutex_lock(&ast->ioregs_lock); 1467 + mutex_lock(&ast->modeset_lock); 1468 1468 1469 1469 edid = drm_get_edid(connector, &ast_sil164_connector->i2c->adapter); 1470 1470 if (!edid) 1471 1471 goto err_mutex_unlock; 1472 1472 1473 - mutex_unlock(&ast->ioregs_lock); 1473 + mutex_unlock(&ast->modeset_lock); 1474 1474 1475 1475 count = drm_add_edid_modes(connector, edid); 1476 1476 kfree(edid); ··· 1478 1478 return count; 1479 1479 1480 1480 err_mutex_unlock: 1481 - mutex_unlock(&ast->ioregs_lock); 1481 + mutex_unlock(&ast->modeset_lock); 1482 1482 err_drm_connector_update_edid_property: 1483 1483 drm_connector_update_edid_property(connector, NULL); 1484 1484 return 0; ··· 1670 1670 * Protect access to I/O registers from concurrent modesetting 1671 1671 * by acquiring the I/O-register lock. 1672 1672 */ 1673 - mutex_lock(&ast->ioregs_lock); 1673 + mutex_lock(&ast->modeset_lock); 1674 1674 1675 1675 succ = ast_astdp_read_edid(connector->dev, edid); 1676 1676 if (succ < 0) 1677 1677 goto err_mutex_unlock; 1678 1678 1679 - mutex_unlock(&ast->ioregs_lock); 1679 + mutex_unlock(&ast->modeset_lock); 1680 1680 1681 1681 drm_connector_update_edid_property(connector, edid); 1682 1682 count = drm_add_edid_modes(connector, edid); ··· 1685 1685 return count; 1686 1686 1687 1687 err_mutex_unlock: 1688 - mutex_unlock(&ast->ioregs_lock); 1688 + mutex_unlock(&ast->modeset_lock); 1689 1689 kfree(edid); 1690 1690 err_drm_connector_update_edid_property: 1691 1691 drm_connector_update_edid_property(connector, NULL); ··· 1870 1870 * display modes. Protect access to I/O registers by acquiring 1871 1871 * the I/O-register lock. Released in atomic_flush(). 1872 1872 */ 1873 - mutex_lock(&ast->ioregs_lock); 1873 + mutex_lock(&ast->modeset_lock); 1874 1874 drm_atomic_helper_commit_tail_rpm(state); 1875 - mutex_unlock(&ast->ioregs_lock); 1875 + mutex_unlock(&ast->modeset_lock); 1876 1876 } 1877 1877 1878 1878 static const struct drm_mode_config_helper_funcs ast_mode_config_helper_funcs = { ··· 1909 1909 struct drm_device *dev = &ast->base; 1910 1910 struct drm_connector *physical_connector = NULL; 1911 1911 int ret; 1912 + 1913 + ret = drmm_mutex_init(dev, &ast->modeset_lock); 1914 + if (ret) 1915 + return ret; 1912 1916 1913 1917 ret = drmm_mode_config_init(dev); 1914 1918 if (ret)