]> git.pld-linux.org Git - packages/kernel.git/blame - kernel-flip.patch
- replaced by linux-2.4-sfq.patch
[packages/kernel.git] / kernel-flip.patch
CommitLineData
ccbf3a89 1diff -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
32Only in linux-2.2.16/drivers/char: serial.c.orig\r
33diff -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
194Only in linux-2.2.16/drivers/char: tty_io.c.orig\r
195diff -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
224diff -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.257841 seconds and 4 git commands to generate.