can: dev: replace can_priv::ctrlmode_static by can_get_static_ctrlmode()
authorVincent Mailhol <mailhol.vincent@wanadoo.fr>
Mon, 13 Dec 2021 16:02:23 +0000 (01:02 +0900)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Wed, 5 Jan 2022 11:09:05 +0000 (12:09 +0100)
The statically enabled features of a CAN controller can be retrieved
using below formula:

| u32 ctrlmode_static = priv->ctrlmode & ~priv->ctrlmode_supported;

As such, there is no need to store this information. This patch remove
the field ctrlmode_static of struct can_priv and provides, in
replacement, the inline function can_get_static_ctrlmode() which
returns the same value.

Link: https://lore.kernel.org/all/20211213160226.56219-2-mailhol.vincent@wanadoo.fr
Signed-off-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
drivers/net/can/dev/dev.c
drivers/net/can/dev/netlink.c
include/linux/can/dev.h

index 4845ae6456e19259c3f1d17953594d46a559ebbf..c192f25f96956084e03597f91c114f754efcac69 100644 (file)
@@ -296,6 +296,7 @@ EXPORT_SYMBOL_GPL(free_candev);
 int can_change_mtu(struct net_device *dev, int new_mtu)
 {
        struct can_priv *priv = netdev_priv(dev);
+       u32 ctrlmode_static = can_get_static_ctrlmode(priv);
 
        /* Do not allow changing the MTU while running */
        if (dev->flags & IFF_UP)
@@ -305,7 +306,7 @@ int can_change_mtu(struct net_device *dev, int new_mtu)
        switch (new_mtu) {
        case CAN_MTU:
                /* 'CANFD-only' controllers can not switch to CAN_MTU */
-               if (priv->ctrlmode_static & CAN_CTRLMODE_FD)
+               if (ctrlmode_static & CAN_CTRLMODE_FD)
                        return -EINVAL;
 
                priv->ctrlmode &= ~CAN_CTRLMODE_FD;
@@ -314,7 +315,7 @@ int can_change_mtu(struct net_device *dev, int new_mtu)
        case CANFD_MTU:
                /* check for potential CANFD ability */
                if (!(priv->ctrlmode_supported & CAN_CTRLMODE_FD) &&
-                   !(priv->ctrlmode_static & CAN_CTRLMODE_FD))
+                   !(ctrlmode_static & CAN_CTRLMODE_FD))
                        return -EINVAL;
 
                priv->ctrlmode |= CAN_CTRLMODE_FD;
index 95cca4e5251f0a014551fc313e134caaf18feac4..26c336808be5a2c38304e4aed6272f5f187f2a15 100644 (file)
@@ -211,7 +211,7 @@ static int can_changelink(struct net_device *dev, struct nlattr *tb[],
                if (dev->flags & IFF_UP)
                        return -EBUSY;
                cm = nla_data(data[IFLA_CAN_CTRLMODE]);
-               ctrlstatic = priv->ctrlmode_static;
+               ctrlstatic = can_get_static_ctrlmode(priv);
                maskedflags = cm->flags & cm->mask;
 
                /* check whether provided bits are allowed to be passed */
index 45f19d9db5ca72946f40499babb9f7e89a75482f..92e2d69462f03f8d2ad46f5e57d639d6ccd28a91 100644 (file)
@@ -69,7 +69,6 @@ struct can_priv {
        /* CAN controller features - see include/uapi/linux/can/netlink.h */
        u32 ctrlmode;           /* current options setting */
        u32 ctrlmode_supported; /* options that can be modified by netlink */
-       u32 ctrlmode_static;    /* static enabled options for driver/hardware */
 
        int restart_ms;
        struct delayed_work restart_work;
@@ -139,13 +138,17 @@ static inline void can_set_static_ctrlmode(struct net_device *dev,
 
        /* alloc_candev() succeeded => netdev_priv() is valid at this point */
        priv->ctrlmode = static_mode;
-       priv->ctrlmode_static = static_mode;
 
        /* override MTU which was set by default in can_setup()? */
        if (static_mode & CAN_CTRLMODE_FD)
                dev->mtu = CANFD_MTU;
 }
 
+static inline u32 can_get_static_ctrlmode(struct can_priv *priv)
+{
+       return priv->ctrlmode & ~priv->ctrlmode_supported;
+}
+
 void can_setup(struct net_device *dev);
 
 struct net_device *alloc_candev_mqs(int sizeof_priv, unsigned int echo_skb_max,