diff options
-rw-r--r-- | drivers/net/ppp_synctty.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/drivers/net/ppp_synctty.c b/drivers/net/ppp_synctty.c index f0c6a1926a02..f7472c8505f0 100644 --- a/drivers/net/ppp_synctty.c +++ b/drivers/net/ppp_synctty.c | |||
@@ -42,9 +42,9 @@ | |||
42 | #include <linux/if_ppp.h> | 42 | #include <linux/if_ppp.h> |
43 | #include <linux/ppp_channel.h> | 43 | #include <linux/ppp_channel.h> |
44 | #include <linux/spinlock.h> | 44 | #include <linux/spinlock.h> |
45 | #include <linux/completion.h> | ||
45 | #include <linux/init.h> | 46 | #include <linux/init.h> |
46 | #include <asm/uaccess.h> | 47 | #include <asm/uaccess.h> |
47 | #include <asm/semaphore.h> | ||
48 | 48 | ||
49 | #define PPP_VERSION "2.4.2" | 49 | #define PPP_VERSION "2.4.2" |
50 | 50 | ||
@@ -70,7 +70,7 @@ struct syncppp { | |||
70 | struct tasklet_struct tsk; | 70 | struct tasklet_struct tsk; |
71 | 71 | ||
72 | atomic_t refcnt; | 72 | atomic_t refcnt; |
73 | struct semaphore dead_sem; | 73 | struct completion dead_cmp; |
74 | struct ppp_channel chan; /* interface to generic ppp layer */ | 74 | struct ppp_channel chan; /* interface to generic ppp layer */ |
75 | }; | 75 | }; |
76 | 76 | ||
@@ -195,7 +195,7 @@ static struct syncppp *sp_get(struct tty_struct *tty) | |||
195 | static void sp_put(struct syncppp *ap) | 195 | static void sp_put(struct syncppp *ap) |
196 | { | 196 | { |
197 | if (atomic_dec_and_test(&ap->refcnt)) | 197 | if (atomic_dec_and_test(&ap->refcnt)) |
198 | up(&ap->dead_sem); | 198 | complete(&ap->dead_cmp); |
199 | } | 199 | } |
200 | 200 | ||
201 | /* | 201 | /* |
@@ -225,7 +225,7 @@ ppp_sync_open(struct tty_struct *tty) | |||
225 | tasklet_init(&ap->tsk, ppp_sync_process, (unsigned long) ap); | 225 | tasklet_init(&ap->tsk, ppp_sync_process, (unsigned long) ap); |
226 | 226 | ||
227 | atomic_set(&ap->refcnt, 1); | 227 | atomic_set(&ap->refcnt, 1); |
228 | init_MUTEX_LOCKED(&ap->dead_sem); | 228 | init_completion(&ap->dead_cmp); |
229 | 229 | ||
230 | ap->chan.private = ap; | 230 | ap->chan.private = ap; |
231 | ap->chan.ops = &sync_ops; | 231 | ap->chan.ops = &sync_ops; |
@@ -273,7 +273,7 @@ ppp_sync_close(struct tty_struct *tty) | |||
273 | * by the time it returns. | 273 | * by the time it returns. |
274 | */ | 274 | */ |
275 | if (!atomic_dec_and_test(&ap->refcnt)) | 275 | if (!atomic_dec_and_test(&ap->refcnt)) |
276 | down(&ap->dead_sem); | 276 | wait_for_completion(&ap->dead_cmp); |
277 | tasklet_kill(&ap->tsk); | 277 | tasklet_kill(&ap->tsk); |
278 | 278 | ||
279 | ppp_unregister_channel(&ap->chan); | 279 | ppp_unregister_channel(&ap->chan); |