Commit 8dc181f2 authored by Alex Elder's avatar Alex Elder Committed by David S. Miller
Browse files

net: ipa: don't hold clock reference while netdev open



Currently a clock reference is taken whenever the ->ndo_open
callback for the modem netdev is called.  That reference is dropped
when the device is closed, in ipa_stop().

We no longer need this, because ipa_start_xmit() now handles the
situation where the hardware power state is not active.

Drop the clock reference in ipa_open() when we're done, and take a
new reference in ipa_stop() before we begin closing the interface.

Finally (and unrelated, but trivial), change the return type of
ipa_start_xmit() to be netdev_tx_t instead of int.

Signed-off-by: default avatarAlex Elder <elder@linaro.org>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 8dcf8bb3
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -65,6 +65,8 @@ static int ipa_open(struct net_device *netdev)

	netif_start_queue(netdev);

	(void)ipa_clock_put(ipa);

	return 0;

err_disable_tx:
@@ -80,12 +82,17 @@ static int ipa_stop(struct net_device *netdev)
{
	struct ipa_priv *priv = netdev_priv(netdev);
	struct ipa *ipa = priv->ipa;
	int ret;

	ret = ipa_clock_get(ipa);
	if (WARN_ON(ret < 0))
		goto out_clock_put;

	netif_stop_queue(netdev);

	ipa_endpoint_disable_one(ipa->name_map[IPA_ENDPOINT_AP_MODEM_RX]);
	ipa_endpoint_disable_one(ipa->name_map[IPA_ENDPOINT_AP_MODEM_TX]);

out_clock_put:
	(void)ipa_clock_put(ipa);

	return 0;
@@ -99,7 +106,8 @@ static int ipa_stop(struct net_device *netdev)
 * NETDEV_TX_OK: Success
 * NETDEV_TX_BUSY: Error while transmitting the skb. Try again later
 */
static int ipa_start_xmit(struct sk_buff *skb, struct net_device *netdev)
static netdev_tx_t
ipa_start_xmit(struct sk_buff *skb, struct net_device *netdev)
{
	struct net_device_stats *stats = &netdev->stats;
	struct ipa_priv *priv = netdev_priv(netdev);