Message ID | 20230613231709.150622-3-arkadiusz.kubalewski@intel.com (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net-next] tools: ynl-gen: generate docs for <name>_max/_mask enums | expand |
On Wed, 14 Jun 2023 01:17:09 +0200 Arkadiusz Kubalewski wrote: > Including ynl generated uapi header files into source kerneldocs > (rst files in Documentation/) produces warnings during documentation > builds (i.e. make htmldocs) > > Prevent warnings by generating also description for enums where rander_max > was selected. Do you reckon that documenting the meta-values makes sense, or should we throw a: /* private: */ comment in front of them so that kdoc ignores them? Does user space have any use for those? If we want to document them... > diff --git a/include/uapi/linux/netdev.h b/include/uapi/linux/netdev.h > index 639524b59930..d78f7ae95092 100644 > --- a/include/uapi/linux/netdev.h > +++ b/include/uapi/linux/netdev.h > @@ -24,6 +24,7 @@ > * XDP buffer support in the driver napi callback. > * @NETDEV_XDP_ACT_NDO_XMIT_SG: This feature informs if netdev implements > * non-linear XDP buffer support in ndo_xdp_xmit callback. > + * @NETDEV_XDP_ACT_MASK: valid values mask ... I think we need to include some sort of indication that the value will change as the uAPI is extended. Unlike the other values which are set in stone, so to speak. "mask of currently defines values" ? Dunno. > */ > enum netdev_xdp_act { > NETDEV_XDP_ACT_BASIC = 1, > diff --git a/tools/include/uapi/linux/netdev.h b/tools/include/uapi/linux/netdev.h > index 639524b59930..d78f7ae95092 100644 > --- a/tools/include/uapi/linux/netdev.h > +++ b/tools/include/uapi/linux/netdev.h > @@ -24,6 +24,7 @@ > * XDP buffer support in the driver napi callback. > * @NETDEV_XDP_ACT_NDO_XMIT_SG: This feature informs if netdev implements > * non-linear XDP buffer support in ndo_xdp_xmit callback. > + * @NETDEV_XDP_ACT_MASK: valid values mask > */ > enum netdev_xdp_act { > NETDEV_XDP_ACT_BASIC = 1, > diff --git a/tools/net/ynl/ynl-gen-c.py b/tools/net/ynl/ynl-gen-c.py > index 0b5e0802a9a7..0d396bf98c27 100755 > --- a/tools/net/ynl/ynl-gen-c.py > +++ b/tools/net/ynl/ynl-gen-c.py > @@ -2011,6 +2011,7 @@ def render_uapi(family, cw): > # Write kdoc for enum and flags (one day maybe also structs) > if const['type'] == 'enum' or const['type'] == 'flags': > enum = family.consts[const['name']] > + name_pfx = const.get('name-prefix', f"{family.name}-{const['name']}-") > > if enum.has_doc(): > cw.p('/**') > @@ -2022,10 +2023,18 @@ def render_uapi(family, cw): > if entry.has_doc(): > doc = '@' + entry.c_name + ': ' + entry['doc'] > cw.write_doc_line(doc) > + if const.get('render-max', False): > + if const['type'] == 'flags': > + doc = '@' + c_upper(name_pfx + 'mask') + ': valid values mask' > + cw.write_doc_line(doc) > + else: > + doc = '@' + c_upper(name_pfx + 'max') + ': max valid value' > + cw.write_doc_line(doc) > + doc = '@__' + c_upper(name_pfx + 'max') + ': do not use' This one is definitely a candidate for /* private: */ > + cw.write_doc_line(doc) > cw.p(' */') > > uapi_enum_start(family, cw, const, 'name') > - name_pfx = const.get('name-prefix', f"{family.name}-{const['name']}-") > for entry in enum.entries.values(): > suffix = ',' > if entry.value_change:
>From: Jakub Kicinski <kuba@kernel.org> >Sent: Wednesday, June 14, 2023 2:59 AM > >On Wed, 14 Jun 2023 01:17:09 +0200 Arkadiusz Kubalewski wrote: >> Including ynl generated uapi header files into source kerneldocs >> (rst files in Documentation/) produces warnings during documentation >> builds (i.e. make htmldocs) >> >> Prevent warnings by generating also description for enums where >> rander_max was selected. > >Do you reckon that documenting the meta-values makes sense, or should >we throw a: > >/* private: */ > Most probably it doesn't.. Tried this: /* [ other values description ] * private: * @__<NAME>_MAX */ and this: /* [ other values description ] * private: @__<NAME>_MAX */ Both are not working as we would expect. Do you mean to have double comments for enums? like: /* [ other values description ] */ /* * private: * @__<NAME>_MAX */ >comment in front of them so that kdoc ignores them? Does user space >have any use for those? If we want to document them... > Hmm, do you recall where I can find proper format of such ignore enum comment for kdoc generation? Or maybe we need to also submit patch to some kdoc build process to actually change the current behavior? >> diff --git a/include/uapi/linux/netdev.h b/include/uapi/linux/netdev.h >> index 639524b59930..d78f7ae95092 100644 >> --- a/include/uapi/linux/netdev.h >> +++ b/include/uapi/linux/netdev.h >> @@ -24,6 +24,7 @@ >> * XDP buffer support in the driver napi callback. >> * @NETDEV_XDP_ACT_NDO_XMIT_SG: This feature informs if netdev implements >> * non-linear XDP buffer support in ndo_xdp_xmit callback. >> + * @NETDEV_XDP_ACT_MASK: valid values mask > >... I think we need to include some sort of indication that the value >will change as the uAPI is extended. Unlike the other values which are >set in stone, so to speak. "mask of currently defines values" ? Dunno. > Sure can fix this. >> */ >> enum netdev_xdp_act { >> NETDEV_XDP_ACT_BASIC = 1, >> diff --git a/tools/include/uapi/linux/netdev.h >>b/tools/include/uapi/linux/netdev.h >> index 639524b59930..d78f7ae95092 100644 >> --- a/tools/include/uapi/linux/netdev.h >> +++ b/tools/include/uapi/linux/netdev.h >> @@ -24,6 +24,7 @@ >> * XDP buffer support in the driver napi callback. >> * @NETDEV_XDP_ACT_NDO_XMIT_SG: This feature informs if netdev >>implements >> * non-linear XDP buffer support in ndo_xdp_xmit callback. >> + * @NETDEV_XDP_ACT_MASK: valid values mask >> */ >> enum netdev_xdp_act { >> NETDEV_XDP_ACT_BASIC = 1, >> diff --git a/tools/net/ynl/ynl-gen-c.py b/tools/net/ynl/ynl-gen-c.py >> index 0b5e0802a9a7..0d396bf98c27 100755 >> --- a/tools/net/ynl/ynl-gen-c.py >> +++ b/tools/net/ynl/ynl-gen-c.py >> @@ -2011,6 +2011,7 @@ def render_uapi(family, cw): >> # Write kdoc for enum and flags (one day maybe also structs) >> if const['type'] == 'enum' or const['type'] == 'flags': >> enum = family.consts[const['name']] >> + name_pfx = const.get('name-prefix', f"{family.name}- >>{const['name']}-") >> >> if enum.has_doc(): >> cw.p('/**') >> @@ -2022,10 +2023,18 @@ def render_uapi(family, cw): >> if entry.has_doc(): >> doc = '@' + entry.c_name + ': ' + entry['doc'] >> cw.write_doc_line(doc) >> + if const.get('render-max', False): >> + if const['type'] == 'flags': >> + doc = '@' + c_upper(name_pfx + 'mask') + ': >>valid values mask' >> + cw.write_doc_line(doc) >> + else: >> + doc = '@' + c_upper(name_pfx + 'max') + ': max >>valid value' >> + cw.write_doc_line(doc) >> + doc = '@__' + c_upper(name_pfx + 'max') + ': do >>not use' > >This one is definitely a candidate for /* private: */ Yep, makes sense, trying to find some way... Thank you, Arkadiusz > >> + cw.write_doc_line(doc) >> cw.p(' */') >> >> uapi_enum_start(family, cw, const, 'name') >> - name_pfx = const.get('name-prefix', f"{family.name}- >{const['name']}-") >> for entry in enum.entries.values(): >> suffix = ',' >> if entry.value_change: > >-- >pw-bot: cr
On Wed, 14 Jun 2023 12:48:14 +0000 Kubalewski, Arkadiusz wrote: > >From: Jakub Kicinski <kuba@kernel.org> > >Sent: Wednesday, June 14, 2023 2:59 AM > > > >On Wed, 14 Jun 2023 01:17:09 +0200 Arkadiusz Kubalewski wrote: > >> Including ynl generated uapi header files into source kerneldocs > >> (rst files in Documentation/) produces warnings during documentation > >> builds (i.e. make htmldocs) > >> > >> Prevent warnings by generating also description for enums where > >> rander_max was selected. > > > >Do you reckon that documenting the meta-values makes sense, or should > >we throw a: > > > >/* private: */ > > > > Most probably it doesn't.. > Tried this: > /* > [ other values description ] > * private: > * @__<NAME>_MAX > */ > and this: > /* > [ other values description ] > * private: @__<NAME>_MAX > */ > > Both are not working as we would expect. > > Do you mean to have double comments for enums? like: > /* > [ other values description ] > */ > /* > * private: > * @__<NAME>_MAX > */ > > >comment in front of them so that kdoc ignores them? Does user space > >have any use for those? If we want to document them... > > Hmm, do you recall where I can find proper format of such ignore enum comment > for kdoc generation? > Or maybe we need to also submit patch to some kdoc build process to actually > change the current behavior? It's explained in the kdoc documentation :( https://docs.kernel.org/doc-guide/kernel-doc.html#members
>From: Jakub Kicinski <kuba@kernel.org> >Sent: Wednesday, June 14, 2023 7:39 PM > >On Wed, 14 Jun 2023 12:48:14 +0000 Kubalewski, Arkadiusz wrote: >> >From: Jakub Kicinski <kuba@kernel.org> >> >Sent: Wednesday, June 14, 2023 2:59 AM >> > >> >On Wed, 14 Jun 2023 01:17:09 +0200 Arkadiusz Kubalewski wrote: >> >> Including ynl generated uapi header files into source kerneldocs >> >> (rst files in Documentation/) produces warnings during documentation >> >> builds (i.e. make htmldocs) >> >> >> >> Prevent warnings by generating also description for enums where >> >> rander_max was selected. >> > >> >Do you reckon that documenting the meta-values makes sense, or should >> >we throw a: >> > >> >/* private: */ >> > >> >> Most probably it doesn't.. >> Tried this: >> /* >> [ other values description ] >> * private: >> * @__<NAME>_MAX >> */ >> and this: >> /* >> [ other values description ] >> * private: @__<NAME>_MAX >> */ >> >> Both are not working as we would expect. >> >> Do you mean to have double comments for enums? like: >> /* >> [ other values description ] >> */ >> /* >> * private: >> * @__<NAME>_MAX >> */ >> >> >comment in front of them so that kdoc ignores them? Does user space >> >have any use for those? If we want to document them... >> >> Hmm, do you recall where I can find proper format of such ignore enum >comment >> for kdoc generation? >> Or maybe we need to also submit patch to some kdoc build process to >actually >> change the current behavior? > >It's explained in the kdoc documentation :( >https://docs.kernel.org/doc-guide/kernel-doc.html#members Thanks for pointing this, but it doesn't work :/ I tried described format but still ./scripts/kernel-doc warns about it. Same as 'make htmldocs' does, as it uses ./scripts/kernel-doc Also, if the enum is not described in the header, the docs produced by the 'make htmldocs' would list the enum with the comment "undescribed". It seems we need fixing: - prevent warning from ./scripts/kernel-doc, so enums marked as "private:" would not warn - generate __<ENUM_NAME>_MAX while marking them as "/* private: */" - add some kind of "pattern exclude" directive/mechanics for generating docs with sphinx Does it make sense? TBH, not yet sure if all above are possible.. Thank you! Arkadiusz
On Wed, 14 Jun 2023 22:11:38 +0000 Kubalewski, Arkadiusz wrote: > Thanks for pointing this, but it doesn't work :/ > > I tried described format but still ./scripts/kernel-doc warns about it. > Same as 'make htmldocs' does, as it uses ./scripts/kernel-doc > > Also, if the enum is not described in the header, the docs produced by > the 'make htmldocs' would list the enum with the comment "undescribed". Oh, you're right :S Looks like private: does not work for enums. > It seems we need fixing: > - prevent warning from ./scripts/kernel-doc, so enums marked as "private:" > would not warn > - generate __<ENUM_NAME>_MAX while marking them as "/* private: */" > - add some kind of "pattern exclude" directive/mechanics for generating > docs with sphinx > > Does it make sense? > TBH, not yet sure if all above are possible.. Let's ask Jon, and wait for him to chime in, I don't think these warnings should be a blocker for new families. Jon, we have some "meta" entries in the uAPI enums in netlink to mark the number of attributes, eg: enum { NETDEV_A_DEV_IFINDEX = 1, NETDEV_A_DEV_PAD, NETDEV_A_DEV_XDP_FEATURES, /* private: */ __NETDEV_A_DEV_MAX, // this NETDEV_A_DEV_MAX = (__NETDEV_A_DEV_MAX - 1) // and this }; Also masks of all flags like: enum netdev_xdp_act { NETDEV_XDP_ACT_BASIC = 1, NETDEV_XDP_ACT_REDIRECT = 2, NETDEV_XDP_ACT_NDO_XMIT = 4, NETDEV_XDP_ACT_XSK_ZEROCOPY = 8, NETDEV_XDP_ACT_HW_OFFLOAD = 16, NETDEV_XDP_ACT_RX_SG = 32, NETDEV_XDP_ACT_NDO_XMIT_SG = 64, /* private: */ NETDEV_XDP_ACT_MASK = 127, // this }; which user space should not care about. I was hoping we can mark them as /* private: */ but that doesn't work, when we add kdocs without documenting those - there's a warning. Is this a known problem? Is it worth fixing? Do we need to fix both kernel-doc and sphinx or just the former?
diff --git a/include/uapi/linux/netdev.h b/include/uapi/linux/netdev.h index 639524b59930..d78f7ae95092 100644 --- a/include/uapi/linux/netdev.h +++ b/include/uapi/linux/netdev.h @@ -24,6 +24,7 @@ * XDP buffer support in the driver napi callback. * @NETDEV_XDP_ACT_NDO_XMIT_SG: This feature informs if netdev implements * non-linear XDP buffer support in ndo_xdp_xmit callback. + * @NETDEV_XDP_ACT_MASK: valid values mask */ enum netdev_xdp_act { NETDEV_XDP_ACT_BASIC = 1, diff --git a/tools/include/uapi/linux/netdev.h b/tools/include/uapi/linux/netdev.h index 639524b59930..d78f7ae95092 100644 --- a/tools/include/uapi/linux/netdev.h +++ b/tools/include/uapi/linux/netdev.h @@ -24,6 +24,7 @@ * XDP buffer support in the driver napi callback. * @NETDEV_XDP_ACT_NDO_XMIT_SG: This feature informs if netdev implements * non-linear XDP buffer support in ndo_xdp_xmit callback. + * @NETDEV_XDP_ACT_MASK: valid values mask */ enum netdev_xdp_act { NETDEV_XDP_ACT_BASIC = 1, diff --git a/tools/net/ynl/ynl-gen-c.py b/tools/net/ynl/ynl-gen-c.py index 0b5e0802a9a7..0d396bf98c27 100755 --- a/tools/net/ynl/ynl-gen-c.py +++ b/tools/net/ynl/ynl-gen-c.py @@ -2011,6 +2011,7 @@ def render_uapi(family, cw): # Write kdoc for enum and flags (one day maybe also structs) if const['type'] == 'enum' or const['type'] == 'flags': enum = family.consts[const['name']] + name_pfx = const.get('name-prefix', f"{family.name}-{const['name']}-") if enum.has_doc(): cw.p('/**') @@ -2022,10 +2023,18 @@ def render_uapi(family, cw): if entry.has_doc(): doc = '@' + entry.c_name + ': ' + entry['doc'] cw.write_doc_line(doc) + if const.get('render-max', False): + if const['type'] == 'flags': + doc = '@' + c_upper(name_pfx + 'mask') + ': valid values mask' + cw.write_doc_line(doc) + else: + doc = '@' + c_upper(name_pfx + 'max') + ': max valid value' + cw.write_doc_line(doc) + doc = '@__' + c_upper(name_pfx + 'max') + ': do not use' + cw.write_doc_line(doc) cw.p(' */') uapi_enum_start(family, cw, const, 'name') - name_pfx = const.get('name-prefix', f"{family.name}-{const['name']}-") for entry in enum.entries.values(): suffix = ',' if entry.value_change:
Including ynl generated uapi header files into source kerneldocs (rst files in Documentation/) produces warnings during documentation builds (i.e. make htmldocs) Prevent warnings by generating also description for enums where rander_max was selected. Signed-off-by: Arkadiusz Kubalewski <arkadiusz.kubalewski@intel.com> --- include/uapi/linux/netdev.h | 1 + tools/include/uapi/linux/netdev.h | 1 + tools/net/ynl/ynl-gen-c.py | 11 ++++++++++- 3 files changed, 12 insertions(+), 1 deletion(-)