diff options
author | Oliver Hartkopp <socketcan@hartkopp.net> | 2014-02-28 10:36:20 -0500 |
---|---|---|
committer | Marc Kleine-Budde <mkl@pengutronix.de> | 2014-03-07 03:18:21 -0500 |
commit | b30749fdfb9b72f4b1f03673cb5e45b8d4331188 (patch) | |
tree | be63b059e8044248ae877243c3b8a2faf02d250a /drivers/net/can/dev.c | |
parent | a94bc9c46e8e3e1bb5f707e81fd8c60fd93266e6 (diff) |
can: only send bitrate data via netlink when available
When setting the bitrate both can_calc_bittiming() and can_fixup_bittiming()
lead to the bitrate variable to be set, when a proper bit timing is available.
Only then the bitrate configuration is stored for the device, so checking for
priv->bittiming.bitrate is always sufficient.
Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net>
Acked-by: Stephane Grosjean <s.grosjean@peak-system.com>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Diffstat (limited to 'drivers/net/can/dev.c')
-rw-r--r-- | drivers/net/can/dev.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/net/can/dev.c b/drivers/net/can/dev.c index e1a37413d53e..de04eac7c5f3 100644 --- a/drivers/net/can/dev.c +++ b/drivers/net/can/dev.c | |||
@@ -606,7 +606,7 @@ int open_candev(struct net_device *dev) | |||
606 | { | 606 | { |
607 | struct can_priv *priv = netdev_priv(dev); | 607 | struct can_priv *priv = netdev_priv(dev); |
608 | 608 | ||
609 | if (!priv->bittiming.tq && !priv->bittiming.bitrate) { | 609 | if (!priv->bittiming.bitrate) { |
610 | netdev_err(dev, "bit-timing not yet defined\n"); | 610 | netdev_err(dev, "bit-timing not yet defined\n"); |
611 | return -EINVAL; | 611 | return -EINVAL; |
612 | } | 612 | } |
@@ -719,7 +719,8 @@ static size_t can_get_size(const struct net_device *dev) | |||
719 | struct can_priv *priv = netdev_priv(dev); | 719 | struct can_priv *priv = netdev_priv(dev); |
720 | size_t size = 0; | 720 | size_t size = 0; |
721 | 721 | ||
722 | size += nla_total_size(sizeof(struct can_bittiming)); /* IFLA_CAN_BITTIMING */ | 722 | if (priv->bittiming.bitrate) /* IFLA_CAN_BITTIMING */ |
723 | size += nla_total_size(sizeof(struct can_bittiming)); | ||
723 | if (priv->bittiming_const) /* IFLA_CAN_BITTIMING_CONST */ | 724 | if (priv->bittiming_const) /* IFLA_CAN_BITTIMING_CONST */ |
724 | size += nla_total_size(sizeof(struct can_bittiming_const)); | 725 | size += nla_total_size(sizeof(struct can_bittiming_const)); |
725 | size += nla_total_size(sizeof(struct can_clock)); /* IFLA_CAN_CLOCK */ | 726 | size += nla_total_size(sizeof(struct can_clock)); /* IFLA_CAN_CLOCK */ |
@@ -741,8 +742,9 @@ static int can_fill_info(struct sk_buff *skb, const struct net_device *dev) | |||
741 | 742 | ||
742 | if (priv->do_get_state) | 743 | if (priv->do_get_state) |
743 | priv->do_get_state(dev, &state); | 744 | priv->do_get_state(dev, &state); |
744 | if (nla_put(skb, IFLA_CAN_BITTIMING, | 745 | if ((priv->bittiming.bitrate && |
745 | sizeof(priv->bittiming), &priv->bittiming) || | 746 | nla_put(skb, IFLA_CAN_BITTIMING, |
747 | sizeof(priv->bittiming), &priv->bittiming)) || | ||
746 | (priv->bittiming_const && | 748 | (priv->bittiming_const && |
747 | nla_put(skb, IFLA_CAN_BITTIMING_CONST, | 749 | nla_put(skb, IFLA_CAN_BITTIMING_CONST, |
748 | sizeof(*priv->bittiming_const), priv->bittiming_const)) || | 750 | sizeof(*priv->bittiming_const), priv->bittiming_const)) || |