Message ID | 20180125003430.18558-1-niklas.soderlund+renesas@ragnatech.se (mailing list archive) |
---|---|
State | Not Applicable |
Delegated to: | Geert Uytterhoeven |
Headers | show |
Hi Niklas, On Thu, Jan 25, 2018 at 1:34 AM, Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se> wrote: > A recent change to the media_entity_to_video_device() macro breaks some > use-cases for the macro due to a symbol collision. Before the change > this worked: > > vdev = media_entity_to_video_device(link->sink->entity); > > While after the change it results in a compiler error "error: 'struct > video_device' has no member named 'link'; did you mean 'lock'?". While > the following still works after the change. > > struct media_entity *entity = link->sink->entity; > vdev = media_entity_to_video_device(entity); > > Fix the collision by renaming the macro argument to 'media_entity'. Thanks! Given there also exists a "struct media_entity", using "_media_entity" seems safe to me. Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds
Hi guys, On Thu, Jan 25, 2018 at 08:59:35AM +0100, Geert Uytterhoeven wrote: > Hi Niklas, > > On Thu, Jan 25, 2018 at 1:34 AM, Niklas Söderlund > <niklas.soderlund+renesas@ragnatech.se> wrote: > > A recent change to the media_entity_to_video_device() macro breaks some > > use-cases for the macro due to a symbol collision. Before the change > > this worked: > > > > vdev = media_entity_to_video_device(link->sink->entity); > > > > While after the change it results in a compiler error "error: 'struct > > video_device' has no member named 'link'; did you mean 'lock'?". While > > the following still works after the change. > > > > struct media_entity *entity = link->sink->entity; > > vdev = media_entity_to_video_device(entity); > > > > Fix the collision by renaming the macro argument to 'media_entity'. > > Thanks! > Given there also exists a "struct media_entity", using "_media_entity" seems > safe to me. That doesn't matter, does it? As long as the macro argument is used as a field name of a struct. I.e. "__entity" would be fine, as well as "e". I'd vote for __entity. :-) In any case, Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Hi Niklas, Em Thu, 25 Jan 2018 01:34:30 +0100 Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se> escreveu: > A recent change to the media_entity_to_video_device() macro breaks some > use-cases for the macro due to a symbol collision. Before the change > this worked: > > vdev = media_entity_to_video_device(link->sink->entity); > > While after the change it results in a compiler error "error: 'struct > video_device' has no member named 'link'; did you mean 'lock'?". While > the following still works after the change. > > struct media_entity *entity = link->sink->entity; > vdev = media_entity_to_video_device(entity); > > Fix the collision by renaming the macro argument to 'media_entity'. > > Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se> > --- > include/media/v4l2-dev.h | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > Hi Mauro, > > As the offending commit is not yet upstream and I'm not sure if the > commit ids in the media-tree are stable. If they are please attach the > following fixes tag. They are. > > Fixes: 69b925c5fc36d8f1 ("media: v4l2-dev.h: add kernel-doc to two macros") > > Regards, > // Niklas > > diff --git a/include/media/v4l2-dev.h b/include/media/v4l2-dev.h > index 267fd2bed17bd3c1..f0fc1ebda47244b3 100644 > --- a/include/media/v4l2-dev.h > +++ b/include/media/v4l2-dev.h > @@ -298,10 +298,10 @@ struct video_device > * media_entity_to_video_device - Returns a &struct video_device from > * the &struct media_entity embedded on it. > * > - * @entity: pointer to &struct media_entity > + * @media_entity: pointer to &struct media_entity > */ > -#define media_entity_to_video_device(entity) \ > - container_of(entity, struct video_device, entity) > +#define media_entity_to_video_device(media_entity) \ > + container_of(media_entity, struct video_device, entity) Instead, the best would be to use __entity (or __media_entity). That would very likely prevent future conflicts. > > /** > * to_video_device - Returns a &struct video_device from the Cheers, Mauro
diff --git a/include/media/v4l2-dev.h b/include/media/v4l2-dev.h index 267fd2bed17bd3c1..f0fc1ebda47244b3 100644 --- a/include/media/v4l2-dev.h +++ b/include/media/v4l2-dev.h @@ -298,10 +298,10 @@ struct video_device * media_entity_to_video_device - Returns a &struct video_device from * the &struct media_entity embedded on it. * - * @entity: pointer to &struct media_entity + * @media_entity: pointer to &struct media_entity */ -#define media_entity_to_video_device(entity) \ - container_of(entity, struct video_device, entity) +#define media_entity_to_video_device(media_entity) \ + container_of(media_entity, struct video_device, entity) /** * to_video_device - Returns a &struct video_device from the
A recent change to the media_entity_to_video_device() macro breaks some use-cases for the macro due to a symbol collision. Before the change this worked: vdev = media_entity_to_video_device(link->sink->entity); While after the change it results in a compiler error "error: 'struct video_device' has no member named 'link'; did you mean 'lock'?". While the following still works after the change. struct media_entity *entity = link->sink->entity; vdev = media_entity_to_video_device(entity); Fix the collision by renaming the macro argument to 'media_entity'. Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se> --- include/media/v4l2-dev.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) Hi Mauro, As the offending commit is not yet upstream and I'm not sure if the commit ids in the media-tree are stable. If they are please attach the following fixes tag. Fixes: 69b925c5fc36d8f1 ("media: v4l2-dev.h: add kernel-doc to two macros") Regards, // Niklas