• Home
  • Raw
  • Download

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