Received: by 2002:a05:6a10:d5a5:0:0:0:0 with SMTP id gn37csp3270369pxb; Sat, 9 Oct 2021 06:16:33 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz6g24af9oD337/OPS/3nKyOoZNUxqcCTXPnAWaqLYZTnjQd5+ns18+ykzSfc8VW9Oh7caU X-Received: by 2002:a63:4f56:: with SMTP id p22mr9681920pgl.134.1633785393201; Sat, 09 Oct 2021 06:16:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1633785393; cv=none; d=google.com; s=arc-20160816; b=ooU0QCPvW8lz1/3eW4H9Qn/cGdV5d4W8Chik0U4h65bqN3JvhPT1NshlXgP053uLCA JJSYHWSJ2pHEVUZxrqmPOpmzIgqyxfH6Xoe/sWlAkQYUMVgHw/eqtSwHVHpVAk9G3HMR Y7LNFjcGw1tKY2RnGW8iB+ESSmLHOt+PTqBe+QkIUbu1rbCE7t6HhlIgq9Fg3OMI+4Gh CxDXV9Ewx1oJ6pU0F8jUo1f+5sZUdKyyvPh4ps3zvBIMEOBhMfsskCVMzH6BY0ZtGf1n X2UBk8gFsM5ILjDPKUPEh5/T1g6huCgYFtxL9E0MzJ4g3xb7xQVOmR8bDDqUU04q+W8U fyrw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=BUJ30rB2y9aJXYktUYXp0n+RSPdKVezpqgkSBepS/dE=; b=ExniZPkTMM8XokdL/EUsCubI73b1zmvn0TT5HrUw11hA9rOV+4NldCnEARvwgBP9tY E7diHalPPRAtNsmBFEQLfhr0YYZ2Gjkf5OOvC7ttfopad4F/f3rcKvSJZuvqo6/aUSiF LMg1fP41AHrcvmRzt7jCDuPbmmJwIITtUluto81BSO/lhKKAu3XhDo49ayV+cgomqivg hB06AUYCJqvph0eFZ6x3D4u0c6XXw5ISbEBy8BleB+dN0YJd57lg69wVWOIN7PPypYwd gcJw0OuJBGWl9dpJFZp7Hz1/uFwk/380h0ex67O+oGZS+VX/3ai+DfjedKBLNL2fEOGL +9Mg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id f9si3163440pln.38.2021.10.09.06.16.20; Sat, 09 Oct 2021 06:16:33 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233399AbhJINP1 (ORCPT + 99 others); Sat, 9 Oct 2021 09:15:27 -0400 Received: from smtp03.smtpout.orange.fr ([80.12.242.125]:51179 "EHLO smtp.smtpout.orange.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233202AbhJINPV (ORCPT ); Sat, 9 Oct 2021 09:15:21 -0400 Received: from tomoyo.flets-east.jp ([114.149.34.46]) by smtp.orange.fr with ESMTPA id ZC9zmoEn4UGqlZCADm2ie4; Sat, 09 Oct 2021 15:13:24 +0200 X-ME-Helo: tomoyo.flets-east.jp X-ME-Auth: MDU0YmViZGZmMDIzYiBlMiM2NTczNTRjNWZkZTMwOGRiOGQ4ODf3NWI1ZTMyMzdiODlhOQ== X-ME-Date: Sat, 09 Oct 2021 15:13:24 +0200 X-ME-IP: 114.149.34.46 From: Vincent Mailhol To: Marc Kleine-Budde , linux-can@vger.kernel.org Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org, Vincent Mailhol Subject: [PATCH v2 1/3] can: dev: replace can_priv::ctrlmode_static by can_get_static_ctrlmode() Date: Sat, 9 Oct 2021 22:13:02 +0900 Message-Id: <20211009131304.19729-2-mailhol.vincent@wanadoo.fr> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20211009131304.19729-1-mailhol.vincent@wanadoo.fr> References: <20211009131304.19729-1-mailhol.vincent@wanadoo.fr> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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. A condition sine qua non for this to work is that the controller static modes should never be set in can_priv::ctrlmode_supported. This is already the case for existing drivers, however, we added a warning message in can_set_static_ctrlmode() to check that. Signed-off-by: Vincent Mailhol --- drivers/net/can/dev/dev.c | 5 +++-- drivers/net/can/dev/netlink.c | 2 +- include/linux/can/dev.h | 12 ++++++++++-- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/drivers/net/can/dev/dev.c b/drivers/net/can/dev/dev.c index e3d840b81357..59c79f92fccc 100644 --- a/drivers/net/can/dev/dev.c +++ b/drivers/net/can/dev/dev.c @@ -300,6 +300,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) @@ -309,7 +310,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; @@ -318,7 +319,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; diff --git a/drivers/net/can/dev/netlink.c b/drivers/net/can/dev/netlink.c index 80425636049d..6c9906e8040c 100644 --- a/drivers/net/can/dev/netlink.c +++ b/drivers/net/can/dev/netlink.c @@ -112,7 +112,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 */ diff --git a/include/linux/can/dev.h b/include/linux/can/dev.h index 2413253e54c7..2381ad9e0814 100644 --- a/include/linux/can/dev.h +++ b/include/linux/can/dev.h @@ -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; @@ -104,14 +103,23 @@ static inline void can_set_static_ctrlmode(struct net_device *dev, struct can_priv *priv = netdev_priv(dev); /* alloc_candev() succeeded => netdev_priv() is valid at this point */ + if (priv->ctrlmode_supported & static_mode) { + netdev_warn(dev, + "Controller features can not be supported and static at the same time\n"); + return; + } 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, -- 2.32.0