]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - releases/6.6.26/tools-ynl-fix-setting-presence-bits-in-simple-nests.patch
Linux 6.6.26
[thirdparty/kernel/stable-queue.git] / releases / 6.6.26 / tools-ynl-fix-setting-presence-bits-in-simple-nests.patch
1 From f4c5ddac9562a66dac48d59027778fde32a05876 Mon Sep 17 00:00:00 2001
2 From: Sasha Levin <sashal@kernel.org>
3 Date: Wed, 20 Mar 2024 19:02:14 -0700
4 Subject: tools: ynl: fix setting presence bits in simple nests
5
6 From: Jakub Kicinski <kuba@kernel.org>
7
8 [ Upstream commit f6c8f5e8694c7a78c94e408b628afa6255cc428a ]
9
10 When we set members of simple nested structures in requests
11 we need to set "presence" bits for all the nesting layers
12 below. This has nothing to do with the presence type of
13 the last layer.
14
15 Fixes: be5bea1cc0bf ("net: add basic C code generators for Netlink")
16 Reviewed-by: Breno Leitao <leitao@debian.org>
17 Link: https://lore.kernel.org/r/20240321020214.1250202-1-kuba@kernel.org
18 Signed-off-by: Jakub Kicinski <kuba@kernel.org>
19 Signed-off-by: Sasha Levin <sashal@kernel.org>
20 ---
21 tools/net/ynl/ynl-gen-c.py | 7 +++++--
22 1 file changed, 5 insertions(+), 2 deletions(-)
23
24 diff --git a/tools/net/ynl/ynl-gen-c.py b/tools/net/ynl/ynl-gen-c.py
25 index 897af958cee85..575b7e248e521 100755
26 --- a/tools/net/ynl/ynl-gen-c.py
27 +++ b/tools/net/ynl/ynl-gen-c.py
28 @@ -198,8 +198,11 @@ class Type(SpecAttr):
29 presence = ''
30 for i in range(0, len(ref)):
31 presence = f"{var}->{'.'.join(ref[:i] + [''])}_present.{ref[i]}"
32 - if self.presence_type() == 'bit':
33 - code.append(presence + ' = 1;')
34 + # Every layer below last is a nest, so we know it uses bit presence
35 + # last layer is "self" and may be a complex type
36 + if i == len(ref) - 1 and self.presence_type() != 'bit':
37 + continue
38 + code.append(presence + ' = 1;')
39 code += self._setter_lines(ri, member, presence)
40
41 func_name = f"{op_prefix(ri, direction, deref=deref)}_set_{'_'.join(ref)}"
42 --
43 2.43.0
44