Re: [PATCH RFCv1 01/14] iommufd: Move iommufd_object to public iommufd header

Nicolin Chen
2024-05-12T22:41:08Z

On Sun, May 12, 2024 at 10:21:49AM -0300, Jason Gunthorpe wrote:
> On Fri, Apr 12, 2024 at 08:46:58PM -0700, Nicolin Chen wrote:
> > diff --git a/include/linux/iommufd.h b/include/linux/iommufd.h
> > +enum iommufd_object_type {
> > + IOMMUFD_OBJ_NONE,
> > + IOMMUFD_OBJ_ANY = IOMMUFD_OBJ_NONE,
> > + IOMMUFD_OBJ_DEVICE,
> > + IOMMUFD_OBJ_HWPT_PAGING,
> > + IOMMUFD_OBJ_HWPT_NESTED,
> > + IOMMUFD_OBJ_IOAS,
> > + IOMMUFD_OBJ_ACCESS,
> > +#ifdef CONFIG_IOMMUFD_TEST
> > + IOMMUFD_OBJ_SELFTEST,
> > +#endif
> > + IOMMUFD_OBJ_MAX,
> > +};
>
> Can we just forward declare the enum? It would be nice to keep it in
> the private header

It doesn't seem to support that:
./include/linux/iommufd.h:31:34: error: field ‘type’ has incomplete type
31 | enum iommufd_object_type type;

By testing the following change on top of the series:
===================================
-enum iommufd_object_type {
- IOMMUFD_OBJ_NONE,
- IOMMUFD_OBJ_ANY = IOMMUFD_OBJ_NONE,
- IOMMUFD_OBJ_DEVICE,
- IOMMUFD_OBJ_HWPT_PAGING,
- IOMMUFD_OBJ_HWPT_NESTED,
- IOMMUFD_OBJ_IOAS,
- IOMMUFD_OBJ_ACCESS,
- IOMMUFD_OBJ_VIOMMU,
- IOMMUFD_OBJ_VQUEUE,
-#ifdef CONFIG_IOMMUFD_TEST
- IOMMUFD_OBJ_SELFTEST,
-#endif
- IOMMUFD_OBJ_MAX,
-};
+enum iommufd_object_type;

/* Base struct for all objects with a userspace ID handle. */
struct iommufd_object {
refcount_t shortterm_users;
refcount_t users;
enum iommufd_object_type type;
unsigned int id;
};
===================================

We could change the "enum iommufd_object_type type" in struct
iommufd_object to "unsigned int type" though...

Thanks
Nicolin