On m'a demandé ça récemment, cela complète le thread qui s'est arrêté vers
mars 2000.

With 2.2.16 (maybe 2.2.17+), the ltmodem.o driver supplied by Lucent (NOT
the one on linmodems.org which seems to be even older and crashing even
more)  doesn't work.

-rw-r--r--    1 root     root       557724 Sep 27 13:04 
/lib/modules/2.2.16/misc/ltmodem.o
59a33b43fe7a35efd20770ba84da54c8  /lib/modules/2.2.16/misc/ltmodem.o

It seems there has been a change to include/linux/tty.h between 2.2.13
(which works perfectly, apart from a few timer reinsert warnings) and
2.2.16. I have not reverted those changes, but moved them in the hope
it will work. The symptom was: cu seems to mostly work, but pppd crashes
as soon as the line discipline is inserted.

The patch:

*** tty.h.REAL  Wed Sep 27 12:38:49 2000
--- tty.h       Wed Sep 27 12:55:56 2000
***************
*** 277,283 ****
        int alt_speed;          /* For magic substitution of 38400 bps */
        struct wait_queue *write_wait;
        struct wait_queue *read_wait;
-       struct wait_queue *poll_wait;
        struct tq_struct tq_hangup;
        void *disc_data;
        void *driver_data;
--- 277,282 ----
***************
*** 305,310 ****
--- 304,322 ----
        unsigned int canon_column;
        struct semaphore atomic_read;
        struct semaphore atomic_write;
+       /* [EMAIL PROTECTED]
+        * -- Those two are managed and allocated/initialized by
+        *    tty, not by driver. However, putting poll_wait in the
+        *    middle of the structure makes e.g. referencing of
+        *    user (serial driver) data wrong. I can understand
+        *    to group the structure members, however a change like
+        *    this is ONLY for x going to x +1 in 2.x. Of course,
+        *    you can recompile drivers, but what about binary-only
+        *    drivers ?  e.g. ltmodem.o (Lucent) was broken between
+        *    2.2.13 and 2.2.16. In an ideal world, Lucent would supply
+        *    sources ...
+        */
+       struct wait_queue *poll_wait;
        spinlock_t read_lock;
  };  

If you apply that patch, you must recompile your kernel, all your modules,
and not use another binary-only module. Especially you will need to
recompile the PPP modules.

I have successfully tested those changes: I can no longer make it crash.
There might be however, other problems.



--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question.

Répondre à