mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 01:53:29 +02:00
can: netlink: refactor CAN_CTRLMODE_TDC_{AUTO,MANUAL} flag reset logic
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> Link: https://patch.msgid.link/20250923-canxl-netlink-prep-v4-7-e720d28f66fe@kernel.org Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
This commit is contained in:
parent
3820a415be
commit
45be26b7e3
|
|
@ -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]) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user