Merge tag 'perf-tools-for-v5.14-2021-07-10' of git://git.kernel.org/pub/scm/linux...
[linux-2.6-microblaze.git] / drivers / tty / tty_ldisc.c
index 03f4141..756a4bf 100644 (file)
@@ -48,7 +48,6 @@ static struct tty_ldisc_ops *tty_ldiscs[NR_LDISCS];
 
 /**
  *     tty_register_ldisc      -       install a line discipline
- *     @disc: ldisc number
  *     @new_ldisc: pointer to the ldisc object
  *
  *     Installs a new line discipline into the kernel. The discipline
@@ -59,18 +58,16 @@ static struct tty_ldisc_ops *tty_ldiscs[NR_LDISCS];
  *             takes tty_ldiscs_lock to guard against ldisc races
  */
 
-int tty_register_ldisc(int disc, struct tty_ldisc_ops *new_ldisc)
+int tty_register_ldisc(struct tty_ldisc_ops *new_ldisc)
 {
        unsigned long flags;
        int ret = 0;
 
-       if (disc < N_TTY || disc >= NR_LDISCS)
+       if (new_ldisc->num < N_TTY || new_ldisc->num >= NR_LDISCS)
                return -EINVAL;
 
        raw_spin_lock_irqsave(&tty_ldiscs_lock, flags);
-       tty_ldiscs[disc] = new_ldisc;
-       new_ldisc->num = disc;
-       new_ldisc->refcount = 0;
+       tty_ldiscs[new_ldisc->num] = new_ldisc;
        raw_spin_unlock_irqrestore(&tty_ldiscs_lock, flags);
 
        return ret;
@@ -79,7 +76,7 @@ EXPORT_SYMBOL(tty_register_ldisc);
 
 /**
  *     tty_unregister_ldisc    -       unload a line discipline
- *     @disc: ldisc number
+ *     @ldisc: ldisc number
  *
  *     Remove a line discipline from the kernel providing it is not
  *     currently in use.
@@ -88,22 +85,13 @@ EXPORT_SYMBOL(tty_register_ldisc);
  *             takes tty_ldiscs_lock to guard against ldisc races
  */
 
-int tty_unregister_ldisc(int disc)
+void tty_unregister_ldisc(struct tty_ldisc_ops *ldisc)
 {
        unsigned long flags;
-       int ret = 0;
-
-       if (disc < N_TTY || disc >= NR_LDISCS)
-               return -EINVAL;
 
        raw_spin_lock_irqsave(&tty_ldiscs_lock, flags);
-       if (tty_ldiscs[disc]->refcount)
-               ret = -EBUSY;
-       else
-               tty_ldiscs[disc] = NULL;
+       tty_ldiscs[ldisc->num] = NULL;
        raw_spin_unlock_irqrestore(&tty_ldiscs_lock, flags);
-
-       return ret;
 }
 EXPORT_SYMBOL(tty_unregister_ldisc);
 
@@ -117,10 +105,8 @@ static struct tty_ldisc_ops *get_ldops(int disc)
        ldops = tty_ldiscs[disc];
        if (ldops) {
                ret = ERR_PTR(-EAGAIN);
-               if (try_module_get(ldops->owner)) {
-                       ldops->refcount++;
+               if (try_module_get(ldops->owner))
                        ret = ldops;
-               }
        }
        raw_spin_unlock_irqrestore(&tty_ldiscs_lock, flags);
        return ret;
@@ -131,7 +117,6 @@ static void put_ldops(struct tty_ldisc_ops *ldops)
        unsigned long flags;
 
        raw_spin_lock_irqsave(&tty_ldiscs_lock, flags);
-       ldops->refcount--;
        module_put(ldops->owner);
        raw_spin_unlock_irqrestore(&tty_ldiscs_lock, flags);
 }