* [PATCH net-next v2] net: phy: remove parameter new_link from phy_mac_interrupt()
@ 2018-01-10 20:21 Heiner Kallweit
2018-01-12 1:20 ` Florian Fainelli
2018-01-15 18:45 ` David Miller
0 siblings, 2 replies; 3+ messages in thread
From: Heiner Kallweit @ 2018-01-10 20:21 UTC (permalink / raw)
To: Andrew Lunn, Florian Fainelli, Doug Berger, David Miller; +Cc: netdev
I see two issues with parameter new_link:
1. It's not needed. See also phy_interrupt(), works w/o this parameter.
phy_mac_interrupt sets the state to PHY_CHANGELINK and triggers the
state machine which then calls phy_read_status. And phy_read_status
updates the link state.
2. phy_mac_interrupt is used in interrupt context and getting the link
state may sleep (at least when having to access the PHY registers
via MDIO bus).
So let's remove it.
Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
---
v2:
- combine both patches to avoid a build failure
---
drivers/net/ethernet/broadcom/genet/bcmgenet.c | 7 ++++---
drivers/net/phy/phy.c | 10 +++-------
include/linux/phy.h | 2 +-
3 files changed, 8 insertions(+), 11 deletions(-)
diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
index 77154f147..db97873cd 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
@@ -2527,9 +2527,10 @@ static void bcmgenet_irq_task(struct work_struct *work)
spin_unlock_irq(&priv->lock);
/* Link UP/DOWN event */
- if (status & UMAC_IRQ_LINK_EVENT)
- phy_mac_interrupt(priv->dev->phydev,
- !!(status & UMAC_IRQ_LINK_UP));
+ if (status & UMAC_IRQ_LINK_EVENT) {
+ priv->dev->phydev->link = !!(status & UMAC_IRQ_LINK_UP);
+ phy_mac_interrupt(priv->dev->phydev);
+ }
}
/* bcmgenet_isr1: handle Rx and Tx priority queues */
diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
index 0c165ad1d..f3313a129 100644
--- a/drivers/net/phy/phy.c
+++ b/drivers/net/phy/phy.c
@@ -1057,16 +1057,12 @@ void phy_state_machine(struct work_struct *work)
/**
* phy_mac_interrupt - MAC says the link has changed
* @phydev: phy_device struct with changed link
- * @new_link: Link is Up/Down.
*
- * Description: The MAC layer is able indicate there has been a change
- * in the PHY link status. Set the new link status, and trigger the
- * state machine, work a work queue.
+ * The MAC layer is able to indicate there has been a change in the PHY link
+ * status. Trigger the state machine and work a work queue.
*/
-void phy_mac_interrupt(struct phy_device *phydev, int new_link)
+void phy_mac_interrupt(struct phy_device *phydev)
{
- phydev->link = new_link;
-
/* Trigger a state machine change */
queue_work(system_power_efficient_wq, &phydev->phy_queue);
}
diff --git a/include/linux/phy.h b/include/linux/phy.h
index 135aba5c3..47715a311 100644
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -964,7 +964,7 @@ int phy_drivers_register(struct phy_driver *new_driver, int n,
void phy_state_machine(struct work_struct *work);
void phy_change(struct phy_device *phydev);
void phy_change_work(struct work_struct *work);
-void phy_mac_interrupt(struct phy_device *phydev, int new_link);
+void phy_mac_interrupt(struct phy_device *phydev);
void phy_start_machine(struct phy_device *phydev);
void phy_stop_machine(struct phy_device *phydev);
void phy_trigger_machine(struct phy_device *phydev, bool sync);
--
2.15.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH net-next v2] net: phy: remove parameter new_link from phy_mac_interrupt()
2018-01-10 20:21 [PATCH net-next v2] net: phy: remove parameter new_link from phy_mac_interrupt() Heiner Kallweit
@ 2018-01-12 1:20 ` Florian Fainelli
2018-01-15 18:45 ` David Miller
1 sibling, 0 replies; 3+ messages in thread
From: Florian Fainelli @ 2018-01-12 1:20 UTC (permalink / raw)
To: Heiner Kallweit, Andrew Lunn, Doug Berger, David Miller; +Cc: netdev
On 01/10/2018 12:21 PM, Heiner Kallweit wrote:
> I see two issues with parameter new_link:
>
> 1. It's not needed. See also phy_interrupt(), works w/o this parameter.
> phy_mac_interrupt sets the state to PHY_CHANGELINK and triggers the
> state machine which then calls phy_read_status. And phy_read_status
> updates the link state.
>
> 2. phy_mac_interrupt is used in interrupt context and getting the link
> state may sleep (at least when having to access the PHY registers
> via MDIO bus).
>
> So let's remove it.
>
> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Tested-by: Florian Fainelli <f.fainelli@gmail.com>
Thanks!
--
Florian
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH net-next v2] net: phy: remove parameter new_link from phy_mac_interrupt()
2018-01-10 20:21 [PATCH net-next v2] net: phy: remove parameter new_link from phy_mac_interrupt() Heiner Kallweit
2018-01-12 1:20 ` Florian Fainelli
@ 2018-01-15 18:45 ` David Miller
1 sibling, 0 replies; 3+ messages in thread
From: David Miller @ 2018-01-15 18:45 UTC (permalink / raw)
To: hkallweit1; +Cc: andrew, f.fainelli, opendmb, netdev
From: Heiner Kallweit <hkallweit1@gmail.com>
Date: Wed, 10 Jan 2018 21:21:31 +0100
> I see two issues with parameter new_link:
>
> 1. It's not needed. See also phy_interrupt(), works w/o this parameter.
> phy_mac_interrupt sets the state to PHY_CHANGELINK and triggers the
> state machine which then calls phy_read_status. And phy_read_status
> updates the link state.
>
> 2. phy_mac_interrupt is used in interrupt context and getting the link
> state may sleep (at least when having to access the PHY registers
> via MDIO bus).
>
> So let's remove it.
>
> Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
> ---
> v2:
> - combine both patches to avoid a build failure
Applied, thank you.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2018-01-15 18:45 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-01-10 20:21 [PATCH net-next v2] net: phy: remove parameter new_link from phy_mac_interrupt() Heiner Kallweit
2018-01-12 1:20 ` Florian Fainelli
2018-01-15 18:45 ` David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).