Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cf5b36b5 authored by Andrey Shvetsov's avatar Andrey Shvetsov Committed by Greg Kroah-Hartman
Browse files

staging: most: net: use dormant state



This replaces the call of wait_for_completion in case of an invalid MAC
address in the function most_nd_open() with the dormant state of the
network device.

As a side effect, opening the network device cannot fail anymore.

Signed-off-by: default avatarAndrey Shvetsov <andrey.shvetsov@k2l.de>
Signed-off-by: default avatarChristian Gromm <christian.gromm@microchip.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent a73470f2
Loading
Loading
Loading
Loading
+6 −25
Original line number Diff line number Diff line
@@ -69,7 +69,6 @@ struct net_dev_context {
	struct net_device *dev;
	struct net_dev_channel rx;
	struct net_dev_channel tx;
	struct completion mac_compl;
	struct list_head list;
};

@@ -180,7 +179,6 @@ static int most_nd_set_mac_address(struct net_device *dev, void *p)
static int most_nd_open(struct net_device *dev)
{
	struct net_dev_context *nd = dev->ml_priv;
	long ret;

	netdev_info(dev, "open net device\n");

@@ -199,29 +197,13 @@ static int most_nd_open(struct net_device *dev)
		return -EBUSY;
	}

	if (!is_valid_ether_addr(dev->dev_addr)) {
		nd->iface->request_netinfo(nd->iface, nd->tx.ch_id);
		ret = wait_for_completion_interruptible_timeout(
			      &nd->mac_compl, msecs_to_jiffies(5000));
		if (!ret) {
			netdev_err(dev, "mac timeout\n");
			ret = -EBUSY;
			goto err;
		}

		if (ret < 0) {
			netdev_warn(dev, "mac waiting interrupted\n");
			goto err;
		}
	}

	if (is_valid_ether_addr(dev->dev_addr))
		netif_dormant_off(dev);
	else
		netif_dormant_on(dev);
	netif_wake_queue(dev);
	nd->iface->request_netinfo(nd->iface, nd->tx.ch_id);
	return 0;

err:
	most_stop_channel(nd->iface, nd->tx.ch_id, &aim);
	most_stop_channel(nd->iface, nd->rx.ch_id, &aim);
	return ret;
}

static int most_nd_stop(struct net_device *dev)
@@ -337,7 +319,6 @@ static int aim_probe_channel(struct most_interface *iface, int channel_idx,
		if (!nd)
			return -ENOMEM;

		init_completion(&nd->mac_compl);
		nd->iface = iface;

		spin_lock_irqsave(&list_lock, flags);
@@ -569,7 +550,7 @@ void most_deliver_netinfo(struct most_interface *iface,
			netdev_info(dev, "set mac %02x-%02x-%02x-%02x-%02x-%02x\n",
				    m[0], m[1], m[2], m[3], m[4], m[5]);
			ether_addr_copy(dev->dev_addr, m);
			complete(&nd->mac_compl);
			netif_dormant_off(dev);
		} else if (!ether_addr_equal(dev->dev_addr, m)) {
			netdev_warn(dev, "reject mac %02x-%02x-%02x-%02x-%02x-%02x\n",
				    m[0], m[1], m[2], m[3], m[4], m[5]);