ethtool: Add and use ethnl_update_bool.
authorDavid S. Miller <davem@davemloft.net>
Mon, 23 Jan 2023 13:57:39 +0000 (13:57 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 23 Jan 2023 13:57:39 +0000 (13:57 +0000)
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ethtool/mm.c
net/ethtool/netlink.h

index 809d196..3e8acdb 100644 (file)
@@ -225,7 +225,7 @@ int ethnl_set_mm(struct sk_buff *skb, struct genl_info *info)
        ethnl_update_u32(&cfg.verify_time, tb[ETHTOOL_A_MM_VERIFY_TIME], &mod);
        ethnl_update_bool(&cfg.tx_enabled, tb[ETHTOOL_A_MM_TX_ENABLED], &mod);
        ethnl_update_bool(&cfg.pmac_enabled, tb[ETHTOOL_A_MM_PMAC_ENABLED],
-                         &mod);
+                           &mod);
        ethnl_update_u32(&cfg.tx_min_frag_size,
                         tb[ETHTOOL_A_MM_TX_MIN_FRAG_SIZE], &mod);
 
index deb057c..b01f7cd 100644 (file)
@@ -138,6 +138,32 @@ static inline void ethnl_update_bool32(u32 *dst, const struct nlattr *attr,
 }
 
 /**
+ * ethnl_update_bool() - updateb bool used as bool from NLA_U8 attribute
+ * @dst:  value to update
+ * @attr: netlink attribute with new value or null
+ * @mod:  pointer to bool for modification tracking
+ *
+ * Use the bool value from NLA_U8 netlink attribute @attr to set bool variable
+ * pointed to by @dst to 0 (if zero) or 1 (if not); do nothing if @attr is
+ * null. Bool pointed to by @mod is set to true if this function changed the
+ * logical value of *dst, otherwise it is left as is.
+ */
+static inline void ethnl_update_bool(bool *dst, const struct nlattr *attr,
+                                    bool *mod)
+{
+       u8 val;
+
+       if (!attr)
+               return;
+       val = !!nla_get_u8(attr);
+       if (!!*dst == val)
+               return;
+
+       *dst = val;
+       *mod = true;
+}
+
+/**
  * ethnl_update_binary() - update binary data from NLA_BINARY attribute
  * @dst:  value to update
  * @len:  destination buffer length