On Tue, May 13, 2025 at 03:53:10PM -0300, Jason Gunthorpe wrote: > On Wed, May 07, 2025 at 09:37:07AM +0700, Bagas Sanjaya wrote: > > On Mon, May 05, 2025 at 11:18:32AM -0300, Jason Gunthorpe wrote: > > > +Since each compilation unit can only access one underlying format at a > > > time, > > > +code that is intended to be generic across multiple formats has to > > > compile > > > +itself multiple times. > > > + > > > +In an implementation compilation unit the headers would normally be > > > included as > > > +follows:: > > > + > > > + #include <linux/generic_pt/common.h> > > > + #include "fmt/defs_amdv1.h" > > > + #include "pt_defs.h" > > > + #include "fmt/amdv1.h" > > > + #include "pt_common.h" > > > + #include "pt_iter.h" > > > > What do you mean by compiling generic code multiple times? Including > > their headers at multiple places like above? > > How about like this: > > Instead the function pointers can end up at the higher level API (ie > map/unmap, > etc) and the per-format code can be directly inlined into the per-format > compilation unit. For something like iommu each format will be compiled into a > per-format iommu operations kernel module. > > For this to work the .c file for each compilation unit will include both the > format headers and the generic code for the implementation. For instance in an > implementation compilation unit the headers would normally be included as > follows:: > > #include <linux/generic_pt/common.h> > #include "fmt/defs_amdv1.h" > #include "pt_defs.h" > #include "fmt/amdv1.h" > #include "pt_common.h" > #include "pt_iter.h" > #include "iommut_pt.h" /* The iommu implementation */ > > iommu_pt.h includes definitions that will generate the operations functions > for > map/unmap/etc using the definitions provided by AMDv1. The resulting module > will have exported symbols named like pt_iommu_amdv1_init().
Looks good. Thanks. -- An old man doll... just what I always wanted! - Clara
signature.asc
Description: PGP signature