]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/commitdiff
can: flexcan: flexcan_irq_state(): only read timestamp if needed
authorMarc Kleine-Budde <mkl@pengutronix.de>
Wed, 9 Oct 2019 13:15:37 +0000 (15:15 +0200)
committerMarc Kleine-Budde <mkl@pengutronix.de>
Mon, 11 Nov 2019 20:58:11 +0000 (21:58 +0100)
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>
drivers/net/can/flexcan.c

index 362ed90c701f9b2058163d70cf28ef36c2464bcc..148c0a3fab24626cb9be725dc0f866ef09a0b391 100644 (file)
@@ -743,8 +743,6 @@ static void flexcan_irq_state(struct net_device *dev, u32 reg_esr)
        u32 timestamp;
        int err;
 
-       timestamp = priv->read(&regs->timer) << 16;
-
        flt = reg_esr & FLEXCAN_ESR_FLT_CONF_MASK;
        if (likely(flt == FLEXCAN_ESR_FLT_CONF_ACTIVE)) {
                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))
                return;
 
+       timestamp = priv->read(&regs->timer) << 16;
+
        skb = alloc_can_err_skb(dev, &cf);
        if (unlikely(!skb))
                return;