Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 119890
b: refs/heads/master
c: 4798a2b
h: refs/heads/master
v: v3
  • Loading branch information
Rémi Denis-Courmont authored and David S. Miller committed Dec 15, 2008
1 parent d481fa2 commit 657d4c3
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 6 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: eb9b851b980e20ba5f6bdfd6ec24f4bc77623ce6
refs/heads/master: 4798a2b84ea5a98e4f36a815a646cb48ff521684
27 changes: 22 additions & 5 deletions trunk/net/phonet/pep-gprs.c
Original file line number Diff line number Diff line change
Expand Up @@ -155,19 +155,37 @@ static void gprs_data_ready(struct sock *sk, int len)
static void gprs_write_space(struct sock *sk)
{
struct gprs_dev *dev = sk->sk_user_data;
struct net_device *net = dev->net;
unsigned credits = pep_writeable(sk);

spin_lock_bh(&dev->tx_lock);
dev->tx_max = credits;
if (credits > skb_queue_len(&dev->tx_queue))
netif_wake_queue(dev->net);
if (credits > skb_queue_len(&dev->tx_queue) && netif_running(net))
netif_wake_queue(net);
spin_unlock_bh(&dev->tx_lock);
}

/*
* Network device callbacks
*/

static int gprs_open(struct net_device *dev)
{
struct gprs_dev *gp = netdev_priv(dev);

gprs_write_space(gp->sk);
return 0;
}

static int gprs_close(struct net_device *dev)
{
struct gprs_dev *gp = netdev_priv(dev);

netif_stop_queue(dev);
flush_work(&gp->tx_work);
return 0;
}

static int gprs_xmit(struct sk_buff *skb, struct net_device *net)
{
struct gprs_dev *dev = netdev_priv(net);
Expand Down Expand Up @@ -254,6 +272,8 @@ static void gprs_setup(struct net_device *net)
net->tx_queue_len = 10;

net->destructor = free_netdev;
net->open = gprs_open;
net->stop = gprs_close;
net->hard_start_xmit = gprs_xmit; /* mandatory */
net->change_mtu = gprs_set_mtu;
net->get_stats = gprs_get_stats;
Expand Down Expand Up @@ -318,7 +338,6 @@ int gprs_attach(struct sock *sk)
dev->sk = sk;

printk(KERN_DEBUG"%s: attached\n", net->name);
gprs_write_space(sk); /* kick off TX */
return net->ifindex;

out_rel:
Expand All @@ -341,7 +360,5 @@ void gprs_detach(struct sock *sk)

printk(KERN_DEBUG"%s: detached\n", net->name);
unregister_netdev(net);
flush_scheduled_work();
sock_put(sk);
skb_queue_purge(&dev->tx_queue);
}

0 comments on commit 657d4c3

Please sign in to comment.