STRUCT DRM_DP_MST_ATOMIC_PAYLOAD(9)
π struct drm_dp_mst_atomic_payload(9) β the Kernel API Manual glow-up β¨
okay so bestie, this is from the Kernel API Manual, and today's main character is struct drm_dp_mst_atomic_payload. let's get into it π
β¨ NAME β¨
struct drm_dp_mst_atomic_payload β the atomic state struct for an MST payload. yes that's the whole vibe, she's the state-holder for one MST payload π
πΈ SYNOPSIS πΈ
struct drm_dp_mst_atomic_payload {
struct drm_dp_mst_port *port;
s8 vc_start_slot;
u8 vcpi;
int time_slots;
int pbn;
bool delete : 1;
bool dsc_enabled : 1;
enum drm_dp_mst_payload_allocation payload_allocation_status;
struct list_head next;
};
π¦ Members π¦
portβ the MST port that's assigned to this payload. she's taken πvc_start_slotβ the time slot this payload starts on. and here's the gag: because payload start slots literally cannot be figured out ahead of time, the contents of this value are UNDEFINED at atomic check time. π and honestly? usually nobody cares, because the start slot should never matter for atomic state computations anyway.
so since this value gets determined at commit time and not check time, it's protected by the MST helpers making sure that async commits working on the given topology never run in parallel. but if a driver does need to read this value (like, to tell hardware the starting timeslot for a payload), the driver has two options:
- read this field during the atomic commit, after
drm_dp_mst_atomic_wait_for_dependencieshas been called β that guarantees the previous MST states' payload start slots have already been copied over to the new state. just know that a new start slot won't be assigned or removed from this payload untildrm_dp_add_payload_part1/drm_dp_remove_payload_part2have been called π₯ - acquire the MST modesetting lock, then wait for any pending MST-related commits to get committed to hardware by calling
drm_crtc_commit_waiton each of thedrm_crtc_commitstructs indrm_dp_mst_topology_state.commit_deps
and if neither of those two solutions is enough for you (like, the driver needs to read the start slot mid-atomic-commit without waiting, for some reason π)? then the driver should cache this value itself after changing payloads. no cap.
vcpiβ the Virtual Channel Payload Identifier πtime_slotsβ the number of timeslots allocated to this payload, from the source DP Tx to the immediate downstream DP Rxpbnβ the payload bandwidth for this payload πΆdeleteβ whether or not we intend to delete this payload during this atomic commit. it's giving "should we remove her"dsc_enabledβ whether or not this payload has DSC enabledpayload_allocation_statusβ the allocation status of this payloadnextβ the list node for this payload, a.k.a. the link in the chain π
π Description π
she's the primary atomic state structure for a given MST payload. π stores information like the current bandwidth allocation, the intended action for this payload, etc. literally the main character energy of the payload world, periodt.
π SEE ALSO π
kernel file ./include/drm/display/drm_dp_mst_helper.h, plus these icons:
struct drm_dp_mst_port(9)struct drm_dp_mst_branch(9)struct drm_dp_mst_topology_state(9)struct drm_dp_mst_topology_mgr(9)enum drm_dp_mst_mode(9)__drm_dp_mst_state_iter_get(9)for_each_oldnew_mst_mgr_in_state(9)for_each_old_mst_mgr_in_state(9)for_each_new_mst_mgr_in_state(9)
okay that's the whole page bestie, go read the source, mwah π«Άπ
sourced from ./include/drm/display, dated October 2026, and it's still struct drm_dp_mst_atomic_payload(9) at the end of the day β¨
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms