drm_dp_mst_atomic_check_mgr(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… drm_dp_mst_atomic_check_mgr(9) πŸŽ€

okay so this is a page from the Kernel API Manual, bestie β€” yes it's a whole manual, like a physical book but for gremlins who read C for fun. Pull up a chair, we're checking MST topology managers and we're gonna slay it ✨


🌸 NAME 🌸

drm_dp_mst_atomic_check_mgr β€” the vibe check for an MST topology manager's atomic state. like, is your atomic state actually valid or are you lying to me πŸ’…


πŸ¦‹ SYNOPSIS πŸ¦‹

int drm_dp_mst_atomic_check_mgr (struct drm_atomic_commit *state ,
struct drm_dp_mst_topology_mgr *mgr , struct drm_dp_mst_topology_state
*mst_state , struct drm_dp_mst_port **failing_port );

πŸŽ€ ARGUMENTS πŸŽ€

  • state β€” the global atomic state, the big picture, the main character of the whole commit 🌈
  • mgr β€” the manager you want checked. yes, that one. the one you're side-eyeing πŸ‘€
  • mst_state β€” the MST atomic state that belongs to mgr. it's their state, respect it 🫢
  • failing_port β€” an out-param that hands you back the port with a BW limitation. it's literally the "who did this" of the operation 😭

✨ DESCRIPTION ✨

So what this does: it checks the given MST manager's topology state for an atomic update to make sure it's valid. and yeah, "valid" includes checking whether there's enough bandwidth to support the new timeslot allocations in the atomic update. that's the whole point, no cap πŸ”₯

Any atomic drivers supporting DP MST must make sure to call this β€” or the drm_dp_mst_atomic_check function β€” after checking the rest of their state in their drm_mode_config_funcs.atomic_check callback. not optional, bestie, it's giving mandatory πŸ’€

See also: drm_dp_mst_atomic_check drm_dp_atomic_find_time_slots drm_dp_atomic_release_time_slots β€” the little friend group of related functions 🫢

And now the cute annotated list of what failing_port can come back as:

  • The non-root port where a BW limit check failed, with all the ports downstream of failing_port passing the BW limit check. the returned port pointer is valid until at least one payload downstream of it exists. so like, don't hold onto it forever, it's on a lease πŸ¦‹
  • NULL if the BW limit check failed at the root port with all the ports downstream of the root port passing the BW limit check. root port took the L, downstream ports are innocent πŸŽ€
  • -EINVAL, if the new state is invalid, because the root port has too many payloads. too many!! payloads!! ma'am this is a Wendy's πŸ“

πŸ‘‘ RETURN πŸ‘‘

  • 0 if the new state is valid β€” iconic, we love a clean pass βœ…
  • -ENOSPC, if the new state is invalid, because of BW limitation. failing_port is set to: … yeah, see the list up in DESCRIPTION, that's where the three cases live πŸ’–

🌈 SEE ALSO 🌈

okay this list is long long, like the entire extended friend group showed up to the party 🧚 and they're all here for a reason:

Kernel file ./drivers/gpu/drm/display/drm_dp_mst_topology.c dp mst helper(9), Branch device and port refcounting(9), drm_dp_mst_get_mstb_malloc(9), drm_dp_mst_put_mstb_malloc(9), drm_dp_mst_get_port_malloc(9), drm_dp_mst_put_port_malloc(9), drm_dp_mst_topology_try_get_mstb(9), drm_dp_mst_topology_get_mstb(9), drm_dp_mst_topology_put_mstb(9), drm_dp_mst_topology_try_get_port(9), drm_dp_mst_topology_get_port(9), drm_dp_mst_topology_put_port(9), drm_dp_mst_dpcd_read(9), drm_dp_mst_dpcd_write(9), drm_dp_mst_connector_late_register(9), drm_dp_mst_connector_early_unregister(9), drm_dp_add_payload_part1(9), drm_dp_remove_payload_part1(9), drm_dp_remove_payload_part2(9), drm_dp_add_payload_part2(9), drm_dp_get_vc_payload_bw(9), drm_dp_read_mst_cap(9), drm_dp_mst_topology_mgr_set_mst(9), drm_dp_mst_topology_queue_probe(9), drm_dp_mst_topology_mgr_suspend(9), drm_dp_mst_topology_mgr_resume(9), drm_dp_mst_hpd_irq_handle_event(9), drm_dp_mst_hpd_irq_send_new_request(9), drm_dp_mst_detect_port(9), drm_dp_mst_edid_read(9), drm_dp_mst_get_edid(9), drm_dp_atomic_find_time_slots(9), drm_dp_atomic_release_time_slots(9), drm_dp_mst_atomic_setup_commit(9), drm_dp_mst_atomic_wait_for_dependencies(9), drm_dp_mst_root_conn_atomic_check(9), drm_dp_mst_update_slots(9), drm_dp_check_act_status(9), drm_dp_calc_pbn_mode(9), drm_dp_mst_dump_topology(9), drm_dp_mst_port_downstream_of_parent(9), drm_dp_mst_add_affected_dsc_crtcs(9), drm_dp_mst_atomic_enable_dsc(9), drm_dp_mst_atomic_check(9), drm_atomic_get_mst_topology_state(9), drm_atomic_get_old_mst_topology_state(9), drm_atomic_get_new_mst_topology_state(9), drm_dp_mst_topology_mgr_init(9), drm_dp_mst_topology_mgr_destroy(9), drm_dp_mst_register_i2c_bus(9), drm_dp_mst_unregister_i2c_bus(9), drm_dp_mst_is_virtual_dpcd(9), drm_dp_mst_aux_for_parent(9), drm_dp_mst_dsc_aux_for_port(9)

like I said. everybody came πŸ˜­πŸ’œ


sign-off time 🫢 this little gem lives in ./drivers/gpu/drm/display, and it's dated October 2026 β€” future-coded of it honestly. go forth, call your atomic checks, and stay hydrated bestie πŸ’–βœ¨πŸŽ€

πŸ“¦ where this page comes from