24/02/2024 11:42, Morten Brørup: > From: Tyler Retzlaff [mailto:roret...@linux.microsoft.com] > > RTE_MARKER typedefs are a GCC extension unsupported by MSVC. This series > > hides the markers when building with MSVC and updates libraries and > > drivers to access compatibly typed pointers to the rte_mbuf struct > > offsets. > > > > This series, does the following. > > > > Introduces a new macro __rte_marker(type, name) which is used to > > conditionally expand RTE_MARKER fields empty when building with GCC. > > Important typo: GCC -> MSVC. > > Correct me if I'm wrong: When building with MSVC, the RTE_MARKER fields don't > exist at all.
Yes it should trigger a compiler error when using an old marker with MSVC. So no need of this wrapper __rte_marker(). > > Updates existing inline functions accessing cacheline{0,1} markers in > > the rte_mbuf struct to stop using the markers and instead uses the mbuf > > fields directly. > > > > Introduces 2 new inline functions to allow drivers to access rearm_data > > and rx_descriptor_fields1 descriptors without using the RTE_MARKER > > fields. > > > > Updates all drivers to use the new inline rte_mbuf struct accessors for > > rearm_data and rx_descriptor_fields1. > > Accessor functions like these are BS for structures that are part of the > public API. What is BS? > Nobody will use the accessor functions! When developing an application (or > lib or driver), the developer will look at the structure and access the > relevant fields directly; why would the developer start looking elsewhere for > accessor functions? Yes that's why we need to reference the accessors inside the mbuf structure. Also we should check new code (with checkpatch) for not using markers anymore. > Another alternative would be to remove the rearm_data and > rx_descriptor_fields1 fields from the structure, and in the drivers address > the first field of the group, and preferably add some static_asserts to check > the sequence of the fields they cover. I don't like this alternative, but I'm > putting it out there for discussion/inspiration. > I prefer the union+struct approach to visibly group the fields together. Unions make the mbuf struct more complicate just for compatibility. > Overall, I dislike approach taken in this version of the patch series. > On the surface, it has minimal changes to the mbuf structure. > But underneath, some of the fields (the markers) may or may not exist, > depending on compiler, and this fact is not obvious when looking at the > structure. I think this will degrade future MSVC compatibility for both > applications, libraries and PMDs. With appropriate checks, we won't use markers anymore. > As Thomas stressed, we should take special care of the mbuf structure! > It has to be modified for MSVC compatibility, so we have to find the best > compromise. > Personally, I prefer the previous approach over this version. > > Maybe we need to compromise on API compatibility to make this a beautiful > modification. > > @Thomas, looking at the mbuf and eal patches, what do you think about this > version of the series? I prefer this series with following changes: - no __rte_marker wrapper - make sure cache line padding is effective without markers - no direct access of fields for cache line prefetch - comments in mbuf - checkpatch