]> git.pld-linux.org Git - packages/kernel.git/blob - kernel-flip.patch
- replaced by linux-2.4-sfq.patch
[packages/kernel.git] / kernel-flip.patch
1 diff -r -u loryg-2.2.16/drivers/char/serial.c linux-2.2.16/drivers/char/serial.c\r
2 --- loryg-2.2.16/drivers/char/serial.c  Wed Jun  7 23:26:42 2000\r
3 +++ linux-2.2.16/drivers/char/serial.c  Mon Aug 14 12:52:42 2000\r
4 @@ -386,7 +386,7 @@\r
5         icount = &info->state->icount;\r
6         do {\r
7                 ch = serial_inp(info, UART_RX);\r
8 -               if (tty->flip.count >= TTY_FLIPBUF_SIZE)\r
9 +               if (tty->flip.count >= tty->flip.flipbuf_size)\r
10                         break;\r
11                 *tty->flip.char_buf_ptr = ch;\r
12                 icount->rx++;\r
13 @@ -439,7 +439,7 @@\r
14                                  * reported immediately, and doesn't\r
15                                  * affect the current character\r
16                                  */\r
17 -                               if (tty->flip.count < TTY_FLIPBUF_SIZE) {\r
18 +                               if (tty->flip.count < tty->flip.flipbuf_size) {\r
19                                         tty->flip.count++;\r
20                                         tty->flip.flag_buf_ptr++;\r
21                                         tty->flip.char_buf_ptr++;\r
22 @@ -3137,7 +3137,8 @@\r
23         serial_driver.init_termios = tty_std_termios;\r
24         serial_driver.init_termios.c_cflag =\r
25                 B9600 | CS8 | CREAD | HUPCL | CLOCAL;\r
26 -       serial_driver.flags = TTY_DRIVER_REAL_RAW;\r
27 +       serial_driver.flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_SPECIAL_FLIPSIZE;\r
28 +       serial_driver.flip_size = 15000; /* use 60004 bytes */\r
29         serial_driver.refcount = &serial_refcount;\r
30         serial_driver.table = serial_table;\r
31         serial_driver.termios = serial_termios;\r
32 Only in linux-2.2.16/drivers/char: serial.c.orig\r
33 diff -r -u loryg-2.2.16/drivers/char/tty_io.c linux-2.2.16/drivers/char/tty_io.c\r
34 --- loryg-2.2.16/drivers/char/tty_io.c  Wed Jun  7 23:26:42 2000\r
35 +++ linux-2.2.16/drivers/char/tty_io.c  Mon Aug 14 12:53:42 2000\r
36 @@ -52,6 +52,9 @@\r
37   * Rewrote init_dev and release_dev to eliminate races.\r
38   *     -- Bill Hawes <whawes@star.net>, June 97\r
39   *\r
40 + * Added support for bigger flipbuf sizes\r
41 + *     -- Pavel Machek <pavel@ucw.cz>, June 99\r
42 + *\r
43   * Added support for a Unix98-style ptmx device.\r
44   *      -- C. Scott Ananian <cananian@alumni.princeton.edu>, 14-Jan-1998\r
45   */\r
46 @@ -115,7 +118,7 @@\r
47   */\r
48  struct tty_struct * redirect = NULL;\r
49  \r
50 -static void initialize_tty_struct(struct tty_struct *tty);\r
51 +static int initialize_tty_struct(struct tty_struct *tty, int);\r
52  \r
53  static ssize_t tty_read(struct file *, char *, size_t, loff_t *);\r
54  static ssize_t tty_write(struct file *, const char *, size_t, loff_t *);\r
55 @@ -800,10 +803,14 @@\r
56         tp = o_tp = NULL;\r
57         ltp = o_ltp = NULL;\r
58  \r
59 -       tty = (struct tty_struct*) get_free_page(GFP_KERNEL);\r
60 +       tty = (struct tty_struct*) kmalloc(sizeof(struct tty_struct), GFP_KERNEL);\r
61         if(!tty)\r
62                 goto fail_no_mem;\r
63 -       initialize_tty_struct(tty);\r
64 +       memset(tty, 0, sizeof(struct tty_struct));\r
65 +       if (initialize_tty_struct(tty, driver->flip_size)) {\r
66 +               kfree(tty);\r
67 +               goto fail_no_mem;\r
68 +       }\r
69         tty->device = device;\r
70         tty->driver = *driver;\r
71  \r
72 @@ -826,10 +833,15 @@\r
73         }\r
74  \r
75         if (driver->type == TTY_DRIVER_TYPE_PTY) {\r
76 -               o_tty = (struct tty_struct *) get_free_page(GFP_KERNEL);\r
77 +               o_tty = (struct tty_struct *) kmalloc(sizeof(struct tty_struct), GFP_KERNEL);\r
78                 if (!o_tty)\r
79                         goto free_mem_out;\r
80 -               initialize_tty_struct(o_tty);\r
81 +               memset(o_tty, 0, sizeof(struct tty_struct));\r
82 +               if (initialize_tty_struct(o_tty, 512)) {\r
83 +                       kfree(o_tty);\r
84 +                       o_tty = NULL;\r
85 +                       goto free_mem_out;\r
86 +               }\r
87                 o_tty->device = (kdev_t) MKDEV(driver->other->major,\r
88                                         driver->other->minor_start + idx);\r
89                 o_tty->driver = *driver->other;\r
90 @@ -945,13 +957,16 @@\r
91  free_mem_out:\r
92         if (o_tp)\r
93                 kfree_s(o_tp, sizeof(struct termios));\r
94 -       if (o_tty)\r
95 -               free_page((unsigned long) o_tty);\r
96 +       if (o_tty) {\r
97 +               kfree(o_tty->flip.char_buf);\r
98 +               kfree(o_tty);\r
99 +       }\r
100         if (ltp)\r
101                 kfree_s(ltp, sizeof(struct termios));\r
102         if (tp)\r
103                 kfree_s(tp, sizeof(struct termios));\r
104 -       free_page((unsigned long) tty);\r
105 +       kfree(tty->flip.char_buf);\r
106 +       kfree(tty);\r
107  \r
108  fail_no_mem:\r
109         retval = -ENOMEM;\r
110 @@ -982,7 +997,8 @@\r
111                 }\r
112                 o_tty->magic = 0;\r
113                 (*o_tty->driver.refcount)--;\r
114 -               free_page((unsigned long) o_tty);\r
115 +               kfree(o_tty->flip.char_buf);\r
116 +               kfree(o_tty);\r
117         }\r
118  \r
119         tty->driver.table[idx] = NULL;\r
120 @@ -993,7 +1009,8 @@\r
121         }\r
122         tty->magic = 0;\r
123         (*tty->driver.refcount)--;\r
124 -       free_page((unsigned long) tty);\r
125 +       kfree(tty->flip.char_buf);\r
126 +       kfree(tty);\r
127  }\r
128  \r
129  /*\r
130 @@ -1865,8 +1882,8 @@\r
131                 return;\r
132         }\r
133         if (tty->flip.buf_num) {\r
134 -               cp = tty->flip.char_buf + TTY_FLIPBUF_SIZE;\r
135 -               fp = tty->flip.flag_buf + TTY_FLIPBUF_SIZE;\r
136 +               cp = tty->flip.char_buf + tty->flip.flipbuf_size;\r
137 +               fp = tty->flip.flag_buf + tty->flip.flipbuf_size;\r
138                 tty->flip.buf_num = 0;\r
139  \r
140                 save_flags(flags); cli();\r
141 @@ -1878,8 +1895,8 @@\r
142                 tty->flip.buf_num = 1;\r
143  \r
144                 save_flags(flags); cli();\r
145 -               tty->flip.char_buf_ptr = tty->flip.char_buf + TTY_FLIPBUF_SIZE;\r
146 -               tty->flip.flag_buf_ptr = tty->flip.flag_buf + TTY_FLIPBUF_SIZE;\r
147 +               tty->flip.char_buf_ptr = tty->flip.char_buf + tty->flip.flipbuf_size;\r
148 +               tty->flip.flag_buf_ptr = tty->flip.flag_buf + tty->flip.flipbuf_size;\r
149         }\r
150         count = tty->flip.count;\r
151         tty->flip.count = 0;\r
152 @@ -1943,9 +1960,16 @@\r
153  /*\r
154   * This subroutine initializes a tty structure.\r
155   */\r
156 -static void initialize_tty_struct(struct tty_struct *tty)\r
157 +static int initialize_tty_struct(struct tty_struct *tty, int flip_size)\r
158  {\r
159         memset(tty, 0, sizeof(struct tty_struct));\r
160 +       /* there was notice about buffer overrun in original code -- that's why I do +4 */\r
161 +       tty->flip.char_buf = kmalloc(flip_size * 4 + 4, GFP_KERNEL);\r
162 +       if (!tty->flip.char_buf)\r
163 +               return -ENOMEM;\r
164 +       \r
165 +       tty->flip.flag_buf = tty->flip.char_buf + flip_size * 2;\r
166 +       tty->flip.flipbuf_size = flip_size;\r
167         tty->magic = TTY_MAGIC;\r
168         tty->ldisc = ldiscs[N_TTY];\r
169         tty->pgrp = -1;\r
170 @@ -1959,6 +1983,7 @@\r
171         sema_init(&tty->atomic_read, 1);\r
172         sema_init(&tty->atomic_write, 1);\r
173         spin_lock_init(&tty->read_lock);\r
174 +       return 0;\r
175  }\r
176  \r
177  /*\r
178 @@ -1978,10 +2003,14 @@\r
179  \r
180         if (driver->flags & TTY_DRIVER_INSTALLED)\r
181                 return 0;\r
182 +       \r
183 +       if (!(driver->flags & TTY_DRIVER_SPECIAL_FLIPSIZE))\r
184 +               driver->flip_size = 512;\r
185  \r
186         error = register_chrdev(driver->major, driver->name, &tty_fops);\r
187 -       if (error < 0)\r
188 +       if (error < 0) {\r
189                 return error;\r
190 +       }\r
191         else if(driver->major == 0)\r
192                 driver->major = error;\r
193  \r
194 Only in linux-2.2.16/drivers/char: tty_io.c.orig\r
195 diff -r -u loryg-2.2.16/include/linux/tty.h linux-2.2.16/include/linux/tty.h\r
196 --- loryg-2.2.16/include/linux/tty.h    Thu May  4 02:16:52 2000\r
197 +++ linux-2.2.16/include/linux/tty.h    Mon Aug 14 12:52:43 2000\r
198 @@ -130,9 +130,10 @@\r
199  \r
200  /*\r
201   * This is the flip buffer used for the tty driver.  The buffer is\r
202 - * located in the tty structure, and is used as a high speed interface\r
203 - * between the tty driver and the tty line discipline.\r
204 + * kmalloced, and is used as a high speed interface between tty driver\r
205 + * and the line discipline.\r
206   */\r
207 +/* HACK for old drivers, don't include this constant in new code */\r
208  #define TTY_FLIPBUF_SIZE 512\r
209  \r
210  struct tty_flip_buffer {\r
211 @@ -142,9 +143,9 @@\r
212         unsigned char   *flag_buf_ptr;\r
213         int             count;\r
214         int             buf_num;\r
215 -       unsigned char   char_buf[2*TTY_FLIPBUF_SIZE];\r
216 -       char            flag_buf[2*TTY_FLIPBUF_SIZE];\r
217 -       unsigned char   slop[4]; /* N.B. bug overwrites buffer by 1 */\r
218 +       int             flipbuf_size;\r
219 +       unsigned char   *char_buf;\r
220 +       char            *flag_buf;\r
221  };\r
222  /*\r
223   * The pty uses char_buf and flag_buf as a contiguous buffer\r
224 diff -r -u loryg-2.2.16/include/linux/tty_driver.h linux-2.2.16/include/linux/tty_driver.h\r
225 --- loryg-2.2.16/include/linux/tty_driver.h     Tue May 11 19:35:45 1999\r
226 +++ linux-2.2.16/include/linux/tty_driver.h     Mon Aug 14 12:52:43 2000\r
227 @@ -176,6 +176,7 @@\r
228          */\r
229         struct tty_driver *next;\r
230         struct tty_driver *prev;\r
231 +       int flip_size;\r
232  };\r
233  \r
234  /* tty driver magic number */\r
235 @@ -201,6 +202,8 @@\r
236  #define TTY_DRIVER_INSTALLED           0x0001\r
237  #define TTY_DRIVER_RESET_TERMIOS       0x0002\r
238  #define TTY_DRIVER_REAL_RAW            0x0004\r
239 +/* use big flip buffers (up to [30 KB] i.e. [((max kmalloc size) - 4) / 4 )] */\r
240 +#define TTY_DRIVER_SPECIAL_FLIPSIZE     0x0010\r
241  \r
242  /* tty driver types */\r
243  #define TTY_DRIVER_TYPE_SYSTEM         0x0001\r
This page took 0.061672 seconds and 3 git commands to generate.