> From: Thomas Monjalon [mailto:tho...@monjalon.net] > Sent: Saturday, 24 February 2024 12.14 > > 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 >
Thomas has provided a lot of good feedback for this version of the series, showing that the path is worth exploring further. In other words: I'm likely to be convinced. ;-)