diff options
Diffstat (limited to 'drivers/net/ppp_generic.c')
-rw-r--r-- | drivers/net/ppp_generic.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/drivers/net/ppp_generic.c b/drivers/net/ppp_generic.c index e7b4187da057..6695a51e09e9 100644 --- a/drivers/net/ppp_generic.c +++ b/drivers/net/ppp_generic.c | |||
@@ -40,7 +40,6 @@ | |||
40 | #include <linux/if_arp.h> | 40 | #include <linux/if_arp.h> |
41 | #include <linux/ip.h> | 41 | #include <linux/ip.h> |
42 | #include <linux/tcp.h> | 42 | #include <linux/tcp.h> |
43 | #include <linux/smp_lock.h> | ||
44 | #include <linux/spinlock.h> | 43 | #include <linux/spinlock.h> |
45 | #include <linux/rwsem.h> | 44 | #include <linux/rwsem.h> |
46 | #include <linux/stddef.h> | 45 | #include <linux/stddef.h> |
@@ -180,6 +179,7 @@ struct channel { | |||
180 | * channel.downl. | 179 | * channel.downl. |
181 | */ | 180 | */ |
182 | 181 | ||
182 | static DEFINE_MUTEX(ppp_mutex); | ||
183 | static atomic_t ppp_unit_count = ATOMIC_INIT(0); | 183 | static atomic_t ppp_unit_count = ATOMIC_INIT(0); |
184 | static atomic_t channel_count = ATOMIC_INIT(0); | 184 | static atomic_t channel_count = ATOMIC_INIT(0); |
185 | 185 | ||
@@ -362,7 +362,6 @@ static const int npindex_to_ethertype[NUM_NP] = { | |||
362 | */ | 362 | */ |
363 | static int ppp_open(struct inode *inode, struct file *file) | 363 | static int ppp_open(struct inode *inode, struct file *file) |
364 | { | 364 | { |
365 | cycle_kernel_lock(); | ||
366 | /* | 365 | /* |
367 | * This could (should?) be enforced by the permissions on /dev/ppp. | 366 | * This could (should?) be enforced by the permissions on /dev/ppp. |
368 | */ | 367 | */ |
@@ -582,7 +581,7 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
582 | * this fd and reopening /dev/ppp. | 581 | * this fd and reopening /dev/ppp. |
583 | */ | 582 | */ |
584 | err = -EINVAL; | 583 | err = -EINVAL; |
585 | lock_kernel(); | 584 | mutex_lock(&ppp_mutex); |
586 | if (pf->kind == INTERFACE) { | 585 | if (pf->kind == INTERFACE) { |
587 | ppp = PF_TO_PPP(pf); | 586 | ppp = PF_TO_PPP(pf); |
588 | if (file == ppp->owner) | 587 | if (file == ppp->owner) |
@@ -594,7 +593,7 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
594 | } else | 593 | } else |
595 | printk(KERN_DEBUG "PPPIOCDETACH file->f_count=%ld\n", | 594 | printk(KERN_DEBUG "PPPIOCDETACH file->f_count=%ld\n", |
596 | atomic_long_read(&file->f_count)); | 595 | atomic_long_read(&file->f_count)); |
597 | unlock_kernel(); | 596 | mutex_unlock(&ppp_mutex); |
598 | return err; | 597 | return err; |
599 | } | 598 | } |
600 | 599 | ||
@@ -602,7 +601,7 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
602 | struct channel *pch; | 601 | struct channel *pch; |
603 | struct ppp_channel *chan; | 602 | struct ppp_channel *chan; |
604 | 603 | ||
605 | lock_kernel(); | 604 | mutex_lock(&ppp_mutex); |
606 | pch = PF_TO_CHANNEL(pf); | 605 | pch = PF_TO_CHANNEL(pf); |
607 | 606 | ||
608 | switch (cmd) { | 607 | switch (cmd) { |
@@ -624,7 +623,7 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
624 | err = chan->ops->ioctl(chan, cmd, arg); | 623 | err = chan->ops->ioctl(chan, cmd, arg); |
625 | up_read(&pch->chan_sem); | 624 | up_read(&pch->chan_sem); |
626 | } | 625 | } |
627 | unlock_kernel(); | 626 | mutex_unlock(&ppp_mutex); |
628 | return err; | 627 | return err; |
629 | } | 628 | } |
630 | 629 | ||
@@ -634,7 +633,7 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
634 | return -EINVAL; | 633 | return -EINVAL; |
635 | } | 634 | } |
636 | 635 | ||
637 | lock_kernel(); | 636 | mutex_lock(&ppp_mutex); |
638 | ppp = PF_TO_PPP(pf); | 637 | ppp = PF_TO_PPP(pf); |
639 | switch (cmd) { | 638 | switch (cmd) { |
640 | case PPPIOCSMRU: | 639 | case PPPIOCSMRU: |
@@ -782,7 +781,7 @@ static long ppp_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
782 | default: | 781 | default: |
783 | err = -ENOTTY; | 782 | err = -ENOTTY; |
784 | } | 783 | } |
785 | unlock_kernel(); | 784 | mutex_unlock(&ppp_mutex); |
786 | return err; | 785 | return err; |
787 | } | 786 | } |
788 | 787 | ||
@@ -795,7 +794,7 @@ static int ppp_unattached_ioctl(struct net *net, struct ppp_file *pf, | |||
795 | struct ppp_net *pn; | 794 | struct ppp_net *pn; |
796 | int __user *p = (int __user *)arg; | 795 | int __user *p = (int __user *)arg; |
797 | 796 | ||
798 | lock_kernel(); | 797 | mutex_lock(&ppp_mutex); |
799 | switch (cmd) { | 798 | switch (cmd) { |
800 | case PPPIOCNEWUNIT: | 799 | case PPPIOCNEWUNIT: |
801 | /* Create a new ppp unit */ | 800 | /* Create a new ppp unit */ |
@@ -846,7 +845,7 @@ static int ppp_unattached_ioctl(struct net *net, struct ppp_file *pf, | |||
846 | default: | 845 | default: |
847 | err = -ENOTTY; | 846 | err = -ENOTTY; |
848 | } | 847 | } |
849 | unlock_kernel(); | 848 | mutex_unlock(&ppp_mutex); |
850 | return err; | 849 | return err; |
851 | } | 850 | } |
852 | 851 | ||