return mtu;
 }
 
+static void mvneta_percpu_enable(void *arg)
+{
+       struct mvneta_port *pp = arg;
+
+       enable_percpu_irq(pp->dev->irq, IRQ_TYPE_NONE);
+}
+
+static void mvneta_percpu_disable(void *arg)
+{
+       struct mvneta_port *pp = arg;
+
+       disable_percpu_irq(pp->dev->irq);
+}
+
 /* Change the device mtu */
 static int mvneta_change_mtu(struct net_device *dev, int mtu)
 {
         * reallocation of the queues
         */
        mvneta_stop_dev(pp);
+       on_each_cpu(mvneta_percpu_disable, pp, true);
 
        mvneta_cleanup_txqs(pp);
        mvneta_cleanup_rxqs(pp);
                return ret;
        }
 
+       on_each_cpu(mvneta_percpu_enable, pp, true);
        mvneta_start_dev(pp);
        mvneta_port_up(pp);
 
        pp->phy_dev = NULL;
 }
 
-static void mvneta_percpu_enable(void *arg)
-{
-       struct mvneta_port *pp = arg;
-
-       enable_percpu_irq(pp->dev->irq, IRQ_TYPE_NONE);
-}
-
-static void mvneta_percpu_disable(void *arg)
-{
-       struct mvneta_port *pp = arg;
-
-       disable_percpu_irq(pp->dev->irq);
-}
-
 /* Electing a CPU must be done in an atomic way: it should be done
  * after or before the removal/insertion of a CPU and this function is
  * not reentrant.