Re: [RESEND RFC 18/18] drm/display/dp_mst: Move all payload info into the atomic state

Lyude Paul
2022-08-03T20:28:10Z

On Tue, 2022-07-05 at 09:10 +0000, Lin, Wayne wrote:
> > +struct drm_dp_mst_port;
> > +
> >   /* DP MST stream allocation (payload bandwidth number) */
> >   struct dc_dp_mst_stream_allocation {
> >    uint8_t vcp_id;
> >    /* number of slots required for the DP stream in
> >    * transport packet */
> >    uint8_t slot_count;
> > + /* The MST port this is on, this is used to associate DC MST payloads
> > with their
> > + * respective DRM payloads allocations, and can be ignored on non-
> > Linux.
> > + */
>
> Is it necessary for adding this new member? Since this is for setting the DC
> HW and not relating to drm.

I don't entirely know, honestly. The reasons I did it:

* Mapping things from DRM to DC and from DC to DRM is really confusing for
outside contributors like myself, so it wasn't even really clear to me if
there was another way to reconstruct the DRM context from the spots where
we call from DC up to DM (not a typo, see next point).
* These DC structs for MST are already layer mixing as far as I can tell,
just not in an immediately obvious way. While this struct itself is for DC,
there's multiple spots where we pass the DC payload structs down from DM to
DC, then pass them back up from DC to DM and have to figure out how to
reconstruct the DRM context that we actually need to use the MST helpers
from that. So, that kind of further complicates the confusion of where
layers should be separated.
* As far as I'm aware with C there shouldn't be any issue with adding a
pointer to a struct whose contents are undefined. IMHO, this is also
preferable to just using void* because then at least you get some hint as
to the actual type of the data and avoid the possibility of casting it to
the wrong type. So tl;dr, on any platform even outside of Linux with a
reasonably compliant compiler this should still build just fine. It'll even
give you the added bonus of warning people if they try to access the
contents of this member in DC on non-Linux platforms. If void* is preferred
though I'm fine with switching it to that.

--
Cheers, Lyude Paul (she/her) Software Engineer at Red Hat