Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

tools: ynl: fix setting presence bits in simple nests

When we set members of simple nested structures in requests
we need to set "presence" bits for all the nesting layers
below. This has nothing to do with the presence type of
the last layer.

Fixes: be5bea1cc0bf ("net: add basic C code generators for Netlink")
Reviewed-by: Breno Leitao <leitao@debian.org>
Link: https://lore.kernel.org/r/20240321020214.1250202-1-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

+5 -2
+5 -2
tools/net/ynl/ynl-gen-c.py
··· 228 228 presence = '' 229 229 for i in range(0, len(ref)): 230 230 presence = f"{var}->{'.'.join(ref[:i] + [''])}_present.{ref[i]}" 231 - if self.presence_type() == 'bit': 232 - code.append(presence + ' = 1;') 231 + # Every layer below last is a nest, so we know it uses bit presence 232 + # last layer is "self" and may be a complex type 233 + if i == len(ref) - 1 and self.presence_type() != 'bit': 234 + continue 235 + code.append(presence + ' = 1;') 233 236 code += self._setter_lines(ri, member, presence) 234 237 235 238 func_name = f"{op_prefix(ri, direction, deref=deref)}_set_{'_'.join(ref)}"