From: Vincent Mailhol <mailhol@kernel.org>
To: Marc Kleine-Budde <mkl@pengutronix.de>,
Oliver Hartkopp <socketcan@hartkopp.net>
Cc: "Vincent Mailhol" <mailhol@kernel.org>,
"Stéphane Grosjean" <stephane.grosjean@hms-networks.com>,
"Robert Nawrath" <mbro1689@gmail.com>,
"Minh Le" <minh.le.aj@renesas.com>,
"Duy Nguyen" <duy.nguyen.rh@renesas.com>,
linux-can@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH v4 07/20] can: netlink: refactor CAN_CTRLMODE_TDC_{AUTO,MANUAL} flag reset logic
Date: Tue, 23 Sep 2025 15:58:32 +0900 [thread overview]
Message-ID: <20250923-canxl-netlink-prep-v4-7-e720d28f66fe@kernel.org> (raw)
In-Reply-To: <20250923-canxl-netlink-prep-v4-0-e720d28f66fe@kernel.org>
CAN_CTRLMODE_TDC_AUTO and CAN_CTRLMODE_TDC_MANUAL are mutually
exclusive. This means that whenever the user switches from auto to
manual mode (or vice versa), the other flag which was set previously
needs to be cleared.
Currently, this is handled with a masking operation. It can be done in
a simpler manner by clearing any of the previous TDC flags before
copying netlink attributes. The code becomes easier to understand and
will make it easier to add the new upcoming CAN XL flags which will
have a similar reset logic as the current TDC flags.
Signed-off-by: Vincent Mailhol <mailhol@kernel.org>
---
Changelog:
v2 -> v3:
- Fix a bug in the masking. Replace
priv->ctrlmode &= !CAN_CTRLMODE_FD_TDC_MASK;
by
priv->ctrlmode &= ~CAN_CTRLMODE_FD_TDC_MASK;
---
drivers/net/can/dev/netlink.c | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/drivers/net/can/dev/netlink.c b/drivers/net/can/dev/netlink.c
index 549a2247d847dd26c8cb8c76ecb609256f549eb2..c212c7ff26cd3367d2014db99de7534077a1a841 100644
--- a/drivers/net/can/dev/netlink.c
+++ b/drivers/net/can/dev/netlink.c
@@ -255,6 +255,10 @@ static int can_changelink(struct net_device *dev, struct nlattr *tb[],
if ((maskedflags & ctrlstatic) != ctrlstatic)
return -EOPNOTSUPP;
+ /* If a top dependency flag is provided, reset all its dependencies */
+ if (cm->mask & CAN_CTRLMODE_FD)
+ priv->ctrlmode &= ~CAN_CTRLMODE_FD_TDC_MASK;
+
/* clear bits to be modified and copy the flag values */
priv->ctrlmode &= ~cm->mask;
priv->ctrlmode |= maskedflags;
@@ -270,11 +274,6 @@ static int can_changelink(struct net_device *dev, struct nlattr *tb[],
can_set_default_mtu(dev);
fd_tdc_flag_provided = cm->mask & CAN_CTRLMODE_FD_TDC_MASK;
- /* CAN_CTRLMODE_TDC_{AUTO,MANUAL} are mutually
- * exclusive: make sure to turn the other one off
- */
- if (fd_tdc_flag_provided)
- priv->ctrlmode &= cm->flags | ~CAN_CTRLMODE_FD_TDC_MASK;
}
if (data[IFLA_CAN_BITTIMING]) {
--
2.49.1
next prev parent reply other threads:[~2025-09-23 6:59 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-23 6:58 [PATCH v4 00/20] can: netlink: preparation before introduction of CAN XL step 3/3 Vincent Mailhol
2025-09-23 6:58 ` [PATCH v4 01/20] can: dev: move struct data_bittiming_params to linux/can/bittiming.h Vincent Mailhol
2025-09-23 6:58 ` [PATCH v4 02/20] can: dev: make can_get_relative_tdco() FD agnostic and move it to bittiming.h Vincent Mailhol
2025-09-23 6:58 ` [PATCH v4 03/20] can: netlink: document which symbols are FD specific Vincent Mailhol
2025-09-23 6:58 ` [PATCH v4 04/20] can: netlink: refactor can_validate_bittiming() Vincent Mailhol
2025-09-23 6:58 ` [PATCH v4 05/20] can: netlink: add can_validate_tdc() Vincent Mailhol
2025-09-23 6:58 ` [PATCH v4 06/20] can: netlink: add can_validate_databittiming() Vincent Mailhol
2025-09-23 6:58 ` Vincent Mailhol [this message]
2025-09-23 6:58 ` [PATCH v4 08/20] can: netlink: remove useless check in can_tdc_changelink() Vincent Mailhol
2025-09-23 6:58 ` [PATCH v4 09/20] can: netlink: make can_tdc_changelink() FD agnostic Vincent Mailhol
2025-09-23 6:58 ` [PATCH v4 10/20] can: netlink: add can_dtb_changelink() Vincent Mailhol
2025-09-23 6:58 ` [PATCH v4 11/20] can: netlink: add can_ctrlmode_changelink() Vincent Mailhol
2025-09-23 6:58 ` [PATCH v4 12/20] can: netlink: make can_tdc_get_size() FD agnostic Vincent Mailhol
2025-09-23 6:58 ` [PATCH v4 13/20] can: netlink: add can_data_bittiming_get_size() Vincent Mailhol
2025-09-23 6:58 ` [PATCH v4 14/20] can: netlink: add can_bittiming_fill_info() Vincent Mailhol
2025-09-23 6:58 ` [PATCH v4 15/20] can: netlink: add can_bittiming_const_fill_info() Vincent Mailhol
2025-09-23 6:58 ` [PATCH v4 16/20] can: netlink: add can_bitrate_const_fill_info() Vincent Mailhol
2025-09-23 6:58 ` [PATCH v4 17/20] can: netlink: make can_tdc_fill_info() FD agnostic Vincent Mailhol
2025-09-23 6:58 ` [PATCH v4 18/20] can: calc_bittiming: make can_calc_tdco() " Vincent Mailhol
2025-09-23 6:58 ` [PATCH v4 19/20] can: dev: add can_get_ctrlmode_str() Vincent Mailhol
2025-09-23 6:58 ` [PATCH v4 20/20] can: netlink: add userland error messages Vincent Mailhol
2025-09-23 9:09 ` [PATCH v4 00/20] can: netlink: preparation before introduction of CAN XL step 3/3 Marc Kleine-Budde
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250923-canxl-netlink-prep-v4-7-e720d28f66fe@kernel.org \
--to=mailhol@kernel.org \
--cc=duy.nguyen.rh@renesas.com \
--cc=linux-can@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mbro1689@gmail.com \
--cc=minh.le.aj@renesas.com \
--cc=mkl@pengutronix.de \
--cc=socketcan@hartkopp.net \
--cc=stephane.grosjean@hms-networks.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).