tree 19a4567d9e9d6b2b7f8d7be84068d6e734495b59
parent 837dcfaf46d147f1d2c64cbbecb832dd9075c39d
author Milton Miller <[EMAIL PROTECTED]> Fri, 08 Jul 2005 07:56:17 -0700
committer Linus Torvalds <[EMAIL PROTECTED]> Fri, 08 Jul 2005 08:23:38 -0700

[PATCH] hvc_console: Match vio and console devices using vterm numbers

Use the vterm numbers to match the vio devices being probed with the indices
already allocated via the console initcall function hvc_find_vtys.

The old code required hvc_find_vtys to "guess" the matching devices the vio
subsystem would find and its probe order.

Signed-off-by: Milton Miller <[EMAIL PROTECTED]>
Signed-off-by: Anton Blanchard <[EMAIL PROTECTED]>
Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>

 drivers/char/hvc_console.c |   36 +++++++++++++++++++++++++++++-------
 1 files changed, 29 insertions(+), 7 deletions(-)

diff --git a/drivers/char/hvc_console.c b/drivers/char/hvc_console.c
--- a/drivers/char/hvc_console.c
+++ b/drivers/char/hvc_console.c
@@ -102,10 +102,11 @@ static struct list_head hvc_structs = LI
 static DEFINE_SPINLOCK(hvc_structs_lock);
 
 /*
- * This value is used to associate a tty->index value to a hvc_struct based
- * upon order of exposure via hvc_probe().
+ * This value is used to assign a tty->index value to a hvc_struct based
+ * upon order of exposure via hvc_probe(), when we can not match it to
+ * a console canidate registered with hvc_instantiate().
  */
-static int hvc_count = -1;
+static int last_hvc = -1;
 
 /*
  * Do not call this function with either the hvc_strucst_lock or the hvc_struct
@@ -224,9 +225,10 @@ static int __init hvc_console_init(void)
 console_initcall(hvc_console_init);
 
 /*
- * hvc_instantiate() is an early console discovery method which locates 
consoles
- * prior to the vio subsystem discovering them.  Hotplugged vty adapters do NOT
- * get an hvc_instantiate() callback since the appear after early console init.
+ * hvc_instantiate() is an early console discovery method which locates
+ * consoles * prior to the vio subsystem discovering them.  Hotplugged
+ * vty adapters do NOT get an hvc_instantiate() callback since they
+ * appear after early console init.
  */
 int hvc_instantiate(uint32_t vtermno, int index)
 {
@@ -237,6 +239,11 @@ int hvc_instantiate(uint32_t vtermno, in
                return -1;
 
        vtermnos[index] = vtermno;
+
+       /* reserve all indices upto and including this index */
+       if (last_hvc < index)
+               last_hvc = index;
+
        return 0;
 }
 
@@ -697,6 +704,7 @@ static int __devinit hvc_probe(
                const struct vio_device_id *id)
 {
        struct hvc_struct *hp;
+       int i;
 
        /* probed with invalid parameters. */
        if (!dev || !id)
@@ -717,7 +725,21 @@ static int __devinit hvc_probe(
 
        spin_lock_init(&hp->lock);
        spin_lock(&hvc_structs_lock);
-       hp->index = ++hvc_count;
+
+       /*
+        * find index to use:
+        * see if this vterm id matches one registered for console.
+        */
+       for (i=0; i < MAX_NR_HVC_CONSOLES; i++)
+               if (vtermnos[i] == hp->vtermno)
+                       break;
+
+       /* no matching slot, just use a counter */
+       if (i >= MAX_NR_HVC_CONSOLES)
+               i = ++last_hvc;
+
+       hp->index = i;
+
        list_add_tail(&(hp->next), &hvc_structs);
        spin_unlock(&hvc_structs_lock);
 
-
To unsubscribe from this list: send the line "unsubscribe bk-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to