static void enic_reset(struct work_struct *work) { struct enic *enic = container_of(work, struct enic, reset); if (!netif_running(enic->netdev)) return; rtnl_lock(); spin_lock(&enic->devcmd_lock); vnic_dev_hang_notify(enic->vdev); spin_unlock(&enic->devcmd_lock); enic_stop(enic->netdev); enic_dev_soft_reset(enic); enic_reset_mcaddrs(enic); enic_init_vnic_resources(enic); enic_open(enic->netdev); rtnl_unlock(); }
static int enic_change_mtu(struct net_device *netdev, int new_mtu) { struct enic *enic = netdev_priv(netdev); int running = netif_running(netdev); if (new_mtu < ENIC_MIN_MTU || new_mtu > ENIC_MAX_MTU) return -EINVAL; if (running) enic_stop(netdev); netdev->mtu = new_mtu; if (netdev->mtu > enic->port_mtu) printk(KERN_WARNING PFX "%s: interface MTU (%d) set higher " "than port MTU (%d)\n", netdev->name, netdev->mtu, enic->port_mtu); if (running) enic_open(netdev); return 0; }