Patch "tools: ynl: fix setting presence bits in simple nests" has been added to the 6.8-stable tree

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

 



This is a note to let you know that I've just added the patch titled

    tools: ynl: fix setting presence bits in simple nests

to the 6.8-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     tools-ynl-fix-setting-presence-bits-in-simple-nests.patch
and it can be found in the queue-6.8 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 378918a750596101703bc4a990141c06ebb9a589
Author: Jakub Kicinski <kuba@xxxxxxxxxx>
Date:   Wed Mar 20 19:02:14 2024 -0700

    tools: ynl: fix setting presence bits in simple nests
    
    [ Upstream commit f6c8f5e8694c7a78c94e408b628afa6255cc428a ]
    
    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@xxxxxxxxxx>
    Link: https://lore.kernel.org/r/20240321020214.1250202-1-kuba@xxxxxxxxxx
    Signed-off-by: Jakub Kicinski <kuba@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/tools/net/ynl/ynl-gen-c.py b/tools/net/ynl/ynl-gen-c.py
index 7fc1aa788f6f5..c19dec2394915 100755
--- a/tools/net/ynl/ynl-gen-c.py
+++ b/tools/net/ynl/ynl-gen-c.py
@@ -243,8 +243,11 @@ class Type(SpecAttr):
         presence = ''
         for i in range(0, len(ref)):
             presence = f"{var}->{'.'.join(ref[:i] + [''])}_present.{ref[i]}"
-            if self.presence_type() == 'bit':
-                code.append(presence + ' = 1;')
+            # Every layer below last is a nest, so we know it uses bit presence
+            # last layer is "self" and may be a complex type
+            if i == len(ref) - 1 and self.presence_type() != 'bit':
+                continue
+            code.append(presence + ' = 1;')
         code += self._setter_lines(ri, member, presence)
 
         func_name = f"{op_prefix(ri, direction, deref=deref)}_set_{'_'.join(ref)}"




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux