]> git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/commitdiff
net: phy: improve and inline phy_change
authorHeiner Kallweit <hkallweit1@gmail.com>
Fri, 9 Nov 2018 17:58:01 +0000 (18:58 +0100)
committerDavid S. Miller <davem@davemloft.net>
Sun, 11 Nov 2018 17:41:32 +0000 (09:41 -0800)
Now that phy_mac_interrupt() doesn't call phy_change() any longer it's
called from phy_interrupt() only. Therefore phy_interrupt_is_valid()
returns true always and the check can be removed.
In case of PHY_HALTED phy_interrupt() bails out immediately,
therefore the second check for PHY_HALTED including the call to
phy_disable_interrupts() can be removed.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/phy/phy.c

index ce1e8130a38f1cdbdd865df9648422fa51961fb1..083977d2f187dccc532a49fccdfd33264e2610f4 100644 (file)
@@ -722,41 +722,12 @@ static int phy_disable_interrupts(struct phy_device *phydev)
        return phy_clear_interrupt(phydev);
 }
 
-/**
- * phy_change - Called by the phy_interrupt to handle PHY changes
- * @phydev: phy_device struct that interrupted
- */
-static irqreturn_t phy_change(struct phy_device *phydev)
-{
-       if (phy_interrupt_is_valid(phydev)) {
-               if (phydev->drv->did_interrupt &&
-                   !phydev->drv->did_interrupt(phydev))
-                       return IRQ_NONE;
-
-               if (phydev->state == PHY_HALTED)
-                       if (phy_disable_interrupts(phydev))
-                               goto phy_err;
-       }
-
-       /* reschedule state queue work to run as soon as possible */
-       phy_trigger_machine(phydev);
-
-       if (phy_interrupt_is_valid(phydev) && phy_clear_interrupt(phydev))
-               goto phy_err;
-       return IRQ_HANDLED;
-
-phy_err:
-       phy_error(phydev);
-       return IRQ_NONE;
-}
-
 /**
  * phy_interrupt - PHY interrupt handler
  * @irq: interrupt line
  * @phy_dat: phy_device pointer
  *
- * Description: When a PHY interrupt occurs, the handler disables
- * interrupts, and uses phy_change to handle the interrupt.
+ * Description: Handle PHY interrupt
  */
 static irqreturn_t phy_interrupt(int irq, void *phy_dat)
 {
@@ -765,7 +736,19 @@ static irqreturn_t phy_interrupt(int irq, void *phy_dat)
        if (PHY_HALTED == phydev->state)
                return IRQ_NONE;                /* It can't be ours.  */
 
-       return phy_change(phydev);
+       if (phydev->drv->did_interrupt && !phydev->drv->did_interrupt(phydev))
+               return IRQ_NONE;
+
+       /* reschedule state queue work to run as soon as possible */
+       phy_trigger_machine(phydev);
+
+       if (phy_clear_interrupt(phydev))
+               goto phy_err;
+       return IRQ_HANDLED;
+
+phy_err:
+       phy_error(phydev);
+       return IRQ_NONE;
 }
 
 /**
@@ -846,7 +829,7 @@ out_unlock:
        phy_state_machine(&phydev->state_queue.work);
 
        /* Cannot call flush_scheduled_work() here as desired because
-        * of rtnl_lock(), but PHY_HALTED shall guarantee phy_change()
+        * of rtnl_lock(), but PHY_HALTED shall guarantee irq handler
         * will not reenable interrupts.
         */
 }