mirror of
https://github.com/torvalds/linux.git
synced 2024-12-14 15:13:52 +00:00
can: flexcan: flexcan_irq_state(): only read timestamp if needed
The function flexcan_irq_state() checks the controller for CAN state changes and pushes a skb with the new state and a timestamp into the rx-offload framework. This patch optimizes the function by only reading the timestamp, if a state change is detected. Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
This commit is contained in:
parent
a4721f27b9
commit
58ed8e77d3
@ -743,8 +743,6 @@ static void flexcan_irq_state(struct net_device *dev, u32 reg_esr)
|
|||||||
u32 timestamp;
|
u32 timestamp;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
timestamp = priv->read(®s->timer) << 16;
|
|
||||||
|
|
||||||
flt = reg_esr & FLEXCAN_ESR_FLT_CONF_MASK;
|
flt = reg_esr & FLEXCAN_ESR_FLT_CONF_MASK;
|
||||||
if (likely(flt == FLEXCAN_ESR_FLT_CONF_ACTIVE)) {
|
if (likely(flt == FLEXCAN_ESR_FLT_CONF_ACTIVE)) {
|
||||||
tx_state = unlikely(reg_esr & FLEXCAN_ESR_TX_WRN) ?
|
tx_state = unlikely(reg_esr & FLEXCAN_ESR_TX_WRN) ?
|
||||||
@ -764,6 +762,8 @@ static void flexcan_irq_state(struct net_device *dev, u32 reg_esr)
|
|||||||
if (likely(new_state == priv->can.state))
|
if (likely(new_state == priv->can.state))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
timestamp = priv->read(®s->timer) << 16;
|
||||||
|
|
||||||
skb = alloc_can_err_skb(dev, &cf);
|
skb = alloc_can_err_skb(dev, &cf);
|
||||||
if (unlikely(!skb))
|
if (unlikely(!skb))
|
||||||
return;
|
return;
|
||||||
|
Loading…
Reference in New Issue
Block a user