Re: [PATCH] drm/print: Include drm_device.h

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Jan 22, 2025 at 04:49:21PM +0200, Jani Nikula wrote:
> On Wed, 22 Jan 2025, Gustavo Sousa <gustavo.sousa@xxxxxxxxx> wrote:
> > Quoting Jani Nikula (2025-01-22 11:02:31-03:00)
> >>On Wed, 22 Jan 2025, Gustavo Sousa <gustavo.sousa@xxxxxxxxx> wrote:
> >>> Quoting Simona Vetter (2025-01-22 08:11:53-03:00)
> >>>>On Tue, Jan 21, 2025 at 06:09:25PM -0300, Gustavo Sousa wrote:
> >>>>> The header drm_print.h uses members of struct drm_device pointers, as
> >>>>> such, it should include drm_device.h to let the compiler know the full
> >>>>> type definition.
> >>>>> 
> >>>>> Without such include, users of drm_print.h that don't explicitly need
> >>>>> drm_device.h would bump into build errors and be forced to include the
> >>>>> latter.
> >>>>> 
> >>>>> Signed-off-by: Gustavo Sousa <gustavo.sousa@xxxxxxxxx>
> >>>>> ---
> >>>>>  include/drm/drm_print.h | 1 +
> >>>>>  1 file changed, 1 insertion(+)
> >>>>> 
> >>>>> diff --git a/include/drm/drm_print.h b/include/drm/drm_print.h
> >>>>> index f77fe1531cf8..9732f514566d 100644
> >>>>> --- a/include/drm/drm_print.h
> >>>>> +++ b/include/drm/drm_print.h
> >>>>> @@ -32,6 +32,7 @@
> >>>>>  #include <linux/dynamic_debug.h>
> >>>>>  
> >>>>>  #include <drm/drm.h>
> >>>>> +#include <drm/drm_device.h>
> >>>>
> >>>>We much prefer just a struct device forward decl to avoid monster headers.
> >>>>Is that not doable here?
> >>>
> >>> I don't think so. This header explicitly uses members of struct
> >>> drm_device, so the compiler needs to know the full type definition. As
> >>> an example see the definition of drm_WARN(), it uses (drm)->dev.
> >>
> >>I grudgingly agree. I don't think there are actual cases where this
> >>happens, but I can imagine you could create one.
> >
> > It happened to me, and that motivated me to send this patch.
> >
> > I had a local patch where I just needed the drm_print.h header, but I
> > ended up having to include drm_device.h in my .c file.
> 
> Right.
> 
> Reviewed-by: Jani Nikula <jani.nikula@xxxxxxxxx>

So at least in the past we sometimes intentionally used macros instead of
static inline functions, so that we could avoid pulling in headers from
headers all over the place. That's why I only looked at the one static
inline functions, which treats the pointer as opaque so should work.

I don't mind either way, just bringing this in so that we're consistent
here.
-Sima

> 
> >
> >>
> >>>> Worst case I'd convert the drm_info_printer() static inline to a
> >>>> macro, not sure about the exact rules here if you never deref a
> >>>> pointer.
> >>
> >>The forward declaration is enough for passing pointers around without
> >>dereferencing. It's the dereferencing in the macros that could fail the
> >>build if the .c using them doesn't include drm_device.h.
> >>
> >>To balance things out, I think we could probably drop drm/drm.h if we
> >>inlined one use of DRM_NAME to just "drm".
> >>
> >>
> >>BR,
> >>Jani.
> >>
> >>
> >>>>-Sima
> >>>>
> >>>>>  
> >>>>>  struct debugfs_regset32;
> >>>>>  struct drm_device;
> >>>>> -- 
> >>>>> 2.48.1
> >>>>> 
> >>>>
> >>>>-- 
> >>>>Simona Vetter
> >>>>Software Engineer, Intel Corporation
> >>>>http://blog.ffwll.ch
> >>
> >>-- 
> >>Jani Nikula, Intel
> 
> -- 
> Jani Nikula, Intel

-- 
Simona Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch



[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux