if (!bus)
                return -ENOMEM;
 
-       bus->irq = kmalloc(sizeof(int) * PHY_MAX_ADDR, GFP_KERNEL);
-       if (bus->irq == NULL) {
-               ret = -ENOMEM;
-               goto err_free_bus;
-       }
-
        bus->name = "ep8248e-mdio-bitbang";
        bus->parent = &ofdev->dev;
        snprintf(bus->id, MII_BUS_ID_SIZE, "%x", res.start);
 
        ret = of_mdiobus_register(bus, ofdev->dev.of_node);
        if (ret)
-               goto err_free_irq;
+               goto err_free_bus;
 
        return 0;
-err_free_irq:
-       kfree(bus->irq);
 err_free_bus:
        free_mdio_bitbang(bus);
        return ret;
 
 struct gpio_priv {
        int mdc_pin;
        int mdio_pin;
-       int mdio_irqs[PHY_MAX_ADDR];
 };
 
 #define MDC_PIN(bus)   (((struct gpio_priv *)bus->priv)->mdc_pin)
        snprintf(new_bus->id, MII_BUS_ID_SIZE, "%x", *prop);
        new_bus->priv = priv;
 
-       new_bus->irq = priv->mdio_irqs;
-
        prop = of_get_property(np, "mdc-pin", NULL);
        priv->mdc_pin = *prop;
 
 
        struct platform_device *pdev = to_platform_device(dev->dev.parent);
        struct ei_device *ei_local = netdev_priv(dev);
        struct ax_device *ax = to_ax_dev(dev);
-       int err, i;
+       int err;
 
        ax->bb_ctrl.ops = &bb_ops;
        ax->addr_memr = ei_local->mem + AX_MEMR;
        snprintf(ax->mii_bus->id, MII_BUS_ID_SIZE, "%s-%x",
                pdev->name, pdev->id);
 
-       ax->mii_bus->irq = kmalloc(sizeof(int) * PHY_MAX_ADDR, GFP_KERNEL);
-       if (!ax->mii_bus->irq) {
-               err = -ENOMEM;
-               goto out_free_mdio_bitbang;
-       }
-
-       for (i = 0; i < PHY_MAX_ADDR; i++)
-               ax->mii_bus->irq[i] = PHY_POLL;
-
        err = mdiobus_register(ax->mii_bus);
        if (err)
-               goto out_free_irq;
+               goto out_free_mdio_bitbang;
 
        return 0;
 
- out_free_irq:
-       kfree(ax->mii_bus->irq);
  out_free_mdio_bitbang:
        free_mdio_bitbang(ax->mii_bus);
  out:
 
 
        snprintf(miibus->id, MII_BUS_ID_SIZE, "%s-%x",
                pdev->name, pdev->id);
-       miibus->irq = kmalloc(sizeof(int)*PHY_MAX_ADDR, GFP_KERNEL);
-       if (!miibus->irq)
-               goto out_err_irq_alloc;
-
-       for (i = rc; i < PHY_MAX_ADDR; ++i)
-               miibus->irq[i] = PHY_POLL;
 
        rc = clamp(mii_bus_pd->phydev_number, 0, PHY_MAX_ADDR);
        if (rc != mii_bus_pd->phydev_number)
        rc = mdiobus_register(miibus);
        if (rc) {
                dev_err(&pdev->dev, "Cannot register MDIO bus!\n");
-               goto out_err_mdiobus_register;
+               goto out_err_alloc;
        }
 
        platform_set_drvdata(pdev, miibus);
        return 0;
 
-out_err_mdiobus_register:
-       kfree(miibus->irq);
 out_err_irq_alloc:
        mdiobus_free(miibus);
 out_err_alloc:
                dev_get_platdata(&pdev->dev);
 
        mdiobus_unregister(miibus);
-       kfree(miibus->irq);
        mdiobus_free(miibus);
        peripheral_free_list(mii_bus_pd->mac_peripherals);
 
 
        greth->mdio->write = greth_mdio_write;
        greth->mdio->priv = greth;
 
-       greth->mdio->irq = greth->mdio_irqs;
-
-       for (phy = 0; phy < PHY_MAX_ADDR; phy++)
-               greth->mdio->irq[phy] = PHY_POLL;
-
        ret = mdiobus_register(greth->mdio);
        if (ret) {
                goto error;
 
 
        struct phy_device *phy;
        struct mii_bus *mdio;
-       int mdio_irqs[PHY_MAX_ADDR];
        unsigned int link;
        unsigned int speed;
        unsigned int duplex;
 
        netif_napi_del(&adapter->napi);
        phy_disconnect(adapter->phydev);
        mdiobus_unregister(adapter->mii_bus);
-       kfree(adapter->mii_bus->irq);
        mdiobus_free(adapter->mii_bus);
 
        et131x_adapter_memory_free(adapter);
        struct net_device *netdev;
        struct et131x_adapter *adapter;
        int rc;
-       int ii;
 
        rc = pci_enable_device(pdev);
        if (rc < 0) {
        adapter->mii_bus->priv = netdev;
        adapter->mii_bus->read = et131x_mdio_read;
        adapter->mii_bus->write = et131x_mdio_write;
-       adapter->mii_bus->irq = kmalloc_array(PHY_MAX_ADDR, sizeof(int),
-                                             GFP_KERNEL);
-       if (!adapter->mii_bus->irq)
-               goto err_mdio_free;
-
-       for (ii = 0; ii < PHY_MAX_ADDR; ii++)
-               adapter->mii_bus->irq[ii] = PHY_POLL;
 
        rc = mdiobus_register(adapter->mii_bus);
        if (rc < 0) {
                dev_err(&pdev->dev, "failed to register MII bus\n");
-               goto err_mdio_free_irq;
+               goto err_mdio_free;
        }
 
        rc = et131x_mii_probe(netdev);
        phy_disconnect(adapter->phydev);
 err_mdio_unregister:
        mdiobus_unregister(adapter->mii_bus);
-err_mdio_free_irq:
-       kfree(adapter->mii_bus->irq);
 err_mdio_free:
        mdiobus_free(adapter->mii_bus);
 err_mem_free:
 
 {
        struct altera_tse_private *priv = netdev_priv(dev);
        int ret;
-       int i;
        struct device_node *mdio_node = NULL;
        struct mii_bus *mdio = NULL;
        struct device_node *child_node = NULL;
        mdio->write = &altera_tse_mdio_write;
        snprintf(mdio->id, MII_BUS_ID_SIZE, "%s-%u", mdio->name, id);
 
-       mdio->irq = kcalloc(PHY_MAX_ADDR, sizeof(int), GFP_KERNEL);
-       if (mdio->irq == NULL) {
-               ret = -ENOMEM;
-               goto out_free_mdio;
-       }
-       for (i = 0; i < PHY_MAX_ADDR; i++)
-               mdio->irq[i] = PHY_POLL;
-
        mdio->priv = dev;
        mdio->parent = priv->device;
 
        if (ret != 0) {
                netdev_err(dev, "Cannot register MDIO bus %s\n",
                           mdio->id);
-               goto out_free_mdio_irq;
+               goto out_free_mdio;
        }
 
        if (netif_msg_drv(priv))
 
        priv->mdio = mdio;
        return 0;
-out_free_mdio_irq:
-       kfree(mdio->irq);
 out_free_mdio:
        mdiobus_free(mdio);
        mdio = NULL;
 
        aup->mii_bus->name = "au1000_eth_mii";
        snprintf(aup->mii_bus->id, MII_BUS_ID_SIZE, "%s-%x",
                pdev->name, aup->mac_id);
-       aup->mii_bus->irq = kmalloc(sizeof(int)*PHY_MAX_ADDR, GFP_KERNEL);
-       if (aup->mii_bus->irq == NULL) {
-               err = -ENOMEM;
-               goto err_out;
-       }
 
-       for (i = 0; i < PHY_MAX_ADDR; ++i)
-               aup->mii_bus->irq[i] = PHY_POLL;
        /* if known, set corresponding PHY IRQs */
        if (aup->phy_static_config)
                if (aup->phy_irq && aup->phy_busid == aup->mac_id)
 
        mii_bus->parent = sdev->dev;
        mii_bus->phy_mask = ~(1 << bp->phy_addr);
        snprintf(mii_bus->id, MII_BUS_ID_SIZE, "%x", instance);
-       mii_bus->irq = kmalloc(sizeof(int) * PHY_MAX_ADDR, GFP_KERNEL);
-       if (!mii_bus->irq) {
-               dev_err(sdev->dev, "mii_bus irq allocation failed\n");
-               err = -ENOMEM;
-               goto err_out_mdiobus;
-       }
-
-       memset(mii_bus->irq, PHY_POLL, sizeof(int) * PHY_MAX_ADDR);
 
        bp->mii_bus = mii_bus;
 
        err = mdiobus_register(mii_bus);
        if (err) {
                dev_err(sdev->dev, "failed to register MII bus\n");
-               goto err_out_mdiobus_irq;
+               goto err_out_mdiobus;
        }
 
        if (!bp->mii_bus->phy_map[bp->phy_addr] &&
 err_out_mdiobus_unregister:
        mdiobus_unregister(mii_bus);
 
-err_out_mdiobus_irq:
-       kfree(mii_bus->irq);
-
 err_out_mdiobus:
        mdiobus_free(mii_bus);
 
 
        phy_disconnect(bp->phydev);
        mdiobus_unregister(mii_bus);
-       kfree(mii_bus->irq);
        mdiobus_free(mii_bus);
 }
 
 
                 * if a slave is not present on hw */
                bus->phy_mask = ~(1 << priv->phy_id);
 
-               bus->irq = devm_kzalloc(&pdev->dev, sizeof(int) * PHY_MAX_ADDR,
-                                       GFP_KERNEL);
-               if (!bus->irq) {
-                       ret = -ENOMEM;
-                       goto out_free_mdio;
-               }
-
                if (priv->has_phy_interrupt)
                        bus->irq[priv->phy_id] = priv->phy_interrupt;
-               else
-                       bus->irq[priv->phy_id] = PHY_POLL;
 
                ret = mdiobus_register(bus);
                if (ret) {
 
        struct mii_bus *mii_bus;
        struct phy_device *phy_dev;
        char bus_id[MII_BUS_ID_SIZE + 3];
-       int i, err = 0;
+       int err = 0;
 
        if (ci->id == BCMA_CHIP_ID_BCM4707 ||
            ci->id == BCMA_CHIP_ID_BCM53018)
        mii_bus->parent = &bgmac->core->dev;
        mii_bus->phy_mask = ~(1 << bgmac->phyaddr);
 
-       mii_bus->irq = kmalloc_array(PHY_MAX_ADDR, sizeof(int), GFP_KERNEL);
-       if (!mii_bus->irq) {
-               err = -ENOMEM;
-               goto err_free_bus;
-       }
-       for (i = 0; i < PHY_MAX_ADDR; i++)
-               mii_bus->irq[i] = PHY_POLL;
-
        err = mdiobus_register(mii_bus);
        if (err) {
                bgmac_err(bgmac, "Registration of mii bus failed\n");
-               goto err_free_irq;
+               goto err_free_bus;
        }
 
        bgmac->mii_bus = mii_bus;
 
 err_unregister_bus:
        mdiobus_unregister(mii_bus);
-err_free_irq:
-       kfree(mii_bus->irq);
 err_free_bus:
        mdiobus_free(mii_bus);
        return err;
        struct mii_bus *mii_bus = bgmac->mii_bus;
 
        mdiobus_unregister(mii_bus);
-       kfree(mii_bus->irq);
        mdiobus_free(mii_bus);
 }
 
 
         */
        if (priv->internal_phy)
                priv->mii_bus->irq[phydev->addr] = PHY_IGNORE_INTERRUPT;
-       else
-               priv->mii_bus->irq[phydev->addr] = PHY_POLL;
 
        return 0;
 }
        snprintf(bus->id, MII_BUS_ID_SIZE, "%s-%d",
                 priv->pdev->name, priv->pdev->id);
 
-       bus->irq = kcalloc(PHY_MAX_ADDR, sizeof(int), GFP_KERNEL);
-       if (!bus->irq) {
-               mdiobus_free(priv->mii_bus);
-               return -ENOMEM;
-       }
-
        return 0;
 }
 
 out:
        of_node_put(priv->phy_dn);
        mdiobus_unregister(priv->mii_bus);
-       kfree(priv->mii_bus->irq);
        mdiobus_free(priv->mii_bus);
        return ret;
 }
 
        of_node_put(priv->phy_dn);
        mdiobus_unregister(priv->mii_bus);
-       kfree(priv->mii_bus->irq);
        mdiobus_free(priv->mii_bus);
 }
 
        struct napi_struct      napi;
        struct phy_device       *phy_dev;       /* the associated PHY device */
        struct mii_bus          *mii_bus;       /* the MII bus */
-       int                     phy_irq[PHY_MAX_ADDR];
        spinlock_t              sbm_lock;       /* spin lock */
        int                     sbm_devflags;   /* current device flags */
 
        sc->mii_bus->priv = sc;
        sc->mii_bus->read = sbmac_mii_read;
        sc->mii_bus->write = sbmac_mii_write;
-       sc->mii_bus->irq = sc->phy_irq;
-       for (i = 0; i < PHY_MAX_ADDR; ++i)
-               sc->mii_bus->irq[i] = SBMAC_PHY_INT;
 
        sc->mii_bus->parent = &pldev->dev;
        /*
 
        tp->mdio_bus->read     = &tg3_mdio_read;
        tp->mdio_bus->write    = &tg3_mdio_write;
        tp->mdio_bus->phy_mask = ~(1 << tp->phy_addr);
-       tp->mdio_bus->irq      = &tp->mdio_irq[0];
-
-       for (i = 0; i < PHY_MAX_ADDR; i++)
-               tp->mdio_bus->irq[i] = PHY_POLL;
 
        /* The bus registration will look for all the PHYs on the mdio bus.
         * Unfortunately, it does not ensure the PHY is powered up before
 
        int                             pcie_readrq;
 
        struct mii_bus                  *mdio_bus;
-       int                             mdio_irq[PHY_MAX_ADDR];
        int                             old_link;
 
        u8                              phy_addr;
 
        bp->mii_bus->parent = &bp->dev->dev;
        pdata = dev_get_platdata(&bp->pdev->dev);
 
-       bp->mii_bus->irq = kmalloc(sizeof(int)*PHY_MAX_ADDR, GFP_KERNEL);
-       if (!bp->mii_bus->irq) {
-               err = -ENOMEM;
-               goto err_out_free_mdiobus;
-       }
-
        dev_set_drvdata(&bp->dev->dev, bp->mii_bus);
 
        np = bp->pdev->dev.of_node;
                                goto err_out_unregister_bus;
                }
        } else {
-               for (i = 0; i < PHY_MAX_ADDR; i++)
-                       bp->mii_bus->irq[i] = PHY_POLL;
-
                if (pdata)
                        bp->mii_bus->phy_mask = pdata->phy_mask;
 
        }
 
        if (err)
-               goto err_out_free_mdio_irq;
+               goto err_out_free_mdiobus;
 
        err = macb_mii_probe(bp->dev);
        if (err)
 
 err_out_unregister_bus:
        mdiobus_unregister(bp->mii_bus);
-err_out_free_mdio_irq:
-       kfree(bp->mii_bus->irq);
 err_out_free_mdiobus:
        mdiobus_free(bp->mii_bus);
 err_out:
                if (bp->phy_dev)
                        phy_disconnect(bp->phy_dev);
                mdiobus_unregister(bp->mii_bus);
-               kfree(bp->mii_bus->irq);
                mdiobus_free(bp->mii_bus);
 
                /* Shutdown the PHY if there is a GPIO reset */
 
 
 static int dnet_mii_init(struct dnet *bp)
 {
-       int err, i;
+       int err;
 
        bp->mii_bus = mdiobus_alloc();
        if (bp->mii_bus == NULL)
 
        bp->mii_bus->priv = bp;
 
-       bp->mii_bus->irq = devm_kmalloc(&bp->pdev->dev,
-                                       sizeof(int) * PHY_MAX_ADDR, GFP_KERNEL);
-       if (!bp->mii_bus->irq) {
-               err = -ENOMEM;
-               goto err_out;
-       }
-
-       for (i = 0; i < PHY_MAX_ADDR; i++)
-               bp->mii_bus->irq[i] = PHY_POLL;
-
        if (mdiobus_register(bp->mii_bus)) {
                err = -ENXIO;
                goto err_out;
 
        struct resource *mmio = NULL;
        struct resource *mem = NULL;
        struct ethoc *priv = NULL;
-       unsigned int phy;
        int num_bd;
        int ret = 0;
        bool random_mac = false;
        priv->mdio->write = ethoc_mdio_write;
        priv->mdio->priv = priv;
 
-       priv->mdio->irq = kmalloc(sizeof(int) * PHY_MAX_ADDR, GFP_KERNEL);
-       if (!priv->mdio->irq) {
-               ret = -ENOMEM;
-               goto free_mdio;
-       }
-
-       for (phy = 0; phy < PHY_MAX_ADDR; phy++)
-               priv->mdio->irq[phy] = PHY_POLL;
-
        ret = mdiobus_register(priv->mdio);
        if (ret) {
                dev_err(&netdev->dev, "failed to register MDIO bus\n");
-               goto free_mdio;
+               goto free;
        }
 
        ret = ethoc_mdio_probe(netdev);
        netif_napi_del(&priv->napi);
 error:
        mdiobus_unregister(priv->mdio);
-free_mdio:
-       kfree(priv->mdio->irq);
        mdiobus_free(priv->mdio);
 free:
        if (priv->clk)
 
        struct napi_struct napi;
 
        struct mii_bus *mii_bus;
-       int phy_irq[PHY_MAX_ADDR];
        struct phy_device *phydev;
        int old_speed;
 };
        struct net_device *netdev;
        struct ftgmac100 *priv;
        int err;
-       int i;
 
        if (!pdev)
                return -ENODEV;
        priv->mii_bus->priv = netdev;
        priv->mii_bus->read = ftgmac100_mdiobus_read;
        priv->mii_bus->write = ftgmac100_mdiobus_write;
-       priv->mii_bus->irq = priv->phy_irq;
-
-       for (i = 0; i < PHY_MAX_ADDR; i++)
-               priv->mii_bus->irq[i] = PHY_POLL;
 
        err = mdiobus_register(priv->mii_bus);
        if (err) {
 
        struct net_device *ndev = platform_get_drvdata(pdev);
        struct fec_enet_private *fep = netdev_priv(ndev);
        struct device_node *node;
-       int err = -ENXIO, i;
+       int err = -ENXIO;
        u32 mii_speed, holdtime;
 
        /*
        fep->mii_bus->priv = fep;
        fep->mii_bus->parent = &pdev->dev;
 
-       fep->mii_bus->irq = kmalloc(sizeof(int) * PHY_MAX_ADDR, GFP_KERNEL);
-       if (!fep->mii_bus->irq) {
-               err = -ENOMEM;
-               goto err_out_free_mdiobus;
-       }
-
-       for (i = 0; i < PHY_MAX_ADDR; i++)
-               fep->mii_bus->irq[i] = PHY_POLL;
-
        node = of_get_child_by_name(pdev->dev.of_node, "mdio");
        if (node) {
                err = of_mdiobus_register(fep->mii_bus, node);
        }
 
        if (err)
-               goto err_out_free_mdio_irq;
+               goto err_out_free_mdiobus;
 
        mii_cnt++;
 
 
        return 0;
 
-err_out_free_mdio_irq:
-       kfree(fep->mii_bus->irq);
 err_out_free_mdiobus:
        mdiobus_free(fep->mii_bus);
 err_out:
 {
        if (--mii_cnt == 0) {
                mdiobus_unregister(fep->mii_bus);
-               kfree(fep->mii_bus->irq);
                mdiobus_free(fep->mii_bus);
        }
 }
 
 
 struct mpc52xx_fec_mdio_priv {
        struct mpc52xx_fec __iomem *regs;
-       int mdio_irqs[PHY_MAX_ADDR];
 };
 
 static int mpc52xx_fec_mdio_transfer(struct mii_bus *bus, int phy_id,
        bus->read = mpc52xx_fec_mdio_read;
        bus->write = mpc52xx_fec_mdio_write;
 
-       /* setup irqs */
-       bus->irq = priv->mdio_irqs;
-
        /* setup registers */
        err = of_address_to_resource(np, 0, &res);
        if (err)
 
                goto out_free_bus;
 
        new_bus->phy_mask = ~0;
-       new_bus->irq = kmalloc(sizeof(int) * PHY_MAX_ADDR, GFP_KERNEL);
-       if (!new_bus->irq) {
-               ret = -ENOMEM;
-               goto out_unmap_regs;
-       }
 
        new_bus->parent = &ofdev->dev;
        platform_set_drvdata(ofdev, new_bus);
 
        ret = of_mdiobus_register(new_bus, ofdev->dev.of_node);
        if (ret)
-               goto out_free_irqs;
+               goto out_unmap_regs;
 
        return 0;
 
-out_free_irqs:
-       kfree(new_bus->irq);
 out_unmap_regs:
        iounmap(bitbang->dir);
 out_free_bus:
        struct bb_info *bitbang = bus->priv;
 
        mdiobus_unregister(bus);
-       kfree(bus->irq);
        free_mdio_bitbang(bus);
        iounmap(bitbang->dir);
        kfree(bitbang);
 
        clrsetbits_be32(&fec->fecp->fec_mii_speed, 0x7E, fec->mii_speed);
 
        new_bus->phy_mask = ~0;
-       new_bus->irq = kmalloc(sizeof(int) * PHY_MAX_ADDR, GFP_KERNEL);
-       if (!new_bus->irq) {
-               ret = -ENOMEM;
-               goto out_unmap_regs;
-       }
 
        new_bus->parent = &ofdev->dev;
        platform_set_drvdata(ofdev, new_bus);
 
        ret = of_mdiobus_register(new_bus, ofdev->dev.of_node);
        if (ret)
-               goto out_free_irqs;
+               goto out_unmap_regs;
 
        return 0;
 
-out_free_irqs:
-       kfree(new_bus->irq);
 out_unmap_regs:
        iounmap(fec->fecp);
 out_res:
        struct fec_info *fec = bus->priv;
 
        mdiobus_unregister(bus);
-       kfree(bus->irq);
        iounmap(fec->fecp);
        kfree(fec);
        mdiobus_free(bus);
 
 struct fsl_pq_mdio_priv {
        void __iomem *map;
        struct fsl_pq_mii __iomem *regs;
-       int irqs[PHY_MAX_ADDR];
 };
 
 /*
        new_bus->read = &fsl_pq_mdio_read;
        new_bus->write = &fsl_pq_mdio_write;
        new_bus->reset = &fsl_pq_mdio_reset;
-       new_bus->irq = priv->irqs;
 
        err = of_address_to_resource(np, 0, &res);
        if (err < 0) {
 
                dev_warn(&pdev->dev, "no syscon hisilicon,peri-c-subctrl\n");
                mdio_dev->subctrl_vbase = NULL;
        }
-       new_bus->irq = devm_kcalloc(&pdev->dev, PHY_MAX_ADDR,
-                                   sizeof(int), GFP_KERNEL);
-       if (!new_bus->irq)
-               return -ENOMEM;
-
        new_bus->parent = &pdev->dev;
        platform_set_drvdata(pdev, new_bus);
 
 
        priv->mii_bus->name = "ltq_mii";
        snprintf(priv->mii_bus->id, MII_BUS_ID_SIZE, "%s-%x",
                priv->pdev->name, priv->pdev->id);
-       priv->mii_bus->irq = kmalloc(sizeof(int) * PHY_MAX_ADDR, GFP_KERNEL);
-       if (!priv->mii_bus->irq) {
-               err = -ENOMEM;
-               goto err_out_free_mdiobus;
-       }
-
-       for (i = 0; i < PHY_MAX_ADDR; ++i)
-               priv->mii_bus->irq[i] = PHY_POLL;
-
        if (mdiobus_register(priv->mii_bus)) {
                err = -ENXIO;
-               goto err_out_free_mdio_irq;
+               goto err_out_free_mdiobus;
        }
 
        if (ltq_etop_mdio_probe(dev)) {
 
 err_out_unregister_bus:
        mdiobus_unregister(priv->mii_bus);
-err_out_free_mdio_irq:
-       kfree(priv->mii_bus->irq);
 err_out_free_mdiobus:
        mdiobus_free(priv->mii_bus);
 err_out:
 
        phy_disconnect(priv->phydev);
        mdiobus_unregister(priv->mii_bus);
-       kfree(priv->mii_bus->irq);
        mdiobus_free(priv->mii_bus);
 }
 
 
        struct resource *r;
        struct mii_bus *bus;
        struct orion_mdio_dev *dev;
-       int i, ret;
+       int ret;
 
        r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
        if (!r) {
                 dev_name(&pdev->dev));
        bus->parent = &pdev->dev;
 
-       bus->irq = devm_kmalloc_array(&pdev->dev, PHY_MAX_ADDR, sizeof(int),
-                                     GFP_KERNEL);
-       if (!bus->irq)
-               return -ENOMEM;
-
-       for (i = 0; i < PHY_MAX_ADDR; i++)
-               bus->irq[i] = PHY_POLL;
-
        dev = bus->priv;
        dev->regs = devm_ioremap(&pdev->dev, r->start, resource_size(r));
        if (!dev->regs) {
 
        pldat->mii_bus->priv = pldat;
        pldat->mii_bus->parent = &pldat->pdev->dev;
 
-       pldat->mii_bus->irq = kmalloc(sizeof(int) * PHY_MAX_ADDR, GFP_KERNEL);
-       if (!pldat->mii_bus->irq) {
-               err = -ENOMEM;
-               goto err_out_1;
-       }
-
-       for (i = 0; i < PHY_MAX_ADDR; i++)
-               pldat->mii_bus->irq[i] = PHY_POLL;
-
        platform_set_drvdata(pldat->pdev, pldat->mii_bus);
 
        if (mdiobus_register(pldat->mii_bus))
-               goto err_out_free_mdio_irq;
+               goto err_out_unregister_bus;
 
        if (lpc_mii_probe(pldat->ndev) != 0)
                goto err_out_unregister_bus;
 
 err_out_unregister_bus:
        mdiobus_unregister(pldat->mii_bus);
-err_out_free_mdio_irq:
-       kfree(pldat->mii_bus->irq);
 err_out_1:
        mdiobus_free(pldat->mii_bus);
 err_out:
 
        static int card_idx = -1;
        int bar = 0;
        u16 *adrp;
-       int i;
 
        pr_info("%s\n", version);
 
        lp->mii_bus->name = "r6040_eth_mii";
        snprintf(lp->mii_bus->id, MII_BUS_ID_SIZE, "%s-%x",
                dev_name(&pdev->dev), card_idx);
-       lp->mii_bus->irq = kmalloc_array(PHY_MAX_ADDR, sizeof(int), GFP_KERNEL);
-       if (!lp->mii_bus->irq) {
-               err = -ENOMEM;
-               goto err_out_mdio;
-       }
-
-       for (i = 0; i < PHY_MAX_ADDR; i++)
-               lp->mii_bus->irq[i] = PHY_POLL;
 
        err = mdiobus_register(lp->mii_bus);
        if (err) {
                dev_err(&pdev->dev, "failed to register MII bus\n");
-               goto err_out_mdio_irq;
+               goto err_out_mdio;
        }
 
        err = r6040_mii_probe(dev);
 
 err_out_mdio_unregister:
        mdiobus_unregister(lp->mii_bus);
-err_out_mdio_irq:
-       kfree(lp->mii_bus->irq);
 err_out_mdio:
        mdiobus_free(lp->mii_bus);
 err_out_unmap:
 
        unregister_netdev(dev);
        mdiobus_unregister(lp->mii_bus);
-       kfree(lp->mii_bus->irq);
        mdiobus_free(lp->mii_bus);
        netif_napi_del(&lp->napi);
        pci_iounmap(pdev, lp->base);
 
 static int sh_mdio_init(struct sh_eth_private *mdp,
                        struct sh_eth_plat_data *pd)
 {
-       int ret, i;
+       int ret;
        struct bb_info *bitbang;
        struct platform_device *pdev = mdp->pdev;
        struct device *dev = &mdp->pdev->dev;
        snprintf(mdp->mii_bus->id, MII_BUS_ID_SIZE, "%s-%x",
                 pdev->name, pdev->id);
 
-       /* PHY IRQ */
-       mdp->mii_bus->irq = devm_kmalloc_array(dev, PHY_MAX_ADDR, sizeof(int),
-                                              GFP_KERNEL);
-       if (!mdp->mii_bus->irq) {
-               ret = -ENOMEM;
-               goto out_free_bus;
-       }
-
        /* register MDIO bus */
        if (dev->of_node) {
                ret = of_mdiobus_register(mdp->mii_bus, dev->of_node);
        } else {
-               for (i = 0; i < PHY_MAX_ADDR; i++)
-                       mdp->mii_bus->irq[i] = PHY_POLL;
                if (pd->phy_irq > 0)
                        mdp->mii_bus->irq[pd->phy] = pd->phy_irq;
 
 
                             struct net_device *dev)
 {
        struct smsc911x_data *pdata = netdev_priv(dev);
-       int err = -ENXIO, i;
+       int err = -ENXIO;
 
        pdata->mii_bus = mdiobus_alloc();
        if (!pdata->mii_bus) {
        pdata->mii_bus->priv = pdata;
        pdata->mii_bus->read = smsc911x_mii_read;
        pdata->mii_bus->write = smsc911x_mii_write;
-       pdata->mii_bus->irq = pdata->phy_irq;
-       for (i = 0; i < PHY_MAX_ADDR; ++i)
-               pdata->mii_bus->irq[i] = PHY_POLL;
+       memcpy(pdata->mii_bus->irq, pdata->phy_irq, sizeof(pdata->mii_bus));
 
        pdata->mii_bus->parent = &pdev->dev;
 
 
 
        struct phy_device *phy_dev;
        struct mii_bus *mii_bus;
-       int phy_irq[PHY_MAX_ADDR];
        int last_duplex;
        int last_carrier;
 };
 static int smsc9420_mii_init(struct net_device *dev)
 {
        struct smsc9420_pdata *pd = netdev_priv(dev);
-       int err = -ENXIO, i;
+       int err = -ENXIO;
 
        pd->mii_bus = mdiobus_alloc();
        if (!pd->mii_bus) {
        pd->mii_bus->priv = pd;
        pd->mii_bus->read = smsc9420_mii_read;
        pd->mii_bus->write = smsc9420_mii_write;
-       pd->mii_bus->irq = pd->phy_irq;
-       for (i = 0; i < PHY_MAX_ADDR; ++i)
-               pd->mii_bus->irq[i] = PHY_POLL;
 
        /* Mask all PHYs except ID 1 (internal) */
        pd->mii_bus->phy_mask = ~(1 << 1);
 
 {
        int err = 0;
        struct mii_bus *new_bus;
-       int *irqlist;
        struct stmmac_priv *priv = netdev_priv(ndev);
        struct stmmac_mdio_bus_data *mdio_bus_data = priv->plat->mdio_bus_data;
        int addr, found;
        if (new_bus == NULL)
                return -ENOMEM;
 
-       if (mdio_bus_data->irqs) {
-               irqlist = mdio_bus_data->irqs;
-       } else {
-               for (addr = 0; addr < PHY_MAX_ADDR; addr++)
-                       priv->mii_irq[addr] = PHY_POLL;
-               irqlist = priv->mii_irq;
-       }
+       if (mdio_bus_data->irqs)
+               memcpy(new_bus->irq, mdio_bus_data, sizeof(new_bus->irq));
 
 #ifdef CONFIG_OF
        if (priv->device->of_node)
        snprintf(new_bus->id, MII_BUS_ID_SIZE, "%s-%x",
                 new_bus->name, priv->plat->bus_id);
        new_bus->priv = ndev;
-       new_bus->irq = irqlist;
        new_bus->phy_mask = mdio_bus_data->phy_mask;
        new_bus->parent = priv->device;
 
                         */
                        if ((mdio_bus_data->irqs == NULL) &&
                            (mdio_bus_data->probed_phy_irq > 0)) {
-                               irqlist[addr] = mdio_bus_data->probed_phy_irq;
+                               new_bus->irq[addr] =
+                                       mdio_bus_data->probed_phy_irq;
                                phydev->irq = mdio_bus_data->probed_phy_irq;
                        }
 
 
 
 static int dwceqos_mii_init(struct net_local *lp)
 {
-       int ret = -ENXIO, i;
+       int ret = -ENXIO;
        struct resource res;
        struct device_node *mdionode;
 
        lp->mii_bus->priv = lp;
        lp->mii_bus->parent = &lp->ndev->dev;
 
-       lp->mii_bus->irq = kmalloc(sizeof(int) * PHY_MAX_ADDR, GFP_KERNEL);
-       if (!lp->mii_bus->irq) {
-               ret = -ENOMEM;
-               goto err_out_free_mdiobus;
-       }
-
-       for (i = 0; i < PHY_MAX_ADDR; i++)
-               lp->mii_bus->irq[i] = PHY_POLL;
        of_address_to_resource(lp->pdev->dev.of_node, 0, &res);
        snprintf(lp->mii_bus->id, MII_BUS_ID_SIZE, "%.8llx",
                 (unsigned long long)res.start);
        if (of_mdiobus_register(lp->mii_bus, mdionode))
-               goto err_out_free_mdio_irq;
+               goto err_out_free_mdiobus;
 
        return 0;
 
-err_out_free_mdio_irq:
-       kfree(lp->mii_bus->irq);
 err_out_free_mdiobus:
        mdiobus_free(lp->mii_bus);
 err_out:
                if (lp->phy_dev)
                        phy_disconnect(lp->phy_dev);
                mdiobus_unregister(lp->mii_bus);
-               kfree(lp->mii_bus->irq);
                mdiobus_free(lp->mii_bus);
 
                unregister_netdev(ndev);
 
        return 0;
 }
 
-static int mii_irqs[PHY_MAX_ADDR] = { PHY_POLL, };
-
 static struct mii_bus *cpmac_mii;
 
 static void cpmac_set_multicast_list(struct net_device *dev)
        cpmac_mii->read = cpmac_mdio_read;
        cpmac_mii->write = cpmac_mdio_write;
        cpmac_mii->reset = cpmac_mdio_reset;
-       cpmac_mii->irq = mii_irqs;
 
        cpmac_mii->priv = ioremap(AR7_REGS_MDIO, 256);
 
 
                 (lp->pci_dev->bus->number << 8) | lp->pci_dev->devfn);
        lp->mii_bus->priv = dev;
        lp->mii_bus->parent = &lp->pci_dev->dev;
-       lp->mii_bus->irq = kmalloc(sizeof(int) * PHY_MAX_ADDR, GFP_KERNEL);
-       if (!lp->mii_bus->irq) {
-               err = -ENOMEM;
-               goto err_out_free_mii_bus;
-       }
-
-       for (i = 0; i < PHY_MAX_ADDR; i++)
-               lp->mii_bus->irq[i] = PHY_POLL;
-
        err = mdiobus_register(lp->mii_bus);
        if (err)
-               goto err_out_free_mdio_irq;
+               goto err_out_free_mii_bus;
        err = tc_mii_probe(dev);
        if (err)
                goto err_out_unregister_bus;
 
 err_out_unregister_bus:
        mdiobus_unregister(lp->mii_bus);
-err_out_free_mdio_irq:
-       kfree(lp->mii_bus->irq);
 err_out_free_mii_bus:
        mdiobus_free(lp->mii_bus);
 err_out:
 
        phy_disconnect(lp->phy_dev);
        mdiobus_unregister(lp->mii_bus);
-       kfree(lp->mii_bus->irq);
        mdiobus_free(lp->mii_bus);
        unregister_netdev(dev);
        free_netdev(dev);
 
 
        /* MDIO bus data */
        struct mii_bus *mii_bus;        /* MII bus reference */
-       int mdio_irqs[PHY_MAX_ADDR];    /* IRQs table for MDIO bus */
 
        /* IO registers, dma functions and IRQs */
        void __iomem *regs;
 
        bus->read = temac_mdio_read;
        bus->write = temac_mdio_write;
        bus->parent = lp->dev;
-       bus->irq = lp->mdio_irqs; /* preallocated IRQ table */
 
        lp->mii_bus = bus;
 
 void temac_mdio_teardown(struct temac_local *lp)
 {
        mdiobus_unregister(lp->mii_bus);
-       kfree(lp->mii_bus->irq);
        mdiobus_free(lp->mii_bus);
        lp->mii_bus = NULL;
 }
 
  * @phy_dev:   Pointer to PHY device structure attached to the axienet_local
  * @phy_node:  Pointer to device node structure
  * @mii_bus:   Pointer to MII bus structure
- * @mdio_irqs: IRQs table for MDIO bus required in mii_bus structure
  * @regs:      Base address for the axienet_local device address space
  * @dma_regs:  Base address for the axidma device address space
  * @dma_err_tasklet: Tasklet structure to process Axi DMA errors
 
        /* MDIO bus data */
        struct mii_bus *mii_bus;        /* MII bus reference */
-       int mdio_irqs[PHY_MAX_ADDR];    /* IRQs table for MDIO bus */
 
        /* IO registers, dma functions and IRQs */
        void __iomem *regs;
 
        bus->read = axienet_mdio_read;
        bus->write = axienet_mdio_write;
        bus->parent = lp->dev;
-       bus->irq = lp->mdio_irqs; /* preallocated IRQ table */
        lp->mii_bus = bus;
 
        ret = of_mdiobus_register(bus, np1);
 void axienet_mdio_teardown(struct axienet_local *lp)
 {
        mdiobus_unregister(lp->mii_bus);
-       kfree(lp->mii_bus->irq);
        mdiobus_free(lp->mii_bus);
        lp->mii_bus = NULL;
 }
 
  * @phy_dev:           pointer to the PHY device
  * @phy_node:          pointer to the PHY device node
  * @mii_bus:           pointer to the MII bus
- * @mdio_irqs:         IRQs table for MDIO bus
  * @last_link:         last link status
  * @has_mdio:          indicates whether MDIO is included in the HW
  */
        struct device_node *phy_node;
 
        struct mii_bus *mii_bus;
-       int mdio_irqs[PHY_MAX_ADDR];
 
        int last_link;
        bool has_mdio;
        bus->read = xemaclite_mdio_read;
        bus->write = xemaclite_mdio_write;
        bus->parent = dev;
-       bus->irq = lp->mdio_irqs; /* preallocated IRQ table */
 
        lp->mii_bus = bus;
 
        /* Un-register the mii_bus, if configured */
        if (lp->has_mdio) {
                mdiobus_unregister(lp->mii_bus);
-               kfree(lp->mii_bus->irq);
                mdiobus_free(lp->mii_bus);
                lp->mii_bus = NULL;
        }
 
 #define MII_REGS_NUM 29
 
 struct fixed_mdio_bus {
-       int irqs[PHY_MAX_ADDR];
        struct mii_bus *mii_bus;
        struct list_head phys;
 };
 
        memset(fp->regs, 0xFF,  sizeof(fp->regs[0]) * MII_REGS_NUM);
 
-       fmb->irqs[phy_addr] = irq;
+       fmb->mii_bus->irq[phy_addr] = irq;
 
        fp->addr = phy_addr;
        fp->status = *status;
        fmb->mii_bus->parent = &pdev->dev;
        fmb->mii_bus->read = &fixed_mdio_read;
        fmb->mii_bus->write = &fixed_mdio_write;
-       fmb->mii_bus->irq = fmb->irqs;
 
        ret = mdiobus_register(fmb->mii_bus);
        if (ret)
 
        bus->reset = unimac_mdio_reset;
        snprintf(bus->id, MII_BUS_ID_SIZE, "%s", pdev->name);
 
-       bus->irq = kcalloc(PHY_MAX_ADDR, sizeof(int), GFP_KERNEL);
-       if (!bus->irq) {
-               ret = -ENOMEM;
-               goto out_mdio_free;
-       }
-
        ret = of_mdiobus_register(bus, np);
        if (ret) {
                dev_err(&pdev->dev, "MDIO bus registration failed\n");
-               goto out_mdio_irq;
+               goto out_mdio_free;
        }
 
        platform_set_drvdata(pdev, priv);
 
        return 0;
 
-out_mdio_irq:
-       kfree(bus->irq);
 out_mdio_free:
        mdiobus_free(bus);
        return ret;
        struct unimac_mdio_priv *priv = platform_get_drvdata(pdev);
 
        mdiobus_unregister(priv->mii_bus);
-       kfree(priv->mii_bus->irq);
        mdiobus_free(priv->mii_bus);
 
        return 0;
 
 
        new_bus->phy_mask = pdata->phy_mask;
        new_bus->phy_ignore_ta_mask = pdata->phy_ignore_ta_mask;
-       new_bus->irq = pdata->irqs;
+       memcpy(new_bus->irq, pdata->irqs, sizeof(new_bus->irq));
        new_bus->parent = dev;
 
        if (new_bus->phy_mask == ~0)
 
        snprintf(bus->id, MII_BUS_ID_SIZE, "%s-%d-mii", pdev->name, pdev->id);
        bus->parent = &pdev->dev;
 
-       bus->irq = devm_kzalloc(&pdev->dev, sizeof(int) * PHY_MAX_ADDR,
-                       GFP_KERNEL);
-       if (!bus->irq) {
-               ret = -ENOMEM;
-               goto err_out_free_mdiobus;
-       }
-
        /* Setting PHY_IGNORE_INTERRUPT here even if it has no effect,
         * of_mdiobus_register() sets these PHY_POLL.
         * Ideally, the interrupt from MAC controller could be used to
 
        struct mdio_mux_parent_bus *parent;
        struct mdio_mux_child_bus *next;
        int bus_number;
-       int phy_irq[PHY_MAX_ADDR];
 };
 
 /*
                        break;
                }
                cb->mii_bus->priv = cb;
-               cb->mii_bus->irq = cb->phy_irq;
+
                cb->mii_bus->name = "mdio_mux";
                snprintf(cb->mii_bus->id, MII_BUS_ID_SIZE, "%x.%x",
                         pb->parent_id, v);
 
        resource_size_t mdio_phys;
        resource_size_t regsize;
        enum octeon_mdiobus_mode mode;
-       int phy_irq[PHY_MAX_ADDR];
 };
 
 #ifdef CONFIG_CAVIUM_OCTEON_SOC
        oct_mdio_writeq(smi_en.u64, bus->register_base + SMI_EN);
 
        bus->mii_bus->priv = bus;
-       bus->mii_bus->irq = bus->phy_irq;
        bus->mii_bus->name = "mdio-octeon";
        snprintf(bus->mii_bus->id, MII_BUS_ID_SIZE, "%llx", bus->register_base);
        bus->mii_bus->parent = &pdev->dev;
 
        struct mii_bus *bus;
        struct sun4i_mdio_data *data;
        struct resource *res;
-       int ret, i;
+       int ret;
 
        bus = mdiobus_alloc_size(sizeof(*data));
        if (!bus)
        snprintf(bus->id, MII_BUS_ID_SIZE, "%s-mii", dev_name(&pdev->dev));
        bus->parent = &pdev->dev;
 
-       bus->irq = devm_kzalloc(&pdev->dev, sizeof(int) * PHY_MAX_ADDR,
-                       GFP_KERNEL);
-       if (!bus->irq) {
-               ret = -ENOMEM;
-               goto err_out_free_mdiobus;
-       }
-
-       for (i = 0; i < PHY_MAX_ADDR; i++)
-               bus->irq[i] = PHY_POLL;
-
        data = bus->priv;
        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
        data->membase = devm_ioremap_resource(&pdev->dev, res);
 
        struct mii_bus *bus;
        size_t aligned_size = ALIGN(sizeof(*bus), NETDEV_ALIGN);
        size_t alloc_size;
+       int i;
 
        /* If we alloc extra space, it should be aligned */
        if (size)
                        bus->priv = (void *)bus + aligned_size;
        }
 
+       /* Initialise the interrupts to polling */
+       for (i = 0; i < PHY_MAX_ADDR; i++)
+               bus->irq[i] = PHY_POLL;
+
        return bus;
 }
 EXPORT_SYMBOL(mdiobus_alloc_size);
 
 static int ax88172a_init_mdio(struct usbnet *dev)
 {
        struct ax88172a_private *priv = dev->driver_priv;
-       int ret, i;
+       int ret;
 
        priv->mdio = mdiobus_alloc();
        if (!priv->mdio) {
        snprintf(priv->mdio->id, MII_BUS_ID_SIZE, "usb-%03d:%03d",
                 dev->udev->bus->busnum, dev->udev->devnum);
 
-       priv->mdio->irq = kzalloc(sizeof(int) * PHY_MAX_ADDR, GFP_KERNEL);
-       if (!priv->mdio->irq) {
-               ret = -ENOMEM;
-               goto mfree;
-       }
-       for (i = 0; i < PHY_MAX_ADDR; i++)
-               priv->mdio->irq[i] = PHY_POLL;
-
        ret = mdiobus_register(priv->mdio);
        if (ret) {
                netdev_err(dev->net, "Could not register MDIO bus\n");
-               goto ifree;
+               goto mfree;
        }
 
        netdev_info(dev->net, "registered mdio bus %s\n", priv->mdio->id);
        return 0;
 
-ifree:
-       kfree(priv->mdio->irq);
 mfree:
        mdiobus_free(priv->mdio);
        return ret;
 
        snprintf(dev->mdiobus->id, MII_BUS_ID_SIZE, "usb-%03d:%03d",
                 dev->udev->bus->busnum, dev->udev->devnum);
 
-       dev->mdiobus->irq = kzalloc(sizeof(int) * PHY_MAX_ADDR, GFP_KERNEL);
-       if (!dev->mdiobus->irq) {
-               ret = -ENOMEM;
-               goto exit1;
-       }
-
        /* handle our own interrupt */
        for (i = 0; i < PHY_MAX_ADDR; i++)
                dev->mdiobus->irq[i] = PHY_IGNORE_INTERRUPT;
        ret = mdiobus_register(dev->mdiobus);
        if (ret) {
                netdev_err(dev->net, "can't register MDIO bus\n");
-               goto exit2;
+               goto exit1;
        }
 
        netdev_dbg(dev->net, "registered mdiobus bus %s\n", dev->mdiobus->id);
        return 0;
-exit2:
-       kfree(dev->mdiobus->irq);
 exit1:
        mdiobus_free(dev->mdiobus);
        return ret;
 static void lan78xx_remove_mdio(struct lan78xx_net *dev)
 {
        mdiobus_unregister(dev->mdiobus);
-       kfree(dev->mdiobus->irq);
        mdiobus_free(dev->mdiobus);
 }
 
 
        struct device_node *child;
        const __be32 *paddr;
        bool scanphys = false;
-       int addr, rc, i;
+       int addr, rc;
 
        /* Mask out all PHYs from auto probing.  Instead the PHYs listed in
         * the device tree are populated after the bus has been registered */
        mdio->phy_mask = ~0;
 
-       /* Clear all the IRQ properties */
-       if (mdio->irq)
-               for (i=0; i<PHY_MAX_ADDR; i++)
-                       mdio->irq[i] = PHY_POLL;
-
        mdio->dev.of_node = np;
 
        /* Register the MDIO bus */
 
        u32 phy_ignore_ta_mask;
 
        /*
-        * Pointer to an array of interrupts, each PHY's
-        * interrupt at the index matching its address
+        * An array of interrupts, each PHY's interrupt at the index
+        * matching its address
         */
-       int *irq;
+       int irq[PHY_MAX_ADDR];
 };
 #define to_mii_bus(d) container_of(d, struct mii_bus, dev)