mirror of
https://github.com/torvalds/linux.git
synced 2026-11-06 21:58:01 +01:00
Merge patch series "can: dev: can_fill_info(): don't wake up controller if interface is down"
This series prevents the CAN controller from being activated by netlink queries as long as the interface is down. Link: https://patch.msgid.link/20261027065012.191348-1-chunyuzhiqiang@yinhe.ht Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
This commit is contained in:
commit
54195bf371
|
|
@ -720,7 +720,8 @@ static int can_changelink(struct net_device *dev, struct nlattr *tb[],
|
|||
return 0;
|
||||
}
|
||||
|
||||
static size_t can_tdc_get_size(struct data_bittiming_params *dbt_params,
|
||||
static size_t can_tdc_get_size(const struct net_device *dev,
|
||||
struct data_bittiming_params *dbt_params,
|
||||
u32 tdc_flags)
|
||||
{
|
||||
bool tdc_manual = tdc_flags & CAN_CTRLMODE_TDC_MANUAL_MASK;
|
||||
|
|
@ -742,7 +743,8 @@ static size_t can_tdc_get_size(struct data_bittiming_params *dbt_params,
|
|||
}
|
||||
|
||||
if (tdc_flags) {
|
||||
if (tdc_manual || dbt_params->do_get_auto_tdcv)
|
||||
if (tdc_manual ||
|
||||
(dbt_params->do_get_auto_tdcv && netif_running(dev)))
|
||||
size += nla_total_size(sizeof(u32)); /* IFLA_CAN_TDCV */
|
||||
size += nla_total_size(sizeof(u32)); /* IFLA_CAN_TDCO */
|
||||
if (dbt_params->tdc_const->tdcf_max)
|
||||
|
|
@ -752,7 +754,8 @@ static size_t can_tdc_get_size(struct data_bittiming_params *dbt_params,
|
|||
return size;
|
||||
}
|
||||
|
||||
static size_t can_data_bittiming_get_size(struct data_bittiming_params *dbt_params,
|
||||
static size_t can_data_bittiming_get_size(const struct net_device *dev,
|
||||
struct data_bittiming_params *dbt_params,
|
||||
u32 tdc_flags)
|
||||
{
|
||||
size_t size = 0;
|
||||
|
|
@ -764,7 +767,7 @@ static size_t can_data_bittiming_get_size(struct data_bittiming_params *dbt_para
|
|||
if (dbt_params->data_bitrate_const) /* IFLA_CAN_{,XL}_DATA_BITRATE_CONST */
|
||||
size += nla_total_size(sizeof(*dbt_params->data_bitrate_const) *
|
||||
dbt_params->data_bitrate_const_cnt);
|
||||
size += can_tdc_get_size(dbt_params, tdc_flags);/* IFLA_CAN_{,XL}_TDC */
|
||||
size += can_tdc_get_size(dev, dbt_params, tdc_flags);/* IFLA_CAN_{,XL}_TDC */
|
||||
|
||||
return size;
|
||||
}
|
||||
|
|
@ -812,7 +815,7 @@ static size_t can_get_size(const struct net_device *dev)
|
|||
size += nla_total_size(sizeof(u32)); /* IFLA_CAN_STATE */
|
||||
size += nla_total_size(sizeof(struct can_ctrlmode)); /* IFLA_CAN_CTRLMODE */
|
||||
size += nla_total_size(sizeof(u32)); /* IFLA_CAN_RESTART_MS */
|
||||
if (priv->do_get_berr_counter) /* IFLA_CAN_BERR_COUNTER */
|
||||
if (priv->do_get_berr_counter && netif_running(dev)) /* IFLA_CAN_BERR_COUNTER */
|
||||
size += nla_total_size(sizeof(struct can_berr_counter));
|
||||
if (priv->termination_const) {
|
||||
size += nla_total_size(sizeof(priv->termination)); /* IFLA_CAN_TERMINATION */
|
||||
|
|
@ -825,10 +828,10 @@ static size_t can_get_size(const struct net_device *dev)
|
|||
size += sizeof(priv->bitrate_max); /* IFLA_CAN_BITRATE_MAX */
|
||||
size += can_ctrlmode_ext_get_size(); /* IFLA_CAN_CTRLMODE_EXT */
|
||||
|
||||
size += can_data_bittiming_get_size(&priv->fd,
|
||||
size += can_data_bittiming_get_size(dev, &priv->fd,
|
||||
priv->ctrlmode & CAN_CTRLMODE_FD_TDC_MASK);
|
||||
|
||||
size += can_data_bittiming_get_size(&priv->xl,
|
||||
size += can_data_bittiming_get_size(dev, &priv->xl,
|
||||
priv->ctrlmode & CAN_CTRLMODE_XL_TDC_MASK);
|
||||
size += can_pwm_get_size(priv->xl.pwm_const, /* IFLA_CAN_XL_PWM */
|
||||
priv->ctrlmode & CAN_CTRLMODE_XL_TMS);
|
||||
|
|
@ -910,7 +913,7 @@ static int can_tdc_fill_info(struct sk_buff *skb, const struct net_device *dev,
|
|||
if (tdc_manual) {
|
||||
tdcv = tdc->tdcv;
|
||||
err = 0;
|
||||
} else if (dbt_params->do_get_auto_tdcv) {
|
||||
} else if (dbt_params->do_get_auto_tdcv && netif_running(dev)) {
|
||||
err = dbt_params->do_get_auto_tdcv(dev, &tdcv);
|
||||
}
|
||||
if (!err && nla_put_u32(skb, IFLA_CAN_TDC_TDCV, tdcv))
|
||||
|
|
@ -1006,7 +1009,7 @@ static int can_fill_info(struct sk_buff *skb, const struct net_device *dev)
|
|||
nla_put(skb, IFLA_CAN_CTRLMODE, sizeof(cm), &cm) ||
|
||||
nla_put_u32(skb, IFLA_CAN_RESTART_MS, priv->restart_ms) ||
|
||||
|
||||
(priv->do_get_berr_counter &&
|
||||
(priv->do_get_berr_counter && netif_running(dev) &&
|
||||
!priv->do_get_berr_counter(dev, &bec) &&
|
||||
nla_put(skb, IFLA_CAN_BERR_COUNTER, sizeof(bec), &bec)) ||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user