Lines Matching defs:pch
261 static void ppp_channel_push(struct channel *pch);
263 struct channel *pch);
270 struct channel *pch);
285 static int ppp_connect_channel(struct channel *pch, int unit);
286 static int ppp_disconnect_channel(struct channel *pch);
287 static void ppp_destroy_channel(struct channel *pch);
649 struct channel *pch;
652 pch = PF_TO_CHANNEL(pf);
658 err = ppp_connect_channel(pch, unit);
662 err = ppp_disconnect_channel(pch);
666 down_read(&pch->chan_sem);
667 chan = pch->chan;
671 up_read(&pch->chan_sem);
1729 struct channel *pch;
1746 pch = list_entry(list, struct channel, clist);
1748 spin_lock(&pch->downl);
1749 if (pch->chan) {
1750 if (pch->chan->ops->start_xmit(pch->chan, skb))
1757 spin_unlock(&pch->downl);
1793 struct channel *pch;
1807 list_for_each_entry(pch, &ppp->channels, clist) {
1808 if (pch->chan) {
1809 pch->avail = 1;
1811 pch->speed = pch->chan->speed;
1813 pch->avail = 0;
1815 if (pch->avail) {
1816 if (skb_queue_empty(&pch->file.xq) ||
1817 !pch->had_frag) {
1818 if (pch->speed == 0)
1821 totspeed += pch->speed;
1823 pch->avail = 2;
1827 if (!pch->had_frag && i < ppp->nxchan)
1870 pch = list_entry(list, struct channel, clist);
1872 if (!pch->avail)
1879 if (pch->avail == 1) {
1883 pch->avail = 1;
1887 spin_lock(&pch->downl);
1888 if (pch->chan == NULL) {
1890 if (pch->speed == 0)
1893 totspeed -= pch->speed;
1895 spin_unlock(&pch->downl);
1896 pch->avail = 0;
1913 if (pch->speed == 0) {
1921 ((totspeed*totfree)/pch->speed)) - hdrlen;
1923 flen += ((totfree - nzero)*pch->speed)/totspeed;
1924 nbigger -= ((totfree - nzero)*pch->speed)/
1945 pch->avail = 2;
1946 spin_unlock(&pch->downl);
1955 mtu = pch->chan->mtu - (hdrlen - 2);
1982 chan = pch->chan;
1983 if (!skb_queue_empty(&pch->file.xq) ||
1985 skb_queue_tail(&pch->file.xq, frag);
1986 pch->had_frag = 1;
1991 spin_unlock(&pch->downl);
1998 spin_unlock(&pch->downl);
2008 static void __ppp_channel_push(struct channel *pch)
2013 spin_lock(&pch->downl);
2014 if (pch->chan) {
2015 while (!skb_queue_empty(&pch->file.xq)) {
2016 skb = skb_dequeue(&pch->file.xq);
2017 if (!pch->chan->ops->start_xmit(pch->chan, skb)) {
2019 skb_queue_head(&pch->file.xq, skb);
2025 skb_queue_purge(&pch->file.xq);
2027 spin_unlock(&pch->downl);
2029 if (skb_queue_empty(&pch->file.xq)) {
2030 ppp = pch->ppp;
2036 static void ppp_channel_push(struct channel *pch)
2038 read_lock_bh(&pch->upl);
2039 if (pch->ppp) {
2040 (*this_cpu_ptr(pch->ppp->xmit_recursion))++;
2041 __ppp_channel_push(pch);
2042 (*this_cpu_ptr(pch->ppp->xmit_recursion))--;
2044 __ppp_channel_push(pch);
2046 read_unlock_bh(&pch->upl);
2060 ppp_do_recv(struct ppp *ppp, struct sk_buff *skb, struct channel *pch)
2064 ppp_receive_frame(ppp, skb, pch);
2113 struct channel *pch = chan->ppp;
2116 if (!pch) {
2121 read_lock_bh(&pch->upl);
2124 if (pch->ppp) {
2125 ++pch->ppp->dev->stats.rx_length_errors;
2126 ppp_receive_error(pch->ppp);
2132 if (!pch->ppp || proto >= 0xc000 || proto == PPP_CCPFRAG) {
2134 skb_queue_tail(&pch->file.rq, skb);
2136 while (pch->file.rq.qlen > PPP_MAX_RQLEN &&
2137 (skb = skb_dequeue(&pch->file.rq)))
2139 wake_up_interruptible(&pch->file.rwait);
2141 ppp_do_recv(pch->ppp, skb, pch);
2145 read_unlock_bh(&pch->upl);
2152 struct channel *pch = chan->ppp;
2155 if (!pch)
2158 read_lock_bh(&pch->upl);
2159 if (pch->ppp) {
2164 ppp_do_recv(pch->ppp, skb, pch);
2167 read_unlock_bh(&pch->upl);
2175 ppp_receive_frame(struct ppp *ppp, struct sk_buff *skb, struct channel *pch)
2183 ppp_receive_mp_frame(ppp, skb, pch);
2419 ppp_receive_mp_frame(struct ppp *ppp, struct sk_buff *skb, struct channel *pch)
2457 pch->lastseq = seq;
2708 struct channel *pch;
2711 pch = kzalloc(sizeof(struct channel), GFP_KERNEL);
2712 if (!pch)
2717 pch->ppp = NULL;
2718 pch->chan = chan;
2719 pch->chan_net = get_net(net);
2720 chan->ppp = pch;
2721 init_ppp_file(&pch->file, CHANNEL);
2722 pch->file.hdrlen = chan->hdrlen;
2724 pch->lastseq = -1;
2726 init_rwsem(&pch->chan_sem);
2727 spin_lock_init(&pch->downl);
2728 rwlock_init(&pch->upl);
2731 pch->file.index = ++pn->last_channel_index;
2732 list_add(&pch->list, &pn->new_channels);
2744 struct channel *pch = chan->ppp;
2746 if (pch)
2747 return pch->file.index;
2756 struct channel *pch = chan->ppp;
2759 if (pch) {
2760 read_lock_bh(&pch->upl);
2761 if (pch->ppp)
2762 unit = pch->ppp->file.index;
2763 read_unlock_bh(&pch->upl);
2773 struct channel *pch = chan->ppp;
2776 if (pch) {
2777 read_lock_bh(&pch->upl);
2778 if (pch->ppp && pch->ppp->dev)
2779 name = pch->ppp->dev->name;
2780 read_unlock_bh(&pch->upl);
2793 struct channel *pch = chan->ppp;
2796 if (!pch)
2805 down_write(&pch->chan_sem);
2806 spin_lock_bh(&pch->downl);
2807 pch->chan = NULL;
2808 spin_unlock_bh(&pch->downl);
2809 up_write(&pch->chan_sem);
2810 ppp_disconnect_channel(pch);
2812 pn = ppp_pernet(pch->chan_net);
2814 list_del(&pch->list);
2817 pch->file.dead = 1;
2818 wake_up_interruptible(&pch->file.rwait);
2819 if (refcount_dec_and_test(&pch->file.refcnt))
2820 ppp_destroy_channel(pch);
2830 struct channel *pch = chan->ppp;
2832 if (!pch)
2834 ppp_channel_push(pch);
3255 struct channel *pch;
3257 list_for_each_entry(pch, &pn->new_channels, list) {
3258 if (pch->file.index == unit) {
3259 list_move(&pch->list, &pn->all_channels);
3260 return pch;
3264 list_for_each_entry(pch, &pn->all_channels, list) {
3265 if (pch->file.index == unit)
3266 return pch;
3276 ppp_connect_channel(struct channel *pch, int unit)
3283 pn = ppp_pernet(pch->chan_net);
3289 write_lock_bh(&pch->upl);
3291 if (pch->ppp)
3295 spin_lock_bh(&pch->downl);
3296 if (!pch->chan) {
3298 spin_unlock_bh(&pch->downl);
3303 spin_unlock_bh(&pch->downl);
3304 if (pch->file.hdrlen > ppp->file.hdrlen)
3305 ppp->file.hdrlen = pch->file.hdrlen;
3306 hdrlen = pch->file.hdrlen + 2; /* for protocol bytes */
3309 list_add_tail(&pch->clist, &ppp->channels);
3311 pch->ppp = ppp;
3317 write_unlock_bh(&pch->upl);
3327 ppp_disconnect_channel(struct channel *pch)
3332 write_lock_bh(&pch->upl);
3333 ppp = pch->ppp;
3334 pch->ppp = NULL;
3335 write_unlock_bh(&pch->upl);
3339 list_del(&pch->clist);
3353 static void ppp_destroy_channel(struct channel *pch)
3355 put_net(pch->chan_net);
3356 pch->chan_net = NULL;
3360 if (!pch->file.dead) {
3362 pr_err("ppp: destroying undead channel %p !\n", pch);
3365 skb_queue_purge(&pch->file.xq);
3366 skb_queue_purge(&pch->file.rq);
3367 kfree(pch);