net: phy: constify phydev->drv
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Fri, 2 Feb 2024 17:41:45 +0000 (17:41 +0000)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 6 Feb 2024 11:44:40 +0000 (12:44 +0100)
Device driver structures are shared between all devices that they
match, and thus nothing should never write to the device driver
structure through the phydev->drv pointer. Let's make this pointer
const to catch code that attempts to do so.

Suggested-by: Christian Marangi <ansuelsmth@gmail.com>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Link: https://lore.kernel.org/r/E1rVxXt-002YqY-9G@rmk-PC.armlinux.org.uk
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/phy/phy.c
drivers/net/phy/phy_device.c
drivers/net/phy/xilinx_gmii2rgmii.c
include/linux/phy.h

index 3b9531143be1cc02b846272ad89bac152cd08971..14224e06d69faabfec2d34d22286ff9d8c0c56c2 100644 (file)
@@ -1290,7 +1290,6 @@ int phy_disable_interrupts(struct phy_device *phydev)
 static irqreturn_t phy_interrupt(int irq, void *phy_dat)
 {
        struct phy_device *phydev = phy_dat;
-       struct phy_driver *drv = phydev->drv;
        irqreturn_t ret;
 
        /* Wakeup interrupts may occur during a system sleep transition.
@@ -1316,7 +1315,7 @@ static irqreturn_t phy_interrupt(int irq, void *phy_dat)
        }
 
        mutex_lock(&phydev->lock);
-       ret = drv->handle_interrupt(phydev);
+       ret = phydev->drv->handle_interrupt(phydev);
        mutex_unlock(&phydev->lock);
 
        return ret;
index 52828d1c64f7a4ff3a6a70c2ae5ef3a1da20de59..2eed8f03621d85f02f3b374b7de4f341c4cb8bbe 100644 (file)
@@ -1413,7 +1413,7 @@ int phy_sfp_probe(struct phy_device *phydev,
 }
 EXPORT_SYMBOL(phy_sfp_probe);
 
-static bool phy_drv_supports_irq(struct phy_driver *phydrv)
+static bool phy_drv_supports_irq(const struct phy_driver *phydrv)
 {
        return phydrv->config_intr && phydrv->handle_interrupt;
 }
@@ -1867,7 +1867,7 @@ int phy_suspend(struct phy_device *phydev)
 {
        struct ethtool_wolinfo wol = { .cmd = ETHTOOL_GWOL };
        struct net_device *netdev = phydev->attached_dev;
-       struct phy_driver *phydrv = phydev->drv;
+       const struct phy_driver *phydrv = phydev->drv;
        int ret;
 
        if (phydev->suspended)
@@ -1892,7 +1892,7 @@ EXPORT_SYMBOL(phy_suspend);
 
 int __phy_resume(struct phy_device *phydev)
 {
-       struct phy_driver *phydrv = phydev->drv;
+       const struct phy_driver *phydrv = phydev->drv;
        int ret;
 
        lockdep_assert_held(&phydev->lock);
index 7fd9fe6a602bcb4c92b2cc2efa91fb8c266a5363..7b1bc5fcef9b2a923a2803b6149eece41714fbf3 100644 (file)
@@ -22,7 +22,7 @@
 
 struct gmii2rgmii {
        struct phy_device *phy_dev;
-       struct phy_driver *phy_drv;
+       const struct phy_driver *phy_drv;
        struct phy_driver conv_phy_drv;
        struct mdio_device *mdio;
 };
index a66f07d3f5f49a8e8c737a6f1d4d408a89596cc3..ad93f8b1b128a8b9756ea24bceb5a4c7e1ecf9fb 100644 (file)
@@ -638,7 +638,7 @@ struct phy_device {
 
        /* Information about the PHY type */
        /* And management functions */
-       struct phy_driver *drv;
+       const struct phy_driver *drv;
 
        struct device_link *devlink;