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/bridge: get/put the bridge reference in drm_bridge_attach/detach()

drm_bridge_attach() adds the bridge to the encoder chain, so take a
reference for that. Vice versa in drm_bridge_detach().

Reviewed-by: Maxime Ripard <mripard@kernel.org>
Link: https://lore.kernel.org/r/20250620-drm-bridge-alloc-getput-drm-bridge-c-v9-2-ca53372c9a84@bootlin.com
Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>

+13 -4
+13 -4
drivers/gpu/drm/drm_bridge.c
··· 411 411 if (!encoder || !bridge) 412 412 return -EINVAL; 413 413 414 - if (previous && (!previous->dev || previous->encoder != encoder)) 415 - return -EINVAL; 414 + drm_bridge_get(bridge); 416 415 417 - if (bridge->dev) 418 - return -EBUSY; 416 + if (previous && (!previous->dev || previous->encoder != encoder)) { 417 + ret = -EINVAL; 418 + goto err_put_bridge; 419 + } 420 + 421 + if (bridge->dev) { 422 + ret = -EBUSY; 423 + goto err_put_bridge; 424 + } 419 425 420 426 bridge->dev = encoder->dev; 421 427 bridge->encoder = encoder; ··· 470 464 "failed to attach bridge %pOF to encoder %s\n", 471 465 bridge->of_node, encoder->name); 472 466 467 + err_put_bridge: 468 + drm_bridge_put(bridge); 473 469 return ret; 474 470 } 475 471 EXPORT_SYMBOL(drm_bridge_attach); ··· 492 484 493 485 list_del(&bridge->chain_node); 494 486 bridge->dev = NULL; 487 + drm_bridge_put(bridge); 495 488 } 496 489 497 490 /**