Commit 04b1db9fd7eea63c9663072feece616ea41b0a79

Authored by Ian S. Nelson
Committed by Linus Torvalds
1 parent 3b5e0cbb4f

[PATCH] /sys/modules: allow full length section names

I've been using systemtap for some debugging and I noticed that it can't
probe a lot of modules.  Turns out it's kind of silly, the sections section
of /sys/module is limited to 32byte filenames and many of the actual
sections are a a bit longer than that.

[akpm@osdl.org: rewrite to use dymanic allocation]
Cc: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

Showing 3 changed files with 24 additions and 9 deletions Inline Diff

1 This is at least a partial credits-file of people that have 1 This is at least a partial credits-file of people that have
2 contributed to the Linux project. It is sorted by name and 2 contributed to the Linux project. It is sorted by name and
3 formatted to allow easy grepping and beautification by 3 formatted to allow easy grepping and beautification by
4 scripts. The fields are: name (N), email (E), web-address 4 scripts. The fields are: name (N), email (E), web-address
5 (W), PGP key ID and fingerprint (P), description (D), and 5 (W), PGP key ID and fingerprint (P), description (D), and
6 snail-mail address (S). 6 snail-mail address (S).
7 Thanks, 7 Thanks,
8 8
9 Linus 9 Linus
10 ---------- 10 ----------
11 11
12 N: Matti Aarnio 12 N: Matti Aarnio
13 E: mea@nic.funet.fi 13 E: mea@nic.funet.fi
14 D: Alpha systems hacking, IPv6 and other network related stuff 14 D: Alpha systems hacking, IPv6 and other network related stuff
15 D: One of assisting postmasters for vger.kernel.org's lists 15 D: One of assisting postmasters for vger.kernel.org's lists
16 S: (ask for current address) 16 S: (ask for current address)
17 S: Finland 17 S: Finland
18 18
19 N: Dragos Acostachioaie 19 N: Dragos Acostachioaie
20 E: dragos@iname.com 20 E: dragos@iname.com
21 W: http://www.arbornet.org/~dragos 21 W: http://www.arbornet.org/~dragos
22 D: /proc/sysvipc 22 D: /proc/sysvipc
23 S: C. Negri 6, bl. D3 23 S: C. Negri 6, bl. D3
24 S: Iasi 6600 24 S: Iasi 6600
25 S: Romania 25 S: Romania
26 26
27 N: Mark Adler 27 N: Mark Adler
28 E: madler@alumni.caltech.edu 28 E: madler@alumni.caltech.edu
29 W: http://alumnus.caltech.edu/~madler/ 29 W: http://alumnus.caltech.edu/~madler/
30 D: zlib decompression 30 D: zlib decompression
31 31
32 N: Monalisa Agrawal 32 N: Monalisa Agrawal
33 E: magrawal@nortelnetworks.com 33 E: magrawal@nortelnetworks.com
34 D: Basic Interphase 5575 driver with UBR and ABR support. 34 D: Basic Interphase 5575 driver with UBR and ABR support.
35 S: 75 Donald St, Apt 42 35 S: 75 Donald St, Apt 42
36 S: Weymouth, MA 02188 36 S: Weymouth, MA 02188
37 37
38 N: Dave Airlie 38 N: Dave Airlie
39 E: airlied@linux.ie 39 E: airlied@linux.ie
40 W: http://www.csn.ul.ie/~airlied 40 W: http://www.csn.ul.ie/~airlied
41 D: NFS over TCP patches 41 D: NFS over TCP patches
42 D: in-kernel DRM Maintainer 42 D: in-kernel DRM Maintainer
43 S: Longford, Ireland 43 S: Longford, Ireland
44 S: Sydney, Australia 44 S: Sydney, Australia
45 45
46 N: Tigran A. Aivazian 46 N: Tigran A. Aivazian
47 E: tigran@veritas.com 47 E: tigran@veritas.com
48 W: http://www.moses.uklinux.net/patches 48 W: http://www.moses.uklinux.net/patches
49 D: BFS filesystem 49 D: BFS filesystem
50 D: Intel IA32 CPU microcode update support 50 D: Intel IA32 CPU microcode update support
51 D: Various kernel patches 51 D: Various kernel patches
52 S: United Kingdom 52 S: United Kingdom
53 53
54 N: Werner Almesberger 54 N: Werner Almesberger
55 E: werner@almesberger.net 55 E: werner@almesberger.net
56 W: http://www.almesberger.net/ 56 W: http://www.almesberger.net/
57 D: dosfs, LILO, some fd features, ATM, various other hacks here and there 57 D: dosfs, LILO, some fd features, ATM, various other hacks here and there
58 S: Buenos Aires 58 S: Buenos Aires
59 S: Argentina 59 S: Argentina
60 60
61 N: Tim Alpaerts 61 N: Tim Alpaerts
62 E: tim_alpaerts@toyota-motor-europe.com 62 E: tim_alpaerts@toyota-motor-europe.com
63 D: 802.2 class II logical link control layer, 63 D: 802.2 class II logical link control layer,
64 D: the humble start of an opening towards the IBM SNA protocols 64 D: the humble start of an opening towards the IBM SNA protocols
65 S: Klaproosstraat 72 c 10 65 S: Klaproosstraat 72 c 10
66 S: B-2610 Wilrijk-Antwerpen 66 S: B-2610 Wilrijk-Antwerpen
67 S: Belgium 67 S: Belgium
68 68
69 N: Anton Altaparmakov 69 N: Anton Altaparmakov
70 E: aia21@cantab.net 70 E: aia21@cantab.net
71 W: http://www-stu.christs.cam.ac.uk/~aia21/ 71 W: http://www-stu.christs.cam.ac.uk/~aia21/
72 D: Author of new NTFS driver, various other kernel hacks. 72 D: Author of new NTFS driver, various other kernel hacks.
73 S: Christ's College 73 S: Christ's College
74 S: Cambridge CB2 3BU 74 S: Cambridge CB2 3BU
75 S: United Kingdom 75 S: United Kingdom
76 76
77 N: C. Scott Ananian 77 N: C. Scott Ananian
78 E: cananian@alumni.princeton.edu 78 E: cananian@alumni.princeton.edu
79 W: http://www.pdos.lcs.mit.edu/~cananian 79 W: http://www.pdos.lcs.mit.edu/~cananian
80 P: 1024/85AD9EED AD C0 49 08 91 67 DF D7 FA 04 1A EE 09 E8 44 B0 80 P: 1024/85AD9EED AD C0 49 08 91 67 DF D7 FA 04 1A EE 09 E8 44 B0
81 D: Unix98 pty support. 81 D: Unix98 pty support.
82 D: APM update to 1.2 spec. 82 D: APM update to 1.2 spec.
83 D: /devfs hacking. 83 D: /devfs hacking.
84 S: 7 Kiwi Loop 84 S: 7 Kiwi Loop
85 S: Howell, NJ 07731 85 S: Howell, NJ 07731
86 S: USA 86 S: USA
87 87
88 N: Erik Andersen 88 N: Erik Andersen
89 E: andersen@codepoet.org 89 E: andersen@codepoet.org
90 W: http://www.codepoet.org/ 90 W: http://www.codepoet.org/
91 P: 1024D/30D39057 1BC4 2742 E885 E4DE 9301 0C82 5F9B 643E 30D3 9057 91 P: 1024D/30D39057 1BC4 2742 E885 E4DE 9301 0C82 5F9B 643E 30D3 9057
92 D: Maintainer of ide-cd and Uniform CD-ROM driver, 92 D: Maintainer of ide-cd and Uniform CD-ROM driver,
93 D: ATAPI CD-Changer support, Major 2.1.x CD-ROM update. 93 D: ATAPI CD-Changer support, Major 2.1.x CD-ROM update.
94 S: 352 North 525 East 94 S: 352 North 525 East
95 S: Springville, Utah 84663 95 S: Springville, Utah 84663
96 S: USA 96 S: USA
97 97
98 N: Michael Ang 98 N: Michael Ang
99 E: mang@subcarrier.org 99 E: mang@subcarrier.org
100 W: http://www.subcarrier.org/mang 100 W: http://www.subcarrier.org/mang
101 D: Linux/PA-RISC hacker 101 D: Linux/PA-RISC hacker
102 S: 85 Frank St. 102 S: 85 Frank St.
103 S: Ottawa, Ontario 103 S: Ottawa, Ontario
104 S: Canada K2P 0X3 104 S: Canada K2P 0X3
105 105
106 N: H. Peter Anvin 106 N: H. Peter Anvin
107 E: hpa@zytor.com 107 E: hpa@zytor.com
108 W: http://www.zytor.com/~hpa/ 108 W: http://www.zytor.com/~hpa/
109 P: 2047/2A960705 BA 03 D3 2C 14 A8 A8 BD 1E DF FE 69 EE 35 BD 74 109 P: 2047/2A960705 BA 03 D3 2C 14 A8 A8 BD 1E DF FE 69 EE 35 BD 74
110 D: Author of the SYSLINUX boot loader, maintainer of the linux.* news 110 D: Author of the SYSLINUX boot loader, maintainer of the linux.* news
111 D: hierarchy and the Linux Device List; various kernel hacks 111 D: hierarchy and the Linux Device List; various kernel hacks
112 S: 4390 Albany Drive #46 112 S: 4390 Albany Drive #46
113 S: San Jose, California 95129 113 S: San Jose, California 95129
114 S: USA 114 S: USA
115 115
116 N: Andrea Arcangeli 116 N: Andrea Arcangeli
117 E: andrea@suse.de 117 E: andrea@suse.de
118 W: http://www.kernel.org/pub/linux/kernel/people/andrea/ 118 W: http://www.kernel.org/pub/linux/kernel/people/andrea/
119 P: 1024D/68B9CB43 13D9 8355 295F 4823 7C49 C012 DFA1 686E 68B9 CB43 119 P: 1024D/68B9CB43 13D9 8355 295F 4823 7C49 C012 DFA1 686E 68B9 CB43
120 P: 1024R/CB4660B9 CC A0 71 81 F4 A0 63 AC C0 4B 81 1D 8C 15 C8 E5 120 P: 1024R/CB4660B9 CC A0 71 81 F4 A0 63 AC C0 4B 81 1D 8C 15 C8 E5
121 D: Parport hacker 121 D: Parport hacker
122 D: Implemented a workaround for some interrupt buggy printers 122 D: Implemented a workaround for some interrupt buggy printers
123 D: Author of pscan that helps to fix lp/parport bugs 123 D: Author of pscan that helps to fix lp/parport bugs
124 D: Author of lil (Linux Interrupt Latency benchmark) 124 D: Author of lil (Linux Interrupt Latency benchmark)
125 D: Fixed the shm swap deallocation at swapoff time (try_to_unuse message) 125 D: Fixed the shm swap deallocation at swapoff time (try_to_unuse message)
126 D: VM hacker 126 D: VM hacker
127 D: Various other kernel hacks 127 D: Various other kernel hacks
128 S: Imola 40026 128 S: Imola 40026
129 S: Italy 129 S: Italy
130 130
131 N: Derek Atkins 131 N: Derek Atkins
132 E: warlord@MIT.EDU 132 E: warlord@MIT.EDU
133 D: Linux-AFS Port, random kernel hacker, 133 D: Linux-AFS Port, random kernel hacker,
134 D: VFS fixes (new notify_change in particular) 134 D: VFS fixes (new notify_change in particular)
135 D: Moving all VFS access checks into the file systems 135 D: Moving all VFS access checks into the file systems
136 S: MIT Room E15-341 136 S: MIT Room E15-341
137 S: 20 Ames Street 137 S: 20 Ames Street
138 S: Cambridge, Massachusetts 02139 138 S: Cambridge, Massachusetts 02139
139 S: USA 139 S: USA
140 140
141 N: Michel Aubry 141 N: Michel Aubry
142 E: giovanni <giovanni@sudfr.com> 142 E: giovanni <giovanni@sudfr.com>
143 D: Aladdin 1533/1543(C) chipset IDE 143 D: Aladdin 1533/1543(C) chipset IDE
144 D: VIA MVP-3/TX Pro III chipset IDE 144 D: VIA MVP-3/TX Pro III chipset IDE
145 145
146 N: Jens Axboe 146 N: Jens Axboe
147 E: axboe@suse.de 147 E: axboe@suse.de
148 D: Linux CD-ROM maintainer, DVD support 148 D: Linux CD-ROM maintainer, DVD support
149 D: elevator + block layer rewrites 149 D: elevator + block layer rewrites
150 D: highmem I/O support 150 D: highmem I/O support
151 D: misc hacking on IDE, SCSI, block drivers, etc 151 D: misc hacking on IDE, SCSI, block drivers, etc
152 S: Peter Bangs Vej 258, 2TH 152 S: Peter Bangs Vej 258, 2TH
153 S: 2500 Valby 153 S: 2500 Valby
154 S: Denmark 154 S: Denmark
155 155
156 N: John Aycock 156 N: John Aycock
157 E: aycock@cpsc.ucalgary.ca 157 E: aycock@cpsc.ucalgary.ca
158 D: Adaptec 274x driver 158 D: Adaptec 274x driver
159 S: Department of Computer Science 159 S: Department of Computer Science
160 S: University of Calgary 160 S: University of Calgary
161 S: Calgary, Alberta 161 S: Calgary, Alberta
162 S: Canada 162 S: Canada
163 163
164 N: Miles Bader 164 N: Miles Bader
165 E: miles@gnu.org 165 E: miles@gnu.org
166 D: v850 port (uClinux) 166 D: v850 port (uClinux)
167 S: NEC Corporation 167 S: NEC Corporation
168 S: 1753 Shimonumabe, Nakahara-ku 168 S: 1753 Shimonumabe, Nakahara-ku
169 S: Kawasaki 211-8666 169 S: Kawasaki 211-8666
170 S: Japan 170 S: Japan
171 171
172 N: Ralf Baechle 172 N: Ralf Baechle
173 E: ralf@gnu.org 173 E: ralf@gnu.org
174 P: 1024/AF7B30C1 CF 97 C2 CC 6D AE A7 FE C8 BA 9C FC 88 DE 32 C3 174 P: 1024/AF7B30C1 CF 97 C2 CC 6D AE A7 FE C8 BA 9C FC 88 DE 32 C3
175 D: Linux/MIPS port 175 D: Linux/MIPS port
176 D: Linux/68k hacker 176 D: Linux/68k hacker
177 S: Hauptstrasse 19 177 S: Hauptstrasse 19
178 S: 79837 St. Blasien 178 S: 79837 St. Blasien
179 S: Germany 179 S: Germany
180 180
181 N: Krishna Balasubramanian 181 N: Krishna Balasubramanian
182 E: balasub@cis.ohio-state.edu 182 E: balasub@cis.ohio-state.edu
183 D: Wrote SYS V IPC (part of standard kernel since 0.99.10) 183 D: Wrote SYS V IPC (part of standard kernel since 0.99.10)
184 184
185 N: Dario Ballabio 185 N: Dario Ballabio
186 E: ballabio_dario@emc.com 186 E: ballabio_dario@emc.com
187 E: dario.ballabio@tiscalinet.it 187 E: dario.ballabio@tiscalinet.it
188 E: dario.ballabio@inwind.it 188 E: dario.ballabio@inwind.it
189 D: Author and maintainer of the Ultrastor 14F/34F SCSI driver 189 D: Author and maintainer of the Ultrastor 14F/34F SCSI driver
190 D: Author and maintainer of the EATA ISA/EISA/PCI SCSI driver 190 D: Author and maintainer of the EATA ISA/EISA/PCI SCSI driver
191 S: EMC Corporation 191 S: EMC Corporation
192 S: Milano 192 S: Milano
193 S: Italy 193 S: Italy
194 194
195 N: Paul Bame 195 N: Paul Bame
196 E: bame@debian.org 196 E: bame@debian.org
197 E: bame@puffin.external.hp.com 197 E: bame@puffin.external.hp.com
198 E: paul_bame@hp.com 198 E: paul_bame@hp.com
199 W: http://www.parisc-linux.org 199 W: http://www.parisc-linux.org
200 D: PA-RISC 32 and 64-bit early boot, firmware interface, interrupts, misc 200 D: PA-RISC 32 and 64-bit early boot, firmware interface, interrupts, misc
201 S: MS42 201 S: MS42
202 S: Hewlett-Packard 202 S: Hewlett-Packard
203 S: 3404 E Harmony Rd 203 S: 3404 E Harmony Rd
204 S: Fort Collins, CO 80525 204 S: Fort Collins, CO 80525
205 205
206 N: Arindam Banerji 206 N: Arindam Banerji
207 E: axb@cse.nd.edu 207 E: axb@cse.nd.edu
208 D: Contributed ESDI driver routines needed to port LINUX to the PS/2 MCA. 208 D: Contributed ESDI driver routines needed to port LINUX to the PS/2 MCA.
209 S: Department of Computer Science & Eng. 209 S: Department of Computer Science & Eng.
210 S: University of Notre Dame 210 S: University of Notre Dame
211 S: Notre Dame, Indiana 211 S: Notre Dame, Indiana
212 S: USA 212 S: USA
213 213
214 N: Greg Banks 214 N: Greg Banks
215 E: gnb@alphalink.com.au 215 E: gnb@alphalink.com.au
216 D: IDT77105 ATM network driver 216 D: IDT77105 ATM network driver
217 D: some SuperH port work 217 D: some SuperH port work
218 D: some trivial futzing with kconfig 218 D: some trivial futzing with kconfig
219 219
220 N: James Banks 220 N: James Banks
221 E: james@sovereign.org 221 E: james@sovereign.org
222 D: TLAN network driver 222 D: TLAN network driver
223 D: Logitech Busmouse driver 223 D: Logitech Busmouse driver
224 224
225 N: Krzysztof G. Baranowski 225 N: Krzysztof G. Baranowski
226 E: kgb@manjak.knm.org.pl 226 E: kgb@manjak.knm.org.pl
227 P: 1024/FA6F16D1 96 D1 1A CF 5F CA 69 EC F9 4F 36 1F 6D 60 7B DA 227 P: 1024/FA6F16D1 96 D1 1A CF 5F CA 69 EC F9 4F 36 1F 6D 60 7B DA
228 D: Maintainer of the System V file system. 228 D: Maintainer of the System V file system.
229 D: System V fs update for 2.1.x dcache. 229 D: System V fs update for 2.1.x dcache.
230 D: Forward ported a couple of SCSI drivers. 230 D: Forward ported a couple of SCSI drivers.
231 D: Various bugfixes. 231 D: Various bugfixes.
232 S: ul. Koscielna 12a 232 S: ul. Koscielna 12a
233 S: 62-300 Wrzesnia 233 S: 62-300 Wrzesnia
234 S: Poland 234 S: Poland
235 235
236 N: Fred Barnes 236 N: Fred Barnes
237 E: frmb2@ukc.ac.uk 237 E: frmb2@ukc.ac.uk
238 D: Various parport/ppdev hacks and fixes 238 D: Various parport/ppdev hacks and fixes
239 S: Computing Lab, The University 239 S: Computing Lab, The University
240 S: Canterbury, KENT 240 S: Canterbury, KENT
241 S: CT2 7NF 241 S: CT2 7NF
242 S: England 242 S: England
243 243
244 N: Paul Barton-Davis 244 N: Paul Barton-Davis
245 E: pbd@op.net 245 E: pbd@op.net
246 D: Driver for WaveFront soundcards (Turtle Beach Maui, Tropez, Tropez+) 246 D: Driver for WaveFront soundcards (Turtle Beach Maui, Tropez, Tropez+)
247 D: Various bugfixes and changes to sound drivers 247 D: Various bugfixes and changes to sound drivers
248 S: USA 248 S: USA
249 249
250 N: Carlos Henrique Bauer 250 N: Carlos Henrique Bauer
251 E: chbauer@acm.org 251 E: chbauer@acm.org
252 E: bauer@atlas.unisinos.br 252 E: bauer@atlas.unisinos.br
253 D: Some new sysctl entries for the parport driver. 253 D: Some new sysctl entries for the parport driver.
254 D: New sysctl function for handling unsigned longs 254 D: New sysctl function for handling unsigned longs
255 S: Universidade do Vale do Rio dos Sinos - UNISINOS 255 S: Universidade do Vale do Rio dos Sinos - UNISINOS
256 S: DSI/IDASI 256 S: DSI/IDASI
257 S: Av. Unisinos, 950 257 S: Av. Unisinos, 950
258 S: 93022000 Sao Leopoldo RS 258 S: 93022000 Sao Leopoldo RS
259 S: Brazil 259 S: Brazil
260 260
261 N: Peter Bauer 261 N: Peter Bauer
262 E: 100136.3530@compuserve.com 262 E: 100136.3530@compuserve.com
263 D: Driver for depca-ethernet-board 263 D: Driver for depca-ethernet-board
264 S: 69259 Wilhemsfeld 264 S: 69259 Wilhemsfeld
265 S: Rainweg 15 265 S: Rainweg 15
266 S: Germany 266 S: Germany
267 267
268 N: Fred Baumgarten 268 N: Fred Baumgarten
269 E: dc6iq@insl1.etec.uni-karlsruhe.de 269 E: dc6iq@insl1.etec.uni-karlsruhe.de
270 E: dc6iq@adacom.org 270 E: dc6iq@adacom.org
271 E: dc6iq@db0ais.#hes.deu.eu (packet radio) 271 E: dc6iq@db0ais.#hes.deu.eu (packet radio)
272 D: NET-2 & netstat(8) 272 D: NET-2 & netstat(8)
273 S: Soevener Strasse 11 273 S: Soevener Strasse 11
274 S: 53773 Hennef 274 S: 53773 Hennef
275 S: Germany 275 S: Germany
276 276
277 N: Donald Becker 277 N: Donald Becker
278 E: becker@cesdis.gsfc.nasa.gov 278 E: becker@cesdis.gsfc.nasa.gov
279 D: General low-level networking hacker 279 D: General low-level networking hacker
280 D: Most of the ethercard drivers 280 D: Most of the ethercard drivers
281 D: Original author of the NFS server 281 D: Original author of the NFS server
282 S: USRA Center of Excellence in Space Data and Information Sciences 282 S: USRA Center of Excellence in Space Data and Information Sciences
283 S: Code 930.5, Goddard Space Flight Center 283 S: Code 930.5, Goddard Space Flight Center
284 S: Greenbelt, Maryland 20771 284 S: Greenbelt, Maryland 20771
285 S: USA 285 S: USA
286 286
287 N: Adam Belay 287 N: Adam Belay
288 E: ambx1@neo.rr.com 288 E: ambx1@neo.rr.com
289 D: Linux Plug and Play Support 289 D: Linux Plug and Play Support
290 S: USA 290 S: USA
291 291
292 N: Daniele Bellucci 292 N: Daniele Bellucci
293 E: bellucda@tiscali.it 293 E: bellucda@tiscali.it
294 D: Various Janitor work. 294 D: Various Janitor work.
295 W: http://web.tiscali.it/bellucda 295 W: http://web.tiscali.it/bellucda
296 S: Via Delle Palme, 9 296 S: Via Delle Palme, 9
297 S: Terni 05100 297 S: Terni 05100
298 S: Italy 298 S: Italy
299 299
300 N: Krzysztof Benedyczak 300 N: Krzysztof Benedyczak
301 E: golbi@mat.uni.torun.pl 301 E: golbi@mat.uni.torun.pl
302 W: http://www.mat.uni.torun.pl/~golbi 302 W: http://www.mat.uni.torun.pl/~golbi
303 D: POSIX message queues fs (with M. Wronski) 303 D: POSIX message queues fs (with M. Wronski)
304 S: ul. Podmiejska 52 304 S: ul. Podmiejska 52
305 S: Radunica 305 S: Radunica
306 S: 83-000 Pruszcz Gdanski 306 S: 83-000 Pruszcz Gdanski
307 S: Poland 307 S: Poland
308 308
309 N: Randolph Bentson 309 N: Randolph Bentson
310 E: bentson@grieg.seaslug.org 310 E: bentson@grieg.seaslug.org
311 W: http://www.aa.net/~bentson/ 311 W: http://www.aa.net/~bentson/
312 P: 1024/39ED5729 5C A8 7A F4 B2 7A D1 3E B5 3B 81 CF 47 30 11 71 312 P: 1024/39ED5729 5C A8 7A F4 B2 7A D1 3E B5 3B 81 CF 47 30 11 71
313 D: Author of driver for Cyclom-Y and Cyclades-Z async mux 313 D: Author of driver for Cyclom-Y and Cyclades-Z async mux
314 S: 2322 37th Ave SW 314 S: 2322 37th Ave SW
315 S: Seattle, Washington 98126-2010 315 S: Seattle, Washington 98126-2010
316 S: USA 316 S: USA
317 317
318 N: Stephen R. van den Berg (AKA BuGless) 318 N: Stephen R. van den Berg (AKA BuGless)
319 E: berg@pool.informatik.rwth-aachen.de 319 E: berg@pool.informatik.rwth-aachen.de
320 D: General kernel, gcc, and libc hacker 320 D: General kernel, gcc, and libc hacker
321 D: Specialisation: tweaking, ensuring portability, tweaking, cleaning, 321 D: Specialisation: tweaking, ensuring portability, tweaking, cleaning,
322 D: tweaking and occasionally debugging :-) 322 D: tweaking and occasionally debugging :-)
323 S: Bouwensstraat 22 323 S: Bouwensstraat 22
324 S: 6369 BG Simpelveld 324 S: 6369 BG Simpelveld
325 S: The Netherlands 325 S: The Netherlands
326 326
327 N: Peter Berger 327 N: Peter Berger
328 E: pberger@brimson.com 328 E: pberger@brimson.com
329 W: http://www.brimson.com 329 W: http://www.brimson.com
330 D: Author/maintainer of Digi AccelePort USB driver 330 D: Author/maintainer of Digi AccelePort USB driver
331 S: 1549 Hiironen Rd. 331 S: 1549 Hiironen Rd.
332 S: Brimson, MN 55602 332 S: Brimson, MN 55602
333 S: USA 333 S: USA
334 334
335 N: Hennus Bergman 335 N: Hennus Bergman
336 P: 1024/77D50909 76 99 FD 31 91 E1 96 1C 90 BB 22 80 62 F6 BD 63 336 P: 1024/77D50909 76 99 FD 31 91 E1 96 1C 90 BB 22 80 62 F6 BD 63
337 D: Author and maintainer of the QIC-02 tape driver 337 D: Author and maintainer of the QIC-02 tape driver
338 S: The Netherlands 338 S: The Netherlands
339 339
340 N: Tomas Berndtsson 340 N: Tomas Berndtsson
341 E: tomas@nocrew.org 341 E: tomas@nocrew.org
342 W: http://tomas.nocrew.org/ 342 W: http://tomas.nocrew.org/
343 D: dsp56k device driver 343 D: dsp56k device driver
344 344
345 N: Ross Biro 345 N: Ross Biro
346 E: ross.biro@gmail.com 346 E: ross.biro@gmail.com
347 D: Original author of the Linux networking code 347 D: Original author of the Linux networking code
348 348
349 N: Anton Blanchard 349 N: Anton Blanchard
350 E: anton@samba.org 350 E: anton@samba.org
351 W: http://samba.org/~anton/ 351 W: http://samba.org/~anton/
352 P: 1024/8462A731 4C 55 86 34 44 59 A7 99 2B 97 88 4A 88 9A 0D 97 352 P: 1024/8462A731 4C 55 86 34 44 59 A7 99 2B 97 88 4A 88 9A 0D 97
353 D: sun4 port, Sparc hacker 353 D: sun4 port, Sparc hacker
354 354
355 N: Hugh Blemings 355 N: Hugh Blemings
356 E: hugh@misc.nu 356 E: hugh@misc.nu
357 W: http://misc.nu/hugh/ 357 W: http://misc.nu/hugh/
358 D: Author and maintainer of the Keyspan USB to Serial drivers 358 D: Author and maintainer of the Keyspan USB to Serial drivers
359 S: Po Box 234 359 S: Po Box 234
360 S: Belconnen ACT 2616 360 S: Belconnen ACT 2616
361 S: Australia 361 S: Australia
362 362
363 N: Philip Blundell 363 N: Philip Blundell
364 E: philb@gnu.org 364 E: philb@gnu.org
365 D: Linux/ARM hacker 365 D: Linux/ARM hacker
366 D: Device driver hacker (eexpress, 3c505, c-qcam, ...) 366 D: Device driver hacker (eexpress, 3c505, c-qcam, ...)
367 D: m68k port to HP9000/300 367 D: m68k port to HP9000/300
368 D: AUN network protocols 368 D: AUN network protocols
369 D: Co-architect of the parallel port sharing system 369 D: Co-architect of the parallel port sharing system
370 D: IPv6 netfilter 370 D: IPv6 netfilter
371 S: FutureTV Labs Ltd 371 S: FutureTV Labs Ltd
372 S: Brunswick House, 61-69 Newmarket Rd, Cambridge CB5 8EG 372 S: Brunswick House, 61-69 Newmarket Rd, Cambridge CB5 8EG
373 S: United Kingdom 373 S: United Kingdom
374 374
375 N: Thomas Bogendรถrfer 375 N: Thomas Bogendรถrfer
376 E: tsbogend@alpha.franken.de 376 E: tsbogend@alpha.franken.de
377 D: PCnet32 driver, SONIC driver, JAZZ_ESP driver 377 D: PCnet32 driver, SONIC driver, JAZZ_ESP driver
378 D: newport abscon driver, g364 framebuffer driver 378 D: newport abscon driver, g364 framebuffer driver
379 D: strace for Linux/Alpha 379 D: strace for Linux/Alpha
380 D: Linux/MIPS hacker 380 D: Linux/MIPS hacker
381 S: Schafhofstr. 40 381 S: Schafhofstr. 40
382 S: 90556 Cadolzburg 382 S: 90556 Cadolzburg
383 S: Germany 383 S: Germany
384 384
385 N: Bill Bogstad 385 N: Bill Bogstad
386 E: bogstad@pobox.com 386 E: bogstad@pobox.com
387 D: wrote /proc/self hack, minor samba & dosemu patches 387 D: wrote /proc/self hack, minor samba & dosemu patches
388 388
389 N: Axel Boldt 389 N: Axel Boldt
390 E: axel@uni-paderborn.de 390 E: axel@uni-paderborn.de
391 W: http://math-www.uni-paderborn.de/~axel/ 391 W: http://math-www.uni-paderborn.de/~axel/
392 D: Configuration help text support 392 D: Configuration help text support
393 D: Linux CD and Support Giveaway List 393 D: Linux CD and Support Giveaway List
394 394
395 N: Erik Inge Bolsรธ 395 N: Erik Inge Bolsรธ
396 E: knan@mo.himolde.no 396 E: knan@mo.himolde.no
397 D: Misc kernel hacks 397 D: Misc kernel hacks
398 398
399 N: Andreas E. Bombe 399 N: Andreas E. Bombe
400 E: andreas.bombe@munich.netsurf.de 400 E: andreas.bombe@munich.netsurf.de
401 W: http://home.pages.de/~andreas.bombe/ 401 W: http://home.pages.de/~andreas.bombe/
402 P: 1024/04880A44 72E5 7031 4414 2EB6 F6B4 4CBD 1181 7032 0488 0A44 402 P: 1024/04880A44 72E5 7031 4414 2EB6 F6B4 4CBD 1181 7032 0488 0A44
403 D: IEEE 1394 subsystem rewrite and maintainer 403 D: IEEE 1394 subsystem rewrite and maintainer
404 D: Texas Instruments PCILynx IEEE 1394 driver 404 D: Texas Instruments PCILynx IEEE 1394 driver
405 405
406 N: Al Borchers 406 N: Al Borchers
407 E: alborchers@steinerpoint.com 407 E: alborchers@steinerpoint.com
408 D: Author/maintainer of Digi AccelePort USB driver 408 D: Author/maintainer of Digi AccelePort USB driver
409 D: work on usbserial and keyspan_pda drivers 409 D: work on usbserial and keyspan_pda drivers
410 S: 4912 Zenith Ave. S. 410 S: 4912 Zenith Ave. S.
411 S: Minneapolis, MN 55410 411 S: Minneapolis, MN 55410
412 S: USA 412 S: USA
413 413
414 N: Marc Boucher 414 N: Marc Boucher
415 E: marc@mbsi.ca 415 E: marc@mbsi.ca
416 P: CA 67 A5 1A 38 CE B6 F2 D5 83 51 03 D2 9C 30 9E CE D2 DD 65 416 P: CA 67 A5 1A 38 CE B6 F2 D5 83 51 03 D2 9C 30 9E CE D2 DD 65
417 D: Netfilter core 417 D: Netfilter core
418 D: IP policy routing by mark 418 D: IP policy routing by mark
419 D: Various fixes (mostly networking) 419 D: Various fixes (mostly networking)
420 S: Montreal, Quebec 420 S: Montreal, Quebec
421 S: Canada 421 S: Canada
422 422
423 N: Zoltรกn Bรถszรถrmรฉnyi 423 N: Zoltรกn Bรถszรถrmรฉnyi
424 E: zboszor@mail.externet.hu 424 E: zboszor@mail.externet.hu
425 D: MTRR emulation with Cyrix style ARR registers, Athlon MTRR support 425 D: MTRR emulation with Cyrix style ARR registers, Athlon MTRR support
426 426
427 N: John Boyd 427 N: John Boyd
428 E: boyd@cis.ohio-state.edu 428 E: boyd@cis.ohio-state.edu
429 D: Co-author of wd7000 SCSI driver 429 D: Co-author of wd7000 SCSI driver
430 S: 101 Curl Drive #591 430 S: 101 Curl Drive #591
431 S: Columbus, Ohio 43210 431 S: Columbus, Ohio 43210
432 S: USA 432 S: USA
433 433
434 N: Peter Braam 434 N: Peter Braam
435 E: braam@clusterfs.com 435 E: braam@clusterfs.com
436 W: http://www.clusterfs.com/ 436 W: http://www.clusterfs.com/
437 D: Coda & InterMezzo filesystems 437 D: Coda & InterMezzo filesystems
438 S: 181 McNeil 438 S: 181 McNeil
439 S: Canmore, AB 439 S: Canmore, AB
440 S: Canada, T1W 2R9 440 S: Canada, T1W 2R9
441 441
442 N: Ryan Bradetich 442 N: Ryan Bradetich
443 E: rbradetich@uswest.net 443 E: rbradetich@uswest.net
444 D: Linux/PA-RISC hacker 444 D: Linux/PA-RISC hacker
445 S: 1200 Goldenrod Dr. 445 S: 1200 Goldenrod Dr.
446 S: Nampa, Idaho 83686 446 S: Nampa, Idaho 83686
447 447
448 N: Derrick J. Brashear 448 N: Derrick J. Brashear
449 E: shadow@dementia.org 449 E: shadow@dementia.org
450 W: http://www.dementia.org/~shadow 450 W: http://www.dementia.org/~shadow
451 P: 512/71EC9367 C5 29 0F BC 83 51 B9 F0 BC 05 89 A0 4F 1F 30 05 451 P: 512/71EC9367 C5 29 0F BC 83 51 B9 F0 BC 05 89 A0 4F 1F 30 05
452 D: Author of Sparc CS4231 audio driver, random Sparc work 452 D: Author of Sparc CS4231 audio driver, random Sparc work
453 S: 403 Gilmore Avenue 453 S: 403 Gilmore Avenue
454 S: Trafford, Pennsylvania 15085 454 S: Trafford, Pennsylvania 15085
455 S: USA 455 S: USA
456 456
457 N: Dag Brattli 457 N: Dag Brattli
458 E: dagb@cs.uit.no 458 E: dagb@cs.uit.no
459 W: http://www.cs.uit.no/~dagb 459 W: http://www.cs.uit.no/~dagb
460 D: IrDA Subsystem 460 D: IrDA Subsystem
461 S: 19. Wellington Road 461 S: 19. Wellington Road
462 S: Lancaster, LA1 4DN 462 S: Lancaster, LA1 4DN
463 S: UK, England 463 S: UK, England
464 464
465 N: Lars Brinkhoff 465 N: Lars Brinkhoff
466 E: lars@nocrew.org 466 E: lars@nocrew.org
467 W: http://lars.nocrew.org/ 467 W: http://lars.nocrew.org/
468 D: dsp56k device driver 468 D: dsp56k device driver
469 D: ptrace proxy in user mode kernel port 469 D: ptrace proxy in user mode kernel port
470 S: Kopmansg 2 470 S: Kopmansg 2
471 S: 411 13 Goteborg 471 S: 411 13 Goteborg
472 S: Sweden 472 S: Sweden
473 473
474 N: Dominik Brodowski 474 N: Dominik Brodowski
475 E: linux@brodo.de 475 E: linux@brodo.de
476 W: http://www.brodo.de/ 476 W: http://www.brodo.de/
477 P: 1024D/725B37C6 190F 3E77 9C89 3B6D BECD 46EE 67C3 0308 725B 37C6 477 P: 1024D/725B37C6 190F 3E77 9C89 3B6D BECD 46EE 67C3 0308 725B 37C6
478 D: parts of CPUFreq code, ACPI bugfixes 478 D: parts of CPUFreq code, ACPI bugfixes
479 S: Tuebingen, Germany 479 S: Tuebingen, Germany
480 480
481 N: Andries Brouwer 481 N: Andries Brouwer
482 E: aeb@cwi.nl 482 E: aeb@cwi.nl
483 D: random Linux hacker 483 D: random Linux hacker
484 S: Bessemerstraat 21 484 S: Bessemerstraat 21
485 S: Amsterdam 485 S: Amsterdam
486 S: The Netherlands 486 S: The Netherlands
487 487
488 N: Zach Brown 488 N: Zach Brown
489 E: zab@zabbo.net 489 E: zab@zabbo.net
490 D: maestro pci sound 490 D: maestro pci sound
491 491
492 N: Gary Brubaker 492 N: Gary Brubaker
493 E: xavyer@ix.netcom.com 493 E: xavyer@ix.netcom.com
494 D: USB Serial Empeg Empeg-car Mark I/II Driver 494 D: USB Serial Empeg Empeg-car Mark I/II Driver
495 495
496 N: Matthias Bruestle 496 N: Matthias Bruestle
497 E: m@mbsks.franken.de 497 E: m@mbsks.franken.de
498 D: REINER SCT cyberJack pinpad/e-com USB chipcard reader driver 498 D: REINER SCT cyberJack pinpad/e-com USB chipcard reader driver
499 S: Germany 499 S: Germany
500 500
501 N: Adrian Bunk 501 N: Adrian Bunk
502 E: bunk@stusta.de 502 E: bunk@stusta.de
503 P: 1024D/4F12B400 B29C E71E FE19 6755 5C8A 84D4 99FC EA98 4F12 B400 503 P: 1024D/4F12B400 B29C E71E FE19 6755 5C8A 84D4 99FC EA98 4F12 B400
504 D: misc kernel hacking and testing 504 D: misc kernel hacking and testing
505 S: Grasmeierstrasse 11 505 S: Grasmeierstrasse 11
506 S: 80805 Muenchen 506 S: 80805 Muenchen
507 S: Germany 507 S: Germany
508 508
509 N: Ray Burr 509 N: Ray Burr
510 E: ryb@nightmare.com 510 E: ryb@nightmare.com
511 D: Original author of Amiga FFS filesystem 511 D: Original author of Amiga FFS filesystem
512 S: Orlando, Florida 512 S: Orlando, Florida
513 S: USA 513 S: USA
514 514
515 N: Lennert Buytenhek 515 N: Lennert Buytenhek
516 E: buytenh@gnu.org 516 E: buytenh@gnu.org
517 D: Rewrite of the ethernet bridging code 517 D: Rewrite of the ethernet bridging code
518 S: Ravenhorst 58B 518 S: Ravenhorst 58B
519 S: 2317 AK Leiden 519 S: 2317 AK Leiden
520 S: The Netherlands 520 S: The Netherlands
521 521
522 N: Michael Callahan 522 N: Michael Callahan
523 E: callahan@maths.ox.ac.uk 523 E: callahan@maths.ox.ac.uk
524 D: PPP for Linux 524 D: PPP for Linux
525 S: The Mathematical Institute 525 S: The Mathematical Institute
526 S: 25-29 St Giles 526 S: 25-29 St Giles
527 S: Oxford 527 S: Oxford
528 S: United Kingdom 528 S: United Kingdom
529 529
530 N: Luiz Fernando N. Capitulino 530 N: Luiz Fernando N. Capitulino
531 E: lcapitulino@mandriva.com.br 531 E: lcapitulino@mandriva.com.br
532 E: lcapitulino@gmail.com 532 E: lcapitulino@gmail.com
533 W: http://www.cpu.eti.br 533 W: http://www.cpu.eti.br
534 D: misc kernel hacking 534 D: misc kernel hacking
535 S: Mandriva 535 S: Mandriva
536 S: Brazil 536 S: Brazil
537 537
538 N: Remy Card 538 N: Remy Card
539 E: Remy.Card@masi.ibp.fr 539 E: Remy.Card@masi.ibp.fr
540 E: Remy.Card@linux.org 540 E: Remy.Card@linux.org
541 D: Extended file system [defunct] designer and developer 541 D: Extended file system [defunct] designer and developer
542 D: Second extended file system designer and developer 542 D: Second extended file system designer and developer
543 S: Institut Blaise Pascal 543 S: Institut Blaise Pascal
544 S: 4 Place Jussieu 544 S: 4 Place Jussieu
545 S: 75252 Paris Cedex 05 545 S: 75252 Paris Cedex 05
546 S: France 546 S: France
547 547
548 N: Ulf Carlsson 548 N: Ulf Carlsson
549 D: SGI Indy audio (HAL2) drivers 549 D: SGI Indy audio (HAL2) drivers
550 E: ulfc@bun.falkenberg.se 550 E: ulfc@bun.falkenberg.se
551 551
552 N: Ed Carp 552 N: Ed Carp
553 E: ecarp@netcom.com 553 E: ecarp@netcom.com
554 D: uucp, elm, pine, pico port 554 D: uucp, elm, pine, pico port
555 D: cron, at(1) developer 555 D: cron, at(1) developer
556 S: 48287 Sawleaf 556 S: 48287 Sawleaf
557 S: Fremont, California 94539 557 S: Fremont, California 94539
558 S: USA 558 S: USA
559 559
560 N: Florent Chabaud 560 N: Florent Chabaud
561 E: florent.chabaud@polytechnique.org 561 E: florent.chabaud@polytechnique.org
562 D: software suspend 562 D: software suspend
563 S: SGDN/DCSSI/SDS/LTI 563 S: SGDN/DCSSI/SDS/LTI
564 S: 58, Bd Latour-Maubourg 564 S: 58, Bd Latour-Maubourg
565 S: 75700 Paris 07 SP 565 S: 75700 Paris 07 SP
566 S: France 566 S: France
567 567
568 N: Gordon Chaffee 568 N: Gordon Chaffee
569 E: chaffee@cs.berkeley.edu 569 E: chaffee@cs.berkeley.edu
570 W: http://bmrc.berkeley.edu/people/chaffee/ 570 W: http://bmrc.berkeley.edu/people/chaffee/
571 D: vfat, fat32, joliet, native language support 571 D: vfat, fat32, joliet, native language support
572 S: 3700 Warwick Road 572 S: 3700 Warwick Road
573 S: Fremont, California 94555 573 S: Fremont, California 94555
574 S: USA 574 S: USA
575 575
576 N: Chih-Jen Chang 576 N: Chih-Jen Chang
577 E: chihjenc@scf.usc.edu 577 E: chihjenc@scf.usc.edu
578 E: chihjen@iis.sinica.edu.tw 578 E: chihjen@iis.sinica.edu.tw
579 D: IGMP(Internet Group Management Protocol) version 2 579 D: IGMP(Internet Group Management Protocol) version 2
580 S: 3F, 65 Tajen street 580 S: 3F, 65 Tajen street
581 S: Tamsui town, Taipei county, 581 S: Tamsui town, Taipei county,
582 S: Taiwan 251 582 S: Taiwan 251
583 S: Republic of China 583 S: Republic of China
584 584
585 N: Michael Elizabeth Chastain 585 N: Michael Elizabeth Chastain
586 E: mec@shout.net 586 E: mec@shout.net
587 D: Configure, Menuconfig, xconfig 587 D: Configure, Menuconfig, xconfig
588 588
589 N: Raymond Chen 589 N: Raymond Chen
590 E: raymondc@microsoft.com 590 E: raymondc@microsoft.com
591 D: Author of Configure script 591 D: Author of Configure script
592 S: 14509 NE 39th Street #1096 592 S: 14509 NE 39th Street #1096
593 S: Bellevue, Washington 98007 593 S: Bellevue, Washington 98007
594 S: USA 594 S: USA
595 595
596 N: Christopher L. Cheney 596 N: Christopher L. Cheney
597 E: ccheney@debian.org 597 E: ccheney@debian.org
598 E: ccheney@cheney.cx 598 E: ccheney@cheney.cx
599 W: http://www.cheney.cx 599 W: http://www.cheney.cx
600 P: 1024D/8E384AF2 2D31 1927 87D7 1F24 9FF9 1BC5 D106 5AB3 8E38 4AF2 600 P: 1024D/8E384AF2 2D31 1927 87D7 1F24 9FF9 1BC5 D106 5AB3 8E38 4AF2
601 D: Vista Imaging usb webcam driver 601 D: Vista Imaging usb webcam driver
602 S: 314 Prince of Wales 602 S: 314 Prince of Wales
603 S: Conroe, TX 77304 603 S: Conroe, TX 77304
604 S: USA 604 S: USA
605 605
606 N: Stuart Cheshire 606 N: Stuart Cheshire
607 E: cheshire@cs.stanford.edu 607 E: cheshire@cs.stanford.edu
608 D: Author of Starmode Radio IP (STRIP) driver 608 D: Author of Starmode Radio IP (STRIP) driver
609 D: Originator of design for new combined interrupt handlers 609 D: Originator of design for new combined interrupt handlers
610 S: William Gates Department 610 S: William Gates Department
611 S: Stanford University 611 S: Stanford University
612 S: Stanford, California 94305 612 S: Stanford, California 94305
613 S: USA 613 S: USA
614 614
615 N: Randolph Chung 615 N: Randolph Chung
616 E: tausq@debian.org 616 E: tausq@debian.org
617 D: Linux/PA-RISC hacker 617 D: Linux/PA-RISC hacker
618 S: Hong Kong 618 S: Hong Kong
619 619
620 N: Juan Jose Ciarlante 620 N: Juan Jose Ciarlante
621 W: http://juanjox.kernelnotes.org/ 621 W: http://juanjox.kernelnotes.org/
622 E: jjciarla@raiz.uncu.edu.ar 622 E: jjciarla@raiz.uncu.edu.ar
623 E: jjo@mendoza.gov.ar 623 E: jjo@mendoza.gov.ar
624 D: Network driver alias support 624 D: Network driver alias support
625 D: IP masq hashing and app modules 625 D: IP masq hashing and app modules
626 D: IP masq 2.1 features and bugs 626 D: IP masq 2.1 features and bugs
627 S: Las Cuevas 2385 - Bo Guemes 627 S: Las Cuevas 2385 - Bo Guemes
628 S: Las Heras, Mendoza CP 5539 628 S: Las Heras, Mendoza CP 5539
629 S: Argentina 629 S: Argentina
630 630
631 N: Steven P. Cole 631 N: Steven P. Cole
632 E: scole@lanl.gov 632 E: scole@lanl.gov
633 E: elenstev@mesatop.com 633 E: elenstev@mesatop.com
634 D: Various build fixes and kernel documentation. 634 D: Various build fixes and kernel documentation.
635 S: Los Alamos, New Mexico 635 S: Los Alamos, New Mexico
636 636
637 N: Hamish Coleman 637 N: Hamish Coleman
638 E: hamish@zot.apana.org.au 638 E: hamish@zot.apana.org.au
639 D: SEEQ8005 network driver 639 D: SEEQ8005 network driver
640 S: 98 Paxton Street 640 S: 98 Paxton Street
641 S: East Malvern, Victoria, 3145 641 S: East Malvern, Victoria, 3145
642 S: Australia 642 S: Australia
643 643
644 N: Neil Conway 644 N: Neil Conway
645 E: nconway.list@ukaea.org.uk 645 E: nconway.list@ukaea.org.uk
646 D: Assorted sched/mm titbits 646 D: Assorted sched/mm titbits
647 S: Oxfordshire, UK. 647 S: Oxfordshire, UK.
648 648
649 N: Kees Cook 649 N: Kees Cook
650 E: kees@outflux.net 650 E: kees@outflux.net
651 W: http://outflux.net/ 651 W: http://outflux.net/
652 P: 1024D/17063E6D 9FA3 C49C 23C9 D1BC 2E30 1975 1FFF 4BA9 1706 3E6D 652 P: 1024D/17063E6D 9FA3 C49C 23C9 D1BC 2E30 1975 1FFF 4BA9 1706 3E6D
653 D: Minor updates to SCSI code for the Communications type 653 D: Minor updates to SCSI code for the Communications type
654 S: (ask for current address) 654 S: (ask for current address)
655 S: USA 655 S: USA
656 656
657 N: Mark Corner 657 N: Mark Corner
658 E: mcorner@umich.edu 658 E: mcorner@umich.edu
659 W: http://www.eecs.umich.edu/~mcorner/ 659 W: http://www.eecs.umich.edu/~mcorner/
660 D: USB Bluetooth Driver 660 D: USB Bluetooth Driver
661 S: University of Michigan 661 S: University of Michigan
662 S: Ann Arbor, MI 662 S: Ann Arbor, MI
663 663
664 N: Michael Cornwell 664 N: Michael Cornwell
665 E: cornwell@acm.org 665 E: cornwell@acm.org
666 D: Original designer and co-author of ATA Taskfile 666 D: Original designer and co-author of ATA Taskfile
667 D: Kernel module SMART utilities 667 D: Kernel module SMART utilities
668 S: Santa Cruz, California 668 S: Santa Cruz, California
669 S: USA 669 S: USA
670 670
671 N: Alan Cox 671 N: Alan Cox
672 W: http://www.linux.org.uk/diary/ 672 W: http://www.linux.org.uk/diary/
673 D: Linux Networking (0.99.10->2.0.29) 673 D: Linux Networking (0.99.10->2.0.29)
674 D: Original Appletalk, AX.25, and IPX code 674 D: Original Appletalk, AX.25, and IPX code
675 D: 3c501 hacker 675 D: 3c501 hacker
676 D: Watchdog timer drivers 676 D: Watchdog timer drivers
677 D: Linux/SMP x86 (up to 2.0 only) 677 D: Linux/SMP x86 (up to 2.0 only)
678 D: Initial Mac68K port 678 D: Initial Mac68K port
679 D: Video4Linux design, bw-qcam and PMS driver ports. 679 D: Video4Linux design, bw-qcam and PMS driver ports.
680 D: IDE modularisation work 680 D: IDE modularisation work
681 D: Z85230 driver 681 D: Z85230 driver
682 D: Former security contact point (please use vendor-sec@lst.de) 682 D: Former security contact point (please use vendor-sec@lst.de)
683 D: ex 2.2 maintainer 683 D: ex 2.2 maintainer
684 D: 2.1.x modular sound 684 D: 2.1.x modular sound
685 S: c/o Red Hat UK Ltd 685 S: c/o Red Hat UK Ltd
686 S: Alexandra House 686 S: Alexandra House
687 S: Alexandra Terrace 687 S: Alexandra Terrace
688 S: Guildford, GU1 3DA 688 S: Guildford, GU1 3DA
689 S: United Kingdom 689 S: United Kingdom
690 690
691 N: Cristian Mihail Craciunescu 691 N: Cristian Mihail Craciunescu
692 W: http://www.dnt.ro/~cristi/ 692 W: http://www.dnt.ro/~cristi/
693 E: cristi@dnt.ro 693 E: cristi@dnt.ro
694 D: Support for Xircom PGSDB9 (firmware and host driver) 694 D: Support for Xircom PGSDB9 (firmware and host driver)
695 S: Bucharest 695 S: Bucharest
696 S: Romania 696 S: Romania
697 697
698 N: Laurence Culhane 698 N: Laurence Culhane
699 E: loz@holmes.demon.co.uk 699 E: loz@holmes.demon.co.uk
700 D: Wrote the initial alpha SLIP code 700 D: Wrote the initial alpha SLIP code
701 S: 81 Hood Street 701 S: 81 Hood Street
702 S: Northampton 702 S: Northampton
703 S: NN1 3QT 703 S: NN1 3QT
704 S: United Kingdom 704 S: United Kingdom
705 705
706 N: Uwe Dannowski 706 N: Uwe Dannowski
707 E: Uwe.Dannowski@ira.uka.de 707 E: Uwe.Dannowski@ira.uka.de
708 W: http://i30www.ira.uka.de/~dannowsk/ 708 W: http://i30www.ira.uka.de/~dannowsk/
709 D: FORE PCA-200E driver 709 D: FORE PCA-200E driver
710 S: University of Karlsruhe 710 S: University of Karlsruhe
711 S: Germany 711 S: Germany
712 712
713 N: Ray Dassen 713 N: Ray Dassen
714 E: jdassen@wi.LeidenUniv.nl 714 E: jdassen@wi.LeidenUniv.nl
715 W: http://www.wi.leidenuniv.nl/~jdassen/ 715 W: http://www.wi.leidenuniv.nl/~jdassen/
716 P: 1024/672D05C1 DD 60 32 60 F7 90 64 80 E7 6F D4 E4 F8 C9 4A 58 716 P: 1024/672D05C1 DD 60 32 60 F7 90 64 80 E7 6F D4 E4 F8 C9 4A 58
717 D: Debian GNU/Linux: www.debian.org maintainer, FAQ co-maintainer, 717 D: Debian GNU/Linux: www.debian.org maintainer, FAQ co-maintainer,
718 D: packages testing, nit-picking & fixing. Enjoying BugFree (TM) kernels. 718 D: packages testing, nit-picking & fixing. Enjoying BugFree (TM) kernels.
719 S: Zuidsingel 10A 719 S: Zuidsingel 10A
720 S: 2312 SB Leiden 720 S: 2312 SB Leiden
721 S: The Netherlands 721 S: The Netherlands
722 722
723 N: David Davies 723 N: David Davies
724 E: davies@wanton.lkg.dec.com 724 E: davies@wanton.lkg.dec.com
725 D: Network driver author - depca, ewrk3 and de4x5 725 D: Network driver author - depca, ewrk3 and de4x5
726 D: Wrote shared interrupt support 726 D: Wrote shared interrupt support
727 S: Digital Equipment Corporation 727 S: Digital Equipment Corporation
728 S: 550 King Street 728 S: 550 King Street
729 S: Littleton, Massachusetts 01460 729 S: Littleton, Massachusetts 01460
730 S: USA 730 S: USA
731 731
732 N: Frank Davis 732 N: Frank Davis
733 E: fdavis@si.rr.com 733 E: fdavis@si.rr.com
734 E: fdavis112@juno.com 734 E: fdavis112@juno.com
735 D: Various kernel patches 735 D: Various kernel patches
736 S: 8 Lakeview Terr. 736 S: 8 Lakeview Terr.
737 S: Kerhonkson, NY 12446 737 S: Kerhonkson, NY 12446
738 S: USA 738 S: USA
739 739
740 N: Wayne Davison 740 N: Wayne Davison
741 E: davison@borland.com 741 E: davison@borland.com
742 D: Second extended file system co-designer 742 D: Second extended file system co-designer
743 743
744 N: Terry Dawson 744 N: Terry Dawson
745 E: terry@perf.no.itg.telecom.com.au 745 E: terry@perf.no.itg.telecom.com.au
746 E: terry@albert.vk2ktj.ampr.org (Amateur Radio use only) 746 E: terry@albert.vk2ktj.ampr.org (Amateur Radio use only)
747 D: trivial hack to add variable address length routing to Rose. 747 D: trivial hack to add variable address length routing to Rose.
748 D: AX25-HOWTO, HAM-HOWTO, IPX-HOWTO, NET-2-HOWTO 748 D: AX25-HOWTO, HAM-HOWTO, IPX-HOWTO, NET-2-HOWTO
749 D: ax25-utils maintainer. 749 D: ax25-utils maintainer.
750 750
751 N: Helge Deller 751 N: Helge Deller
752 E: deller@gmx.de 752 E: deller@gmx.de
753 E: hdeller@redhat.de 753 E: hdeller@redhat.de
754 D: PA-RISC Linux hacker, LASI-, ASP-, WAX-, LCD/LED-driver 754 D: PA-RISC Linux hacker, LASI-, ASP-, WAX-, LCD/LED-driver
755 S: Schimmelsrain 1 755 S: Schimmelsrain 1
756 S: D-69231 Rauenberg 756 S: D-69231 Rauenberg
757 S: Germany 757 S: Germany
758 758
759 N: Jean Delvare 759 N: Jean Delvare
760 E: khali@linux-fr.org 760 E: khali@linux-fr.org
761 W: http://khali.linux-fr.org/ 761 W: http://khali.linux-fr.org/
762 D: Several hardware monitoring drivers 762 D: Several hardware monitoring drivers
763 S: France 763 S: France
764 764
765 N: Peter Denison 765 N: Peter Denison
766 E: peterd@pnd-pc.demon.co.uk 766 E: peterd@pnd-pc.demon.co.uk
767 W: http://www.pnd-pc.demon.co.uk/promise/ 767 W: http://www.pnd-pc.demon.co.uk/promise/
768 D: Promise DC4030VL caching HD controller drivers 768 D: Promise DC4030VL caching HD controller drivers
769 769
770 N: Todd J. Derr 770 N: Todd J. Derr
771 E: tjd@fore.com 771 E: tjd@fore.com
772 W: http://www.wordsmith.org/~tjd 772 W: http://www.wordsmith.org/~tjd
773 D: Random console hacks and other miscellaneous stuff 773 D: Random console hacks and other miscellaneous stuff
774 S: 3000 FORE Drive 774 S: 3000 FORE Drive
775 S: Warrendale, Pennsylvania 15086 775 S: Warrendale, Pennsylvania 15086
776 S: USA 776 S: USA
777 777
778 N: Martin Devera 778 N: Martin Devera
779 E: devik@cdi.cz 779 E: devik@cdi.cz
780 W: http://luxik.cdi.cz/~devik/qos/ 780 W: http://luxik.cdi.cz/~devik/qos/
781 D: HTB qdisc and random networking hacks 781 D: HTB qdisc and random networking hacks
782 782
783 N: Alex deVries 783 N: Alex deVries
784 E: alex@onefishtwo.ca 784 E: alex@onefishtwo.ca
785 D: Various SGI parts, bits of HAL2 and Newport, PA-RISC Linux. 785 D: Various SGI parts, bits of HAL2 and Newport, PA-RISC Linux.
786 S: 41.5 William Street 786 S: 41.5 William Street
787 S: Ottawa, Ontario 787 S: Ottawa, Ontario
788 S: K1N 6Z9 788 S: K1N 6Z9
789 S: CANADA 789 S: CANADA
790 790
791 N: Jeff Dike 791 N: Jeff Dike
792 E: jdike@karaya.com 792 E: jdike@karaya.com
793 W: http://user-mode-linux.sourceforge.net 793 W: http://user-mode-linux.sourceforge.net
794 D: User mode kernel port 794 D: User mode kernel port
795 S: 375 Tubbs Hill Rd 795 S: 375 Tubbs Hill Rd
796 S: Deering NH 03244 796 S: Deering NH 03244
797 S: USA 797 S: USA
798 798
799 N: Matt Domsch 799 N: Matt Domsch
800 E: Matt_Domsch@dell.com 800 E: Matt_Domsch@dell.com
801 W: http://www.dell.com/linux 801 W: http://www.dell.com/linux
802 W: http://domsch.com/linux 802 W: http://domsch.com/linux
803 D: Linux/IA-64 803 D: Linux/IA-64
804 D: Dell PowerEdge server, SCSI layer, misc drivers, and other patches 804 D: Dell PowerEdge server, SCSI layer, misc drivers, and other patches
805 S: Dell Inc. 805 S: Dell Inc.
806 S: One Dell Way 806 S: One Dell Way
807 S: Round Rock, TX 78682 807 S: Round Rock, TX 78682
808 S: USA 808 S: USA
809 809
810 N: Ben Dooks 810 N: Ben Dooks
811 E: ben-linux@fluff.org 811 E: ben-linux@fluff.org
812 E: ben@simtec.co.uk 812 E: ben@simtec.co.uk
813 W: http://www.fluff.org/ben/ 813 W: http://www.fluff.org/ben/
814 W: http://www.simtec.co.uk/ 814 W: http://www.simtec.co.uk/
815 D: Samsung S3C2410/S3C2440 support, general ARM support 815 D: Samsung S3C2410/S3C2440 support, general ARM support
816 D: Maintaining Simtec Electronics development boards 816 D: Maintaining Simtec Electronics development boards
817 S: Simtec Electronics 817 S: Simtec Electronics
818 S: Avondale Drive 818 S: Avondale Drive
819 S: Tarleton 819 S: Tarleton
820 S: Preston 820 S: Preston
821 S: Lancs 821 S: Lancs
822 S: PR4 6AX 822 S: PR4 6AX
823 S: United Kingdom 823 S: United Kingdom
824 824
825 N: John G Dorsey 825 N: John G Dorsey
826 E: john+@cs.cmu.edu 826 E: john+@cs.cmu.edu
827 D: ARM Linux ports to Assabet/Neponset, Spot 827 D: ARM Linux ports to Assabet/Neponset, Spot
828 S: Department of Electrical and Computer Engineering 828 S: Department of Electrical and Computer Engineering
829 S: Carnegie Mellon University 829 S: Carnegie Mellon University
830 S: Pittsburgh, PA 15213 830 S: Pittsburgh, PA 15213
831 S: USA 831 S: USA
832 832
833 N: Eddie C. Dost 833 N: Eddie C. Dost
834 E: ecd@skynet.be 834 E: ecd@skynet.be
835 D: Linux/Sparc kernel hacker 835 D: Linux/Sparc kernel hacker
836 D: Linux/Sparc maintainer 836 D: Linux/Sparc maintainer
837 S: Rue de la Chapelle 51 837 S: Rue de la Chapelle 51
838 S: 4850 Moresnet 838 S: 4850 Moresnet
839 S: Belgium 839 S: Belgium
840 840
841 N: Cort Dougan 841 N: Cort Dougan
842 E: cort@fsmlabs.com 842 E: cort@fsmlabs.com
843 W: http://www.fsmlabs.com/linuxppcbk.html 843 W: http://www.fsmlabs.com/linuxppcbk.html
844 D: PowerPC 844 D: PowerPC
845 845
846 N: Daniel Drake 846 N: Daniel Drake
847 E: dsd@gentoo.org 847 E: dsd@gentoo.org
848 D: USBAT02 CompactFlash support in usb-storage 848 D: USBAT02 CompactFlash support in usb-storage
849 S: UK 849 S: UK
850 850
851 N: Oleg Drokin 851 N: Oleg Drokin
852 E: green@ccssu.crimea.ua 852 E: green@ccssu.crimea.ua
853 W: http://www.ccssu.crimea.ua/~green 853 W: http://www.ccssu.crimea.ua/~green
854 D: Cleaning up sound drivers, SA1100 Watchdog. 854 D: Cleaning up sound drivers, SA1100 Watchdog.
855 S: Skvoznoy per., 14a 855 S: Skvoznoy per., 14a
856 S: Evpatoria 856 S: Evpatoria
857 S: Crimea 857 S: Crimea
858 S: UKRAINE, 334320 858 S: UKRAINE, 334320
859 859
860 N: Walt Drummond 860 N: Walt Drummond
861 E: drummond@valinux.com 861 E: drummond@valinux.com
862 D: Linux/IA-64 862 D: Linux/IA-64
863 S: 1382 Bordeaux Drive 863 S: 1382 Bordeaux Drive
864 S: Sunnyvale, CA 94087 864 S: Sunnyvale, CA 94087
865 S: USA 865 S: USA
866 866
867 N: Bruno Ducrot 867 N: Bruno Ducrot
868 E: ducrot@poupinou.org 868 E: ducrot@poupinou.org
869 D: CPUFreq and ACPI bugfixes. 869 D: CPUFreq and ACPI bugfixes.
870 S: Mougin, France 870 S: Mougin, France
871 871
872 N: Don Dugger 872 N: Don Dugger
873 E: n0ano@valinux.com 873 E: n0ano@valinux.com
874 D: Linux/IA-64 874 D: Linux/IA-64
875 S: 1209 Pearl Street, #12 875 S: 1209 Pearl Street, #12
876 S: Boulder, CO 80302 876 S: Boulder, CO 80302
877 S: USA 877 S: USA
878 878
879 N: Thomas Dunbar 879 N: Thomas Dunbar
880 E: tdunbar@vt.edu 880 E: tdunbar@vt.edu
881 D: TeX & METAFONT hacking/maintenance 881 D: TeX & METAFONT hacking/maintenance
882 S: Virginia Tech Computing Center 882 S: Virginia Tech Computing Center
883 S: 1700 Pratt Drive 883 S: 1700 Pratt Drive
884 S: Blacksburg, Virginia 24061 884 S: Blacksburg, Virginia 24061
885 S: USA 885 S: USA
886 886
887 N: Randy Dunlap 887 N: Randy Dunlap
888 E: rdunlap@xenotime.net 888 E: rdunlap@xenotime.net
889 W: http://www.xenotime.net/linux/linux.html 889 W: http://www.xenotime.net/linux/linux.html
890 W: http://www.linux-usb.org 890 W: http://www.linux-usb.org
891 D: Linux-USB subsystem, USB core/UHCI/printer/storage drivers 891 D: Linux-USB subsystem, USB core/UHCI/printer/storage drivers
892 D: x86 SMP, ACPI, bootflag hacking 892 D: x86 SMP, ACPI, bootflag hacking
893 S: (ask for current address) 893 S: (ask for current address)
894 S: USA 894 S: USA
895 895
896 N: Bob Dunlop 896 N: Bob Dunlop
897 E: rjd@xyzzy.clara.co.uk 897 E: rjd@xyzzy.clara.co.uk
898 E: bob.dunlop@farsite.co.uk 898 E: bob.dunlop@farsite.co.uk
899 W: www.farsite.co.uk 899 W: www.farsite.co.uk
900 D: FarSync card device driver 900 D: FarSync card device driver
901 S: FarSite Communications Ltd 901 S: FarSite Communications Ltd
902 S: Tempus Business Centre 902 S: Tempus Business Centre
903 S: 60 Kingsclere Road 903 S: 60 Kingsclere Road
904 S: Basingstoke RG21 6XG 904 S: Basingstoke RG21 6XG
905 S: UK 905 S: UK
906 906
907 N: Cyrus Durgin 907 N: Cyrus Durgin
908 E: cider@speakeasy.org 908 E: cider@speakeasy.org
909 W: http://www.speakeasy.org/~cider/ 909 W: http://www.speakeasy.org/~cider/
910 D: implemented kmod 910 D: implemented kmod
911 911
912 N: Torsten Duwe 912 N: Torsten Duwe
913 E: Torsten.Duwe@informatik.uni-erlangen.de 913 E: Torsten.Duwe@informatik.uni-erlangen.de
914 D: Part-time kernel hacker 914 D: Part-time kernel hacker
915 D: The Linux Support Team Erlangen 915 D: The Linux Support Team Erlangen
916 S: Grevenbroicher Str. 17 916 S: Grevenbroicher Str. 17
917 S: 47807 Krefeld 917 S: 47807 Krefeld
918 S: Germany 918 S: Germany
919 919
920 N: Tom Dyas 920 N: Tom Dyas
921 E: tdyas@eden.rutgers.edu 921 E: tdyas@eden.rutgers.edu
922 D: minor hacks and some sparc port stuff 922 D: minor hacks and some sparc port stuff
923 S: New Jersey 923 S: New Jersey
924 S: USA 924 S: USA
925 925
926 N: Drew Eckhardt 926 N: Drew Eckhardt
927 E: drew@PoohSticks.ORG 927 E: drew@PoohSticks.ORG
928 D: SCSI code 928 D: SCSI code
929 D: Assorted snippets elsewhere 929 D: Assorted snippets elsewhere
930 D: Boot sector "..." printing 930 D: Boot sector "..." printing
931 S: 2037 Walnut #6 931 S: 2037 Walnut #6
932 S: Boulder, Colorado 80302 932 S: Boulder, Colorado 80302
933 S: USA 933 S: USA
934 934
935 N: Heiko Eissfeldt 935 N: Heiko Eissfeldt
936 E: heiko@colossus.escape.de heiko@unifix.de 936 E: heiko@colossus.escape.de heiko@unifix.de
937 D: verify_area stuff, generic SCSI fixes 937 D: verify_area stuff, generic SCSI fixes
938 D: SCSI Programming HOWTO 938 D: SCSI Programming HOWTO
939 D: POSIX.1 compliance testing 939 D: POSIX.1 compliance testing
940 S: Unifix Software GmbH 940 S: Unifix Software GmbH
941 S: Bueltenweg 27a 941 S: Bueltenweg 27a
942 S: D-38106 Braunschweig 942 S: D-38106 Braunschweig
943 S: Germany 943 S: Germany
944 944
945 N: Bjorn Ekwall 945 N: Bjorn Ekwall
946 E: bj0rn@blox.se 946 E: bj0rn@blox.se
947 W: http://www.pi.se/blox/ 947 W: http://www.pi.se/blox/
948 D: Extended support for loadable modules 948 D: Extended support for loadable modules
949 D: D-Link pocket adapter drivers 949 D: D-Link pocket adapter drivers
950 S: Brevia 1043 950 S: Brevia 1043
951 S: S-114 79 Stockholm 951 S: S-114 79 Stockholm
952 S: Sweden 952 S: Sweden
953 953
954 N: David Engebretsen 954 N: David Engebretsen
955 E: engebret@us.ibm.com 955 E: engebret@us.ibm.com
956 D: Linux port to 64-bit PowerPC architecture 956 D: Linux port to 64-bit PowerPC architecture
957 957
958 N: Michael Engel 958 N: Michael Engel
959 E: engel@unix-ag.org 959 E: engel@unix-ag.org
960 D: DECstation framebuffer drivers 960 D: DECstation framebuffer drivers
961 S: Germany 961 S: Germany
962 962
963 N: Paal-Kristian Engstad 963 N: Paal-Kristian Engstad
964 E: engstad@intermetrics.com 964 E: engstad@intermetrics.com
965 D: Kernel smbfs (to mount WfW, NT and OS/2 network drives.) 965 D: Kernel smbfs (to mount WfW, NT and OS/2 network drives.)
966 S: 17101 Springdale Street #225 966 S: 17101 Springdale Street #225
967 S: Huntington Beach, California 92649 967 S: Huntington Beach, California 92649
968 S: USA 968 S: USA
969 969
970 N: Stephane Eranian 970 N: Stephane Eranian
971 E: eranian@hpl.hp.com 971 E: eranian@hpl.hp.com
972 D: Linux/ia64 972 D: Linux/ia64
973 S: 1501 Page Mill Rd, MS 1U17 973 S: 1501 Page Mill Rd, MS 1U17
974 S: Palo Alto, CA 94304 974 S: Palo Alto, CA 94304
975 S: USA 975 S: USA
976 976
977 N: Johannes Erdfelt 977 N: Johannes Erdfelt
978 E: johannes@erdfelt.com 978 E: johannes@erdfelt.com
979 D: Linux/IA-64 bootloader and kernel goop, USB 979 D: Linux/IA-64 bootloader and kernel goop, USB
980 S: 6350 Stoneridge Mall Road 980 S: 6350 Stoneridge Mall Road
981 S: Pleasanton, CA 94588 981 S: Pleasanton, CA 94588
982 S: USA 982 S: USA
983 983
984 N: Doug Evans 984 N: Doug Evans
985 E: dje@cygnus.com 985 E: dje@cygnus.com
986 D: Wrote Xenix FS (part of standard kernel since 0.99.15) 986 D: Wrote Xenix FS (part of standard kernel since 0.99.15)
987 987
988 N: Riccardo Facchetti 988 N: Riccardo Facchetti
989 E: fizban@tin.it 989 E: fizban@tin.it
990 P: 1024/6E657BB5 AF 22 90 33 78 76 04 8B AF F9 97 1E B5 E2 65 30 990 P: 1024/6E657BB5 AF 22 90 33 78 76 04 8B AF F9 97 1E B5 E2 65 30
991 D: Audio Excel DSP 16 init driver author 991 D: Audio Excel DSP 16 init driver author
992 D: libmodem author 992 D: libmodem author
993 D: Yet Another Micro Monitor port and current maintainer 993 D: Yet Another Micro Monitor port and current maintainer
994 D: First ELF-HOWTO author 994 D: First ELF-HOWTO author
995 D: random kernel hacker 995 D: random kernel hacker
996 S: Via Paolo VI n.29 996 S: Via Paolo VI n.29
997 S: 23900 - LECCO (Lc) 997 S: 23900 - LECCO (Lc)
998 S: Italy 998 S: Italy
999 999
1000 N: Nils Faerber 1000 N: Nils Faerber
1001 E: nils@kernelconcepts.de 1001 E: nils@kernelconcepts.de
1002 D: i810 TCO watchdog driver author 1002 D: i810 TCO watchdog driver author
1003 D: Mitsumi LU005 tests and fixes 1003 D: Mitsumi LU005 tests and fixes
1004 D: port and fixes of cs46xx sounddriver 1004 D: port and fixes of cs46xx sounddriver
1005 S: Dreisbachstrasse 24 1005 S: Dreisbachstrasse 24
1006 S: D-57250 Netphen 1006 S: D-57250 Netphen
1007 S: Germany 1007 S: Germany
1008 1008
1009 N: Rik Faith 1009 N: Rik Faith
1010 E: faith@acm.org 1010 E: faith@acm.org
1011 D: Future Domain TMC-16x0 SCSI driver (author) 1011 D: Future Domain TMC-16x0 SCSI driver (author)
1012 D: APM driver (early port) 1012 D: APM driver (early port)
1013 D: DRM drivers (author of several) 1013 D: DRM drivers (author of several)
1014 1014
1015 N: Jรกnos Farkas 1015 N: Jรกnos Farkas
1016 E: chexum@shadow.banki.hu 1016 E: chexum@shadow.banki.hu
1017 D: romfs, various (mostly networking) fixes 1017 D: romfs, various (mostly networking) fixes
1018 P: 1024/F81FB2E1 41 B7 E4 E6 3E D4 A6 71 6D 9C F3 9F F2 BF DF 6E 1018 P: 1024/F81FB2E1 41 B7 E4 E6 3E D4 A6 71 6D 9C F3 9F F2 BF DF 6E
1019 S: Madarรกsz Viktor utca 25 1019 S: Madarรกsz Viktor utca 25
1020 S: 1131 Budapest 1020 S: 1131 Budapest
1021 S: Hungary 1021 S: Hungary
1022 1022
1023 N: Ben Fennema 1023 N: Ben Fennema
1024 E: bfennema@falcon.csc.calpoly.edu 1024 E: bfennema@falcon.csc.calpoly.edu
1025 W: http://www.csc.calpoly.edu/~bfennema 1025 W: http://www.csc.calpoly.edu/~bfennema
1026 D: UDF filesystem 1026 D: UDF filesystem
1027 S: (ask for current address) 1027 S: (ask for current address)
1028 S: USA 1028 S: USA
1029 1029
1030 N: Jรผrgen Fischer 1030 N: Jรผrgen Fischer
1031 E: fischer@norbit.de (=?iso-8859-1?q?J=FCrgen?= Fischer) 1031 E: fischer@norbit.de (=?iso-8859-1?q?J=FCrgen?= Fischer)
1032 D: Author of Adaptec AHA-152x SCSI driver 1032 D: Author of Adaptec AHA-152x SCSI driver
1033 S: SchulstraรŸe 18 1033 S: SchulstraรŸe 18
1034 S: 26506 Norden 1034 S: 26506 Norden
1035 S: Germany 1035 S: Germany
1036 1036
1037 N: Jeremy Fitzhardinge 1037 N: Jeremy Fitzhardinge
1038 E: jeremy@goop.org 1038 E: jeremy@goop.org
1039 W: http://www.goop.org/~jeremy 1039 W: http://www.goop.org/~jeremy
1040 D: author of userfs filesystem 1040 D: author of userfs filesystem
1041 D: Improved mmap and munmap handling 1041 D: Improved mmap and munmap handling
1042 D: General mm minor tidyups 1042 D: General mm minor tidyups
1043 D: autofs v4 maintainer 1043 D: autofs v4 maintainer
1044 S: 987 Alabama St 1044 S: 987 Alabama St
1045 S: San Francisco 1045 S: San Francisco
1046 S: CA, 94110 1046 S: CA, 94110
1047 S: USA 1047 S: USA
1048 1048
1049 N: Ralf Flaxa 1049 N: Ralf Flaxa
1050 E: rfflaxa@immd4.informatik.uni-erlangen.de 1050 E: rfflaxa@immd4.informatik.uni-erlangen.de
1051 D: The Linux Support Team Erlangen 1051 D: The Linux Support Team Erlangen
1052 D: Creator of LST distribution 1052 D: Creator of LST distribution
1053 D: Author of installation tool LISA 1053 D: Author of installation tool LISA
1054 S: Pfitznerweg 6 1054 S: Pfitznerweg 6
1055 S: 74523 Schwaebisch Hall 1055 S: 74523 Schwaebisch Hall
1056 S: Germany 1056 S: Germany
1057 1057
1058 N: Lawrence Foard 1058 N: Lawrence Foard
1059 E: entropy@world.std.com 1059 E: entropy@world.std.com
1060 D: Floppy track reading, fs code 1060 D: Floppy track reading, fs code
1061 S: 217 Park Avenue, Suite 108 1061 S: 217 Park Avenue, Suite 108
1062 S: Worcester, Massachusetts 01609 1062 S: Worcester, Massachusetts 01609
1063 S: USA 1063 S: USA
1064 1064
1065 N: Karl Fogel 1065 N: Karl Fogel
1066 E: kfogel@cs.oberlin.edu 1066 E: kfogel@cs.oberlin.edu
1067 D: Contributor, Linux User's Guide 1067 D: Contributor, Linux User's Guide
1068 S: 1123 North Oak Park Avenue 1068 S: 1123 North Oak Park Avenue
1069 S: Oak Park, Illinois 60302 1069 S: Oak Park, Illinois 60302
1070 S: USA 1070 S: USA
1071 1071
1072 N: Daniel J. Frasnelli 1072 N: Daniel J. Frasnelli
1073 E: dfrasnel@alphalinux.org 1073 E: dfrasnel@alphalinux.org
1074 W: http://www.alphalinux.org/ 1074 W: http://www.alphalinux.org/
1075 P: 1024/3EF87611 B9 F1 44 50 D3 E8 C2 80 DA E5 55 AA 56 7C 42 DA 1075 P: 1024/3EF87611 B9 F1 44 50 D3 E8 C2 80 DA E5 55 AA 56 7C 42 DA
1076 D: DEC Alpha hacker 1076 D: DEC Alpha hacker
1077 D: Miscellaneous bug squisher 1077 D: Miscellaneous bug squisher
1078 1078
1079 N: Jim Freeman 1079 N: Jim Freeman
1080 E: jfree@sovereign.org 1080 E: jfree@sovereign.org
1081 W: http://www.sovereign.org/ 1081 W: http://www.sovereign.org/
1082 D: Initial GPL'd Frame Relay driver 1082 D: Initial GPL'd Frame Relay driver
1083 D: Dynamic PPP devices 1083 D: Dynamic PPP devices
1084 D: Sundry modularizations (PPP, IPX, ...) and fixes 1084 D: Sundry modularizations (PPP, IPX, ...) and fixes
1085 1085
1086 N: Bob Frey 1086 N: Bob Frey
1087 E: bobf@advansys.com 1087 E: bobf@advansys.com
1088 D: AdvanSys SCSI driver 1088 D: AdvanSys SCSI driver
1089 S: 1150 Ringwood Court 1089 S: 1150 Ringwood Court
1090 S: San Jose, California 95131 1090 S: San Jose, California 95131
1091 S: USA 1091 S: USA
1092 1092
1093 N: Fernando Fuganti 1093 N: Fernando Fuganti
1094 E: fuganti@conectiva.com.br 1094 E: fuganti@conectiva.com.br
1095 E: fuganti@netbank.com.br 1095 E: fuganti@netbank.com.br
1096 D: random kernel hacker, ZF MachZ Watchdog driver 1096 D: random kernel hacker, ZF MachZ Watchdog driver
1097 S: Conectiva S.A. 1097 S: Conectiva S.A.
1098 S: R. Tocantins, 89 - Cristo Rei 1098 S: R. Tocantins, 89 - Cristo Rei
1099 S: 80050-430 - Curitiba - Paranรก 1099 S: 80050-430 - Curitiba - Paranรก
1100 S: Brazil 1100 S: Brazil
1101 1101
1102 N: Kumar Gala 1102 N: Kumar Gala
1103 E: galak@kernel.crashing.org 1103 E: galak@kernel.crashing.org
1104 D: Embedded PowerPC 6xx/7xx/74xx/82xx/83xx/85xx support 1104 D: Embedded PowerPC 6xx/7xx/74xx/82xx/83xx/85xx support
1105 S: Austin, Texas 78729 1105 S: Austin, Texas 78729
1106 S: USA 1106 S: USA
1107 1107
1108 N: Nigel Gamble 1108 N: Nigel Gamble
1109 E: nigel@nrg.org 1109 E: nigel@nrg.org
1110 D: Interrupt-driven printer driver 1110 D: Interrupt-driven printer driver
1111 D: Preemptible kernel 1111 D: Preemptible kernel
1112 S: 120 Alley Way 1112 S: 120 Alley Way
1113 S: Mountain View, California 94040 1113 S: Mountain View, California 94040
1114 S: USA 1114 S: USA
1115 1115
1116 N: Jeff Garzik 1116 N: Jeff Garzik
1117 E: jgarzik@pobox.com 1117 E: jgarzik@pobox.com
1118 1118
1119 N: Jacques Gelinas 1119 N: Jacques Gelinas
1120 E: jacques@solucorp.qc.ca 1120 E: jacques@solucorp.qc.ca
1121 D: Author of the Umsdos file system 1121 D: Author of the Umsdos file system
1122 S: 1326 De Val-Brillant 1122 S: 1326 De Val-Brillant
1123 S: Laval, Quebec 1123 S: Laval, Quebec
1124 S: Canada H7Y 1V9 1124 S: Canada H7Y 1V9
1125 1125
1126 N: David Gentzel 1126 N: David Gentzel
1127 E: gentzel@telerama.lm.com 1127 E: gentzel@telerama.lm.com
1128 D: Original BusLogic driver and original UltraStor driver 1128 D: Original BusLogic driver and original UltraStor driver
1129 S: Whitfield Software Services 1129 S: Whitfield Software Services
1130 S: 600 North Bell Avenue, Suite 160 1130 S: 600 North Bell Avenue, Suite 160
1131 S: Carnegie, Pennsylvania 15106-4304 1131 S: Carnegie, Pennsylvania 15106-4304
1132 S: USA 1132 S: USA
1133 1133
1134 N: Philip Gladstone 1134 N: Philip Gladstone
1135 E: philip@gladstonefamily.net 1135 E: philip@gladstonefamily.net
1136 D: Kernel / timekeeping stuff 1136 D: Kernel / timekeeping stuff
1137 S: Carlisle, MA 01741 1137 S: Carlisle, MA 01741
1138 S: USA 1138 S: USA
1139 1139
1140 N: Jan-Benedict Glaw 1140 N: Jan-Benedict Glaw
1141 E: jbglaw@lug-owl.de 1141 E: jbglaw@lug-owl.de
1142 D: SRM environment driver (for Alpha systems) 1142 D: SRM environment driver (for Alpha systems)
1143 P: 1024D/8399E1BB 250D 3BCF 7127 0D8C A444 A961 1DBD 5E75 8399 E1BB 1143 P: 1024D/8399E1BB 250D 3BCF 7127 0D8C A444 A961 1DBD 5E75 8399 E1BB
1144 1144
1145 N: Thomas Gleixner 1145 N: Thomas Gleixner
1146 E: tglx@linutronix.de 1146 E: tglx@linutronix.de
1147 D: NAND flash hardware support, JFFS2 on NAND flash 1147 D: NAND flash hardware support, JFFS2 on NAND flash
1148 1148
1149 N: Richard E. Gooch 1149 N: Richard E. Gooch
1150 E: rgooch@atnf.csiro.au 1150 E: rgooch@atnf.csiro.au
1151 D: parent process death signal to children 1151 D: parent process death signal to children
1152 D: prctl() syscall 1152 D: prctl() syscall
1153 D: /proc/mtrr support to manipulate MTRRs on Intel P6 family 1153 D: /proc/mtrr support to manipulate MTRRs on Intel P6 family
1154 D: Device FileSystem (devfs) 1154 D: Device FileSystem (devfs)
1155 S: CSIRO Australia Telescope National Facility 1155 S: CSIRO Australia Telescope National Facility
1156 S: P.O. Box 76, Epping 1156 S: P.O. Box 76, Epping
1157 S: New South Wales, 2121 1157 S: New South Wales, 2121
1158 S: Australia 1158 S: Australia
1159 1159
1160 N: Carlos E. Gorges 1160 N: Carlos E. Gorges
1161 E: carlos@techlinux.com.br 1161 E: carlos@techlinux.com.br
1162 D: fix smp support on cmpci driver 1162 D: fix smp support on cmpci driver
1163 P: 2048G/EA3C4B19 FF31 33A6 0362 4915 B7EB E541 17D0 0379 EA3C 4B19 1163 P: 2048G/EA3C4B19 FF31 33A6 0362 4915 B7EB E541 17D0 0379 EA3C 4B19
1164 S: Brazil 1164 S: Brazil
1165 1165
1166 N: Dmitry S. Gorodchanin 1166 N: Dmitry S. Gorodchanin
1167 E: pgmdsg@ibi.com 1167 E: pgmdsg@ibi.com
1168 D: RISCom/8 driver, misc kernel fixes. 1168 D: RISCom/8 driver, misc kernel fixes.
1169 S: 4 Main Street 1169 S: 4 Main Street
1170 S: Woodbridge, Connecticut 06525 1170 S: Woodbridge, Connecticut 06525
1171 S: USA 1171 S: USA
1172 1172
1173 N: Paul Gortmaker 1173 N: Paul Gortmaker
1174 E: p_gortmaker@yahoo.com 1174 E: p_gortmaker@yahoo.com
1175 D: Author of RTC driver & several net drivers, Ethernet & BootPrompt Howto. 1175 D: Author of RTC driver & several net drivers, Ethernet & BootPrompt Howto.
1176 D: Made support for modules, ramdisk, generic-serial, etc. optional. 1176 D: Made support for modules, ramdisk, generic-serial, etc. optional.
1177 D: Transformed old user space bdflush into 1st kernel thread - kflushd. 1177 D: Transformed old user space bdflush into 1st kernel thread - kflushd.
1178 D: Many other patches, documentation files, mini kernels, utilities, ... 1178 D: Many other patches, documentation files, mini kernels, utilities, ...
1179 1179
1180 N: Masanori GOTO 1180 N: Masanori GOTO
1181 E: gotom@debian.or.jp 1181 E: gotom@debian.or.jp
1182 D: Workbit NinjaSCSI-32Bi/UDE driver 1182 D: Workbit NinjaSCSI-32Bi/UDE driver
1183 S: Japan 1183 S: Japan
1184 1184
1185 N: John E. Gotts 1185 N: John E. Gotts
1186 E: jgotts@linuxsavvy.com 1186 E: jgotts@linuxsavvy.com
1187 D: kernel hacker 1187 D: kernel hacker
1188 S: 8124 Constitution Apt. 7 1188 S: 8124 Constitution Apt. 7
1189 S: Sterling Heights, Michigan 48313 1189 S: Sterling Heights, Michigan 48313
1190 S: USA 1190 S: USA
1191 1191
1192 N: William Greathouse 1192 N: William Greathouse
1193 E: wgreathouse@smva.com 1193 E: wgreathouse@smva.com
1194 E: wgreathouse@myfavoritei.com 1194 E: wgreathouse@myfavoritei.com
1195 D: Current Belkin USB Serial Adapter F5U103 hacker 1195 D: Current Belkin USB Serial Adapter F5U103 hacker
1196 D: Kernel hacker, embedded systems 1196 D: Kernel hacker, embedded systems
1197 S: 7802 Fitzwater Road 1197 S: 7802 Fitzwater Road
1198 S: Brecksville, OH 44141-1334 1198 S: Brecksville, OH 44141-1334
1199 S: USA 1199 S: USA
1200 1200
1201 N: Tristan Greaves 1201 N: Tristan Greaves
1202 E: tristan@extricate.org 1202 E: tristan@extricate.org
1203 W: http://www.extricate.org/ 1203 W: http://www.extricate.org/
1204 D: Miscellaneous ipv4 sysctl patches 1204 D: Miscellaneous ipv4 sysctl patches
1205 1205
1206 N: Michael A. Griffith 1206 N: Michael A. Griffith
1207 E: grif@cs.ucr.edu 1207 E: grif@cs.ucr.edu
1208 W: http://www.cs.ucr.edu/~grif 1208 W: http://www.cs.ucr.edu/~grif
1209 D: Loopback speedup, qlogic SCSI hacking, VT_LOCKSWITCH 1209 D: Loopback speedup, qlogic SCSI hacking, VT_LOCKSWITCH
1210 S: Department of Computer Science 1210 S: Department of Computer Science
1211 S: University of California, Riverside 1211 S: University of California, Riverside
1212 S: Riverside, California 92521-0304 1212 S: Riverside, California 92521-0304
1213 S: USA 1213 S: USA
1214 1214
1215 N: Hans Grobler 1215 N: Hans Grobler
1216 E: grobh@sun.ac.za 1216 E: grobh@sun.ac.za
1217 D: Various AX.25/ROSE/NETROM + hamradio driver patches 1217 D: Various AX.25/ROSE/NETROM + hamradio driver patches
1218 D: Various X.25/LABP + driver patches 1218 D: Various X.25/LABP + driver patches
1219 D: Misc kernel fixes and updates 1219 D: Misc kernel fixes and updates
1220 S: Department of Electronic Engineering 1220 S: Department of Electronic Engineering
1221 S: University of Stellenbosch 1221 S: University of Stellenbosch
1222 S: Stellenbosch, Western Cape 1222 S: Stellenbosch, Western Cape
1223 S: South Africa 1223 S: South Africa
1224 1224
1225 N: Grant Grundler 1225 N: Grant Grundler
1226 E: grundler@parisc-linux.org 1226 E: grundler@parisc-linux.org
1227 W: http://obmouse.sourceforge.net/ 1227 W: http://obmouse.sourceforge.net/
1228 W: http://www.parisc-linux.org/ 1228 W: http://www.parisc-linux.org/
1229 D: obmouse - rewrote Olivier Florent's Omnibook 600 "pop-up" mouse driver 1229 D: obmouse - rewrote Olivier Florent's Omnibook 600 "pop-up" mouse driver
1230 D: PA-RISC - Interrupt/PCI HBA/IOMMU author and architect 1230 D: PA-RISC - Interrupt/PCI HBA/IOMMU author and architect
1231 S: Mountain View, California 1231 S: Mountain View, California
1232 S: USA 1232 S: USA
1233 1233
1234 N: Grant Guenther 1234 N: Grant Guenther
1235 E: grant@torque.net 1235 E: grant@torque.net
1236 W: http://www.torque.net/linux-pp.html 1236 W: http://www.torque.net/linux-pp.html
1237 D: original author of ppa driver for parallel port ZIP drive 1237 D: original author of ppa driver for parallel port ZIP drive
1238 D: original architect of the parallel-port sharing scheme 1238 D: original architect of the parallel-port sharing scheme
1239 D: PARIDE subsystem: drivers for parallel port IDE & ATAPI devices 1239 D: PARIDE subsystem: drivers for parallel port IDE & ATAPI devices
1240 S: 44 St. Joseph Street, Suite 506 1240 S: 44 St. Joseph Street, Suite 506
1241 S: Toronto, Ontario, M4Y 2W4 1241 S: Toronto, Ontario, M4Y 2W4
1242 S: Canada 1242 S: Canada
1243 1243
1244 N: Richard Gรผnther 1244 N: Richard Gรผnther
1245 E: rguenth@tat.physik.uni-tuebingen.de 1245 E: rguenth@tat.physik.uni-tuebingen.de
1246 W: http://www.tat.physik.uni-tuebingen.de/~rguenth 1246 W: http://www.tat.physik.uni-tuebingen.de/~rguenth
1247 P: 2048/2E829319 2F 83 FC 93 E9 E4 19 E2 93 7A 32 42 45 37 23 57 1247 P: 2048/2E829319 2F 83 FC 93 E9 E4 19 E2 93 7A 32 42 45 37 23 57
1248 D: binfmt_misc 1248 D: binfmt_misc
1249 S: 72074 Tรผbingen 1249 S: 72074 Tรผbingen
1250 S: Germany 1250 S: Germany
1251 1251
1252 N: Justin Guyett 1252 N: Justin Guyett
1253 E: jguyett@andrew.cmu.edu 1253 E: jguyett@andrew.cmu.edu
1254 D: via-rhine net driver hacking 1254 D: via-rhine net driver hacking
1255 1255
1256 N: Danny ter Haar 1256 N: Danny ter Haar
1257 E: dth@cistron.nl 1257 E: dth@cistron.nl
1258 D: /proc/cpuinfo, reboot on panic , kernel pre-patch tester ;) 1258 D: /proc/cpuinfo, reboot on panic , kernel pre-patch tester ;)
1259 S: Cistron 1259 S: Cistron
1260 S: PO-Box 297 1260 S: PO-Box 297
1261 S: 2400 AG, Alphen aan den Rijn 1261 S: 2400 AG, Alphen aan den Rijn
1262 S: The Netherlands 1262 S: The Netherlands
1263 1263
1264 N: Enver Haase 1264 N: Enver Haase
1265 E: ehaase@inf.fu-berlin.de 1265 E: ehaase@inf.fu-berlin.de
1266 W: http://www.inf.fu-berlin.de/~ehaase 1266 W: http://www.inf.fu-berlin.de/~ehaase
1267 D: Driver for the Commodore A2232 serial board 1267 D: Driver for the Commodore A2232 serial board
1268 1268
1269 N: Bruno Haible 1269 N: Bruno Haible
1270 E: haible@ma2s2.mathematik.uni-karlsruhe.de 1270 E: haible@ma2s2.mathematik.uni-karlsruhe.de
1271 D: SysV FS, shm swapping, memory management fixes 1271 D: SysV FS, shm swapping, memory management fixes
1272 S: 17 rue Danton 1272 S: 17 rue Danton
1273 S: F - 94270 Le Kremlin-Bicรชtre 1273 S: F - 94270 Le Kremlin-Bicรชtre
1274 S: France 1274 S: France
1275 1275
1276 N: Greg Hankins 1276 N: Greg Hankins
1277 E: gregh@cc.gatech.edu 1277 E: gregh@cc.gatech.edu
1278 D: fixed keyboard driver to separate LED and locking status 1278 D: fixed keyboard driver to separate LED and locking status
1279 S: 25360 Georgia Tech Station 1279 S: 25360 Georgia Tech Station
1280 S: Atlanta, Georgia 30332 1280 S: Atlanta, Georgia 30332
1281 S: USA 1281 S: USA
1282 1282
1283 N: Brad Hards 1283 N: Brad Hards
1284 E: bradh@frogmouth.net 1284 E: bradh@frogmouth.net
1285 D: Various USB bits, other minor patches 1285 D: Various USB bits, other minor patches
1286 1286
1287 N: Angelo Haritsis 1287 N: Angelo Haritsis
1288 E: ah@computer.org 1288 E: ah@computer.org
1289 D: kernel patches (serial, watchdog) 1289 D: kernel patches (serial, watchdog)
1290 D: xringd, vuzkern, greekXfonts 1290 D: xringd, vuzkern, greekXfonts
1291 S: 77 Clarence Mews 1291 S: 77 Clarence Mews
1292 S: London SE16 1GD 1292 S: London SE16 1GD
1293 S: United Kingdom 1293 S: United Kingdom
1294 1294
1295 N: Jan Harkes 1295 N: Jan Harkes
1296 E: jaharkes@cs.cmu.edu 1296 E: jaharkes@cs.cmu.edu
1297 W: http://www.coda.cs.cmu.edu/ 1297 W: http://www.coda.cs.cmu.edu/
1298 D: Coda file system 1298 D: Coda file system
1299 S: Computer Science Department 1299 S: Computer Science Department
1300 S: Carnegie Mellon University 1300 S: Carnegie Mellon University
1301 S: 5000 Forbes Avenue 1301 S: 5000 Forbes Avenue
1302 S: Pittsburgh, Pennsylvania 15213 1302 S: Pittsburgh, Pennsylvania 15213
1303 S: USA 1303 S: USA
1304 1304
1305 N: Kai Harrekilde-Petersen 1305 N: Kai Harrekilde-Petersen
1306 E: kai.harrekilde@get2net.dk 1306 E: kai.harrekilde@get2net.dk
1307 D: Original author of the ftape-HOWTO, i82078 fdc detection code. 1307 D: Original author of the ftape-HOWTO, i82078 fdc detection code.
1308 1308
1309 N: Bart Hartgers 1309 N: Bart Hartgers
1310 E: bart@etpmod.phys.tue.nl 1310 E: bart@etpmod.phys.tue.nl
1311 D: MTRR emulation with Centaur MCRs 1311 D: MTRR emulation with Centaur MCRs
1312 S: Gen Stedmanstraat 212 1312 S: Gen Stedmanstraat 212
1313 S: 5623 HZ Eindhoven 1313 S: 5623 HZ Eindhoven
1314 S: The Netherlands 1314 S: The Netherlands
1315 1315
1316 N: Andrew Haylett 1316 N: Andrew Haylett
1317 E: ajh@primag.co.uk 1317 E: ajh@primag.co.uk
1318 D: Selection mechanism 1318 D: Selection mechanism
1319 1319
1320 N: Andre Hedrick 1320 N: Andre Hedrick
1321 E: andre@linux-ide.org 1321 E: andre@linux-ide.org
1322 E: andre@linuxdiskcert.org 1322 E: andre@linuxdiskcert.org
1323 W: http://www.linux-ide.org/ 1323 W: http://www.linux-ide.org/
1324 W: http://www.linuxdiskcert.org/ 1324 W: http://www.linuxdiskcert.org/
1325 D: Random SMP kernel hacker... 1325 D: Random SMP kernel hacker...
1326 D: Uniform Multi-Platform E-IDE driver 1326 D: Uniform Multi-Platform E-IDE driver
1327 D: Active-ATA-Chipset maddness.......... 1327 D: Active-ATA-Chipset maddness..........
1328 D: Ultra DMA 133/100/66/33 w/48-bit Addressing 1328 D: Ultra DMA 133/100/66/33 w/48-bit Addressing
1329 D: ATA-Disconnect, ATA-TCQ 1329 D: ATA-Disconnect, ATA-TCQ
1330 D: ATA-Smart Kernel Daemon 1330 D: ATA-Smart Kernel Daemon
1331 D: Serial ATA 1331 D: Serial ATA
1332 D: ATA Command Block and Taskfile 1332 D: ATA Command Block and Taskfile
1333 S: Linux ATA Development (LAD) 1333 S: Linux ATA Development (LAD)
1334 S: Concord, CA 1334 S: Concord, CA
1335 1335
1336 N: Jochen Hein 1336 N: Jochen Hein
1337 E: jochen@jochen.org 1337 E: jochen@jochen.org
1338 P: 1024/4A27F015 25 72 FB E3 85 9F DE 3B CB 0A DA DA 40 77 05 6C 1338 P: 1024/4A27F015 25 72 FB E3 85 9F DE 3B CB 0A DA DA 40 77 05 6C
1339 P: 1024D/77D4FC9B F5C5 1C20 1DFC DEC3 3107 54A4 2332 ADFC 77D4 FC9B 1339 P: 1024D/77D4FC9B F5C5 1C20 1DFC DEC3 3107 54A4 2332 ADFC 77D4 FC9B
1340 D: National Language Support 1340 D: National Language Support
1341 D: Linux Internationalization Project 1341 D: Linux Internationalization Project
1342 D: German Localization for Linux and GNU software 1342 D: German Localization for Linux and GNU software
1343 S: Kriemhildring 12a 1343 S: Kriemhildring 12a
1344 S: 65795 Hattersheim am Main 1344 S: 65795 Hattersheim am Main
1345 S: Germany 1345 S: Germany
1346 1346
1347 N: Christoph Hellwig 1347 N: Christoph Hellwig
1348 E: hch@infradead.org 1348 E: hch@infradead.org
1349 D: all kinds of driver, filesystem & core kernel hacking 1349 D: all kinds of driver, filesystem & core kernel hacking
1350 D: freevxfs driver 1350 D: freevxfs driver
1351 D: sysvfs maintainer 1351 D: sysvfs maintainer
1352 D: chief codingstyle nitpicker 1352 D: chief codingstyle nitpicker
1353 S: Ampferstr. 50 / 4 1353 S: Ampferstr. 50 / 4
1354 S: 6020 Innsbruck 1354 S: 6020 Innsbruck
1355 S: Austria 1355 S: Austria
1356 1356
1357 N: Richard Henderson 1357 N: Richard Henderson
1358 E: rth@twiddle.net 1358 E: rth@twiddle.net
1359 E: rth@cygnus.com 1359 E: rth@cygnus.com
1360 D: Alpha hacker, kernel and userland 1360 D: Alpha hacker, kernel and userland
1361 S: 1668 California St. 1361 S: 1668 California St.
1362 S: Mountain View, California 94041 1362 S: Mountain View, California 94041
1363 S: USA 1363 S: USA
1364 1364
1365 N: Benjamin Herrenschmidt 1365 N: Benjamin Herrenschmidt
1366 E: benh@kernel.crashing.org 1366 E: benh@kernel.crashing.org
1367 D: Various parts of PPC/PPC64 & PowerMac 1367 D: Various parts of PPC/PPC64 & PowerMac
1368 S: 312/107 Canberra Avenue 1368 S: 312/107 Canberra Avenue
1369 S: Griffith, ACT 2603 1369 S: Griffith, ACT 2603
1370 S: Australia 1370 S: Australia
1371 1371
1372 N: Sebastian Hetze 1372 N: Sebastian Hetze
1373 E: she@lunetix.de 1373 E: she@lunetix.de
1374 D: German Linux Documentation, 1374 D: German Linux Documentation,
1375 D: Organization of German Linux Conferences 1375 D: Organization of German Linux Conferences
1376 S: Danckelmannstr. 48 1376 S: Danckelmannstr. 48
1377 S: 14059 Berlin 1377 S: 14059 Berlin
1378 S: Germany 1378 S: Germany
1379 1379
1380 N: David Hinds 1380 N: David Hinds
1381 E: dahinds@users.sourceforge.net 1381 E: dahinds@users.sourceforge.net
1382 W: http://tao.stanford.edu/~dhinds 1382 W: http://tao.stanford.edu/~dhinds
1383 D: PCMCIA and CardBus stuff, PCMCIA-HOWTO, PCMCIA client drivers 1383 D: PCMCIA and CardBus stuff, PCMCIA-HOWTO, PCMCIA client drivers
1384 S: 2019 W. Middlefield Rd #1 1384 S: 2019 W. Middlefield Rd #1
1385 S: Mountain View, CA 94043 1385 S: Mountain View, CA 94043
1386 S: USA 1386 S: USA
1387 1387
1388 N: Michael Hipp 1388 N: Michael Hipp
1389 E: hippm@informatik.uni-tuebingen.de 1389 E: hippm@informatik.uni-tuebingen.de
1390 D: drivers for the racal ni5210 & ni6510 Ethernet-boards 1390 D: drivers for the racal ni5210 & ni6510 Ethernet-boards
1391 S: Talstr. 1 1391 S: Talstr. 1
1392 S: D - 72072 Tuebingen 1392 S: D - 72072 Tuebingen
1393 S: Germany 1393 S: Germany
1394 1394
1395 N: Richard Hirst 1395 N: Richard Hirst
1396 E: richard@sleepie.demon.co.uk 1396 E: richard@sleepie.demon.co.uk
1397 E: rhirst@linuxcare.com 1397 E: rhirst@linuxcare.com
1398 W: http://www.sleepie.demon.co.uk/ 1398 W: http://www.sleepie.demon.co.uk/
1399 D: linux-m68k VME support 1399 D: linux-m68k VME support
1400 D: PA-RISC port, scsi and network drivers 1400 D: PA-RISC port, scsi and network drivers
1401 D: 53c700/53c710 driver author, 82596 driver maintainer 1401 D: 53c700/53c710 driver author, 82596 driver maintainer
1402 S: United Kingdom 1402 S: United Kingdom
1403 1403
1404 N: Jauder Ho 1404 N: Jauder Ho
1405 E: jauderho@carumba.com 1405 E: jauderho@carumba.com
1406 W: http://www.carumba.com/ 1406 W: http://www.carumba.com/
1407 D: bug toaster (A1 sauce makes all the difference) 1407 D: bug toaster (A1 sauce makes all the difference)
1408 D: Random linux hacker 1408 D: Random linux hacker
1409 1409
1410 N: Tim Hockin 1410 N: Tim Hockin
1411 E: thockin@hockin.org 1411 E: thockin@hockin.org
1412 W: http://www.hockin.org/~thockin 1412 W: http://www.hockin.org/~thockin
1413 D: Natsemi ethernet 1413 D: Natsemi ethernet
1414 D: Cobalt Networks (x86) support 1414 D: Cobalt Networks (x86) support
1415 D: This-and-That 1415 D: This-and-That
1416 1416
1417 N: Dirk Hohndel 1417 N: Dirk Hohndel
1418 E: hohndel@suse.de 1418 E: hohndel@suse.de
1419 D: The XFree86[tm] Project 1419 D: The XFree86[tm] Project
1420 D: USB mouse maintainer 1420 D: USB mouse maintainer
1421 S: SuSE Rhein/Main AG 1421 S: SuSE Rhein/Main AG
1422 S: Mergenthalerallee 45-47 1422 S: Mergenthalerallee 45-47
1423 S: 65760 Eschborn 1423 S: 65760 Eschborn
1424 S: Germany 1424 S: Germany
1425 1425
1426 N: Kenji Hollis 1426 N: Kenji Hollis
1427 E: kenji@bitgate.com 1427 E: kenji@bitgate.com
1428 W: http://www.bitgate.com/ 1428 W: http://www.bitgate.com/
1429 D: Berkshire PC Watchdog Driver 1429 D: Berkshire PC Watchdog Driver
1430 D: Small/Industrial Driver Project 1430 D: Small/Industrial Driver Project
1431 1431
1432 N: Nick Holloway 1432 N: Nick Holloway
1433 E: Nick.Holloway@pyrites.org.uk 1433 E: Nick.Holloway@pyrites.org.uk
1434 W: http://www.pyrites.org.uk/ 1434 W: http://www.pyrites.org.uk/
1435 P: 1024/36115A04 F4E1 3384 FCFD C055 15D6 BA4C AB03 FBF8 3611 5A04 1435 P: 1024/36115A04 F4E1 3384 FCFD C055 15D6 BA4C AB03 FBF8 3611 5A04
1436 D: Occasional Linux hacker... 1436 D: Occasional Linux hacker...
1437 S: (ask for current address) 1437 S: (ask for current address)
1438 S: United Kingdom 1438 S: United Kingdom
1439 1439
1440 N: Ron Holt 1440 N: Ron Holt
1441 E: ron@holt.org 1441 E: ron@holt.org
1442 E: rholt@netcom.com 1442 E: rholt@netcom.com
1443 W: http://www.holt.org/ 1443 W: http://www.holt.org/
1444 W: http://www.ronholt.com/ 1444 W: http://www.ronholt.com/
1445 D: Kernel development 1445 D: Kernel development
1446 D: Kernel LDT modifications to support Wabi and Wine 1446 D: Kernel LDT modifications to support Wabi and Wine
1447 S: Holtron Internetics, Inc. 1447 S: Holtron Internetics, Inc.
1448 S: 998 East 900 South, Suite 26 1448 S: 998 East 900 South, Suite 26
1449 S: Provo, Utah 84606-5607 1449 S: Provo, Utah 84606-5607
1450 S: USA 1450 S: USA
1451 1451
1452 N: Marcel Holtmann 1452 N: Marcel Holtmann
1453 E: marcel@holtmann.org 1453 E: marcel@holtmann.org
1454 W: http://www.holtmann.org 1454 W: http://www.holtmann.org
1455 D: Maintainer of the Linux Bluetooth Subsystem 1455 D: Maintainer of the Linux Bluetooth Subsystem
1456 D: Author and maintainer of the various Bluetooth HCI drivers 1456 D: Author and maintainer of the various Bluetooth HCI drivers
1457 D: Author and maintainer of the CAPI message transport protocol driver 1457 D: Author and maintainer of the CAPI message transport protocol driver
1458 D: Author and maintainer of the Bluetooth HID protocol driver 1458 D: Author and maintainer of the Bluetooth HID protocol driver
1459 D: Various other Bluetooth related patches, cleanups and fixes 1459 D: Various other Bluetooth related patches, cleanups and fixes
1460 S: Germany 1460 S: Germany
1461 1461
1462 N: Rob W. W. Hooft 1462 N: Rob W. W. Hooft
1463 E: hooft@EMBL-Heidelberg.DE 1463 E: hooft@EMBL-Heidelberg.DE
1464 D: Shared libs for graphics-tools and for the f2c compiler 1464 D: Shared libs for graphics-tools and for the f2c compiler
1465 D: Some kernel programming on the floppy and sound drivers in early days 1465 D: Some kernel programming on the floppy and sound drivers in early days
1466 D: Some other hacks to get different kinds of programs to work for linux 1466 D: Some other hacks to get different kinds of programs to work for linux
1467 S: Panoramastrasse 18 1467 S: Panoramastrasse 18
1468 S: D-69126 Heidelberg 1468 S: D-69126 Heidelberg
1469 S: Germany 1469 S: Germany
1470 1470
1471 N: Christopher Horn 1471 N: Christopher Horn
1472 E: chorn@warwick.net 1472 E: chorn@warwick.net
1473 D: Miscellaneous sysctl hacks 1473 D: Miscellaneous sysctl hacks
1474 S: 36 Mudtown Road 1474 S: 36 Mudtown Road
1475 S: Wantage, New Jersey 07461 1475 S: Wantage, New Jersey 07461
1476 S: USA 1476 S: USA
1477 1477
1478 N: Harald Hoyer 1478 N: Harald Hoyer
1479 E: harald.hoyer@parzelle.de 1479 E: harald.hoyer@parzelle.de
1480 W: http://parzelle.de/ 1480 W: http://parzelle.de/
1481 D: ip_masq_quake 1481 D: ip_masq_quake
1482 D: md boot support 1482 D: md boot support
1483 S: Hohe Strasse 30 1483 S: Hohe Strasse 30
1484 S: D-70176 Stuttgart 1484 S: D-70176 Stuttgart
1485 S: Germany 1485 S: Germany
1486 1486
1487 N: Jan Hubicka 1487 N: Jan Hubicka
1488 E: hubicka@freesoft.cz 1488 E: hubicka@freesoft.cz
1489 E: hubicka@suse.cz 1489 E: hubicka@suse.cz
1490 W: http://www.paru.cas.cz/~hubicka/ 1490 W: http://www.paru.cas.cz/~hubicka/
1491 D: Random kernel tweaks and fixes. 1491 D: Random kernel tweaks and fixes.
1492 S: Dukelskych bojovniku 1944 1492 S: Dukelskych bojovniku 1944
1493 S: Tabor 390 03 1493 S: Tabor 390 03
1494 S: Czech Republic 1494 S: Czech Republic
1495 1495
1496 N: David Huggins-Daines 1496 N: David Huggins-Daines
1497 E: dhd@debian.org 1497 E: dhd@debian.org
1498 E: dhd@eradicator.org 1498 E: dhd@eradicator.org
1499 E: dhd@cepstral.com 1499 E: dhd@cepstral.com
1500 D: PA-RISC port 1500 D: PA-RISC port
1501 D: Nubus subsystem 1501 D: Nubus subsystem
1502 D: Generic 68k Macintosh framebuffer driver 1502 D: Generic 68k Macintosh framebuffer driver
1503 D: STI framebuffer tweaks 1503 D: STI framebuffer tweaks
1504 D: LTPC driver tweaks 1504 D: LTPC driver tweaks
1505 S: 110 S. 12th St., Apt. A 1505 S: 110 S. 12th St., Apt. A
1506 S: Pittsburgh, PA 15203-1250 1506 S: Pittsburgh, PA 15203-1250
1507 S: USA 1507 S: USA
1508 1508
1509 N: Gareth Hughes 1509 N: Gareth Hughes
1510 E: gareth.hughes@acm.org 1510 E: gareth.hughes@acm.org
1511 D: Pentium III FXSR, SSE support 1511 D: Pentium III FXSR, SSE support
1512 D: Author/maintainer of most DRM drivers (especially ATI, MGA) 1512 D: Author/maintainer of most DRM drivers (especially ATI, MGA)
1513 D: Core DRM templates, general DRM and 3D-related hacking 1513 D: Core DRM templates, general DRM and 3D-related hacking
1514 S: No fixed address 1514 S: No fixed address
1515 1515
1516 N: Kenn Humborg 1516 N: Kenn Humborg
1517 E: kenn@wombat.ie 1517 E: kenn@wombat.ie
1518 D: Mods to loop device to support sparse backing files 1518 D: Mods to loop device to support sparse backing files
1519 S: Ballinagard 1519 S: Ballinagard
1520 S: Roscommon 1520 S: Roscommon
1521 S: Ireland 1521 S: Ireland
1522 1522
1523 N: Michael Hunold 1523 N: Michael Hunold
1524 E: michael@mihu.de 1524 E: michael@mihu.de
1525 W: http://www.mihu.de/linux/ 1525 W: http://www.mihu.de/linux/
1526 D: Generic saa7146 video4linux-2 driver core, 1526 D: Generic saa7146 video4linux-2 driver core,
1527 D: Driver for the "Multimedia eXtension Board", "dpc7146", 1527 D: Driver for the "Multimedia eXtension Board", "dpc7146",
1528 D: "Hexium Orion", "Hexium Gemini" 1528 D: "Hexium Orion", "Hexium Gemini"
1529 1529
1530 N: Miguel de Icaza Amozurrutia 1530 N: Miguel de Icaza Amozurrutia
1531 E: miguel@nuclecu.unam.mx 1531 E: miguel@nuclecu.unam.mx
1532 D: Linux/SPARC team, Midnight Commander maintainer 1532 D: Linux/SPARC team, Midnight Commander maintainer
1533 S: Avenida Copilco 162, 22-1003 1533 S: Avenida Copilco 162, 22-1003
1534 S: Mexico, DF 1534 S: Mexico, DF
1535 S: Mexico 1535 S: Mexico
1536 1536
1537 N: Ian Jackson 1537 N: Ian Jackson
1538 E: iwj10@cus.cam.ac.uk 1538 E: iwj10@cus.cam.ac.uk
1539 E: ijackson@nyx.cs.du.edu 1539 E: ijackson@nyx.cs.du.edu
1540 D: FAQ maintainer and poster of the daily postings 1540 D: FAQ maintainer and poster of the daily postings
1541 D: FSSTND group member 1541 D: FSSTND group member
1542 D: Debian core team member and maintainer of several Debian packages 1542 D: Debian core team member and maintainer of several Debian packages
1543 S: 2 Lexington Close 1543 S: 2 Lexington Close
1544 S: Cambridge 1544 S: Cambridge
1545 S: CB3 0DS 1545 S: CB3 0DS
1546 S: United Kingdom 1546 S: United Kingdom
1547 1547
1548 N: Andreas Jaeger 1548 N: Andreas Jaeger
1549 E: aj@suse.de 1549 E: aj@suse.de
1550 D: Various smaller kernel fixes 1550 D: Various smaller kernel fixes
1551 D: glibc developer 1551 D: glibc developer
1552 S: Gottfried-Kinkel-Str. 18 1552 S: Gottfried-Kinkel-Str. 18
1553 S: D 67659 Kaiserslautern 1553 S: D 67659 Kaiserslautern
1554 S: Germany 1554 S: Germany
1555 1555
1556 N: Mike Jagdis 1556 N: Mike Jagdis
1557 E: jaggy@purplet.demon.co.uk 1557 E: jaggy@purplet.demon.co.uk
1558 E: Mike.Jagdis@purplet.demon.co.uk 1558 E: Mike.Jagdis@purplet.demon.co.uk
1559 D: iBCS personalities, socket and X interfaces, x.out loader, syscalls... 1559 D: iBCS personalities, socket and X interfaces, x.out loader, syscalls...
1560 D: Purple Distribution maintainer 1560 D: Purple Distribution maintainer
1561 D: UK FidoNet support 1561 D: UK FidoNet support
1562 D: ISODE && PP 1562 D: ISODE && PP
1563 D: Kernel and device driver hacking 1563 D: Kernel and device driver hacking
1564 S: 280 Silverdale Road 1564 S: 280 Silverdale Road
1565 S: Earley 1565 S: Earley
1566 S: Reading 1566 S: Reading
1567 S: RG6 2NU 1567 S: RG6 2NU
1568 S: United Kingdom 1568 S: United Kingdom
1569 1569
1570 N: Jakub Jelinek 1570 N: Jakub Jelinek
1571 E: jakub@redhat.com 1571 E: jakub@redhat.com
1572 W: http://sunsite.mff.cuni.cz/~jj 1572 W: http://sunsite.mff.cuni.cz/~jj
1573 P: 1024/0F7623C5 53 95 71 3C EB 73 99 97 02 49 40 47 F9 19 68 20 1573 P: 1024/0F7623C5 53 95 71 3C EB 73 99 97 02 49 40 47 F9 19 68 20
1574 D: Sparc hacker, SILO, mc 1574 D: Sparc hacker, SILO, mc
1575 D: Maintain sunsite.mff.cuni.cz 1575 D: Maintain sunsite.mff.cuni.cz
1576 S: K osmidomkum 723 1576 S: K osmidomkum 723
1577 S: 160 00 Praha 6 1577 S: 160 00 Praha 6
1578 S: Czech Republic 1578 S: Czech Republic
1579 1579
1580 N: Niels Kristian Bech Jensen 1580 N: Niels Kristian Bech Jensen
1581 E: nkbj1970@hotmail.com 1581 E: nkbj1970@hotmail.com
1582 D: Miscellaneous kernel updates and fixes. 1582 D: Miscellaneous kernel updates and fixes.
1583 1583
1584 N: Michael K. Johnson 1584 N: Michael K. Johnson
1585 E: johnsonm@redhat.com 1585 E: johnsonm@redhat.com
1586 W: http://www.redhat.com/~johnsonm 1586 W: http://www.redhat.com/~johnsonm
1587 P: 1024/4536A8DD 2A EC 88 08 40 64 CE D8 DD F8 12 2B 61 43 83 15 1587 P: 1024/4536A8DD 2A EC 88 08 40 64 CE D8 DD F8 12 2B 61 43 83 15
1588 D: The Linux Documentation Project 1588 D: The Linux Documentation Project
1589 D: Kernel Hackers' Guide 1589 D: Kernel Hackers' Guide
1590 D: Procps 1590 D: Procps
1591 D: Proc filesystem 1591 D: Proc filesystem
1592 D: Maintain tsx-11.mit.edu 1592 D: Maintain tsx-11.mit.edu
1593 D: LP driver 1593 D: LP driver
1594 S: 201 Howell Street, Apartment 1C 1594 S: 201 Howell Street, Apartment 1C
1595 S: Chapel Hill, North Carolina 27514-4818 1595 S: Chapel Hill, North Carolina 27514-4818
1596 S: USA 1596 S: USA
1597 1597
1598 N: Dave Jones 1598 N: Dave Jones
1599 E: davej@codemonkey.org.uk 1599 E: davej@codemonkey.org.uk
1600 W: http://www.codemonkey.org.uk 1600 W: http://www.codemonkey.org.uk
1601 D: x86 errata/setup maintenance. 1601 D: x86 errata/setup maintenance.
1602 D: AGPGART driver. 1602 D: AGPGART driver.
1603 D: CPUFREQ maintenance. 1603 D: CPUFREQ maintenance.
1604 D: Backport/Forwardport merge monkey. 1604 D: Backport/Forwardport merge monkey.
1605 D: Various Janitor work. 1605 D: Various Janitor work.
1606 S: United Kingdom 1606 S: United Kingdom
1607 1607
1608 N: Martin Josfsson 1608 N: Martin Josfsson
1609 E: gandalf@wlug.westbo.se 1609 E: gandalf@wlug.westbo.se
1610 P: 1024D/F6B6D3B1 7610 7CED 5C34 4AA6 DBA2 8BE1 5A6D AF95 F6B6 D3B1 1610 P: 1024D/F6B6D3B1 7610 7CED 5C34 4AA6 DBA2 8BE1 5A6D AF95 F6B6 D3B1
1611 D: netfilter: SAME target 1611 D: netfilter: SAME target
1612 D: netfilter: helper target 1612 D: netfilter: helper target
1613 D: netfilter: various other hacks 1613 D: netfilter: various other hacks
1614 S: Ronneby 1614 S: Ronneby
1615 S: Sweden 1615 S: Sweden
1616 1616
1617 N: Ani Joshi 1617 N: Ani Joshi
1618 E: ajoshi@shell.unixbox.com 1618 E: ajoshi@shell.unixbox.com
1619 D: fbdev hacking 1619 D: fbdev hacking
1620 1620
1621 N: Jesper Juhl 1621 N: Jesper Juhl
1622 E: jesper.juhl@gmail.com 1622 E: jesper.juhl@gmail.com
1623 D: Various fixes, cleanups and minor features all over the tree. 1623 D: Various fixes, cleanups and minor features all over the tree.
1624 D: Wrote initial version of the hdaps driver (since passed on to others). 1624 D: Wrote initial version of the hdaps driver (since passed on to others).
1625 S: Lemnosvej 1, 3.tv 1625 S: Lemnosvej 1, 3.tv
1626 S: 2300 Copenhagen S. 1626 S: 2300 Copenhagen S.
1627 S: Denmark 1627 S: Denmark
1628 1628
1629 N: Jozsef Kadlecsik 1629 N: Jozsef Kadlecsik
1630 E: kadlec@blackhole.kfki.hu 1630 E: kadlec@blackhole.kfki.hu
1631 P: 1024D/470DB964 4CB3 1A05 713E 9BF7 FAC5 5809 DD8C B7B1 470D B964 1631 P: 1024D/470DB964 4CB3 1A05 713E 9BF7 FAC5 5809 DD8C B7B1 470D B964
1632 D: netfilter: TCP window tracking code 1632 D: netfilter: TCP window tracking code
1633 D: netfilter: raw table 1633 D: netfilter: raw table
1634 D: netfilter: iprange match 1634 D: netfilter: iprange match
1635 D: netfilter: new logging interfaces 1635 D: netfilter: new logging interfaces
1636 D: netfilter: various other hacks 1636 D: netfilter: various other hacks
1637 S: Tata 1637 S: Tata
1638 S: Hungary 1638 S: Hungary
1639 1639
1640 N: Bernhard Kaindl 1640 N: Bernhard Kaindl
1641 E: bkaindl@netway.at 1641 E: bkaindl@netway.at
1642 E: edv@bartelt.via.at 1642 E: edv@bartelt.via.at
1643 D: Author of a menu based configuration tool, kmenu, which 1643 D: Author of a menu based configuration tool, kmenu, which
1644 D: is the predecessor of 'make menuconfig' and 'make xconfig'. 1644 D: is the predecessor of 'make menuconfig' and 'make xconfig'.
1645 D: digiboard driver update(modularisation work and 2.1.x upd) 1645 D: digiboard driver update(modularisation work and 2.1.x upd)
1646 S: Tallak 95 1646 S: Tallak 95
1647 S: 8103 Rein 1647 S: 8103 Rein
1648 S: Austria 1648 S: Austria
1649 1649
1650 N: Mitsuru Kanda 1650 N: Mitsuru Kanda
1651 E: mk@linux-ipv6.org 1651 E: mk@linux-ipv6.org
1652 E: mk@isl.rdc.toshiba.co.jp 1652 E: mk@isl.rdc.toshiba.co.jp
1653 E: mk@karaba.org 1653 E: mk@karaba.org
1654 W: http://www.karaba.org/~mk/ 1654 W: http://www.karaba.org/~mk/
1655 P: 1024D/2EC7E30D 4DC3 949B 5A6C F0D6 375F 4472 8888 A8E1 2EC7 E30D 1655 P: 1024D/2EC7E30D 4DC3 949B 5A6C F0D6 375F 4472 8888 A8E1 2EC7 E30D
1656 D: IPsec, IPv6 1656 D: IPsec, IPv6
1657 D: USAGI/WIDE Project, TOSHIBA CORPORATION 1657 D: USAGI/WIDE Project, TOSHIBA CORPORATION
1658 S: 2-47-8, Takinogawa, 1658 S: 2-47-8, Takinogawa,
1659 S: Kita, Tokyo 114-0023 1659 S: Kita, Tokyo 114-0023
1660 S: Japan 1660 S: Japan
1661 1661
1662 N: Jan Kara 1662 N: Jan Kara
1663 E: jack@atrey.karlin.mff.cuni.cz 1663 E: jack@atrey.karlin.mff.cuni.cz
1664 E: jack@suse.cz 1664 E: jack@suse.cz
1665 D: Quota fixes for 2.2 kernel 1665 D: Quota fixes for 2.2 kernel
1666 D: Quota fixes for 2.3 kernel 1666 D: Quota fixes for 2.3 kernel
1667 D: Few other fixes in filesystem area (buffer cache, isofs, loopback) 1667 D: Few other fixes in filesystem area (buffer cache, isofs, loopback)
1668 W: http://atrey.karlin.mff.cuni.cz/~jack/ 1668 W: http://atrey.karlin.mff.cuni.cz/~jack/
1669 S: Krosenska' 543 1669 S: Krosenska' 543
1670 S: 181 00 Praha 8 1670 S: 181 00 Praha 8
1671 S: Czech Republic 1671 S: Czech Republic
1672 1672
1673 N: Jan "Yenya" Kasprzak 1673 N: Jan "Yenya" Kasprzak
1674 E: kas@fi.muni.cz 1674 E: kas@fi.muni.cz
1675 D: Author of the COSA/SRP sync serial board driver. 1675 D: Author of the COSA/SRP sync serial board driver.
1676 D: Port of the syncppp.c from the 2.0 to the 2.1 kernel. 1676 D: Port of the syncppp.c from the 2.0 to the 2.1 kernel.
1677 P: 1024/D3498839 0D 99 A7 FB 20 66 05 D7 8B 35 FC DE 05 B1 8A 5E 1677 P: 1024/D3498839 0D 99 A7 FB 20 66 05 D7 8B 35 FC DE 05 B1 8A 5E
1678 W: http://www.fi.muni.cz/~kas/ 1678 W: http://www.fi.muni.cz/~kas/
1679 S: c/o Faculty of Informatics, Masaryk University 1679 S: c/o Faculty of Informatics, Masaryk University
1680 S: Botanicka' 68a 1680 S: Botanicka' 68a
1681 S: 602 00 Brno 1681 S: 602 00 Brno
1682 S: Czech Republic 1682 S: Czech Republic
1683 1683
1684 N: Jakob Kemi 1684 N: Jakob Kemi
1685 E: jakob.kemi@telia.com 1685 E: jakob.kemi@telia.com
1686 D: V4L W9966 Webcam driver 1686 D: V4L W9966 Webcam driver
1687 S: Forsbyvรคgen 33 1687 S: Forsbyvรคgen 33
1688 S: 74143 Knivsta 1688 S: 74143 Knivsta
1689 S: Sweden 1689 S: Sweden
1690 1690
1691 N: Fred N. van Kempen 1691 N: Fred N. van Kempen
1692 E: waltje@linux.com 1692 E: waltje@linux.com
1693 D: NET-2 1693 D: NET-2
1694 D: Drivers 1694 D: Drivers
1695 D: Kernel cleanups 1695 D: Kernel cleanups
1696 S: Korte Heul 95 1696 S: Korte Heul 95
1697 S: 1403 ND BUSSUM 1697 S: 1403 ND BUSSUM
1698 S: The Netherlands 1698 S: The Netherlands
1699 1699
1700 N: Karl Keyte 1700 N: Karl Keyte
1701 E: karl@koft.com 1701 E: karl@koft.com
1702 D: Disk usage statistics and modifications to line printer driver 1702 D: Disk usage statistics and modifications to line printer driver
1703 S: 26a Sheen Road 1703 S: 26a Sheen Road
1704 S: Richmond 1704 S: Richmond
1705 S: Surrey 1705 S: Surrey
1706 S: TW9 1AE 1706 S: TW9 1AE
1707 S: United Kingdom 1707 S: United Kingdom
1708 1708
1709 N: Marko Kiiskila 1709 N: Marko Kiiskila
1710 E: marko@iprg.nokia.com 1710 E: marko@iprg.nokia.com
1711 D: Author of ATM Lan Emulation 1711 D: Author of ATM Lan Emulation
1712 S: 660 Harvard Ave. #7 1712 S: 660 Harvard Ave. #7
1713 S: Santa Clara, CA 95051 1713 S: Santa Clara, CA 95051
1714 S: USA 1714 S: USA
1715 1715
1716 N: Russell King 1716 N: Russell King
1717 E: rmk@arm.linux.org.uk 1717 E: rmk@arm.linux.org.uk
1718 D: Linux/arm integrator, maintainer & hacker 1718 D: Linux/arm integrator, maintainer & hacker
1719 D: Acornfb, Cyber2000fb author 1719 D: Acornfb, Cyber2000fb author
1720 S: Burgh Heath, Tadworth, Surrey. 1720 S: Burgh Heath, Tadworth, Surrey.
1721 S: England 1721 S: England
1722 1722
1723 N: Olaf Kirch 1723 N: Olaf Kirch
1724 E: okir@monad.swb.de 1724 E: okir@monad.swb.de
1725 D: Author of the Linux Network Administrators' Guide 1725 D: Author of the Linux Network Administrators' Guide
1726 S: Kattreinstr 38 1726 S: Kattreinstr 38
1727 S: D-64295 1727 S: D-64295
1728 S: Germany 1728 S: Germany
1729 1729
1730 N: Andi Kleen 1730 N: Andi Kleen
1731 E: ak@muc.de 1731 E: ak@muc.de
1732 D: network hacker, syncookies 1732 D: network hacker, syncookies
1733 S: Schwalbenstr. 96 1733 S: Schwalbenstr. 96
1734 S: 85551 Ottobrunn 1734 S: 85551 Ottobrunn
1735 S: Germany 1735 S: Germany
1736 1736
1737 N: Ian Kluft 1737 N: Ian Kluft
1738 E: ikluft@thunder.sbay.org 1738 E: ikluft@thunder.sbay.org
1739 W: http://www.kluft.com/~ikluft/ 1739 W: http://www.kluft.com/~ikluft/
1740 D: NET-1 beta testing & minor patches, original Smail binary packages for 1740 D: NET-1 beta testing & minor patches, original Smail binary packages for
1741 D: Slackware and Debian, vote-taker for 2nd comp.os.linux reorganization 1741 D: Slackware and Debian, vote-taker for 2nd comp.os.linux reorganization
1742 S: Post Office Box 611311 1742 S: Post Office Box 611311
1743 S: San Jose, California 95161-1311 1743 S: San Jose, California 95161-1311
1744 S: USA 1744 S: USA
1745 1745
1746 N: Thorsten Knabe 1746 N: Thorsten Knabe
1747 E: Thorsten Knabe <tek@rbg.informatik.tu-darmstadt.de> 1747 E: Thorsten Knabe <tek@rbg.informatik.tu-darmstadt.de>
1748 E: Thorsten Knabe <tek01@hrzpub.tu-darmstadt.de> 1748 E: Thorsten Knabe <tek01@hrzpub.tu-darmstadt.de>
1749 W: http://www.student.informatik.tu-darmstadt.de/~tek 1749 W: http://www.student.informatik.tu-darmstadt.de/~tek
1750 W: http://www.tu-darmstadt.de/~tek01 1750 W: http://www.tu-darmstadt.de/~tek01
1751 P: 1024/3BC8D885 8C 29 C5 0A C0 D1 D6 F4 20 D4 2D AB 29 F6 D0 60 1751 P: 1024/3BC8D885 8C 29 C5 0A C0 D1 D6 F4 20 D4 2D AB 29 F6 D0 60
1752 D: AD1816 sound driver 1752 D: AD1816 sound driver
1753 S: Am Bergfried 10 1753 S: Am Bergfried 10
1754 S: 63225 Langen 1754 S: 63225 Langen
1755 S: Germany 1755 S: Germany
1756 1756
1757 N: Alain L. Knaff 1757 N: Alain L. Knaff
1758 E: Alain.Knaff@lll.lu 1758 E: Alain.Knaff@lll.lu
1759 D: floppy driver 1759 D: floppy driver
1760 S: 19, rue Jean l'Aveugle 1760 S: 19, rue Jean l'Aveugle
1761 S: L-1148 Luxembourg-City 1761 S: L-1148 Luxembourg-City
1762 S: Luxembourg 1762 S: Luxembourg
1763 1763
1764 N: Gerd Knorr 1764 N: Gerd Knorr
1765 W: http://bytesex.org 1765 W: http://bytesex.org
1766 E: kraxel@bytesex.org 1766 E: kraxel@bytesex.org
1767 E: kraxel@suse.de 1767 E: kraxel@suse.de
1768 D: video4linux, bttv, vesafb, some scsi, misc fixes 1768 D: video4linux, bttv, vesafb, some scsi, misc fixes
1769 1769
1770 N: Harald Koenig 1770 N: Harald Koenig
1771 E: koenig@tat.physik.uni-tuebingen.de 1771 E: koenig@tat.physik.uni-tuebingen.de
1772 D: XFree86 (S3), DCF77, some kernel hacks and fixes 1772 D: XFree86 (S3), DCF77, some kernel hacks and fixes
1773 S: Koenigsberger Str. 90 1773 S: Koenigsberger Str. 90
1774 S: D-72336 Balingen 1774 S: D-72336 Balingen
1775 S: Germany 1775 S: Germany
1776 1776
1777 N: Rudolf Koenig 1777 N: Rudolf Koenig
1778 E: rfkoenig@immd4.informatik.uni-erlangen.de 1778 E: rfkoenig@immd4.informatik.uni-erlangen.de
1779 D: The Linux Support Team Erlangen 1779 D: The Linux Support Team Erlangen
1780 1780
1781 N: Andreas Koensgen 1781 N: Andreas Koensgen
1782 E: ajk@iehk.rwth-aachen.de 1782 E: ajk@iehk.rwth-aachen.de
1783 D: 6pack driver for AX.25 1783 D: 6pack driver for AX.25
1784 1784
1785 N: Harald Koerfgen 1785 N: Harald Koerfgen
1786 E: hkoerfg@web.de 1786 E: hkoerfg@web.de
1787 D: Linux/MIPS kernel hacks and fixes, 1787 D: Linux/MIPS kernel hacks and fixes,
1788 D: DECstation port, Sharp Mobilon port 1788 D: DECstation port, Sharp Mobilon port
1789 S: D-50931 Koeln 1789 S: D-50931 Koeln
1790 S: Germany 1790 S: Germany
1791 1791
1792 N: Willy Konynenberg 1792 N: Willy Konynenberg
1793 E: willy@xos.nl 1793 E: willy@xos.nl
1794 W: http://www.xos.nl/ 1794 W: http://www.xos.nl/
1795 D: IP transparent proxy support 1795 D: IP transparent proxy support
1796 S: X/OS Experts in Open Systems BV 1796 S: X/OS Experts in Open Systems BV
1797 S: Kruislaan 419 1797 S: Kruislaan 419
1798 S: 1098 VA Amsterdam 1798 S: 1098 VA Amsterdam
1799 S: The Netherlands 1799 S: The Netherlands
1800 1800
1801 N: Gene Kozin 1801 N: Gene Kozin
1802 E: 74604.152@compuserve.com 1802 E: 74604.152@compuserve.com
1803 W: http://www.sangoma.com 1803 W: http://www.sangoma.com
1804 D: WAN Router & Sangoma WAN drivers 1804 D: WAN Router & Sangoma WAN drivers
1805 S: Sangoma Technologies Inc. 1805 S: Sangoma Technologies Inc.
1806 S: 7170 Warden Avenue, Unit 2 1806 S: 7170 Warden Avenue, Unit 2
1807 S: Markham, Ontario 1807 S: Markham, Ontario
1808 S: L3R 8B2 1808 S: L3R 8B2
1809 S: Canada 1809 S: Canada
1810 1810
1811 N: Maxim Krasnyansky 1811 N: Maxim Krasnyansky
1812 E: maxk@qualcomm.com 1812 E: maxk@qualcomm.com
1813 W: http://vtun.sf.net 1813 W: http://vtun.sf.net
1814 W: http://bluez.sf.net 1814 W: http://bluez.sf.net
1815 D: Author of the Universal TUN/TAP driver 1815 D: Author of the Universal TUN/TAP driver
1816 D: Author of the Linux Bluetooth Subsystem (BlueZ) 1816 D: Author of the Linux Bluetooth Subsystem (BlueZ)
1817 D: Various other kernel patches, cleanups and fixes 1817 D: Various other kernel patches, cleanups and fixes
1818 S: 2213 La Terrace Circle 1818 S: 2213 La Terrace Circle
1819 S: San Jose, CA 95123 1819 S: San Jose, CA 95123
1820 S: USA 1820 S: USA
1821 1821
1822 N: Andreas S. Krebs 1822 N: Andreas S. Krebs
1823 E: akrebs@altavista.net 1823 E: akrebs@altavista.net
1824 D: CYPRESS CY82C693 chipset IDE, Digital's PC-Alpha 164SX boards 1824 D: CYPRESS CY82C693 chipset IDE, Digital's PC-Alpha 164SX boards
1825 1825
1826 N: Greg Kroah-Hartman 1826 N: Greg Kroah-Hartman
1827 E: greg@kroah.com 1827 E: greg@kroah.com
1828 E: gregkh@suse.de 1828 E: gregkh@suse.de
1829 W: http://www.kroah.com/linux/ 1829 W: http://www.kroah.com/linux/
1830 D: USB Serial Converter driver framework, USB Handspring Visor driver 1830 D: USB Serial Converter driver framework, USB Handspring Visor driver
1831 D: ConnectTech WHITEHeat USB driver, Generic USB Serial driver 1831 D: ConnectTech WHITEHeat USB driver, Generic USB Serial driver
1832 D: USB I/O Edgeport driver, USB Serial IrDA driver 1832 D: USB I/O Edgeport driver, USB Serial IrDA driver
1833 D: USB Bluetooth driver, USB Skeleton driver 1833 D: USB Bluetooth driver, USB Skeleton driver
1834 D: bits and pieces of USB core code. 1834 D: bits and pieces of USB core code.
1835 D: PCI Hotplug core, PCI Hotplug Compaq driver modifications 1835 D: PCI Hotplug core, PCI Hotplug Compaq driver modifications
1836 D: portions of the Linux Security Module (LSM) framework 1836 D: portions of the Linux Security Module (LSM) framework
1837 D: parts of the driver core, debugfs. 1837 D: parts of the driver core, debugfs.
1838 1838
1839 N: Russell Kroll 1839 N: Russell Kroll
1840 E: rkroll@exploits.org 1840 E: rkroll@exploits.org
1841 W: http://www.exploits.org/ 1841 W: http://www.exploits.org/
1842 D: V4L radio cards: radio-aztech (new), others (bugfixes/features) 1842 D: V4L radio cards: radio-aztech (new), others (bugfixes/features)
1843 D: Loopback block device: dynamic sizing ("max_loop" as module) 1843 D: Loopback block device: dynamic sizing ("max_loop" as module)
1844 S: Post Office Box 691886 1844 S: Post Office Box 691886
1845 S: San Antonio, Texas 78269-1886 1845 S: San Antonio, Texas 78269-1886
1846 S: USA 1846 S: USA
1847 1847
1848 N: Denis O. Kropp 1848 N: Denis O. Kropp
1849 E: dok@directfb.org 1849 E: dok@directfb.org
1850 D: NeoMagic framebuffer driver 1850 D: NeoMagic framebuffer driver
1851 S: Badensche Str. 46 1851 S: Badensche Str. 46
1852 S: 10715 Berlin 1852 S: 10715 Berlin
1853 S: Germany 1853 S: Germany
1854 1854
1855 N: Andrzej M. Krzysztofowicz 1855 N: Andrzej M. Krzysztofowicz
1856 E: ankry@mif.pg.gda.pl 1856 E: ankry@mif.pg.gda.pl
1857 D: Some 8-bit XT disk driver and devfs hacking 1857 D: Some 8-bit XT disk driver and devfs hacking
1858 D: Aladdin 1533/1543(C) chipset IDE 1858 D: Aladdin 1533/1543(C) chipset IDE
1859 D: PIIX chipset IDE 1859 D: PIIX chipset IDE
1860 S: ul. Matemblewska 1B/10 1860 S: ul. Matemblewska 1B/10
1861 S: 80-283 Gdansk 1861 S: 80-283 Gdansk
1862 S: Poland 1862 S: Poland
1863 1863
1864 N: Gero Kuhlmann 1864 N: Gero Kuhlmann
1865 E: gero@gkminix.han.de 1865 E: gero@gkminix.han.de
1866 D: mounting root via NFS 1866 D: mounting root via NFS
1867 S: Donarweg 4 1867 S: Donarweg 4
1868 S: D-30657 Hannover 1868 S: D-30657 Hannover
1869 S: Germany 1869 S: Germany
1870 1870
1871 N: Markus Kuhn 1871 N: Markus Kuhn
1872 E: mskuhn@cip.informatik.uni-erlangen.de 1872 E: mskuhn@cip.informatik.uni-erlangen.de
1873 W: http://wwwcip.informatik.uni-erlangen.de/user/mskuhn 1873 W: http://wwwcip.informatik.uni-erlangen.de/user/mskuhn
1874 D: Unicode, real-time, time, standards 1874 D: Unicode, real-time, time, standards
1875 S: Schlehenweg 9 1875 S: Schlehenweg 9
1876 S: D-91080 Uttenreuth 1876 S: D-91080 Uttenreuth
1877 S: Germany 1877 S: Germany
1878 1878
1879 N: Jaya Kumar 1879 N: Jaya Kumar
1880 E: jayalk@intworks.biz 1880 E: jayalk@intworks.biz
1881 W: http://www.intworks.biz 1881 W: http://www.intworks.biz
1882 D: Arc monochrome LCD framebuffer driver, x86 reboot fixups 1882 D: Arc monochrome LCD framebuffer driver, x86 reboot fixups
1883 D: pirq addr, CS5535 alsa audio driver 1883 D: pirq addr, CS5535 alsa audio driver
1884 S: Gurgaon, India 1884 S: Gurgaon, India
1885 S: Kuala Lumpur, Malaysia 1885 S: Kuala Lumpur, Malaysia
1886 1886
1887 N: Gabor Kuti 1887 N: Gabor Kuti
1888 M: seasons@falcon.sch.bme.hu 1888 M: seasons@falcon.sch.bme.hu
1889 M: seasons@makosteszta.sote.hu 1889 M: seasons@makosteszta.sote.hu
1890 D: Original author of software suspend 1890 D: Original author of software suspend
1891 1891
1892 N: Jaroslav Kysela 1892 N: Jaroslav Kysela
1893 E: perex@suse.cz 1893 E: perex@suse.cz
1894 W: http://www.perex.cz 1894 W: http://www.perex.cz
1895 D: Original Author and Maintainer for HP 10/100 Mbit Network Adapters 1895 D: Original Author and Maintainer for HP 10/100 Mbit Network Adapters
1896 D: ISA PnP 1896 D: ISA PnP
1897 S: Sindlovy Dvory 117 1897 S: Sindlovy Dvory 117
1898 S: 370 01 Ceske Budejovice 1898 S: 370 01 Ceske Budejovice
1899 S: Czech Republic 1899 S: Czech Republic
1900 1900
1901 N: Bas Laarhoven 1901 N: Bas Laarhoven
1902 E: sjml@xs4all.nl 1902 E: sjml@xs4all.nl
1903 D: Loadable modules and ftape driver 1903 D: Loadable modules and ftape driver
1904 S: J. Obrechtstr 23 1904 S: J. Obrechtstr 23
1905 S: NL-5216 GP 's-Hertogenbosch 1905 S: NL-5216 GP 's-Hertogenbosch
1906 S: The Netherlands 1906 S: The Netherlands
1907 1907
1908 N: Savio Lam 1908 N: Savio Lam
1909 E: lam836@cs.cuhk.hk 1909 E: lam836@cs.cuhk.hk
1910 D: Author of the dialog utility, foundation 1910 D: Author of the dialog utility, foundation
1911 D: for Menuconfig's lxdialog. 1911 D: for Menuconfig's lxdialog.
1912 1912
1913 N: Christoph Lameter 1913 N: Christoph Lameter
1914 E: christoph@lameter.com 1914 E: christoph@lameter.com
1915 D: Digiboard PC/Xe and PC/Xi, Digiboard EPCA 1915 D: Digiboard PC/Xe and PC/Xi, Digiboard EPCA
1916 D: Early protocol filter for bridging code 1916 D: Early protocol filter for bridging code
1917 D: Bug fixes 1917 D: Bug fixes
1918 1918
1919 N: Paul Laufer 1919 N: Paul Laufer
1920 E: paul@laufernet.com 1920 E: paul@laufernet.com
1921 D: Soundblaster driver fixes, ISAPnP quirk 1921 D: Soundblaster driver fixes, ISAPnP quirk
1922 S: California, USA 1922 S: California, USA
1923 1923
1924 N: Tom Lees 1924 N: Tom Lees
1925 E: tom@lpsg.demon.co.uk 1925 E: tom@lpsg.demon.co.uk
1926 W: http://www.lpsg.demon.co.uk/ 1926 W: http://www.lpsg.demon.co.uk/
1927 P: 1024/87D4D065 2A 66 86 9D 02 4D A6 1E B8 A2 17 9D 4F 9B 89 D6 1927 P: 1024/87D4D065 2A 66 86 9D 02 4D A6 1E B8 A2 17 9D 4F 9B 89 D6
1928 D: Original author and current maintainer of 1928 D: Original author and current maintainer of
1929 D: PnP code. 1929 D: PnP code.
1930 1930
1931 N: David van Leeuwen 1931 N: David van Leeuwen
1932 E: david@tm.tno.nl 1932 E: david@tm.tno.nl
1933 D: Philips/LMS cm206 cdrom driver, generic cdrom driver 1933 D: Philips/LMS cm206 cdrom driver, generic cdrom driver
1934 S: Scheltemalaan 14 1934 S: Scheltemalaan 14
1935 S: 3817 KS Amersfoort 1935 S: 3817 KS Amersfoort
1936 S: The Netherlands 1936 S: The Netherlands
1937 1937
1938 N: Volker Lendecke 1938 N: Volker Lendecke
1939 E: vl@kki.org 1939 E: vl@kki.org
1940 D: Kernel smbfs (to mount WfW, NT and OS/2 network drives.) 1940 D: Kernel smbfs (to mount WfW, NT and OS/2 network drives.)
1941 D: NCP filesystem support (to mount NetWare volumes) 1941 D: NCP filesystem support (to mount NetWare volumes)
1942 S: Von Ossietzky Str. 12 1942 S: Von Ossietzky Str. 12
1943 S: 37085 Goettingen 1943 S: 37085 Goettingen
1944 S: Germany 1944 S: Germany
1945 1945
1946 N: Kevin Lentin 1946 N: Kevin Lentin
1947 E: kevinl@cs.monash.edu.au 1947 E: kevinl@cs.monash.edu.au
1948 D: NCR53C400/T130B SCSI extension to NCR5380 driver. 1948 D: NCR53C400/T130B SCSI extension to NCR5380 driver.
1949 S: 18 Board Street 1949 S: 18 Board Street
1950 S: Doncaster VIC 3108 1950 S: Doncaster VIC 3108
1951 S: Australia 1951 S: Australia
1952 1952
1953 N: Hans Lermen 1953 N: Hans Lermen
1954 E: lermen@elserv.ffm.fgan.de 1954 E: lermen@elserv.ffm.fgan.de
1955 D: Author of the LOADLIN Linux loader, hacking on boot stuff 1955 D: Author of the LOADLIN Linux loader, hacking on boot stuff
1956 D: Coordinator of DOSEMU releases 1956 D: Coordinator of DOSEMU releases
1957 S: Am Muehlenweg 38 1957 S: Am Muehlenweg 38
1958 S: D53424 Remagen 1958 S: D53424 Remagen
1959 S: Germany 1959 S: Germany
1960 1960
1961 N: Colin Leroy 1961 N: Colin Leroy
1962 E: colin@colino.net 1962 E: colin@colino.net
1963 W: http://www.geekounet.org/ 1963 W: http://www.geekounet.org/
1964 D: PowerMac adt746x fan driver 1964 D: PowerMac adt746x fan driver
1965 D: Random fixing of various drivers (macintosh, usb, sound) 1965 D: Random fixing of various drivers (macintosh, usb, sound)
1966 S: Toulouse 1966 S: Toulouse
1967 S: France 1967 S: France
1968 1968
1969 N: Achim Leubner 1969 N: Achim Leubner
1970 E: achim_leubner@adaptec.com 1970 E: achim_leubner@adaptec.com
1971 D: GDT Disk Array Controller/Storage RAID controller driver 1971 D: GDT Disk Array Controller/Storage RAID controller driver
1972 S: ICP vortex GmbH 1972 S: ICP vortex GmbH
1973 S: Neckarsulm 1973 S: Neckarsulm
1974 S: Germany 1974 S: Germany
1975 1975
1976 N: Phil Lewis 1976 N: Phil Lewis
1977 E: beans@bucket.ualr.edu 1977 E: beans@bucket.ualr.edu
1978 D: Promised to send money if I would put his name in the source tree. 1978 D: Promised to send money if I would put his name in the source tree.
1979 S: Post Office Box 371 1979 S: Post Office Box 371
1980 S: North Little Rock, Arkansas 72115 1980 S: North Little Rock, Arkansas 72115
1981 S: USA 1981 S: USA
1982 1982
1983 N: Stephan Linz 1983 N: Stephan Linz
1984 E: linz@mazet.de 1984 E: linz@mazet.de
1985 E: Stephan.Linz@gmx.de 1985 E: Stephan.Linz@gmx.de
1986 W: http://www.crosswinds.net/~tuxer 1986 W: http://www.crosswinds.net/~tuxer
1987 D: PCILynx patch to work with 1394a PHY and without local RAM 1987 D: PCILynx patch to work with 1394a PHY and without local RAM
1988 S: (ask for current address) 1988 S: (ask for current address)
1989 S: Germany 1989 S: Germany
1990 1990
1991 N: Christophe Lizzi 1991 N: Christophe Lizzi
1992 E: lizzi@cnam.fr 1992 E: lizzi@cnam.fr
1993 W: http://cedric.cnam.fr/personne/lizzi 1993 W: http://cedric.cnam.fr/personne/lizzi
1994 D: FORE Systems 200E-series ATM network driver, sparc64 port of ATM 1994 D: FORE Systems 200E-series ATM network driver, sparc64 port of ATM
1995 S: CNAM, Laboratoire CEDRIC 1995 S: CNAM, Laboratoire CEDRIC
1996 S: 292, rue St-Martin 1996 S: 292, rue St-Martin
1997 S: 75141 Paris Cedex 03 1997 S: 75141 Paris Cedex 03
1998 S: France 1998 S: France
1999 1999
2000 N: Siegfried "Frieder" Loeffler (dg1sek) 2000 N: Siegfried "Frieder" Loeffler (dg1sek)
2001 E: floeff@tunix.mathematik.uni-stuttgart.de, fl@LF.net 2001 E: floeff@tunix.mathematik.uni-stuttgart.de, fl@LF.net
2002 W: http://www.mathematik.uni-stuttgart.de/~floeff 2002 W: http://www.mathematik.uni-stuttgart.de/~floeff
2003 D: Busmaster driver for HP 10/100 Mbit Network Adapters 2003 D: Busmaster driver for HP 10/100 Mbit Network Adapters
2004 S: University of Stuttgart, Germany and 2004 S: University of Stuttgart, Germany and
2005 S: Ecole Nationale Superieure des Telecommunications, Paris 2005 S: Ecole Nationale Superieure des Telecommunications, Paris
2006 2006
2007 N: Jamie Lokier 2007 N: Jamie Lokier
2008 E: jamie@shareable.org 2008 E: jamie@shareable.org
2009 W: http://www.shareable.org/ 2009 W: http://www.shareable.org/
2010 D: Reboot-through-BIOS for broken 486 motherboards 2010 D: Reboot-through-BIOS for broken 486 motherboards
2011 D: Parport fixes, futex improvements 2011 D: Parport fixes, futex improvements
2012 D: First instruction of x86 sysenter path :) 2012 D: First instruction of x86 sysenter path :)
2013 S: 51 Sunningwell Road 2013 S: 51 Sunningwell Road
2014 S: Oxford 2014 S: Oxford
2015 S: OX1 4SZ 2015 S: OX1 4SZ
2016 S: United Kingdom 2016 S: United Kingdom
2017 2017
2018 N: Mark Lord 2018 N: Mark Lord
2019 E: mlord@pobox.com 2019 E: mlord@pobox.com
2020 D: EIDE driver, hd.c support 2020 D: EIDE driver, hd.c support
2021 D: EIDE PCI and bus-master DMA support 2021 D: EIDE PCI and bus-master DMA support
2022 D: Hard Disk Parameter (hdparm) utility 2022 D: Hard Disk Parameter (hdparm) utility
2023 S: 33 Ridgefield Cr 2023 S: 33 Ridgefield Cr
2024 S: Nepean, Ontario 2024 S: Nepean, Ontario
2025 S: Canada K2H 6S3 2025 S: Canada K2H 6S3
2026 2026
2027 N: Warner Losh 2027 N: Warner Losh
2028 E: imp@village.org 2028 E: imp@village.org
2029 D: Linux/MIPS Deskstation support, Provided OI/OB for Linux 2029 D: Linux/MIPS Deskstation support, Provided OI/OB for Linux
2030 S: 8786 Niwot Road 2030 S: 8786 Niwot Road
2031 S: Niwot, Colorado 80503 2031 S: Niwot, Colorado 80503
2032 S: USA 2032 S: USA
2033 2033
2034 N: Robert M. Love 2034 N: Robert M. Love
2035 E: rml@tech9.net 2035 E: rml@tech9.net
2036 E: rml@novell.com 2036 E: rml@novell.com
2037 D: misc. kernel hacking and debugging 2037 D: misc. kernel hacking and debugging
2038 S: Cambridge, MA 02139 2038 S: Cambridge, MA 02139
2039 S: USA 2039 S: USA
2040 2040
2041 N: Martin von Lรถwis 2041 N: Martin von Lรถwis
2042 E: loewis@informatik.hu-berlin.de 2042 E: loewis@informatik.hu-berlin.de
2043 D: script binary format 2043 D: script binary format
2044 D: NTFS driver 2044 D: NTFS driver
2045 2045
2046 N: H.J. Lu 2046 N: H.J. Lu
2047 E: hjl@gnu.ai.mit.edu 2047 E: hjl@gnu.ai.mit.edu
2048 D: GCC + libraries hacker 2048 D: GCC + libraries hacker
2049 2049
2050 N: Michal Ludvig 2050 N: Michal Ludvig
2051 E: michal@logix.cz 2051 E: michal@logix.cz
2052 E: michal.ludvig@asterisk.co.nz 2052 E: michal.ludvig@asterisk.co.nz
2053 W: http://www.logix.cz/michal 2053 W: http://www.logix.cz/michal
2054 P: 1024D/C45B2218 1162 6471 D391 76E0 9F99 29DA 0C3A 2509 C45B 2218 2054 P: 1024D/C45B2218 1162 6471 D391 76E0 9F99 29DA 0C3A 2509 C45B 2218
2055 D: VIA PadLock driver 2055 D: VIA PadLock driver
2056 D: Netfilter pkttype module 2056 D: Netfilter pkttype module
2057 S: Asterisk Ltd. 2057 S: Asterisk Ltd.
2058 S: Auckland 2058 S: Auckland
2059 S: New Zealand 2059 S: New Zealand
2060 2060
2061 N: Tuomas J. Lukka 2061 N: Tuomas J. Lukka
2062 E: Tuomas.Lukka@Helsinki.FI 2062 E: Tuomas.Lukka@Helsinki.FI
2063 D: Original dual-monitor patches 2063 D: Original dual-monitor patches
2064 D: Console-mouse-tracking patches 2064 D: Console-mouse-tracking patches
2065 S: Puistokaari 1 E 18 2065 S: Puistokaari 1 E 18
2066 S: 00200 Helsinki 2066 S: 00200 Helsinki
2067 S: Finland 2067 S: Finland
2068 2068
2069 N: Daniel J. Maas 2069 N: Daniel J. Maas
2070 E: dmaas@dcine.com 2070 E: dmaas@dcine.com
2071 W: http://www.maasdigital.com 2071 W: http://www.maasdigital.com
2072 D: dv1394 2072 D: dv1394
2073 2073
2074 N: Hamish Macdonald 2074 N: Hamish Macdonald
2075 E: hamishm@lucent.com 2075 E: hamishm@lucent.com
2076 D: Linux/68k port 2076 D: Linux/68k port
2077 S: 32 Clydesdale Avenue 2077 S: 32 Clydesdale Avenue
2078 S: Kanata, Ontario 2078 S: Kanata, Ontario
2079 S: Canada K2M-2G7 2079 S: Canada K2M-2G7
2080 2080
2081 N: Peter MacDonald 2081 N: Peter MacDonald
2082 D: SLS distribution 2082 D: SLS distribution
2083 D: Initial implementation of VC's, pty's and select() 2083 D: Initial implementation of VC's, pty's and select()
2084 2084
2085 N: Pavel Machek 2085 N: Pavel Machek
2086 E: pavel@ucw.cz 2086 E: pavel@ucw.cz
2087 E: pavel@suse.cz 2087 E: pavel@suse.cz
2088 D: Softcursor for vga, hypertech cdrom support, vcsa bugfix, nbd 2088 D: Softcursor for vga, hypertech cdrom support, vcsa bugfix, nbd
2089 D: sun4/330 port, capabilities for elf, speedup for rm on ext2, USB, 2089 D: sun4/330 port, capabilities for elf, speedup for rm on ext2, USB,
2090 D: work on suspend-to-ram/disk, killing duplicates from ioctl32 2090 D: work on suspend-to-ram/disk, killing duplicates from ioctl32
2091 S: Volkova 1131 2091 S: Volkova 1131
2092 S: 198 00 Praha 9 2092 S: 198 00 Praha 9
2093 S: Czech Republic 2093 S: Czech Republic
2094 2094
2095 N: Paul Mackerras 2095 N: Paul Mackerras
2096 E: paulus@samba.org 2096 E: paulus@samba.org
2097 D: PPP driver 2097 D: PPP driver
2098 D: Linux for PowerPC 2098 D: Linux for PowerPC
2099 D: Linux port for PCI Power Macintosh 2099 D: Linux port for PCI Power Macintosh
2100 2100
2101 N: Pat Mackinlay 2101 N: Pat Mackinlay
2102 E: pat@it.com.au 2102 E: pat@it.com.au
2103 D: 8 bit XT hard disk driver 2103 D: 8 bit XT hard disk driver
2104 D: Miscellaneous ST0x, TMC-8xx and other SCSI hacking 2104 D: Miscellaneous ST0x, TMC-8xx and other SCSI hacking
2105 S: 25 McMillan Street 2105 S: 25 McMillan Street
2106 S: Victoria Park 6100 2106 S: Victoria Park 6100
2107 S: Australia 2107 S: Australia
2108 2108
2109 N: James B. MacLean 2109 N: James B. MacLean
2110 E: macleajb@ednet.ns.ca 2110 E: macleajb@ednet.ns.ca
2111 W: http://www.ednet.ns.ca/~macleajb/dosemu.html 2111 W: http://www.ednet.ns.ca/~macleajb/dosemu.html
2112 D: Former Coordinator of DOSEMU releases 2112 D: Former Coordinator of DOSEMU releases
2113 D: Program in DOSEMU 2113 D: Program in DOSEMU
2114 S: PO BOX 220, HFX. CENTRAL 2114 S: PO BOX 220, HFX. CENTRAL
2115 S: Halifax, Nova Scotia 2115 S: Halifax, Nova Scotia
2116 S: Canada B3J 3C8 2116 S: Canada B3J 3C8
2117 2117
2118 N: Kai Mรคkisara 2118 N: Kai Mรคkisara
2119 E: Kai.Makisara@kolumbus.fi 2119 E: Kai.Makisara@kolumbus.fi
2120 D: SCSI Tape Driver 2120 D: SCSI Tape Driver
2121 2121
2122 N: Asit Mallick 2122 N: Asit Mallick
2123 E: asit.k.mallick@intel.com 2123 E: asit.k.mallick@intel.com
2124 D: Linux/IA-64 2124 D: Linux/IA-64
2125 S: 2200 Mission College Blvd 2125 S: 2200 Mission College Blvd
2126 S: Santa Clara, CA 95052 2126 S: Santa Clara, CA 95052
2127 S: USA 2127 S: USA
2128 2128
2129 N: Petko Manolov 2129 N: Petko Manolov
2130 E: petkan@users.sourceforge.net 2130 E: petkan@users.sourceforge.net
2131 D: USB ethernet pegasus/pegasus-II driver 2131 D: USB ethernet pegasus/pegasus-II driver
2132 D: USB ethernet rtl8150 driver 2132 D: USB ethernet rtl8150 driver
2133 D: optimizing i[45]86 string routines 2133 D: optimizing i[45]86 string routines
2134 D: i386 task switching hacks 2134 D: i386 task switching hacks
2135 S: 482 Shadowgraph Dr. 2135 S: 482 Shadowgraph Dr.
2136 S: San Jose, CA 95110 2136 S: San Jose, CA 95110
2137 S: USA 2137 S: USA
2138 2138
2139 N: Martin Mares 2139 N: Martin Mares
2140 E: mj@ucw.cz 2140 E: mj@ucw.cz
2141 W: http://www.ucw.cz/~mj/ 2141 W: http://www.ucw.cz/~mj/
2142 D: BIOS video mode handling code 2142 D: BIOS video mode handling code
2143 D: MOXA C-218 serial board driver 2143 D: MOXA C-218 serial board driver
2144 D: Network autoconfiguration 2144 D: Network autoconfiguration
2145 D: PCI subsystem 2145 D: PCI subsystem
2146 D: Random kernel hacking 2146 D: Random kernel hacking
2147 S: Kankovskeho 1241 2147 S: Kankovskeho 1241
2148 S: 182 00 Praha 8 2148 S: 182 00 Praha 8
2149 S: Czech Republic 2149 S: Czech Republic
2150 2150
2151 N: John A. Martin 2151 N: John A. Martin
2152 E: jam@acm.org 2152 E: jam@acm.org
2153 W: http://www.tux.org/~jam/ 2153 W: http://www.tux.org/~jam/
2154 P: 1024/04456D53 9D A3 6C 6B 88 80 8A 61 D7 06 22 4F 95 40 CE D2 2154 P: 1024/04456D53 9D A3 6C 6B 88 80 8A 61 D7 06 22 4F 95 40 CE D2
2155 P: 1024/3B986635 5A61 7EE6 9E20 51FB 59FB 2DA5 3E18 DD55 3B98 6635 2155 P: 1024/3B986635 5A61 7EE6 9E20 51FB 59FB 2DA5 3E18 DD55 3B98 6635
2156 D: FSSTND contributor 2156 D: FSSTND contributor
2157 D: Credit file compilator 2157 D: Credit file compilator
2158 2158
2159 N: Kevin E. Martin 2159 N: Kevin E. Martin
2160 E: martin@cs.unc.edu 2160 E: martin@cs.unc.edu
2161 D: Developed original accelerated X servers included in XFree86 2161 D: Developed original accelerated X servers included in XFree86
2162 D: XF86_Mach64 2162 D: XF86_Mach64
2163 D: XF86_Mach32 2163 D: XF86_Mach32
2164 D: XF86_Mach8 2164 D: XF86_Mach8
2165 D: XF86_8514 2165 D: XF86_8514
2166 D: cfdisk (curses based disk partitioning program) 2166 D: cfdisk (curses based disk partitioning program)
2167 2167
2168 N: John S. Marvin 2168 N: John S. Marvin
2169 E: jsm@fc.hp.com 2169 E: jsm@fc.hp.com
2170 D: PA-RISC port 2170 D: PA-RISC port
2171 S: Hewlett Packard 2171 S: Hewlett Packard
2172 S: MS 42 2172 S: MS 42
2173 S: 3404 E. Harmony Road 2173 S: 3404 E. Harmony Road
2174 S: Fort Collins, CO 80528 2174 S: Fort Collins, CO 80528
2175 2175
2176 N: Torben Mathiasen 2176 N: Torben Mathiasen
2177 E: torben.mathiasen@compaq.com 2177 E: torben.mathiasen@compaq.com
2178 E: torben@kernel.dk 2178 E: torben@kernel.dk
2179 W: http://tlan.kernel.dk 2179 W: http://tlan.kernel.dk
2180 D: ThunderLAN maintainer 2180 D: ThunderLAN maintainer
2181 D: ThunderLAN updates and other kernel fixes. 2181 D: ThunderLAN updates and other kernel fixes.
2182 S: Bremensgade 29, st.th 2182 S: Bremensgade 29, st.th
2183 S: 2300 Copenhagen S 2183 S: 2300 Copenhagen S
2184 S: Denmark 2184 S: Denmark
2185 2185
2186 N: Claudio S. Matsuoka 2186 N: Claudio S. Matsuoka
2187 E: claudio@conectiva.com 2187 E: claudio@conectiva.com
2188 E: claudio@helllabs.org 2188 E: claudio@helllabs.org
2189 W: http://helllabs.org/~claudio 2189 W: http://helllabs.org/~claudio
2190 D: V4L, OV511 driver hacks 2190 D: V4L, OV511 driver hacks
2191 S: Conectiva S.A. 2191 S: Conectiva S.A.
2192 S: R. Tocantins 89 2192 S: R. Tocantins 89
2193 S: 80050-430 Curitiba PR 2193 S: 80050-430 Curitiba PR
2194 S: Brazil 2194 S: Brazil
2195 2195
2196 N: Heinz Mauelshagen 2196 N: Heinz Mauelshagen
2197 E: mge@EZ-Darmstadt.Telekom.de 2197 E: mge@EZ-Darmstadt.Telekom.de
2198 D: Logical Volume Manager 2198 D: Logical Volume Manager
2199 S: Bartningstr. 12 2199 S: Bartningstr. 12
2200 S: 64289 Darmstadt 2200 S: 64289 Darmstadt
2201 S: Germany 2201 S: Germany
2202 2202
2203 N: Mark W. McClelland 2203 N: Mark W. McClelland
2204 E: mmcclell@bigfoot.com 2204 E: mmcclell@bigfoot.com
2205 E: mark@alpha.dyndns.org 2205 E: mark@alpha.dyndns.org
2206 W: http://alpha.dyndns.org/ov511/ 2206 W: http://alpha.dyndns.org/ov511/
2207 P: 1024D/357375CC 317C 58AC 1B39 2AB0 AB96 EB38 0B6F 731F 3573 75CC 2207 P: 1024D/357375CC 317C 58AC 1B39 2AB0 AB96 EB38 0B6F 731F 3573 75CC
2208 D: OV511 driver 2208 D: OV511 driver
2209 S: (address available on request) 2209 S: (address available on request)
2210 S: USA 2210 S: USA
2211 2211
2212 N: Ian McDonald 2212 N: Ian McDonald
2213 E: ian.mcdonald@jandi.co.nz 2213 E: ian.mcdonald@jandi.co.nz
2214 E: imcdnzl@gmail.com 2214 E: imcdnzl@gmail.com
2215 W: http://wand.net.nz/~iam4 2215 W: http://wand.net.nz/~iam4
2216 W: http://imcdnzl.blogspot.com 2216 W: http://imcdnzl.blogspot.com
2217 D: DCCP, CCID3 2217 D: DCCP, CCID3
2218 S: Hamilton 2218 S: Hamilton
2219 S: New Zealand 2219 S: New Zealand
2220 2220
2221 N: Patrick McHardy 2221 N: Patrick McHardy
2222 E: kaber@trash.net 2222 E: kaber@trash.net
2223 P: 1024D/12155E80 B128 7DE6 FF0A C2B2 48BE AB4C C9D4 964E 1215 5E80 2223 P: 1024D/12155E80 B128 7DE6 FF0A C2B2 48BE AB4C C9D4 964E 1215 5E80
2224 D: netfilter: endless number of bugfixes 2224 D: netfilter: endless number of bugfixes
2225 D: netfilter: CLASSIFY target 2225 D: netfilter: CLASSIFY target
2226 D: netfilter: addrtype match 2226 D: netfilter: addrtype match
2227 D: tc: HFSC scheduler 2227 D: tc: HFSC scheduler
2228 S: Freiburg 2228 S: Freiburg
2229 S: Germany 2229 S: Germany
2230 2230
2231 N: Mike McLagan 2231 N: Mike McLagan
2232 E: mike.mclagan@linux.org 2232 E: mike.mclagan@linux.org
2233 W: http://www.invlogic.com/~mmclagan 2233 W: http://www.invlogic.com/~mmclagan
2234 D: DLCI/FRAD drivers for Sangoma SDLAs 2234 D: DLCI/FRAD drivers for Sangoma SDLAs
2235 S: Innovative Logic Corp 2235 S: Innovative Logic Corp
2236 S: Post Office Box 1068 2236 S: Post Office Box 1068
2237 S: Laurel, Maryland 20732 2237 S: Laurel, Maryland 20732
2238 S: USA 2238 S: USA
2239 2239
2240 N: Bradley McLean 2240 N: Bradley McLean
2241 E: brad@bradpc.gaylord.com 2241 E: brad@bradpc.gaylord.com
2242 D: Device driver hacker 2242 D: Device driver hacker
2243 D: General kernel debugger 2243 D: General kernel debugger
2244 S: 249 Nichols Avenue 2244 S: 249 Nichols Avenue
2245 S: Syracuse, New York 13206 2245 S: Syracuse, New York 13206
2246 S: USA 2246 S: USA
2247 2247
2248 N: Kyle McMartin 2248 N: Kyle McMartin
2249 E: kyle@parisc-linux.org 2249 E: kyle@parisc-linux.org
2250 D: Linux/PARISC hacker 2250 D: Linux/PARISC hacker
2251 D: AD1889 sound driver 2251 D: AD1889 sound driver
2252 S: Ottawa, Canada 2252 S: Ottawa, Canada
2253 2253
2254 N: Dirk Melchers 2254 N: Dirk Melchers
2255 E: dirk@merlin.nbg.sub.org 2255 E: dirk@merlin.nbg.sub.org
2256 D: 8 bit XT hard disk driver for OMTI5520 2256 D: 8 bit XT hard disk driver for OMTI5520
2257 S: Schloessleinsgasse 31 2257 S: Schloessleinsgasse 31
2258 S: D-90453 Nuernberg 2258 S: D-90453 Nuernberg
2259 S: Germany 2259 S: Germany
2260 2260
2261 N: Arnaldo Carvalho de Melo 2261 N: Arnaldo Carvalho de Melo
2262 E: acme@mandriva.com 2262 E: acme@mandriva.com
2263 E: acme@ghostprotocols.net 2263 E: acme@ghostprotocols.net
2264 W: http://oops.ghostprotocols.net:81/blog/ 2264 W: http://oops.ghostprotocols.net:81/blog/
2265 P: 1024D/9224DF01 D5DF E3BB E3C8 BCBB F8AD 841A B6AB 4681 9224 DF01 2265 P: 1024D/9224DF01 D5DF E3BB E3C8 BCBB F8AD 841A B6AB 4681 9224 DF01
2266 D: IPX, LLC, DCCP, cyc2x, wl3501_cs, net/ hacks 2266 D: IPX, LLC, DCCP, cyc2x, wl3501_cs, net/ hacks
2267 S: Mandriva 2267 S: Mandriva
2268 S: R. Tocantins, 89 - Cristo Rei 2268 S: R. Tocantins, 89 - Cristo Rei
2269 S: 80050-430 - Curitiba - Paranรก 2269 S: 80050-430 - Curitiba - Paranรก
2270 S: Brazil 2270 S: Brazil
2271 2271
2272 N: Karsten Merker 2272 N: Karsten Merker
2273 E: merker@linuxtag.org 2273 E: merker@linuxtag.org
2274 D: DECstation framebuffer drivers 2274 D: DECstation framebuffer drivers
2275 S: Germany 2275 S: Germany
2276 2276
2277 N: Michael Meskes 2277 N: Michael Meskes
2278 E: meskes@debian.org 2278 E: meskes@debian.org
2279 P: 1024/04B6E8F5 6C 77 33 CA CC D6 22 03 AB AB 15 A3 AE AD 39 7D 2279 P: 1024/04B6E8F5 6C 77 33 CA CC D6 22 03 AB AB 15 A3 AE AD 39 7D
2280 D: Kernel hacker. PostgreSQL hacker. Software watchdog daemon. 2280 D: Kernel hacker. PostgreSQL hacker. Software watchdog daemon.
2281 D: Maintainer of several Debian packages 2281 D: Maintainer of several Debian packages
2282 S: Th.-Heuss-Str. 61 2282 S: Th.-Heuss-Str. 61
2283 S: D-41812 Erkelenz 2283 S: D-41812 Erkelenz
2284 S: Germany 2284 S: Germany
2285 2285
2286 N: Nigel Metheringham 2286 N: Nigel Metheringham
2287 E: Nigel.Metheringham@ThePLAnet.net 2287 E: Nigel.Metheringham@ThePLAnet.net
2288 P: 1024/31455639 B7 99 BD B8 00 17 BD 46 C1 15 B8 AB 87 BC 25 FA 2288 P: 1024/31455639 B7 99 BD B8 00 17 BD 46 C1 15 B8 AB 87 BC 25 FA
2289 D: IP Masquerading work and minor fixes 2289 D: IP Masquerading work and minor fixes
2290 S: Planet Online 2290 S: Planet Online
2291 S: The White House, Melbourne Street, LEEDS 2291 S: The White House, Melbourne Street, LEEDS
2292 S: LS2 7PS, United Kingdom 2292 S: LS2 7PS, United Kingdom
2293 2293
2294 N: Craig Metz 2294 N: Craig Metz
2295 E: cmetz@inner.net 2295 E: cmetz@inner.net
2296 D: Some of PAS 16 mixer & PCM support, inet6-apps 2296 D: Some of PAS 16 mixer & PCM support, inet6-apps
2297 2297
2298 N: William (Bill) Metzenthen 2298 N: William (Bill) Metzenthen
2299 E: billm@suburbia.net 2299 E: billm@suburbia.net
2300 D: Author of the FPU emulator. 2300 D: Author of the FPU emulator.
2301 D: Minor kernel hacker for other lost causes (Hercules mono, etc). 2301 D: Minor kernel hacker for other lost causes (Hercules mono, etc).
2302 S: 22 Parker Street 2302 S: 22 Parker Street
2303 S: Ormond 2303 S: Ormond
2304 S: Victoria 3163 2304 S: Victoria 3163
2305 S: Australia 2305 S: Australia
2306 2306
2307 N: Pauline Middelink 2307 N: Pauline Middelink
2308 E: middelin@polyware.nl 2308 E: middelin@polyware.nl
2309 D: General low-level bug fixes, /proc fixes, identd support 2309 D: General low-level bug fixes, /proc fixes, identd support
2310 D: Author of IP masquerading 2310 D: Author of IP masquerading
2311 D: Zoran ZR36120 Video For Linux driver 2311 D: Zoran ZR36120 Video For Linux driver
2312 S: Boterkorfhoek 34 2312 S: Boterkorfhoek 34
2313 S: 7546 JA Enschede 2313 S: 7546 JA Enschede
2314 S: Netherlands 2314 S: Netherlands
2315 2315
2316 N: David S. Miller 2316 N: David S. Miller
2317 E: davem@davemloft.net 2317 E: davem@davemloft.net
2318 D: Sparc and blue box hacker 2318 D: Sparc and blue box hacker
2319 D: Vger Linux mailing list co-maintainer 2319 D: Vger Linux mailing list co-maintainer
2320 D: Linux Emacs elf/qmagic support + other libc/gcc things 2320 D: Linux Emacs elf/qmagic support + other libc/gcc things
2321 D: Yee bore de yee bore! ;-) 2321 D: Yee bore de yee bore! ;-)
2322 S: 575 Harrison St. #103 2322 S: 575 Harrison St. #103
2323 S: San Francisco, CA 94105 2323 S: San Francisco, CA 94105
2324 S: USA 2324 S: USA
2325 2325
2326 N: Rick Miller 2326 N: Rick Miller
2327 E: rdmiller@execpc.com 2327 E: rdmiller@execpc.com
2328 W: http://www.execpc.com/~rdmiller/ 2328 W: http://www.execpc.com/~rdmiller/
2329 D: Original Linux Device Registrar (Major/minor numbers) 2329 D: Original Linux Device Registrar (Major/minor numbers)
2330 D: au-play, bwBASIC 2330 D: au-play, bwBASIC
2331 S: S78 W16203 Woods Road 2331 S: S78 W16203 Woods Road
2332 S: Muskego, Wisconsin 53150 2332 S: Muskego, Wisconsin 53150
2333 S: USA 2333 S: USA
2334 2334
2335 N: Harald Milz 2335 N: Harald Milz
2336 E: hm@seneca.linux.de 2336 E: hm@seneca.linux.de
2337 D: Linux Projects Map, Linux Commercial-HOWTO 2337 D: Linux Projects Map, Linux Commercial-HOWTO
2338 D: general Linux publicity in Germany, vacation port 2338 D: general Linux publicity in Germany, vacation port
2339 D: UUCP and CNEWS binary packages for LST 2339 D: UUCP and CNEWS binary packages for LST
2340 S: Editorial Board iX Mag 2340 S: Editorial Board iX Mag
2341 S: Helstorfer Str. 7 2341 S: Helstorfer Str. 7
2342 S: D-30625 Hannover 2342 S: D-30625 Hannover
2343 S: Germany 2343 S: Germany
2344 2344
2345 N: Corey Minyard 2345 N: Corey Minyard
2346 E: minyard@wf-rch.cirr.com 2346 E: minyard@wf-rch.cirr.com
2347 E: minyard@mvista.com 2347 E: minyard@mvista.com
2348 W: http://home.attbi.com/~minyard 2348 W: http://home.attbi.com/~minyard
2349 D: Sony CDU31A CDROM Driver 2349 D: Sony CDU31A CDROM Driver
2350 D: IPMI driver 2350 D: IPMI driver
2351 D: Various networking fixes long ago 2351 D: Various networking fixes long ago
2352 D: Original ppc_md work 2352 D: Original ppc_md work
2353 D: Shared zlib 2353 D: Shared zlib
2354 S: 7406 Wheat Field Rd 2354 S: 7406 Wheat Field Rd
2355 S: Garland, Texas 75044 2355 S: Garland, Texas 75044
2356 S: USA 2356 S: USA
2357 2357
2358 N: Kazunori Miyazawa 2358 N: Kazunori Miyazawa
2359 E: miyazawa@linux-ipv6.org 2359 E: miyazawa@linux-ipv6.org
2360 E: Kazunori.Miyazawa@jp.yokogawa.com 2360 E: Kazunori.Miyazawa@jp.yokogawa.com
2361 E: kazunori@miyazawa.org 2361 E: kazunori@miyazawa.org
2362 W: http://www.miyazawa.org/~kazunori/ 2362 W: http://www.miyazawa.org/~kazunori/
2363 D: IPsec, IPv6 2363 D: IPsec, IPv6
2364 D: USAGI/WIDE Project, Yokogawa Electric Corporation 2364 D: USAGI/WIDE Project, Yokogawa Electric Corporation
2365 S: 2-20-4-203, Nakacho, 2365 S: 2-20-4-203, Nakacho,
2366 S: Musashino, Tokyo 180-0006 2366 S: Musashino, Tokyo 180-0006
2367 S: Japan 2367 S: Japan
2368 2368
2369 N: Patrick Mochel 2369 N: Patrick Mochel
2370 E: mochel@osdl.org 2370 E: mochel@osdl.org
2371 E: mochelp@infinity.powertie.org 2371 E: mochelp@infinity.powertie.org
2372 D: PCI Power Management, ACPI work 2372 D: PCI Power Management, ACPI work
2373 S: 12725 SW Millikan Way, Suite 400 2373 S: 12725 SW Millikan Way, Suite 400
2374 S: Beaverton, Oregon 97005 2374 S: Beaverton, Oregon 97005
2375 S: USA 2375 S: USA
2376 2376
2377 N: Eberhard Moenkeberg 2377 N: Eberhard Moenkeberg
2378 E: emoenke@gwdg.de 2378 E: emoenke@gwdg.de
2379 D: CDROM driver "sbpcd" (Matsushita/Panasonic/Soundblaster) 2379 D: CDROM driver "sbpcd" (Matsushita/Panasonic/Soundblaster)
2380 S: Ruhstrathoehe 2 b. 2380 S: Ruhstrathoehe 2 b.
2381 S: D-37085 Goettingen 2381 S: D-37085 Goettingen
2382 S: Germany 2382 S: Germany
2383 2383
2384 N: Thomas Molina 2384 N: Thomas Molina
2385 E: tmolina@cablespeed.com 2385 E: tmolina@cablespeed.com
2386 D: bug fixes, documentation, minor hackery 2386 D: bug fixes, documentation, minor hackery
2387 2387
2388 N: Paul Moore 2388 N: Paul Moore
2389 E: paul.moore@hp.com 2389 E: paul.moore@hp.com
2390 D: NetLabel author 2390 D: NetLabel author
2391 S: Hewlett-Packard 2391 S: Hewlett-Packard
2392 S: 110 Spit Brook Road 2392 S: 110 Spit Brook Road
2393 S: Nashua, NH 03062 2393 S: Nashua, NH 03062
2394 2394
2395 N: James Morris 2395 N: James Morris
2396 E: jmorris@namei.org 2396 E: jmorris@namei.org
2397 W: http://namei.org/ 2397 W: http://namei.org/
2398 D: Netfilter, Linux Security Modules (LSM), SELinux, IPSec, 2398 D: Netfilter, Linux Security Modules (LSM), SELinux, IPSec,
2399 D: Crypto API, general networking, miscellaneous. 2399 D: Crypto API, general networking, miscellaneous.
2400 S: PO Box 707 2400 S: PO Box 707
2401 S: Spit Junction NSW 2088 2401 S: Spit Junction NSW 2088
2402 S: Australia 2402 S: Australia
2403 2403
2404 N: David Mosberger-Tang 2404 N: David Mosberger-Tang
2405 E: davidm@hpl.hp.com if IA-64 related, else David.Mosberger@acm.org 2405 E: davidm@hpl.hp.com if IA-64 related, else David.Mosberger@acm.org
2406 D: Linux/Alpha and Linux/ia64 2406 D: Linux/Alpha and Linux/ia64
2407 S: 35706 Runckel Lane 2407 S: 35706 Runckel Lane
2408 S: Fremont, California 94536 2408 S: Fremont, California 94536
2409 S: USA 2409 S: USA
2410 2410
2411 N: Sam Mosel 2411 N: Sam Mosel
2412 E: sam.mosel@computer.org 2412 E: sam.mosel@computer.org
2413 D: Wacom Intuos USB Support 2413 D: Wacom Intuos USB Support
2414 S: 22 Seaview St 2414 S: 22 Seaview St
2415 S: Fullarton 5063 2415 S: Fullarton 5063
2416 S: South Australia 2416 S: South Australia
2417 2417
2418 N. Wolfgang Muees 2418 N. Wolfgang Muees
2419 E: wolfgang@iksw-muees.de 2419 E: wolfgang@iksw-muees.de
2420 D: Auerswald USB driver 2420 D: Auerswald USB driver
2421 2421
2422 N: Ian A. Murdock 2422 N: Ian A. Murdock
2423 E: imurdock@gnu.ai.mit.edu 2423 E: imurdock@gnu.ai.mit.edu
2424 D: Creator of Debian distribution 2424 D: Creator of Debian distribution
2425 S: 30 White Tail Lane 2425 S: 30 White Tail Lane
2426 S: Lafayette, Indiana 47905 2426 S: Lafayette, Indiana 47905
2427 S: USA 2427 S: USA
2428 2428
2429 N: Scott Murray 2429 N: Scott Murray
2430 E: scottm@somanetworks.com 2430 E: scottm@somanetworks.com
2431 E: scott@spiteful.org 2431 E: scott@spiteful.org
2432 D: OPL3-SA2, OPL3-SA3 sound driver 2432 D: OPL3-SA2, OPL3-SA3 sound driver
2433 D: CompactPCI hotplug core 2433 D: CompactPCI hotplug core
2434 D: Ziatech ZT5550 and generic CompactPCI hotplug drivers 2434 D: Ziatech ZT5550 and generic CompactPCI hotplug drivers
2435 S: Toronto, Ontario 2435 S: Toronto, Ontario
2436 S: Canada 2436 S: Canada
2437 2437
2438 N: Zwane Mwaikambo 2438 N: Zwane Mwaikambo
2439 E: zwane@arm.linux.org.uk 2439 E: zwane@arm.linux.org.uk
2440 D: Various driver hacking 2440 D: Various driver hacking
2441 D: Lowlevel x86 kernel hacking 2441 D: Lowlevel x86 kernel hacking
2442 D: General debugging 2442 D: General debugging
2443 S: (ask for current address) 2443 S: (ask for current address)
2444 S: Tanzania 2444 S: Tanzania
2445 2445
2446 N: Trond Myklebust 2446 N: Trond Myklebust
2447 E: trond.myklebust@fys.uio.no 2447 E: trond.myklebust@fys.uio.no
2448 D: current NFS client hacker. 2448 D: current NFS client hacker.
2449 S: Dagaliveien 31e 2449 S: Dagaliveien 31e
2450 S: N-0391 Oslo 2450 S: N-0391 Oslo
2451 S: Norway 2451 S: Norway
2452 2452
2453 N: Johan Myreen 2453 N: Johan Myreen
2454 E: jem@iki.fi 2454 E: jem@iki.fi
2455 D: PS/2 mouse driver writer etc. 2455 D: PS/2 mouse driver writer etc.
2456 S: Dragonvagen 1 A 13 2456 S: Dragonvagen 1 A 13
2457 S: FIN-00330 Helsingfors 2457 S: FIN-00330 Helsingfors
2458 S: Finland 2458 S: Finland
2459 2459
2460 N: Matija Nalis 2460 N: Matija Nalis
2461 E: mnalis@jagor.srce.hr 2461 E: mnalis@jagor.srce.hr
2462 E: mnalis@voyager.hr 2462 E: mnalis@voyager.hr
2463 D: Maintainer of the Umsdos file system 2463 D: Maintainer of the Umsdos file system
2464 S: Listopadska 7 2464 S: Listopadska 7
2465 S: 10000 Zagreb 2465 S: 10000 Zagreb
2466 S: Croatia 2466 S: Croatia
2467 2467
2468 N: Jonathan Naylor 2468 N: Jonathan Naylor
2469 E: g4klx@g4klx.demon.co.uk 2469 E: g4klx@g4klx.demon.co.uk
2470 E: g4klx@amsat.org 2470 E: g4klx@amsat.org
2471 W: http://zone.pspt.fi/~jsn/ 2471 W: http://zone.pspt.fi/~jsn/
2472 D: AX.25, NET/ROM and ROSE amateur radio protocol suites 2472 D: AX.25, NET/ROM and ROSE amateur radio protocol suites
2473 D: CCITT X.25 PLP and LAPB. 2473 D: CCITT X.25 PLP and LAPB.
2474 S: 24 Castle View Drive 2474 S: 24 Castle View Drive
2475 S: Cromford 2475 S: Cromford
2476 S: Matlock 2476 S: Matlock
2477 S: Derbyshire DE4 3RL 2477 S: Derbyshire DE4 3RL
2478 S: United Kingdom 2478 S: United Kingdom
2479 2479
2480 N: Ian S. Nelson 2480 N: Ian S. Nelson
2481 E: ian.nelson@echostar.com 2481 E: nelsonis@earthlink.net
2482 P: 1024D/00D3D983 3EFD 7B86 B888 D7E2 29B6 9E97 576F 1B97 00D3 D983
2482 D: Minor mmap and ide hacks 2483 D: Minor mmap and ide hacks
2483 S: 1370 Atlantis Ave. 2484 S: 1370 Atlantis Ave.
2484 S: Lafayette CO, 80026 2485 S: Lafayette CO, 80026
2485 S: USA 2486 S: USA
2486 2487
2487 N: Russell Nelson 2488 N: Russell Nelson
2488 E: nelson@crynwr.com 2489 E: nelson@crynwr.com
2489 W: http://www.crynwr.com/~nelson 2490 W: http://www.crynwr.com/~nelson
2490 P: 1024/83942741 FF 68 EE 27 A0 5A AA C3 F5 DC 05 62 BD 5B 20 2F 2491 P: 1024/83942741 FF 68 EE 27 A0 5A AA C3 F5 DC 05 62 BD 5B 20 2F
2491 D: Author of cs89x0, maintainer of kernel changelog through 1.3.3 2492 D: Author of cs89x0, maintainer of kernel changelog through 1.3.3
2492 D: Wrote many packet drivers, from which some Ethernet drivers are derived. 2493 D: Wrote many packet drivers, from which some Ethernet drivers are derived.
2493 S: 521 Pleasant Valley Road 2494 S: 521 Pleasant Valley Road
2494 S: Potsdam, New York 13676 2495 S: Potsdam, New York 13676
2495 S: USA 2496 S: USA
2496 2497
2497 N: Dave Neuer 2498 N: Dave Neuer
2498 E: dave.neuer@pobox.com 2499 E: dave.neuer@pobox.com
2499 D: Helped implement support for Compaq's H31xx series iPAQs 2500 D: Helped implement support for Compaq's H31xx series iPAQs
2500 D: Other mostly minor tweaks & bugfixes 2501 D: Other mostly minor tweaks & bugfixes
2501 2502
2502 N: Michael Neuffer 2503 N: Michael Neuffer
2503 E: mike@i-Connect.Net 2504 E: mike@i-Connect.Net
2504 E: neuffer@goofy.zdv.uni-mainz.de 2505 E: neuffer@goofy.zdv.uni-mainz.de
2505 W: http://www.i-Connect.Net/~mike/ 2506 W: http://www.i-Connect.Net/~mike/
2506 D: Developer and maintainer of the EATA-DMA SCSI driver 2507 D: Developer and maintainer of the EATA-DMA SCSI driver
2507 D: Co-developer EATA-PIO SCSI driver 2508 D: Co-developer EATA-PIO SCSI driver
2508 D: /proc/scsi and assorted other snippets 2509 D: /proc/scsi and assorted other snippets
2509 S: Zum Schiersteiner Grund 2 2510 S: Zum Schiersteiner Grund 2
2510 S: 55127 Mainz 2511 S: 55127 Mainz
2511 S: Germany 2512 S: Germany
2512 2513
2513 N: Gustavo Niemeyer 2514 N: Gustavo Niemeyer
2514 E: niemeyer@conectiva.com 2515 E: niemeyer@conectiva.com
2515 W: https://moin.conectiva.com.br/GustavoNiemeyer 2516 W: https://moin.conectiva.com.br/GustavoNiemeyer
2516 D: wl3501 PCMCIA wireless card initial support for wireless extensions in 2.4 2517 D: wl3501 PCMCIA wireless card initial support for wireless extensions in 2.4
2517 S: Conectiva S.A. 2518 S: Conectiva S.A.
2518 S: R. Tocantins 89 2519 S: R. Tocantins 89
2519 S: 80050-430 Curitiba PR 2520 S: 80050-430 Curitiba PR
2520 S: Brazil 2521 S: Brazil
2521 2522
2522 N: David C. Niemi 2523 N: David C. Niemi
2523 E: niemi@tux.org 2524 E: niemi@tux.org
2524 W: http://www.tux.org/~niemi/ 2525 W: http://www.tux.org/~niemi/
2525 D: Assistant maintainer of Mtools, fdutils, and floppy driver 2526 D: Assistant maintainer of Mtools, fdutils, and floppy driver
2526 D: Administrator of Tux.Org Linux Server, http://www.tux.org 2527 D: Administrator of Tux.Org Linux Server, http://www.tux.org
2527 S: 2364 Old Trail Drive 2528 S: 2364 Old Trail Drive
2528 S: Reston, Virginia 20191 2529 S: Reston, Virginia 20191
2529 S: USA 2530 S: USA
2530 2531
2531 N: Fredrik Noring 2532 N: Fredrik Noring
2532 E: noring@nocrew.org 2533 E: noring@nocrew.org
2533 W: http://www.lysator.liu.se/~noring/ 2534 W: http://www.lysator.liu.se/~noring/
2534 D: dsp56k device driver 2535 D: dsp56k device driver
2535 2536
2536 N: Michael O'Reilly 2537 N: Michael O'Reilly
2537 E: michael@iinet.com.au 2538 E: michael@iinet.com.au
2538 E: oreillym@tartarus.uwa.edu.au 2539 E: oreillym@tartarus.uwa.edu.au
2539 D: Wrote the original dynamic sized disk cache stuff. I think the only 2540 D: Wrote the original dynamic sized disk cache stuff. I think the only
2540 D: part that remains is the GFP_KERNEL et al #defines. :) 2541 D: part that remains is the GFP_KERNEL et al #defines. :)
2541 S: 192 Nichsolson Road 2542 S: 192 Nichsolson Road
2542 S: Subiaco, 6008 2543 S: Subiaco, 6008
2543 S: Perth, Western Australia 2544 S: Perth, Western Australia
2544 S: Australia 2545 S: Australia
2545 2546
2546 N: Greg Page 2547 N: Greg Page
2547 E: gpage@sovereign.org 2548 E: gpage@sovereign.org
2548 D: IPX development and support 2549 D: IPX development and support
2549 2550
2550 N: David Parsons 2551 N: David Parsons
2551 E: orc@pell.chi.il.us 2552 E: orc@pell.chi.il.us
2552 D: improved memory detection code. 2553 D: improved memory detection code.
2553 2554
2554 N: Ivan Passos 2555 N: Ivan Passos
2555 E: ivan@cyclades.com 2556 E: ivan@cyclades.com
2556 D: Author of the Cyclades-PC300 synchronous card driver 2557 D: Author of the Cyclades-PC300 synchronous card driver
2557 D: Maintainer of the Cyclom-Y/Cyclades-Z asynchronous card driver 2558 D: Maintainer of the Cyclom-Y/Cyclades-Z asynchronous card driver
2558 S: Cyclades Corp 2559 S: Cyclades Corp
2559 S: 41934 Christy St 2560 S: 41934 Christy St
2560 S: Fremont, CA 94538 2561 S: Fremont, CA 94538
2561 S: USA 2562 S: USA
2562 2563
2563 N: Mikulas Patocka 2564 N: Mikulas Patocka
2564 E: mikulas@artax.karlin.mff.cuni.cz 2565 E: mikulas@artax.karlin.mff.cuni.cz
2565 W: http://artax.karlin.mff.cuni.cz/~mikulas/ 2566 W: http://artax.karlin.mff.cuni.cz/~mikulas/
2566 P: 1024/BB11D2D5 A0 F1 28 4A C4 14 1E CF 92 58 7A 8F 69 BC A4 D3 2567 P: 1024/BB11D2D5 A0 F1 28 4A C4 14 1E CF 92 58 7A 8F 69 BC A4 D3
2567 D: Read/write HPFS filesystem 2568 D: Read/write HPFS filesystem
2568 S: Weissova 8 2569 S: Weissova 8
2569 S: 644 00 Brno 2570 S: 644 00 Brno
2570 S: Czech Republic 2571 S: Czech Republic
2571 2572
2572 N: Vojtech Pavlik 2573 N: Vojtech Pavlik
2573 E: vojtech@suse.cz 2574 E: vojtech@suse.cz
2574 D: Joystick driver 2575 D: Joystick driver
2575 D: arcnet-hardware readme 2576 D: arcnet-hardware readme
2576 D: Minor ARCnet hacking 2577 D: Minor ARCnet hacking
2577 D: USB (HID, ACM, Printer ...) 2578 D: USB (HID, ACM, Printer ...)
2578 S: Ucitelska 1576 2579 S: Ucitelska 1576
2579 S: Prague 8 2580 S: Prague 8
2580 S: 182 00 Czech Republic 2581 S: 182 00 Czech Republic
2581 2582
2582 N: Barak A. Pearlmutter 2583 N: Barak A. Pearlmutter
2583 E: bap@cs.unm.edu 2584 E: bap@cs.unm.edu
2584 W: http://www.cs.unm.edu/~bap/ 2585 W: http://www.cs.unm.edu/~bap/
2585 P: 512/602D785D 9B A1 83 CD EE CB AD 93 20 C6 4C B7 F5 E9 60 D4 2586 P: 512/602D785D 9B A1 83 CD EE CB AD 93 20 C6 4C B7 F5 E9 60 D4
2586 D: Author of mark-and-sweep GC integrated by Alan Cox 2587 D: Author of mark-and-sweep GC integrated by Alan Cox
2587 S: Computer Science Department 2588 S: Computer Science Department
2588 S: FEC 313 2589 S: FEC 313
2589 S: University of New Mexico 2590 S: University of New Mexico
2590 S: Albuquerque, New Mexico 87131 2591 S: Albuquerque, New Mexico 87131
2591 S: USA 2592 S: USA
2592 2593
2593 N: Avery Pennarun 2594 N: Avery Pennarun
2594 E: apenwarr@worldvisions.ca 2595 E: apenwarr@worldvisions.ca
2595 W: http://www.worldvisions.ca/~apenwarr/ 2596 W: http://www.worldvisions.ca/~apenwarr/
2596 D: ARCnet driver 2597 D: ARCnet driver
2597 D: "make xconfig" improvements 2598 D: "make xconfig" improvements
2598 D: Various minor hacking 2599 D: Various minor hacking
2599 S: RR #5, 497 Pole Line Road 2600 S: RR #5, 497 Pole Line Road
2600 S: Thunder Bay, Ontario 2601 S: Thunder Bay, Ontario
2601 S: CANADA P7C 5M9 2602 S: CANADA P7C 5M9
2602 2603
2603 N: Yuri Per 2604 N: Yuri Per
2604 E: yuri@pts.mipt.ru 2605 E: yuri@pts.mipt.ru
2605 D: Some smbfs fixes 2606 D: Some smbfs fixes
2606 S: Demonstratsii 8-382 2607 S: Demonstratsii 8-382
2607 S: Tula 300000 2608 S: Tula 300000
2608 S: Russia 2609 S: Russia
2609 2610
2610 N: Gordon Peters 2611 N: Gordon Peters
2611 E: GordPeters@smarttech.com 2612 E: GordPeters@smarttech.com
2612 D: Isochronous receive for IEEE 1394 driver (OHCI module). 2613 D: Isochronous receive for IEEE 1394 driver (OHCI module).
2613 D: Bugfixes for the aforementioned. 2614 D: Bugfixes for the aforementioned.
2614 S: Calgary, Alberta 2615 S: Calgary, Alberta
2615 S: Canada 2616 S: Canada
2616 2617
2617 N: Johnnie Peters 2618 N: Johnnie Peters
2618 E: jpeters@phx.mcd.mot.com 2619 E: jpeters@phx.mcd.mot.com
2619 D: Motorola PowerPC changes for PReP 2620 D: Motorola PowerPC changes for PReP
2620 S: 2900 S. Diable Way 2621 S: 2900 S. Diable Way
2621 S: Tempe, Arizona 85282 2622 S: Tempe, Arizona 85282
2622 S: USA 2623 S: USA
2623 2624
2624 N: Kirk Petersen 2625 N: Kirk Petersen
2625 E: kirk@speakeasy.org 2626 E: kirk@speakeasy.org
2626 W: http://www.speakeasy.org/~kirk/ 2627 W: http://www.speakeasy.org/~kirk/
2627 D: implemented kmod 2628 D: implemented kmod
2628 D: modularized BSD Unix domain sockets 2629 D: modularized BSD Unix domain sockets
2629 2630
2630 N: Martin Kasper Petersen 2631 N: Martin Kasper Petersen
2631 E: mkp@mkp.net 2632 E: mkp@mkp.net
2632 D: PA-RISC port 2633 D: PA-RISC port
2633 D: XFS file system 2634 D: XFS file system
2634 D: kiobuf based block I/O work 2635 D: kiobuf based block I/O work
2635 S: 314 Frank St. 2636 S: 314 Frank St.
2636 S: Ottawa, Ontario 2637 S: Ottawa, Ontario
2637 S: Canada K2P 0X8 2638 S: Canada K2P 0X8
2638 2639
2639 N: Mikael Pettersson 2640 N: Mikael Pettersson
2640 E: mikpe@csd.uu.se 2641 E: mikpe@csd.uu.se
2641 W: http://www.csd.uu.se/~mikpe/ 2642 W: http://www.csd.uu.se/~mikpe/
2642 D: Miscellaneous fixes 2643 D: Miscellaneous fixes
2643 2644
2644 N: Reed H. Petty 2645 N: Reed H. Petty
2645 E: rhp@draper.net 2646 E: rhp@draper.net
2646 W: http://www.draper.net 2647 W: http://www.draper.net
2647 D: Loop device driver extensions 2648 D: Loop device driver extensions
2648 D: Encryption transfer modules (no export) 2649 D: Encryption transfer modules (no export)
2649 S: Post Office Box 1815 2650 S: Post Office Box 1815
2650 S: Harrison, Arkansas 72602-1815 2651 S: Harrison, Arkansas 72602-1815
2651 S: USA 2652 S: USA
2652 2653
2653 N: Kai Petzke 2654 N: Kai Petzke
2654 E: petzke@teltarif.de 2655 E: petzke@teltarif.de
2655 W: http://www.teltarif.de/ 2656 W: http://www.teltarif.de/
2656 P: 1024/B42868C1 D9 59 B9 98 BB 93 05 38 2E 3E 31 79 C3 65 5D E1 2657 P: 1024/B42868C1 D9 59 B9 98 BB 93 05 38 2E 3E 31 79 C3 65 5D E1
2657 D: Driver for Laser Magnetic Storage CD-ROM 2658 D: Driver for Laser Magnetic Storage CD-ROM
2658 D: Some kernel bug fixes 2659 D: Some kernel bug fixes
2659 D: Port of the database Postgres 2660 D: Port of the database Postgres
2660 D: Book: "Linux verstehen und anwenden" (Hanser-Verlag) 2661 D: Book: "Linux verstehen und anwenden" (Hanser-Verlag)
2661 S: Triftstra=DFe 55 2662 S: Triftstra=DFe 55
2662 S: 13353 Berlin 2663 S: 13353 Berlin
2663 S: Germany 2664 S: Germany
2664 2665
2665 N: Emanuel Pirker 2666 N: Emanuel Pirker
2666 E: epirker@edu.uni-klu.ac.at 2667 E: epirker@edu.uni-klu.ac.at
2667 D: AIC5800 IEEE 1394, RAW I/O on 1394 2668 D: AIC5800 IEEE 1394, RAW I/O on 1394
2668 D: Starter of Linux1394 effort 2669 D: Starter of Linux1394 effort
2669 S: ask per mail for current address 2670 S: ask per mail for current address
2670 2671
2671 N: Nicolas Pitre 2672 N: Nicolas Pitre
2672 E: nico@cam.org 2673 E: nico@cam.org
2673 D: StrongARM SA1100 support integrator & hacker 2674 D: StrongARM SA1100 support integrator & hacker
2674 D: Xscale PXA architecture 2675 D: Xscale PXA architecture
2675 D: unified SMC 91C9x/91C11x ethernet driver (smc91x) 2676 D: unified SMC 91C9x/91C11x ethernet driver (smc91x)
2676 S: Montreal, Quebec, Canada 2677 S: Montreal, Quebec, Canada
2677 2678
2678 N: Ken Pizzini 2679 N: Ken Pizzini
2679 E: ken@halcyon.com 2680 E: ken@halcyon.com
2680 D: CDROM driver "sonycd535" (Sony CDU-535/531) 2681 D: CDROM driver "sonycd535" (Sony CDU-535/531)
2681 2682
2682 N: Stelian Pop 2683 N: Stelian Pop
2683 E: stelian@popies.net 2684 E: stelian@popies.net
2684 P: 1024D/EDBB6147 7B36 0E07 04BC 11DC A7A0 D3F7 7185 9E7A EDBB 6147 2685 P: 1024D/EDBB6147 7B36 0E07 04BC 11DC A7A0 D3F7 7185 9E7A EDBB 6147
2685 D: sonypi, meye drivers, mct_u232 usb serial hacks 2686 D: sonypi, meye drivers, mct_u232 usb serial hacks
2686 S: Paris, France 2687 S: Paris, France
2687 2688
2688 N: Pete Popov 2689 N: Pete Popov
2689 E: pete_popov@yahoo.com 2690 E: pete_popov@yahoo.com
2690 D: Linux/MIPS AMD/Alchemy Port and mips hacking and debugging 2691 D: Linux/MIPS AMD/Alchemy Port and mips hacking and debugging
2691 S: San Jose, CA 95134 2692 S: San Jose, CA 95134
2692 S: USA 2693 S: USA
2693 2694
2694 N: Matt Porter 2695 N: Matt Porter
2695 E: mporter@kernel.crashing.org 2696 E: mporter@kernel.crashing.org
2696 D: Motorola PowerPC PReP support 2697 D: Motorola PowerPC PReP support
2697 D: cPCI PowerPC support 2698 D: cPCI PowerPC support
2698 D: Embedded PowerPC 4xx/6xx/7xx/74xx support 2699 D: Embedded PowerPC 4xx/6xx/7xx/74xx support
2699 S: Chandler, Arizona 85249 2700 S: Chandler, Arizona 85249
2700 S: USA 2701 S: USA
2701 2702
2702 N: Frederic Potter 2703 N: Frederic Potter
2703 E: fpotter@cirpack.com 2704 E: fpotter@cirpack.com
2704 D: Some PCI kernel support 2705 D: Some PCI kernel support
2705 2706
2706 N: Rui Prior 2707 N: Rui Prior
2707 E: rprior@inescn.pt 2708 E: rprior@inescn.pt
2708 D: ATM device driver for NICStAR based cards 2709 D: ATM device driver for NICStAR based cards
2709 2710
2710 N: Stefan Probst 2711 N: Stefan Probst
2711 E: sp@caldera.de 2712 E: sp@caldera.de
2712 D: The Linux Support Team Erlangen, 1993-97 2713 D: The Linux Support Team Erlangen, 1993-97
2713 S: Caldera (Deutschland) GmbH 2714 S: Caldera (Deutschland) GmbH
2714 S: Lazarettstrasse 8 2715 S: Lazarettstrasse 8
2715 S: 91054 Erlangen 2716 S: 91054 Erlangen
2716 S: Germany 2717 S: Germany
2717 2718
2718 N: Giuliano Procida 2719 N: Giuliano Procida
2719 E: myxie@debian.org,gprocida@madge.com 2720 E: myxie@debian.org,gprocida@madge.com
2720 D: Madge Ambassador driver (Collage 155 Server ATM adapter) 2721 D: Madge Ambassador driver (Collage 155 Server ATM adapter)
2721 D: Madge Horizon driver (Collage 25 and 155 Client ATM adapters) 2722 D: Madge Horizon driver (Collage 25 and 155 Client ATM adapters)
2722 P: 1024/93898735 D3 9E F4 F7 6D 8D 2F 3A 38 BA 06 7C 2B 33 43 7D 2723 P: 1024/93898735 D3 9E F4 F7 6D 8D 2F 3A 38 BA 06 7C 2B 33 43 7D
2723 S: Madge Networks 2724 S: Madge Networks
2724 S: Framewood Road 2725 S: Framewood Road
2725 S: Wexham SL3 6PJ 2726 S: Wexham SL3 6PJ
2726 S: United Kingdom 2727 S: United Kingdom
2727 2728
2728 N: Daniel Quinlan 2729 N: Daniel Quinlan
2729 E: quinlan@pathname.com 2730 E: quinlan@pathname.com
2730 W: http://www.pathname.com/~quinlan/ 2731 W: http://www.pathname.com/~quinlan/
2731 D: FSSTND coordinator; FHS editor 2732 D: FSSTND coordinator; FHS editor
2732 D: random Linux documentation, patches, and hacks 2733 D: random Linux documentation, patches, and hacks
2733 S: 4390 Albany Drive #41A 2734 S: 4390 Albany Drive #41A
2734 S: San Jose, California 95129 2735 S: San Jose, California 95129
2735 S: USA 2736 S: USA
2736 2737
2737 N: Juan Quintela 2738 N: Juan Quintela
2738 E: quintela@fi.udc.es 2739 E: quintela@fi.udc.es
2739 D: Memory Management hacking 2740 D: Memory Management hacking
2740 S: LFCIA 2741 S: LFCIA
2741 S: Departamento de Computaciรณn 2742 S: Departamento de Computaciรณn
2742 S: Universidade da Coruรฑa 2743 S: Universidade da Coruรฑa
2743 S: E-15071 2744 S: E-15071
2744 S: A Coruรฑa 2745 S: A Coruรฑa
2745 S: Spain 2746 S: Spain
2746 2747
2747 N: Augusto Cesar Radtke 2748 N: Augusto Cesar Radtke
2748 E: bishop@sekure.org 2749 E: bishop@sekure.org
2749 W: http://bishop.sekure.org 2750 W: http://bishop.sekure.org
2750 D: {copy,get,put}_user calls updates 2751 D: {copy,get,put}_user calls updates
2751 D: Miscellaneous hacks 2752 D: Miscellaneous hacks
2752 S: R. Otto Marquardt, 226 - Garcia 2753 S: R. Otto Marquardt, 226 - Garcia
2753 S: 89020-350 Blumenau - Santa Catarina 2754 S: 89020-350 Blumenau - Santa Catarina
2754 S: Brazil 2755 S: Brazil
2755 2756
2756 N: Goutham Rao 2757 N: Goutham Rao
2757 E: goutham.rao@intel.com 2758 E: goutham.rao@intel.com
2758 D: Linux/IA-64 2759 D: Linux/IA-64
2759 S: 2200 Mission College Blvd 2760 S: 2200 Mission College Blvd
2760 S: Santa Clara, CA 95052 2761 S: Santa Clara, CA 95052
2761 S: USA 2762 S: USA
2762 2763
2763 N: Eric S. Raymond 2764 N: Eric S. Raymond
2764 E: esr@thyrsus.com 2765 E: esr@thyrsus.com
2765 W: http://www.tuxedo.org/~esr/ 2766 W: http://www.tuxedo.org/~esr/
2766 D: terminfo master file maintainer 2767 D: terminfo master file maintainer
2767 D: Editor: Installation HOWTO, Distributions HOWTO, XFree86 HOWTO 2768 D: Editor: Installation HOWTO, Distributions HOWTO, XFree86 HOWTO
2768 D: Author: fetchmail, Emacs VC mode, Emacs GUD mode 2769 D: Author: fetchmail, Emacs VC mode, Emacs GUD mode
2769 S: 6 Karen Drive 2770 S: 6 Karen Drive
2770 S: Malvern, Pennsylvania 19355 2771 S: Malvern, Pennsylvania 19355
2771 S: USA 2772 S: USA
2772 2773
2773 N: Stefan Reinauer 2774 N: Stefan Reinauer
2774 E: stepan@linux.de 2775 E: stepan@linux.de
2775 W: http://www.freiburg.linux.de/~stepan/ 2776 W: http://www.freiburg.linux.de/~stepan/
2776 D: Modularization of some filesystems 2777 D: Modularization of some filesystems
2777 D: /proc/sound, minor fixes 2778 D: /proc/sound, minor fixes
2778 S: Schlossbergring 9 2779 S: Schlossbergring 9
2779 S: 79098 Freiburg 2780 S: 79098 Freiburg
2780 S: Germany 2781 S: Germany
2781 2782
2782 N: Joerg Reuter 2783 N: Joerg Reuter
2783 E: jreuter@yaina.de 2784 E: jreuter@yaina.de
2784 W: http://yaina.de/jreuter/ 2785 W: http://yaina.de/jreuter/
2785 W: http://www.qsl.net/dl1bke/ 2786 W: http://www.qsl.net/dl1bke/
2786 D: Generic Z8530 driver, AX.25 DAMA slave implementation 2787 D: Generic Z8530 driver, AX.25 DAMA slave implementation
2787 D: Several AX.25 hacks 2788 D: Several AX.25 hacks
2788 2789
2789 N: Francois-Rene Rideau 2790 N: Francois-Rene Rideau
2790 E: fare@tunes.org 2791 E: fare@tunes.org
2791 W: http://www.tunes.org/~fare 2792 W: http://www.tunes.org/~fare
2792 D: petty kernel janitor (byteorder, ufs) 2793 D: petty kernel janitor (byteorder, ufs)
2793 S: 6, rue Augustin Thierry 2794 S: 6, rue Augustin Thierry
2794 S: 75019 Paris 2795 S: 75019 Paris
2795 S: France 2796 S: France
2796 2797
2797 N: Rik van Riel 2798 N: Rik van Riel
2798 E: riel@redhat.com 2799 E: riel@redhat.com
2799 W: http://www.surriel.com/ 2800 W: http://www.surriel.com/
2800 D: Linux-MM site, Documentation/sysctl/*, swap/mm readaround 2801 D: Linux-MM site, Documentation/sysctl/*, swap/mm readaround
2801 D: kswapd fixes, random kernel hacker, rmap VM, 2802 D: kswapd fixes, random kernel hacker, rmap VM,
2802 D: nl.linux.org administrator, minor scheduler additions 2803 D: nl.linux.org administrator, minor scheduler additions
2803 S: Red Hat Boston 2804 S: Red Hat Boston
2804 S: 3 Lan Drive 2805 S: 3 Lan Drive
2805 S: Westford, MA 01886 2806 S: Westford, MA 01886
2806 S: USA 2807 S: USA
2807 2808
2808 N: Pekka Riikonen 2809 N: Pekka Riikonen
2809 E: priikone@poseidon.pspt.fi 2810 E: priikone@poseidon.pspt.fi
2810 E: priikone@ssh.com 2811 E: priikone@ssh.com
2811 D: Random kernel hacking and bug fixes 2812 D: Random kernel hacking and bug fixes
2812 D: International kernel patch project 2813 D: International kernel patch project
2813 S: Kasarmikatu 11 A4 2814 S: Kasarmikatu 11 A4
2814 S: 70110 Kuopio 2815 S: 70110 Kuopio
2815 S: Finland 2816 S: Finland
2816 2817
2817 N: Luca Risolia 2818 N: Luca Risolia
2818 E: luca.risolia@studio.unibo.it 2819 E: luca.risolia@studio.unibo.it
2819 P: 1024D/FCE635A4 88E8 F32F 7244 68BA 3958 5D40 99DA 5D2A FCE6 35A4 2820 P: 1024D/FCE635A4 88E8 F32F 7244 68BA 3958 5D40 99DA 5D2A FCE6 35A4
2820 D: V4L driver for W996[87]CF JPEG USB Dual Mode Camera Chips 2821 D: V4L driver for W996[87]CF JPEG USB Dual Mode Camera Chips
2821 D: V4L2 driver for SN9C10x PC Camera Controllers 2822 D: V4L2 driver for SN9C10x PC Camera Controllers
2822 D: V4L2 driver for ET61X151 and ET61X251 PC Camera Controllers 2823 D: V4L2 driver for ET61X151 and ET61X251 PC Camera Controllers
2823 D: V4L2 driver for ZC0301 Image Processor and Control Chip 2824 D: V4L2 driver for ZC0301 Image Processor and Control Chip
2824 S: Via Liberta' 41/A 2825 S: Via Liberta' 41/A
2825 S: Osio Sotto, 24046, Bergamo 2826 S: Osio Sotto, 24046, Bergamo
2826 S: Italy 2827 S: Italy
2827 2828
2828 N: William E. Roadcap 2829 N: William E. Roadcap
2829 E: roadcapw@cfw.com 2830 E: roadcapw@cfw.com
2830 W: http://www.cfw.com/~roadcapw 2831 W: http://www.cfw.com/~roadcapw
2831 D: Author of menu based configuration tool, Menuconfig. 2832 D: Author of menu based configuration tool, Menuconfig.
2832 S: 1407 Broad Street 2833 S: 1407 Broad Street
2833 S: Waynesboro, Virginia 22980 2834 S: Waynesboro, Virginia 22980
2834 S: USA 2835 S: USA
2835 2836
2836 N: Andrew J. Robinson 2837 N: Andrew J. Robinson
2837 E: arobinso@nyx.net 2838 E: arobinso@nyx.net
2838 W: http://www.nyx.net/~arobinso 2839 W: http://www.nyx.net/~arobinso
2839 D: Hayes ESP serial port driver 2840 D: Hayes ESP serial port driver
2840 2841
2841 N: Florian La Roche 2842 N: Florian La Roche
2842 E: rzsfl@rz.uni-sb.de 2843 E: rzsfl@rz.uni-sb.de
2843 E: flla@stud.uni-sb.de 2844 E: flla@stud.uni-sb.de
2844 D: Net programs and kernel net hacker 2845 D: Net programs and kernel net hacker
2845 S: Gaildorfer Str. 27 2846 S: Gaildorfer Str. 27
2846 S: 7000 Stuttgart 50 2847 S: 7000 Stuttgart 50
2847 S: Germany 2848 S: Germany
2848 2849
2849 N: Christoph Rohland 2850 N: Christoph Rohland
2850 E: hans-christoph.rohland@sap.com 2851 E: hans-christoph.rohland@sap.com
2851 E: ch.rohland@gmx.net 2852 E: ch.rohland@gmx.net
2852 D: shm fs, SYSV semaphores, af_unix 2853 D: shm fs, SYSV semaphores, af_unix
2853 S: Neue Heimat Str. 8 2854 S: Neue Heimat Str. 8
2854 S: D-68789 St.Leon-Rot 2855 S: D-68789 St.Leon-Rot
2855 S: Germany 2856 S: Germany
2856 2857
2857 N: Thiago Berlitz Rondon 2858 N: Thiago Berlitz Rondon
2858 E: maluco@mileniumnet.com.br 2859 E: maluco@mileniumnet.com.br
2859 W: http://vivaldi.linuxms.com.br/~maluco 2860 W: http://vivaldi.linuxms.com.br/~maluco
2860 D: Miscellaneous kernel hacker 2861 D: Miscellaneous kernel hacker
2861 S: R. Anhanguera, 1487 - Ipiranga 2862 S: R. Anhanguera, 1487 - Ipiranga
2862 S: 79080-740 - Campo Grande - Mato Grosso do Sul 2863 S: 79080-740 - Campo Grande - Mato Grosso do Sul
2863 S: Brazil 2864 S: Brazil
2864 2865
2865 N: Stephen Rothwell 2866 N: Stephen Rothwell
2866 E: sfr@canb.auug.org.au 2867 E: sfr@canb.auug.org.au
2867 W: http://www.canb.auug.org.au/~sfr 2868 W: http://www.canb.auug.org.au/~sfr
2868 P: 1024/BD8C7805 CD A4 9D 01 10 6E 7E 3B 91 88 FA D9 C8 40 AA 02 2869 P: 1024/BD8C7805 CD A4 9D 01 10 6E 7E 3B 91 88 FA D9 C8 40 AA 02
2869 D: Boot/setup/build work for setup > 2K 2870 D: Boot/setup/build work for setup > 2K
2870 D: Author, APM driver 2871 D: Author, APM driver
2871 D: Directory notification 2872 D: Directory notification
2872 S: 66 Maltby Circuit 2873 S: 66 Maltby Circuit
2873 S: Wanniassa ACT 2903 2874 S: Wanniassa ACT 2903
2874 S: Australia 2875 S: Australia
2875 2876
2876 N: Gerard Roudier 2877 N: Gerard Roudier
2877 E: groudier@free.fr 2878 E: groudier@free.fr
2878 D: Contributed to asynchronous read-ahead improvement 2879 D: Contributed to asynchronous read-ahead improvement
2879 S: 21 Rue Carnot 2880 S: 21 Rue Carnot
2880 S: 95170 Deuil La Barre 2881 S: 95170 Deuil La Barre
2881 S: France 2882 S: France
2882 2883
2883 N: Sebastien Rougeaux 2884 N: Sebastien Rougeaux
2884 E: Sebastien.Rougeaux@syseng.anu.edu.au 2885 E: Sebastien.Rougeaux@syseng.anu.edu.au
2885 D: IEEE 1394 OHCI module 2886 D: IEEE 1394 OHCI module
2886 S: Research School of Information Science and Engineering 2887 S: Research School of Information Science and Engineering
2887 S: The Australian National University, ACT 0200 2888 S: The Australian National University, ACT 0200
2888 S: Australia 2889 S: Australia
2889 2890
2890 N: Aristeu Sergio Rozanski Filho 2891 N: Aristeu Sergio Rozanski Filho
2891 E: aris@cathedrallabs.org 2892 E: aris@cathedrallabs.org
2892 D: Support for EtherExpress 10 ISA (i82595) in eepro driver 2893 D: Support for EtherExpress 10 ISA (i82595) in eepro driver
2893 D: User level driver support for input 2894 D: User level driver support for input
2894 S: R. Jose Serrato, 130 - Santa Candida 2895 S: R. Jose Serrato, 130 - Santa Candida
2895 S: 82640-320 - Curitiba - Paranรก 2896 S: 82640-320 - Curitiba - Paranรก
2896 S: Brazil 2897 S: Brazil
2897 2898
2898 N: Alessandro Rubini 2899 N: Alessandro Rubini
2899 E: rubini@ipvvis.unipv.it 2900 E: rubini@ipvvis.unipv.it
2900 D: the gpm mouse server and kernel support for it 2901 D: the gpm mouse server and kernel support for it
2901 2902
2902 N: Philipp Rumpf 2903 N: Philipp Rumpf
2903 E: prumpf@tux.org 2904 E: prumpf@tux.org
2904 D: random bugfixes 2905 D: random bugfixes
2905 S: Drausnickstrasse 29 2906 S: Drausnickstrasse 29
2906 S: 91052 Erlangen 2907 S: 91052 Erlangen
2907 S: Germany 2908 S: Germany
2908 2909
2909 N: Paul `Rusty' Russell 2910 N: Paul `Rusty' Russell
2910 E: rusty@rustcorp.com.au 2911 E: rusty@rustcorp.com.au
2911 W: http://ozlabs.org/~rusty 2912 W: http://ozlabs.org/~rusty
2912 D: Ruggedly handsome. 2913 D: Ruggedly handsome.
2913 D: netfilter, ipchains with Michael Neuling. 2914 D: netfilter, ipchains with Michael Neuling.
2914 S: 52 Moore St 2915 S: 52 Moore St
2915 S: Turner ACT 2612 2916 S: Turner ACT 2612
2916 S: Australia 2917 S: Australia
2917 2918
2918 N: Richard Russon (FlatCap) 2919 N: Richard Russon (FlatCap)
2919 E: kernel@flatcap.org 2920 E: kernel@flatcap.org
2920 W: http://www.flatcap.org 2921 W: http://www.flatcap.org
2921 D: NTFS support 2922 D: NTFS support
2922 D: LDM support (Win2000/XP Logical Disk Manager/Dynamic Disks) 2923 D: LDM support (Win2000/XP Logical Disk Manager/Dynamic Disks)
2923 S: 50 Swansea Road 2924 S: 50 Swansea Road
2924 S: Reading 2925 S: Reading
2925 S: United Kingdom 2926 S: United Kingdom
2926 2927
2927 N: Bill Ryder 2928 N: Bill Ryder
2928 E: bryder@sgi.com 2929 E: bryder@sgi.com
2929 D: FTDI_SIO usb/serial converter driver 2930 D: FTDI_SIO usb/serial converter driver
2930 W: http://reality.sgi.com/bryder_wellington/ftdi_sio 2931 W: http://reality.sgi.com/bryder_wellington/ftdi_sio
2931 S: I/3 Walter St 2932 S: I/3 Walter St
2932 S: Wellington 2933 S: Wellington
2933 S: New Zealand 2934 S: New Zealand
2934 2935
2935 N: Sampo Saaristo 2936 N: Sampo Saaristo
2936 E: sambo@cs.tut.fi 2937 E: sambo@cs.tut.fi
2937 D: Co-author of Multi-Protocol Over ATM (MPOA) 2938 D: Co-author of Multi-Protocol Over ATM (MPOA)
2938 S: Tampere University of Technology / Telecom lab 2939 S: Tampere University of Technology / Telecom lab
2939 S: Hermiankatu 12C 2940 S: Hermiankatu 12C
2940 S: FIN-33720 Tampere 2941 S: FIN-33720 Tampere
2941 S: Finland 2942 S: Finland
2942 2943
2943 N: Thomas Sailer 2944 N: Thomas Sailer
2944 E: t.sailer@alumni.ethz.ch 2945 E: t.sailer@alumni.ethz.ch
2945 E: HB9JNX@HB9W.CHE.EU (packet radio) 2946 E: HB9JNX@HB9W.CHE.EU (packet radio)
2946 D: Baycom driver 2947 D: Baycom driver
2947 S: Markusstrasse 18 2948 S: Markusstrasse 18
2948 S: 8006 Zuerich 2949 S: 8006 Zuerich
2949 S: Switzerland 2950 S: Switzerland
2950 2951
2951 N: Manuel Estrada Sainz 2952 N: Manuel Estrada Sainz
2952 D: Firmware loader (request_firmware) 2953 D: Firmware loader (request_firmware)
2953 2954
2954 N: Wayne Salamon 2955 N: Wayne Salamon
2955 E: wsalamon@tislabs.com 2956 E: wsalamon@tislabs.com
2956 E: wsalamon@nai.com 2957 E: wsalamon@nai.com
2957 D: portions of the Linux Security Module (LSM) framework and security modules 2958 D: portions of the Linux Security Module (LSM) framework and security modules
2958 2959
2959 N: Robert Sanders 2960 N: Robert Sanders
2960 E: gt8134b@prism.gatech.edu 2961 E: gt8134b@prism.gatech.edu
2961 D: Dosemu 2962 D: Dosemu
2962 2963
2963 N: Duncan Sands 2964 N: Duncan Sands
2964 E: duncan.sands@free.fr 2965 E: duncan.sands@free.fr
2965 W: http://topo.math.u-psud.fr/~sands 2966 W: http://topo.math.u-psud.fr/~sands
2966 D: Alcatel SpeedTouch USB driver 2967 D: Alcatel SpeedTouch USB driver
2967 S: 69 rue Dunois 2968 S: 69 rue Dunois
2968 S: 75013 Paris 2969 S: 75013 Paris
2969 S: France 2970 S: France
2970 2971
2971 N: Hannu Savolainen 2972 N: Hannu Savolainen
2972 E: hannu@opensound.com 2973 E: hannu@opensound.com
2973 D: Maintainer of the sound drivers until 2.1.x days. 2974 D: Maintainer of the sound drivers until 2.1.x days.
2974 D: Original compressed boot image support. 2975 D: Original compressed boot image support.
2975 S: Valurink. 4A11 2976 S: Valurink. 4A11
2976 S: 03600 Karkkila 2977 S: 03600 Karkkila
2977 S: Finland 2978 S: Finland
2978 2979
2979 N: Deepak Saxena 2980 N: Deepak Saxena
2980 E: dsaxena@plexity.net 2981 E: dsaxena@plexity.net
2981 D: I2O kernel layer (config, block, core, pci, net). I2O disk support for LILO 2982 D: I2O kernel layer (config, block, core, pci, net). I2O disk support for LILO
2982 D: XScale(IOP, IXP) porting and other random ARM bits 2983 D: XScale(IOP, IXP) porting and other random ARM bits
2983 S: Portland, OR 2984 S: Portland, OR
2984 2985
2985 N: Eric Schenk 2986 N: Eric Schenk
2986 E: Eric.Schenk@dna.lth.se 2987 E: Eric.Schenk@dna.lth.se
2987 D: Random kernel debugging. 2988 D: Random kernel debugging.
2988 D: SYSV Semaphore code rewrite. 2989 D: SYSV Semaphore code rewrite.
2989 D: Network layer debugging. 2990 D: Network layer debugging.
2990 D: Dial on demand facility (diald). 2991 D: Dial on demand facility (diald).
2991 S: Dag Hammerskjolds v. 3E 2992 S: Dag Hammerskjolds v. 3E
2992 S: S-226 64 LUND 2993 S: S-226 64 LUND
2993 S: Sweden 2994 S: Sweden
2994 2995
2995 N: Henning P. Schmiedehausen 2996 N: Henning P. Schmiedehausen
2996 E: hps@tanstaafl.de 2997 E: hps@tanstaafl.de
2997 D: added PCI support to the serial driver 2998 D: added PCI support to the serial driver
2998 S: Buckenhof, Germany 2999 S: Buckenhof, Germany
2999 3000
3000 N: Michael Schmitz 3001 N: Michael Schmitz
3001 E: 3002 E:
3002 D: Macintosh IDE Driver 3003 D: Macintosh IDE Driver
3003 3004
3004 N: Peter De Schrijver 3005 N: Peter De Schrijver
3005 E: stud11@cc4.kuleuven.ac.be 3006 E: stud11@cc4.kuleuven.ac.be
3006 D: Mitsumi CD-ROM driver patches March version 3007 D: Mitsumi CD-ROM driver patches March version
3007 S: Molenbaan 29 3008 S: Molenbaan 29
3008 S: B2240 Zandhoven 3009 S: B2240 Zandhoven
3009 S: Belgium 3010 S: Belgium
3010 3011
3011 N: Martin Schulze 3012 N: Martin Schulze
3012 E: joey@linux.de 3013 E: joey@linux.de
3013 W: http://home.pages.de/~joey/ 3014 W: http://home.pages.de/~joey/
3014 D: Random Linux Hacker, Linux Promoter 3015 D: Random Linux Hacker, Linux Promoter
3015 D: CD-List, Books-List, Ex-FAQ 3016 D: CD-List, Books-List, Ex-FAQ
3016 D: Linux-Support, -Mailbox, -Stammtisch 3017 D: Linux-Support, -Mailbox, -Stammtisch
3017 D: several improvements to system programs 3018 D: several improvements to system programs
3018 S: Oldenburg 3019 S: Oldenburg
3019 S: Germany 3020 S: Germany
3020 3021
3021 N: Robert Schwebel 3022 N: Robert Schwebel
3022 E: robert@schwebel.de 3023 E: robert@schwebel.de
3023 W: http://www.schwebel.de 3024 W: http://www.schwebel.de
3024 D: Embedded hacker and book author, 3025 D: Embedded hacker and book author,
3025 D: AMD Elan support for Linux 3026 D: AMD Elan support for Linux
3026 S: Pengutronix 3027 S: Pengutronix
3027 S: Braunschweiger Strasse 79 3028 S: Braunschweiger Strasse 79
3028 S: 31134 Hildesheim 3029 S: 31134 Hildesheim
3029 S: Germany 3030 S: Germany
3030 3031
3031 N: Darren Senn 3032 N: Darren Senn
3032 E: sinster@darkwater.com 3033 E: sinster@darkwater.com
3033 D: Whatever I notice needs doing (so far: itimers, /proc) 3034 D: Whatever I notice needs doing (so far: itimers, /proc)
3034 S: Post Office Box 64132 3035 S: Post Office Box 64132
3035 S: Sunnyvale, California 94088-4132 3036 S: Sunnyvale, California 94088-4132
3036 S: USA 3037 S: USA
3037 3038
3038 N: Simon Shapiro 3039 N: Simon Shapiro
3039 E: shimon@i-Connect.Net 3040 E: shimon@i-Connect.Net
3040 W: http://www.-i-Connect.Net/~shimon 3041 W: http://www.-i-Connect.Net/~shimon
3041 D: SCSI debugging 3042 D: SCSI debugging
3042 D: Maintainer of the Debian Kernel packages 3043 D: Maintainer of the Debian Kernel packages
3043 S: 14355 SW Allen Blvd., Suite #140 3044 S: 14355 SW Allen Blvd., Suite #140
3044 S: Beaverton, Oregon 97008 3045 S: Beaverton, Oregon 97008
3045 S: USA 3046 S: USA
3046 3047
3047 N: Mike Shaver 3048 N: Mike Shaver
3048 E: shaver@hungry.org 3049 E: shaver@hungry.org
3049 W: http://www.hungry.org/~shaver/ 3050 W: http://www.hungry.org/~shaver/
3050 D: MIPS work, /proc/sys/net, misc net hacking 3051 D: MIPS work, /proc/sys/net, misc net hacking
3051 S: 149 Union St. 3052 S: 149 Union St.
3052 S: Kingston, Ontario 3053 S: Kingston, Ontario
3053 S: Canada K7L 2P4 3054 S: Canada K7L 2P4
3054 3055
3055 N: John Shifflett 3056 N: John Shifflett
3056 E: john@geolog.com 3057 E: john@geolog.com
3057 E: jshiffle@netcom.com 3058 E: jshiffle@netcom.com
3058 D: Always IN2000 SCSI driver 3059 D: Always IN2000 SCSI driver
3059 D: wd33c93 SCSI driver (linux-m68k) 3060 D: wd33c93 SCSI driver (linux-m68k)
3060 S: San Jose, California 3061 S: San Jose, California
3061 S: USA 3062 S: USA
3062 3063
3063 N: Robert Siemer 3064 N: Robert Siemer
3064 E: Robert.Siemer@gmx.de 3065 E: Robert.Siemer@gmx.de
3065 P: 2048/C99A4289 2F DC 17 2E 56 62 01 C8 3D F2 AC 09 F2 E5 DD EE 3066 P: 2048/C99A4289 2F DC 17 2E 56 62 01 C8 3D F2 AC 09 F2 E5 DD EE
3066 D: miroSOUND PCM20 radio RDS driver, ACI rewrite 3067 D: miroSOUND PCM20 radio RDS driver, ACI rewrite
3067 S: Klosterweg 28 / i309 3068 S: Klosterweg 28 / i309
3068 S: 76131 Karlsruhe 3069 S: 76131 Karlsruhe
3069 S: Germany 3070 S: Germany
3070 3071
3071 N: James Simmons 3072 N: James Simmons
3072 E: jsimmons@infradead.org 3073 E: jsimmons@infradead.org
3073 E: jsimmons@users.sf.net 3074 E: jsimmons@users.sf.net
3074 D: Frame buffer device maintainer 3075 D: Frame buffer device maintainer
3075 D: input layer developement 3076 D: input layer developement
3076 D: tty/console layer 3077 D: tty/console layer
3077 D: various mipsel devices 3078 D: various mipsel devices
3078 S: 115 Carmel Avenue 3079 S: 115 Carmel Avenue
3079 S: El Cerrito CA 94530 3080 S: El Cerrito CA 94530
3080 S: USA 3081 S: USA
3081 3082
3082 N: Jaspreet Singh 3083 N: Jaspreet Singh
3083 E: jaspreet@sangoma.com 3084 E: jaspreet@sangoma.com
3084 W: www.sangoma.com 3085 W: www.sangoma.com
3085 D: WANPIPE drivers & API Support for Sangoma S508/FT1 cards 3086 D: WANPIPE drivers & API Support for Sangoma S508/FT1 cards
3086 S: Sangoma Technologies Inc., 3087 S: Sangoma Technologies Inc.,
3087 S: 1001 Denison Street 3088 S: 1001 Denison Street
3088 S: Suite 101 3089 S: Suite 101
3089 S: Markham, Ontario L3R 2Z6 3090 S: Markham, Ontario L3R 2Z6
3090 S: Canada 3091 S: Canada
3091 3092
3092 N: Rick Sladkey 3093 N: Rick Sladkey
3093 E: jrs@world.std.com 3094 E: jrs@world.std.com
3094 D: utility hacker: Emacs, NFS server, mount, kmem-ps, UPS debugger, strace, GDB 3095 D: utility hacker: Emacs, NFS server, mount, kmem-ps, UPS debugger, strace, GDB
3095 D: library hacker: RPC, profil(3), realpath(3), regexp.h 3096 D: library hacker: RPC, profil(3), realpath(3), regexp.h
3096 D: kernel hacker: unnamed block devs, NFS client, fast select, precision timer 3097 D: kernel hacker: unnamed block devs, NFS client, fast select, precision timer
3097 S: 24 Avon Place 3098 S: 24 Avon Place
3098 S: Arlington, Massachusetts 02174 3099 S: Arlington, Massachusetts 02174
3099 S: USA 3100 S: USA
3100 3101
3101 N: Craig Small 3102 N: Craig Small
3102 E: csmall@triode.apana.org.au 3103 E: csmall@triode.apana.org.au
3103 E: vk2xlz@gonzo.vk2xlz.ampr.org (packet radio) 3104 E: vk2xlz@gonzo.vk2xlz.ampr.org (packet radio)
3104 D: Gracilis PackeTwin device driver 3105 D: Gracilis PackeTwin device driver
3105 D: RSPF daemon 3106 D: RSPF daemon
3106 S: 10 Stockalls Place 3107 S: 10 Stockalls Place
3107 S: Minto, NSW, 2566 3108 S: Minto, NSW, 2566
3108 S: Australia 3109 S: Australia
3109 3110
3110 N: Stephen Smalley 3111 N: Stephen Smalley
3111 E: sds@tycho.nsa.gov 3112 E: sds@tycho.nsa.gov
3112 D: portions of the Linux Security Module (LSM) framework and security modules 3113 D: portions of the Linux Security Module (LSM) framework and security modules
3113 3114
3114 N: Chris Smith 3115 N: Chris Smith
3115 E: csmith@convex.com 3116 E: csmith@convex.com
3116 D: Read only HPFS filesystem 3117 D: Read only HPFS filesystem
3117 S: Richardson, Texas 3118 S: Richardson, Texas
3118 S: USA 3119 S: USA
3119 3120
3120 N: Christopher Smith 3121 N: Christopher Smith
3121 E: x@xman.org 3122 E: x@xman.org
3122 D: Tulip net driver hacker 3123 D: Tulip net driver hacker
3123 3124
3124 N: Mark Smith 3125 N: Mark Smith
3125 E: mark.smith@comdev.cc 3126 E: mark.smith@comdev.cc
3126 D: Multicast support in bonding driver 3127 D: Multicast support in bonding driver
3127 3128
3128 N: Miquel van Smoorenburg 3129 N: Miquel van Smoorenburg
3129 E: miquels@cistron.nl 3130 E: miquels@cistron.nl
3130 D: Kernel and net hacker. Sysvinit, minicom. doing Debian stuff. 3131 D: Kernel and net hacker. Sysvinit, minicom. doing Debian stuff.
3131 S: Cistron Internet Services 3132 S: Cistron Internet Services
3132 S: PO-Box 297 3133 S: PO-Box 297
3133 S: 2400 AG, Alphen aan den Rijn 3134 S: 2400 AG, Alphen aan den Rijn
3134 S: The Netherlands 3135 S: The Netherlands
3135 3136
3136 N: Scott Snyder 3137 N: Scott Snyder
3137 E: snyder@fnald0.fnal.gov 3138 E: snyder@fnald0.fnal.gov
3138 D: ATAPI cdrom driver 3139 D: ATAPI cdrom driver
3139 S: MS 352, Fermilab 3140 S: MS 352, Fermilab
3140 S: Post Office Box 500 3141 S: Post Office Box 500
3141 S: Batavia, Illinois 60510 3142 S: Batavia, Illinois 60510
3142 S: USA 3143 S: USA
3143 3144
3144 N: Leo Spiekman 3145 N: Leo Spiekman
3145 E: leo@netlabs.net 3146 E: leo@netlabs.net
3146 W: http://www.netlabs.net/hp/leo/ 3147 W: http://www.netlabs.net/hp/leo/
3147 D: Optics Storage 8000AT cdrom driver 3148 D: Optics Storage 8000AT cdrom driver
3148 S: Cliffwood, New Jersey 07721 3149 S: Cliffwood, New Jersey 07721
3149 S: USA 3150 S: USA
3150 3151
3151 N: Manfred Spraul 3152 N: Manfred Spraul
3152 E: manfred@colorfullife.com 3153 E: manfred@colorfullife.com
3153 W: http://www.colorfullife.com/~manfred 3154 W: http://www.colorfullife.com/~manfred
3154 D: Lots of tiny hacks. Larger improvments to SysV IPC msg, 3155 D: Lots of tiny hacks. Larger improvments to SysV IPC msg,
3155 D: slab, pipe, select. 3156 D: slab, pipe, select.
3156 S: 71701 Schwieberdingen 3157 S: 71701 Schwieberdingen
3157 S: Germany 3158 S: Germany
3158 3159
3159 N: Andrew Stanley-Jones 3160 N: Andrew Stanley-Jones
3160 E: asj@lanmedia.com 3161 E: asj@lanmedia.com
3161 D: LanMedia Corp. Device WAN card device driver 3162 D: LanMedia Corp. Device WAN card device driver
3162 S: #102, 686 W. Maude Ave 3163 S: #102, 686 W. Maude Ave
3163 S: Sunyvale, CA 94086 3164 S: Sunyvale, CA 94086
3164 S: USA 3165 S: USA
3165 3166
3166 N: Michael Still 3167 N: Michael Still
3167 E: mikal@stillhq.com 3168 E: mikal@stillhq.com
3168 W: http://www.stillhq.com 3169 W: http://www.stillhq.com
3169 D: Various janitorial patches 3170 D: Various janitorial patches
3170 D: mandocs and mandocs_install build targets 3171 D: mandocs and mandocs_install build targets
3171 S: (Email me and ask) 3172 S: (Email me and ask)
3172 S: Australia 3173 S: Australia
3173 3174
3174 N: Henrik Storner 3175 N: Henrik Storner
3175 E: storner@image.dk 3176 E: storner@image.dk
3176 W: http://www.image.dk/~storner/ 3177 W: http://www.image.dk/~storner/
3177 W: http://www.sslug.dk/ 3178 W: http://www.sslug.dk/
3178 D: Configure script: Invented tristate for module-configuration 3179 D: Configure script: Invented tristate for module-configuration
3179 D: vfat/msdos integration, kerneld docs, Linux promotion 3180 D: vfat/msdos integration, kerneld docs, Linux promotion
3180 D: Miscellaneous bug-fixes 3181 D: Miscellaneous bug-fixes
3181 S: Chr. Winthersvej 1 B, st.th. 3182 S: Chr. Winthersvej 1 B, st.th.
3182 S: DK-1860 Frederiksberg C 3183 S: DK-1860 Frederiksberg C
3183 S: Denmark 3184 S: Denmark
3184 3185
3185 N: Drew Sullivan 3186 N: Drew Sullivan
3186 E: drew@ss.org 3187 E: drew@ss.org
3187 W: http://www.ss.org/ 3188 W: http://www.ss.org/
3188 P: 1024/ACFFA969 5A 9C 42 AB E4 24 82 31 99 56 00 BF D3 2B 25 46 3189 P: 1024/ACFFA969 5A 9C 42 AB E4 24 82 31 99 56 00 BF D3 2B 25 46
3189 D: iBCS2 developer 3190 D: iBCS2 developer
3190 S: 22 Irvington Cres. 3191 S: 22 Irvington Cres.
3191 S: Willowdale, Ontario 3192 S: Willowdale, Ontario
3192 S: Canada M2N 2Z1 3193 S: Canada M2N 2Z1
3193 3194
3194 N: Adam Sulmicki 3195 N: Adam Sulmicki
3195 E: adam@cfar.umd.edu 3196 E: adam@cfar.umd.edu
3196 W: http://www.eax.com 3197 W: http://www.eax.com
3197 D: core networking fixes 3198 D: core networking fixes
3198 D: patch-kernel enhancements 3199 D: patch-kernel enhancements
3199 D: misc kernel fixes and updates 3200 D: misc kernel fixes and updates
3200 3201
3201 N: Adrian Sun 3202 N: Adrian Sun
3202 E: asun@cobaltnet.com 3203 E: asun@cobaltnet.com
3203 D: hfs support 3204 D: hfs support
3204 D: alpha rtc port, random appletalk fixes 3205 D: alpha rtc port, random appletalk fixes
3205 S: Department of Zoology, University of Washington 3206 S: Department of Zoology, University of Washington
3206 S: Seattle, WA 98195-1800 3207 S: Seattle, WA 98195-1800
3207 S: USA 3208 S: USA
3208 3209
3209 N: Eugene Surovegin 3210 N: Eugene Surovegin
3210 E: ebs@ebshome.net 3211 E: ebs@ebshome.net
3211 W: http://kernel.ebshome.net/ 3212 W: http://kernel.ebshome.net/
3212 P: 1024D/AE5467F1 FF22 39F1 6728 89F6 6E6C 2365 7602 F33D AE54 67F1 3213 P: 1024D/AE5467F1 FF22 39F1 6728 89F6 6E6C 2365 7602 F33D AE54 67F1
3213 D: Embedded PowerPC 4xx: EMAC, I2C, PIC and random hacks/fixes 3214 D: Embedded PowerPC 4xx: EMAC, I2C, PIC and random hacks/fixes
3214 S: Sunnyvale, California 94085 3215 S: Sunnyvale, California 94085
3215 S: USA 3216 S: USA
3216 3217
3217 N: Corey Thomas 3218 N: Corey Thomas
3218 E: corey@world.std.com 3219 E: corey@world.std.com
3219 W: http://world.std.com/~corey/index.html 3220 W: http://world.std.com/~corey/index.html
3220 D: Raylink/WebGear wireless LAN device driver (ray_cs) author 3221 D: Raylink/WebGear wireless LAN device driver (ray_cs) author
3221 S: 145 Howard St. 3222 S: 145 Howard St.
3222 S: Northborough, MA 01532 3223 S: Northborough, MA 01532
3223 S: USA 3224 S: USA
3224 3225
3225 N: Tommy Thorn 3226 N: Tommy Thorn
3226 E: Tommy.Thorn@irisa.fr 3227 E: Tommy.Thorn@irisa.fr
3227 W: http://www.irisa.fr/prive/thorn/index.html 3228 W: http://www.irisa.fr/prive/thorn/index.html
3228 P: 512/B4AFC909 BC BF 6D B1 52 26 1E D6 E3 2F A3 24 2A 84 FE 21 3229 P: 512/B4AFC909 BC BF 6D B1 52 26 1E D6 E3 2F A3 24 2A 84 FE 21
3229 D: Device driver hacker (aha1542 & plip) 3230 D: Device driver hacker (aha1542 & plip)
3230 S: IRISA 3231 S: IRISA
3231 S: Universit=E9 de Rennes I 3232 S: Universit=E9 de Rennes I
3232 S: F-35042 Rennes Cedex 3233 S: F-35042 Rennes Cedex
3233 S: France 3234 S: France
3234 3235
3235 N: Jon Tombs 3236 N: Jon Tombs
3236 E: jon@gte.esi.us.es 3237 E: jon@gte.esi.us.es
3237 W: http://www.esi.us.es/~jon 3238 W: http://www.esi.us.es/~jon
3238 D: NFS mmap() 3239 D: NFS mmap()
3239 D: XF86_S3 3240 D: XF86_S3
3240 D: Kernel modules 3241 D: Kernel modules
3241 D: Parts of various other programs (xfig, open, ...) 3242 D: Parts of various other programs (xfig, open, ...)
3242 S: C/ Federico Garcia Lorca 1 10-A 3243 S: C/ Federico Garcia Lorca 1 10-A
3243 S: Sevilla 41005 3244 S: Sevilla 41005
3244 S: Spain 3245 S: Spain
3245 3246
3246 N: Linus Torvalds 3247 N: Linus Torvalds
3247 E: torvalds@osdl.org 3248 E: torvalds@osdl.org
3248 D: Original kernel hacker 3249 D: Original kernel hacker
3249 S: 12725 SW Millikan Way, Suite 400 3250 S: 12725 SW Millikan Way, Suite 400
3250 S: Beaverton, Oregon 97005 3251 S: Beaverton, Oregon 97005
3251 S: USA 3252 S: USA
3252 3253
3253 N: Marcelo Tosatti 3254 N: Marcelo Tosatti
3254 E: marcelo@kvack.org 3255 E: marcelo@kvack.org
3255 D: v2.4 kernel maintainer 3256 D: v2.4 kernel maintainer
3256 S: Brazil 3257 S: Brazil
3257 3258
3258 N: Stefan Traby 3259 N: Stefan Traby
3259 E: stefan@quant-x.com 3260 E: stefan@quant-x.com
3260 D: Minor Alpha kernel hacks 3261 D: Minor Alpha kernel hacks
3261 S: Mitterlasznitzstr. 13 3262 S: Mitterlasznitzstr. 13
3262 S: 8302 Nestelbach 3263 S: 8302 Nestelbach
3263 S: Austria 3264 S: Austria
3264 3265
3265 N: Jeff Tranter 3266 N: Jeff Tranter
3266 E: tranter@pobox.com 3267 E: tranter@pobox.com
3267 D: Enhancements to Joystick driver 3268 D: Enhancements to Joystick driver
3268 D: Author of Sound HOWTO and CD-ROM HOWTO 3269 D: Author of Sound HOWTO and CD-ROM HOWTO
3269 D: Author of several small utilities 3270 D: Author of several small utilities
3270 D: (bogomips, scope, eject, statserial) 3271 D: (bogomips, scope, eject, statserial)
3271 S: 1 Laurie Court 3272 S: 1 Laurie Court
3272 S: Kanata, Ontario 3273 S: Kanata, Ontario
3273 S: Canada K2L 1S2 3274 S: Canada K2L 1S2
3274 3275
3275 N: Andrew Tridgell 3276 N: Andrew Tridgell
3276 E: tridge@samba.org 3277 E: tridge@samba.org
3277 W: http://samba.org/tridge/ 3278 W: http://samba.org/tridge/
3278 D: dosemu, networking, samba 3279 D: dosemu, networking, samba
3279 S: 3 Ballow Crescent 3280 S: 3 Ballow Crescent
3280 S: MacGregor A.C.T 2615 3281 S: MacGregor A.C.T 2615
3281 S: Australia 3282 S: Australia
3282 3283
3283 N: Winfried Trรผmper 3284 N: Winfried Trรผmper
3284 E: winni@xpilot.org 3285 E: winni@xpilot.org
3285 W: http://www.shop.de/~winni/ 3286 W: http://www.shop.de/~winni/
3286 D: German HOWTO, Crash-Kurs Linux (German, 100 comprehensive pages) 3287 D: German HOWTO, Crash-Kurs Linux (German, 100 comprehensive pages)
3287 D: CD-Writing HOWTO, various mini-HOWTOs 3288 D: CD-Writing HOWTO, various mini-HOWTOs
3288 D: One-week tutorials on Linux twice a year (free of charge) 3289 D: One-week tutorials on Linux twice a year (free of charge)
3289 D: Linux-Workshop Kรถln (aka LUG Cologne, Germany), Installfests 3290 D: Linux-Workshop Kรถln (aka LUG Cologne, Germany), Installfests
3290 S: Tacitusstr. 6 3291 S: Tacitusstr. 6
3291 S: D-50968 Kรถln 3292 S: D-50968 Kรถln
3292 3293
3293 N: Tsu-Sheng Tsao 3294 N: Tsu-Sheng Tsao
3294 E: tsusheng@scf.usc.edu 3295 E: tsusheng@scf.usc.edu
3295 D: IGMP(Internet Group Management Protocol) version 2 3296 D: IGMP(Internet Group Management Protocol) version 2
3296 S: 2F 14 ALY 31 LN 166 SEC 1 SHIH-PEI RD 3297 S: 2F 14 ALY 31 LN 166 SEC 1 SHIH-PEI RD
3297 S: Taipei 3298 S: Taipei
3298 S: Taiwan 112 3299 S: Taiwan 112
3299 S: Republic of China 3300 S: Republic of China
3300 S: 24335 Delta Drive 3301 S: 24335 Delta Drive
3301 S: Diamond Bar, California 91765 3302 S: Diamond Bar, California 91765
3302 S: USA 3303 S: USA
3303 3304
3304 N: Theodore Ts'o 3305 N: Theodore Ts'o
3305 E: tytso@mit.edu 3306 E: tytso@mit.edu
3306 D: Random Linux hacker 3307 D: Random Linux hacker
3307 D: Maintainer of tsx-11.mit.edu ftp archive 3308 D: Maintainer of tsx-11.mit.edu ftp archive
3308 D: Maintainer of c.o.l.* Usenet<->mail gateway 3309 D: Maintainer of c.o.l.* Usenet<->mail gateway
3309 D: Author of serial driver 3310 D: Author of serial driver
3310 D: Author of the new e2fsck 3311 D: Author of the new e2fsck
3311 D: Author of job control and system call restart code 3312 D: Author of job control and system call restart code
3312 D: Author of ramdisk device driver 3313 D: Author of ramdisk device driver
3313 D: Author of loopback device driver 3314 D: Author of loopback device driver
3314 D: Author of /dev/random driver 3315 D: Author of /dev/random driver
3315 S: MIT Room E40-343 3316 S: MIT Room E40-343
3316 S: 1 Amherst Street 3317 S: 1 Amherst Street
3317 S: Cambridge, Massachusetts 02139 3318 S: Cambridge, Massachusetts 02139
3318 S: USA 3319 S: USA
3319 3320
3320 N: Simmule Turner 3321 N: Simmule Turner
3321 E: sturner@tele-tv.com 3322 E: sturner@tele-tv.com
3322 D: Added swapping to filesystem 3323 D: Added swapping to filesystem
3323 S: 4226 Landgreen Street 3324 S: 4226 Landgreen Street
3324 S: Rockville, Maryland 20853 3325 S: Rockville, Maryland 20853
3325 S: USA 3326 S: USA
3326 3327
3327 N: Stephen Tweedie 3328 N: Stephen Tweedie
3328 E: sct@redhat.com 3329 E: sct@redhat.com
3329 P: 1024/E7A417AD E2 FE A4 20 34 EC ED FC 7D 7E 67 8D E0 31 D1 69 3330 P: 1024/E7A417AD E2 FE A4 20 34 EC ED FC 7D 7E 67 8D E0 31 D1 69
3330 P: 1024D/43BE7544 D2A4 8556 08E6 90E7 076C BA3F 243F 20A4 43BE 7544 3331 P: 1024D/43BE7544 D2A4 8556 08E6 90E7 076C BA3F 243F 20A4 43BE 7544
3331 D: Second extended file system developer 3332 D: Second extended file system developer
3332 D: General filesystem hacker 3333 D: General filesystem hacker
3333 D: kswap vm management code 3334 D: kswap vm management code
3334 S: 44 Campbell Park Crescent 3335 S: 44 Campbell Park Crescent
3335 S: Edinburgh EH13 0HT 3336 S: Edinburgh EH13 0HT
3336 S: United Kingdom 3337 S: United Kingdom
3337 3338
3338 N: Thomas Uhl 3339 N: Thomas Uhl
3339 E: uhl@sun1.rz.fh-heilbronn.de 3340 E: uhl@sun1.rz.fh-heilbronn.de
3340 D: Application programmer 3341 D: Application programmer
3341 D: Linux promoter 3342 D: Linux promoter
3342 D: Author of a German book on Linux 3343 D: Author of a German book on Linux
3343 S: Obere Heerbergstrasse 17 3344 S: Obere Heerbergstrasse 17
3344 S: 97078 Wuerzburg 3345 S: 97078 Wuerzburg
3345 S: Germany 3346 S: Germany
3346 3347
3347 N: Greg Ungerer 3348 N: Greg Ungerer
3348 E: gerg@snapgear.com 3349 E: gerg@snapgear.com
3349 D: uClinux kernel hacker 3350 D: uClinux kernel hacker
3350 D: Port uClinux to the Motorola ColdFire CPU 3351 D: Port uClinux to the Motorola ColdFire CPU
3351 D: Author of Stallion multiport serial drivers 3352 D: Author of Stallion multiport serial drivers
3352 S: SnapGear Inc. 3353 S: SnapGear Inc.
3353 S: 825 Stanley St 3354 S: 825 Stanley St
3354 S: Woolloongabba. QLD. 4102 3355 S: Woolloongabba. QLD. 4102
3355 S: Australia 3356 S: Australia
3356 3357
3357 N: Jeffrey A. Uphoff 3358 N: Jeffrey A. Uphoff
3358 E: juphoff@transmeta.com 3359 E: juphoff@transmeta.com
3359 E: jeff.uphoff@linux.org 3360 E: jeff.uphoff@linux.org
3360 P: 1024/9ED505C5 D7 BB CA AA 10 45 40 1B 16 19 0A C0 38 A0 3E CB 3361 P: 1024/9ED505C5 D7 BB CA AA 10 45 40 1B 16 19 0A C0 38 A0 3E CB
3361 D: Linux Security/Alert mailing lists' moderator/maintainer. 3362 D: Linux Security/Alert mailing lists' moderator/maintainer.
3362 D: NSM (rpc.statd) developer. 3363 D: NSM (rpc.statd) developer.
3363 D: PAM S/Key module developer. 3364 D: PAM S/Key module developer.
3364 D: 'dip' contributor. 3365 D: 'dip' contributor.
3365 D: AIPS port, astronomical community support. 3366 D: AIPS port, astronomical community support.
3366 S: Transmeta Corporation 3367 S: Transmeta Corporation
3367 S: 2540 Mission College Blvd. 3368 S: 2540 Mission College Blvd.
3368 S: Santa Clara, CA 95054 3369 S: Santa Clara, CA 95054
3369 S: USA 3370 S: USA
3370 3371
3371 N: Matthias Urlichs 3372 N: Matthias Urlichs
3372 E: smurf@smurf.noris.de 3373 E: smurf@smurf.noris.de
3373 E: smurf@debian.org 3374 E: smurf@debian.org
3374 E: matthias@urlichs.de 3375 E: matthias@urlichs.de
3375 D: Consultant, developer, kernel hacker 3376 D: Consultant, developer, kernel hacker
3376 D: In a previous life, worked on Streams/ISDN/BSD networking code for Linux 3377 D: In a previous life, worked on Streams/ISDN/BSD networking code for Linux
3377 S: Schleiermacherstrasse 12 3378 S: Schleiermacherstrasse 12
3378 S: 90491 Nuernberg 3379 S: 90491 Nuernberg
3379 S: Germany 3380 S: Germany
3380 3381
3381 N: Geert Uytterhoeven 3382 N: Geert Uytterhoeven
3382 E: geert@linux-m68k.org 3383 E: geert@linux-m68k.org
3383 W: http://users.telenet.be/geertu/ 3384 W: http://users.telenet.be/geertu/
3384 P: 1024/862678A6 C51D 361C 0BD1 4C90 B275 C553 6EEA 11BA 8626 78A6 3385 P: 1024/862678A6 C51D 361C 0BD1 4C90 B275 C553 6EEA 11BA 8626 78A6
3385 D: m68k/Amiga and PPC/CHRP Longtrail coordinator 3386 D: m68k/Amiga and PPC/CHRP Longtrail coordinator
3386 D: Frame buffer device and XF68_FBDev maintainer 3387 D: Frame buffer device and XF68_FBDev maintainer
3387 D: m68k IDE maintainer 3388 D: m68k IDE maintainer
3388 D: Amiga Zorro maintainer 3389 D: Amiga Zorro maintainer
3389 D: Amiga Buddha and Catweasel chipset IDE 3390 D: Amiga Buddha and Catweasel chipset IDE
3390 D: Atari Falcon chipset IDE 3391 D: Atari Falcon chipset IDE
3391 D: Amiga Gayle chipset IDE 3392 D: Amiga Gayle chipset IDE
3392 D: mipsel NEC DDB Vrc-5074 3393 D: mipsel NEC DDB Vrc-5074
3393 S: Haterbeekstraat 55B 3394 S: Haterbeekstraat 55B
3394 S: B-3200 Aarschot 3395 S: B-3200 Aarschot
3395 S: Belgium 3396 S: Belgium
3396 3397
3397 N: Chris Vance 3398 N: Chris Vance
3398 E: cvance@tislabs.com 3399 E: cvance@tislabs.com
3399 E: cvance@nai.com 3400 E: cvance@nai.com
3400 D: portions of the Linux Security Module (LSM) framework and security modules 3401 D: portions of the Linux Security Module (LSM) framework and security modules
3401 3402
3402 N: Petr Vandrovec 3403 N: Petr Vandrovec
3403 E: vandrove@vc.cvut.cz 3404 E: vandrove@vc.cvut.cz
3404 D: Small contributions to ncpfs 3405 D: Small contributions to ncpfs
3405 D: Matrox framebuffer driver 3406 D: Matrox framebuffer driver
3406 S: Chudenicka 8 3407 S: Chudenicka 8
3407 S: 10200 Prague 10, Hostivar 3408 S: 10200 Prague 10, Hostivar
3408 S: Czech Republic 3409 S: Czech Republic
3409 3410
3410 N: Thibaut Varene 3411 N: Thibaut Varene
3411 E: T-Bone@parisc-linux.org 3412 E: T-Bone@parisc-linux.org
3412 W: http://www.parisc-linux.org/~varenet/ 3413 W: http://www.parisc-linux.org/~varenet/
3413 P: 1024D/B7D2F063 E67C 0D43 A75E 12A5 BB1C FA2F 1E32 C3DA B7D2 F063 3414 P: 1024D/B7D2F063 E67C 0D43 A75E 12A5 BB1C FA2F 1E32 C3DA B7D2 F063
3414 D: PA-RISC port minion, PDC and GSCPS2 drivers, debuglocks and other bits 3415 D: PA-RISC port minion, PDC and GSCPS2 drivers, debuglocks and other bits
3415 D: Some ARM at91rm9200 bits, S1D13XXX FB driver, random patches here and there 3416 D: Some ARM at91rm9200 bits, S1D13XXX FB driver, random patches here and there
3416 D: AD1889 sound driver 3417 D: AD1889 sound driver
3417 S: Paris, France 3418 S: Paris, France
3418 3419
3419 N: Heikki Vatiainen 3420 N: Heikki Vatiainen
3420 E: hessu@cs.tut.fi 3421 E: hessu@cs.tut.fi
3421 D: Co-author of Multi-Protocol Over ATM (MPOA), some LANE hacks 3422 D: Co-author of Multi-Protocol Over ATM (MPOA), some LANE hacks
3422 S: Tampere University of Technology / Telecom lab 3423 S: Tampere University of Technology / Telecom lab
3423 S: Hermiankatu 12C 3424 S: Hermiankatu 12C
3424 S: FIN-33720 Tampere 3425 S: FIN-33720 Tampere
3425 S: Finland 3426 S: Finland
3426 3427
3427 N: Andrew Veliath 3428 N: Andrew Veliath
3428 E: andrewtv@usa.net 3429 E: andrewtv@usa.net
3429 D: Turtle Beach MultiSound sound driver 3430 D: Turtle Beach MultiSound sound driver
3430 S: USA 3431 S: USA
3431 3432
3432 N: Dirk Verworner 3433 N: Dirk Verworner
3433 D: Co-author of German book ``Linux-Kernel-Programmierung'' 3434 D: Co-author of German book ``Linux-Kernel-Programmierung''
3434 D: Co-founder of Berlin Linux User Group 3435 D: Co-founder of Berlin Linux User Group
3435 3436
3436 N: Patrick Volkerding 3437 N: Patrick Volkerding
3437 E: volkerdi@ftp.cdrom.com 3438 E: volkerdi@ftp.cdrom.com
3438 D: Produced the Slackware distribution, updated the SVGAlib 3439 D: Produced the Slackware distribution, updated the SVGAlib
3439 D: patches for ghostscript, worked on color 'ls', etc. 3440 D: patches for ghostscript, worked on color 'ls', etc.
3440 S: 301 15th Street S. 3441 S: 301 15th Street S.
3441 S: Moorhead, Minnesota 56560 3442 S: Moorhead, Minnesota 56560
3442 S: USA 3443 S: USA
3443 3444
3444 N: Jos Vos 3445 N: Jos Vos
3445 E: jos@xos.nl 3446 E: jos@xos.nl
3446 W: http://www.xos.nl/ 3447 W: http://www.xos.nl/
3447 D: Various IP firewall updates, ipfwadm 3448 D: Various IP firewall updates, ipfwadm
3448 S: X/OS Experts in Open Systems BV 3449 S: X/OS Experts in Open Systems BV
3449 S: Kruislaan 419 3450 S: Kruislaan 419
3450 S: 1098 VA Amsterdam 3451 S: 1098 VA Amsterdam
3451 S: The Netherlands 3452 S: The Netherlands
3452 3453
3453 N: Jeroen Vreeken 3454 N: Jeroen Vreeken
3454 E: pe1rxq@amsat.org 3455 E: pe1rxq@amsat.org
3455 W: http://www.chello.nl/~j.vreeken/ 3456 W: http://www.chello.nl/~j.vreeken/
3456 D: SE401 usb webcam driver 3457 D: SE401 usb webcam driver
3457 D: ZD1201 usb wireless lan driver 3458 D: ZD1201 usb wireless lan driver
3458 S: Maastrichterweg 63 3459 S: Maastrichterweg 63
3459 S: 5554 GG Valkenswaard 3460 S: 5554 GG Valkenswaard
3460 S: The Netherlands 3461 S: The Netherlands
3461 3462
3462 N: Peter Shaobo Wang 3463 N: Peter Shaobo Wang
3463 E: pwang@mmdcorp.com 3464 E: pwang@mmdcorp.com
3464 W: http://www.mmdcorp.com/pw/linux 3465 W: http://www.mmdcorp.com/pw/linux
3465 D: Driver for Interphase ATM (i)Chip SAR adapter card family (x575, x525, x531). 3466 D: Driver for Interphase ATM (i)Chip SAR adapter card family (x575, x525, x531).
3466 S: 1513 Brewster Dr. 3467 S: 1513 Brewster Dr.
3467 S: Carrollton, TX 75010 3468 S: Carrollton, TX 75010
3468 S: USA 3469 S: USA
3469 3470
3470 N: Tim Waugh 3471 N: Tim Waugh
3471 E: tim@cyberelk.net 3472 E: tim@cyberelk.net
3472 D: Co-architect of the parallel-port sharing system 3473 D: Co-architect of the parallel-port sharing system
3473 S: 17 Curling Vale 3474 S: 17 Curling Vale
3474 S: GUILDFORD 3475 S: GUILDFORD
3475 S: Surrey 3476 S: Surrey
3476 S: GU2 7PJ 3477 S: GU2 7PJ
3477 S: United Kingdom 3478 S: United Kingdom
3478 3479
3479 N: Juergen Weigert 3480 N: Juergen Weigert
3480 E: jnweiger@immd4.informatik.uni-erlangen.de 3481 E: jnweiger@immd4.informatik.uni-erlangen.de
3481 D: The Linux Support Team Erlangen 3482 D: The Linux Support Team Erlangen
3482 3483
3483 N: David Weinehall 3484 N: David Weinehall
3484 E: tao@acc.umu.se 3485 E: tao@acc.umu.se
3485 W: http://www.acc.umu.se/~tao/ 3486 W: http://www.acc.umu.se/~tao/
3486 W: http://www.acc.umu.se/~mcalinux/ 3487 W: http://www.acc.umu.se/~mcalinux/
3487 D: Fixes for the NE/2-driver 3488 D: Fixes for the NE/2-driver
3488 D: Miscellaneous MCA-support 3489 D: Miscellaneous MCA-support
3489 D: Cleanup of the Config-files 3490 D: Cleanup of the Config-files
3490 S: Axtorpsvagen 40:20 3491 S: Axtorpsvagen 40:20
3491 S: S-903 37 UMEA 3492 S: S-903 37 UMEA
3492 S: Sweden 3493 S: Sweden
3493 3494
3494 N: Matt Welsh 3495 N: Matt Welsh
3495 E: mdw@metalab.unc.edu 3496 E: mdw@metalab.unc.edu
3496 W: http://www.cs.berkeley.edu/~mdw 3497 W: http://www.cs.berkeley.edu/~mdw
3497 D: Original Linux Documentation Project coordinator 3498 D: Original Linux Documentation Project coordinator
3498 D: Author, "Running Linux" (O'Reilly) 3499 D: Author, "Running Linux" (O'Reilly)
3499 D: Author, "Linux Installation and Getting Started" (LDP) and several HOWTOs 3500 D: Author, "Linux Installation and Getting Started" (LDP) and several HOWTOs
3500 D: Linuxdoc-SGML formatting system (now SGML-Tools) 3501 D: Linuxdoc-SGML formatting system (now SGML-Tools)
3501 D: Device drivers for various high-speed network interfaces (Myrinet, ATM) 3502 D: Device drivers for various high-speed network interfaces (Myrinet, ATM)
3502 D: Keithley DAS1200 device driver 3503 D: Keithley DAS1200 device driver
3503 D: Original maintainer of sunsite WWW and FTP sites 3504 D: Original maintainer of sunsite WWW and FTP sites
3504 D: Original moderator of c.o.l.announce and c.o.l.answers 3505 D: Original moderator of c.o.l.announce and c.o.l.answers
3505 S: Computer Science Division 3506 S: Computer Science Division
3506 S: UC Berkeley 3507 S: UC Berkeley
3507 S: Berkeley, CA 94720-1776 3508 S: Berkeley, CA 94720-1776
3508 S: USA 3509 S: USA
3509 3510
3510 N: Harald Welte 3511 N: Harald Welte
3511 E: laforge@netfilter.org 3512 E: laforge@netfilter.org
3512 P: 1024D/30F48BFF DBDE 6912 8831 9A53 879B 9190 5DA5 C655 30F4 8BFF 3513 P: 1024D/30F48BFF DBDE 6912 8831 9A53 879B 9190 5DA5 C655 30F4 8BFF
3513 W: http://gnumonks.org/users/laforge 3514 W: http://gnumonks.org/users/laforge
3514 D: netfilter: new nat helper infrastructure 3515 D: netfilter: new nat helper infrastructure
3515 D: netfilter: ULOG, ECN, DSCP target 3516 D: netfilter: ULOG, ECN, DSCP target
3516 D: netfilter: TTL match 3517 D: netfilter: TTL match
3517 D: netfilter: IPv6 mangle table 3518 D: netfilter: IPv6 mangle table
3518 D: netfilter: various other hacks 3519 D: netfilter: various other hacks
3519 S: Berlin 3520 S: Berlin
3520 S: Germany 3521 S: Germany
3521 3522
3522 N: Bill Wendling 3523 N: Bill Wendling
3523 E: wendling@ganymede.isdn.uiuc.edu 3524 E: wendling@ganymede.isdn.uiuc.edu
3524 W: http://www.ncsa.uiuc.edu/~wendling/ 3525 W: http://www.ncsa.uiuc.edu/~wendling/
3525 D: Various random hacks. Mostly on poll/select logic. 3526 D: Various random hacks. Mostly on poll/select logic.
3526 S: 605 E. Springfield Ave. 3527 S: 605 E. Springfield Ave.
3527 S: Champaign, IL 61820 3528 S: Champaign, IL 61820
3528 S: USA 3529 S: USA
3529 3530
3530 N: Mike Westall 3531 N: Mike Westall
3531 D: IBM Turboways 25 ATM Device Driver 3532 D: IBM Turboways 25 ATM Device Driver
3532 E: westall@cs.clemson.edu 3533 E: westall@cs.clemson.edu
3533 S: Department of Computer Science 3534 S: Department of Computer Science
3534 S: Clemson University 3535 S: Clemson University
3535 S: Clemson SC 29634 USA 3536 S: Clemson SC 29634 USA
3536 3537
3537 N: Greg Wettstein 3538 N: Greg Wettstein
3538 E: greg@wind.rmcc.com 3539 E: greg@wind.rmcc.com
3539 D: Filesystem valid flag for MINIX filesystem. 3540 D: Filesystem valid flag for MINIX filesystem.
3540 D: Minor kernel debugging. 3541 D: Minor kernel debugging.
3541 D: Development and maintenance of sysklogd. 3542 D: Development and maintenance of sysklogd.
3542 D: Monitoring of development kernels for long-term stability. 3543 D: Monitoring of development kernels for long-term stability.
3543 D: Early implementations of Linux in a commercial environment. 3544 D: Early implementations of Linux in a commercial environment.
3544 S: Dr. Greg Wettstein, Ph.D. 3545 S: Dr. Greg Wettstein, Ph.D.
3545 S: Oncology Research Division Computing Facility 3546 S: Oncology Research Division Computing Facility
3546 S: Roger Maris Cancer Center 3547 S: Roger Maris Cancer Center
3547 S: 820 4th St. N. 3548 S: 820 4th St. N.
3548 S: Fargo, North Dakota 58122 3549 S: Fargo, North Dakota 58122
3549 S: USA 3550 S: USA
3550 3551
3551 N: Steven Whitehouse 3552 N: Steven Whitehouse
3552 E: SteveW@ACM.org 3553 E: SteveW@ACM.org
3553 W: http://www.chygwyn.com/~steve 3554 W: http://www.chygwyn.com/~steve
3554 D: Linux DECnet project: http://www.sucs.swan.ac.uk/~rohan/DECnet/index.html 3555 D: Linux DECnet project: http://www.sucs.swan.ac.uk/~rohan/DECnet/index.html
3555 D: Minor debugging of other networking protocols. 3556 D: Minor debugging of other networking protocols.
3556 D: Misc bug fixes and filesystem development 3557 D: Misc bug fixes and filesystem development
3557 3558
3558 N: Hans-Joachim Widmaier 3559 N: Hans-Joachim Widmaier
3559 E: hjw@zvw.de 3560 E: hjw@zvw.de
3560 D: AFFS rewrite 3561 D: AFFS rewrite
3561 S: Eichenweg 16 3562 S: Eichenweg 16
3562 S: 73650 Winterbach 3563 S: 73650 Winterbach
3563 S: Germany 3564 S: Germany
3564 3565
3565 N: Urban Widmark 3566 N: Urban Widmark
3566 E: urban@svenskatest.se 3567 E: urban@svenskatest.se
3567 D: via-rhine, misc net driver hacking 3568 D: via-rhine, misc net driver hacking
3568 3569
3569 N: Marco van Wieringen 3570 N: Marco van Wieringen
3570 E: mvw@planets.elm.net 3571 E: mvw@planets.elm.net
3571 D: Author of process accounting and diskquota 3572 D: Author of process accounting and diskquota
3572 S: Breeburgsingel 12 3573 S: Breeburgsingel 12
3573 S: 2135 CN Hoofddorp 3574 S: 2135 CN Hoofddorp
3574 S: The Netherlands 3575 S: The Netherlands
3575 3576
3576 N: Matthew Wilcox 3577 N: Matthew Wilcox
3577 E: matthew@wil.cx 3578 E: matthew@wil.cx
3578 W: ftp://ftp.uk.linux.org/pub/linux/people/willy/ 3579 W: ftp://ftp.uk.linux.org/pub/linux/people/willy/
3579 D: Linux/PARISC hacker. Filesystem hacker. Random other hacking. Custom 3580 D: Linux/PARISC hacker. Filesystem hacker. Random other hacking. Custom
3580 D: PPC port hacking. 3581 D: PPC port hacking.
3581 3582
3582 N: G\"unter Windau 3583 N: G\"unter Windau
3583 E: gunter@mbfys.kun.nl 3584 E: gunter@mbfys.kun.nl
3584 D: Some bug fixes in the polling printer driver (lp.c) 3585 D: Some bug fixes in the polling printer driver (lp.c)
3585 S: University of Nijmegen 3586 S: University of Nijmegen
3586 S: Geert-Grooteplein Noord 21 3587 S: Geert-Grooteplein Noord 21
3587 S: 6525 EZ Nijmegen 3588 S: 6525 EZ Nijmegen
3588 S: The Netherlands 3589 S: The Netherlands
3589 3590
3590 N: Ulrich Windl 3591 N: Ulrich Windl
3591 E: Ulrich.Windl@rz.uni-regensburg.de 3592 E: Ulrich.Windl@rz.uni-regensburg.de
3592 P: 1024/E843660D CF D7 43 A1 5A 49 14 25 7C 04 A0 6E 4C 3A AC 6D 3593 P: 1024/E843660D CF D7 43 A1 5A 49 14 25 7C 04 A0 6E 4C 3A AC 6D
3593 D: Supports NTP on Linux. Added PPS code. Fixed bugs in adjtimex(). 3594 D: Supports NTP on Linux. Added PPS code. Fixed bugs in adjtimex().
3594 S: Alte Regensburger Str. 11a 3595 S: Alte Regensburger Str. 11a
3595 S: 93149 Nittenau 3596 S: 93149 Nittenau
3596 S: Germany 3597 S: Germany
3597 3598
3598 N: Lars Wirzenius 3599 N: Lars Wirzenius
3599 E: liw@iki.fi 3600 E: liw@iki.fi
3600 D: Linux System Administrator's Guide, author, former maintainer 3601 D: Linux System Administrator's Guide, author, former maintainer
3601 D: comp.os.linux.announce, former moderator 3602 D: comp.os.linux.announce, former moderator
3602 D: Linux Documentation Project, co-founder 3603 D: Linux Documentation Project, co-founder
3603 D: Original sprintf in kernel 3604 D: Original sprintf in kernel
3604 D: Original kernel README (for version 0.97) 3605 D: Original kernel README (for version 0.97)
3605 D: Linux News (electronic magazine, now dead), founder and former editor 3606 D: Linux News (electronic magazine, now dead), founder and former editor
3606 D: Meta-FAQ, originator, former maintainer 3607 D: Meta-FAQ, originator, former maintainer
3607 D: INFO-SHEET, former maintainer 3608 D: INFO-SHEET, former maintainer
3608 D: Author of the longest-living linux bug 3609 D: Author of the longest-living linux bug
3609 3610
3610 N: Jonathan Woithe 3611 N: Jonathan Woithe
3611 E: jwoithe@physics.adelaide.edu.au 3612 E: jwoithe@physics.adelaide.edu.au
3612 W: http://www.physics.adelaide.edu.au/~jwoithe 3613 W: http://www.physics.adelaide.edu.au/~jwoithe
3613 D: ALS-007 sound card extensions to Sound Blaster driver 3614 D: ALS-007 sound card extensions to Sound Blaster driver
3614 S: 20 Jordan St 3615 S: 20 Jordan St
3615 S: Valley View, SA 5093 3616 S: Valley View, SA 5093
3616 S: Australia 3617 S: Australia
3617 3618
3618 N: Clifford Wolf 3619 N: Clifford Wolf
3619 E: god@clifford.at 3620 E: god@clifford.at
3620 W: http://www.clifford.at/ 3621 W: http://www.clifford.at/
3621 D: Menuconfig/lxdialog improvement 3622 D: Menuconfig/lxdialog improvement
3622 S: Foehrengasse 16 3623 S: Foehrengasse 16
3623 S: A-2333 Leopoldsdorf b. Wien 3624 S: A-2333 Leopoldsdorf b. Wien
3624 S: Austria 3625 S: Austria
3625 3626
3626 N: Roger E. Wolff 3627 N: Roger E. Wolff
3627 E: R.E.Wolff@BitWizard.nl 3628 E: R.E.Wolff@BitWizard.nl
3628 D: Written kmalloc/kfree 3629 D: Written kmalloc/kfree
3629 D: Written Specialix IO8+ driver 3630 D: Written Specialix IO8+ driver
3630 D: Written Specialix SX driver 3631 D: Written Specialix SX driver
3631 S: van Bronckhorststraat 12 3632 S: van Bronckhorststraat 12
3632 S: 2612 XV Delft 3633 S: 2612 XV Delft
3633 S: The Netherlands 3634 S: The Netherlands
3634 3635
3635 N: David Woodhouse 3636 N: David Woodhouse
3636 E: dwmw2@infradead.org 3637 E: dwmw2@infradead.org
3637 D: ARCnet stuff, Applicom board driver, SO_BINDTODEVICE, 3638 D: ARCnet stuff, Applicom board driver, SO_BINDTODEVICE,
3638 D: some Alpha platform porting from 2.0, Memory Technology Devices, 3639 D: some Alpha platform porting from 2.0, Memory Technology Devices,
3639 D: Acquire watchdog timer, PC speaker driver maintenance, 3640 D: Acquire watchdog timer, PC speaker driver maintenance,
3640 D: various other stuff that annoyed me by not working. 3641 D: various other stuff that annoyed me by not working.
3641 S: c/o Red Hat Engineering 3642 S: c/o Red Hat Engineering
3642 S: Rustat House 3643 S: Rustat House
3643 S: 60 Clifton Road 3644 S: 60 Clifton Road
3644 S: Cambridge. CB1 7EG 3645 S: Cambridge. CB1 7EG
3645 S: England 3646 S: England
3646 3647
3647 N: Chris Wright 3648 N: Chris Wright
3648 E: chrisw@sous-sol.org 3649 E: chrisw@sous-sol.org
3649 D: hacking on LSM framework and security modules. 3650 D: hacking on LSM framework and security modules.
3650 S: Portland, OR 3651 S: Portland, OR
3651 S: USA 3652 S: USA
3652 3653
3653 N: Michal Wronski 3654 N: Michal Wronski
3654 E: Michal.Wronski@motorola.com 3655 E: Michal.Wronski@motorola.com
3655 D: POSIX message queues fs (with K. Benedyczak) 3656 D: POSIX message queues fs (with K. Benedyczak)
3656 S: Krakow 3657 S: Krakow
3657 S: Poland 3658 S: Poland
3658 3659
3659 N: Frank Xia 3660 N: Frank Xia
3660 E: qx@math.columbia.edu 3661 E: qx@math.columbia.edu
3661 D: Xiafs filesystem [defunct] 3662 D: Xiafs filesystem [defunct]
3662 S: 542 West 112th Street, 5N 3663 S: 542 West 112th Street, 5N
3663 S: New York, New York 10025 3664 S: New York, New York 10025
3664 S: USA 3665 S: USA
3665 3666
3666 N: Victor Yodaiken 3667 N: Victor Yodaiken
3667 E: yodaiken@fsmlabs.com 3668 E: yodaiken@fsmlabs.com
3668 D: RTLinux (RealTime Linux) 3669 D: RTLinux (RealTime Linux)
3669 S: POB 1822 3670 S: POB 1822
3670 S: Socorro NM, 87801 3671 S: Socorro NM, 87801
3671 S: USA 3672 S: USA
3672 3673
3673 N: Hiroshi YOKOTA 3674 N: Hiroshi YOKOTA
3674 E: yokota@netlab.is.tsukuba.ac.jp 3675 E: yokota@netlab.is.tsukuba.ac.jp
3675 D: Workbit NinjaSCSI-3/32Bi PCMCIA driver 3676 D: Workbit NinjaSCSI-3/32Bi PCMCIA driver
3676 D: Workbit NinjaSCSI-32Bi/UDE driver 3677 D: Workbit NinjaSCSI-32Bi/UDE driver
3677 S: Japan 3678 S: Japan
3678 3679
3679 N: Hideaki YOSHIFUJI 3680 N: Hideaki YOSHIFUJI
3680 E: hideaki@yoshifuji.org 3681 E: hideaki@yoshifuji.org
3681 E: yoshfuji@linux-ipv6.org 3682 E: yoshfuji@linux-ipv6.org
3682 W: http://www.yoshifuji.org/~hideaki/ 3683 W: http://www.yoshifuji.org/~hideaki/
3683 P: 1024D/E0620EEA 9022 65EB 1ECF 3AD1 0BDF 80D8 4807 F894 E062 0EEA 3684 P: 1024D/E0620EEA 9022 65EB 1ECF 3AD1 0BDF 80D8 4807 F894 E062 0EEA
3684 D: IPv6 and other networking related stuff 3685 D: IPv6 and other networking related stuff
3685 D: USAGI/WIDE Project, Keio University 3686 D: USAGI/WIDE Project, Keio University
3686 S: Jeunet Palace Kawasaki #1-201, 10-2, Furukawa-cho, Saiwai-ku 3687 S: Jeunet Palace Kawasaki #1-201, 10-2, Furukawa-cho, Saiwai-ku
3687 S: Kawasaki, Kanagawa 212-0025 3688 S: Kawasaki, Kanagawa 212-0025
3688 S: Japan 3689 S: Japan
3689 3690
3690 N: Eric Youngdale 3691 N: Eric Youngdale
3691 E: eric@andante.org 3692 E: eric@andante.org
3692 W: http://www.andante.org 3693 W: http://www.andante.org
3693 D: General kernel hacker 3694 D: General kernel hacker
3694 D: SCSI iso9660 and ELF 3695 D: SCSI iso9660 and ELF
3695 S: 6389 Hawk View Lane 3696 S: 6389 Hawk View Lane
3696 S: Alexandria, Virginia 22312 3697 S: Alexandria, Virginia 22312
3697 S: USA 3698 S: USA
3698 3699
3699 N: Niibe Yutaka 3700 N: Niibe Yutaka
3700 E: gniibe@mri.co.jp 3701 E: gniibe@mri.co.jp
3701 D: PLIP driver 3702 D: PLIP driver
3702 D: Asynchronous socket I/O in the NET code 3703 D: Asynchronous socket I/O in the NET code
3703 S: Mitsubishi Research Institute, Inc. 3704 S: Mitsubishi Research Institute, Inc.
3704 S: ARCO Tower 1-8-1 Shimomeguro Meguro-ku 3705 S: ARCO Tower 1-8-1 Shimomeguro Meguro-ku
3705 S: Tokyo 153 3706 S: Tokyo 153
3706 S: Japan 3707 S: Japan
3707 3708
3708 N: James R. Van Zandt 3709 N: James R. Van Zandt
3709 E: jrv@vanzandt.mv.com 3710 E: jrv@vanzandt.mv.com
3710 P: 1024/E298966D F0 37 4F FD E5 7E C5 E6 F1 A0 1E 22 6F 46 DA 0C 3711 P: 1024/E298966D F0 37 4F FD E5 7E C5 E6 F1 A0 1E 22 6F 46 DA 0C
3711 D: Author and maintainer of the Double Talk speech synthesizer driver 3712 D: Author and maintainer of the Double Talk speech synthesizer driver
3712 S: 27 Spencer Drive 3713 S: 27 Spencer Drive
3713 S: Nashua, New Hampshire 03062 3714 S: Nashua, New Hampshire 03062
3714 S: USA 3715 S: USA
3715 3716
3716 N: Orest Zborowski 3717 N: Orest Zborowski
3717 E: orestz@eskimo.com 3718 E: orestz@eskimo.com
3718 D: XFree86 and kernel development 3719 D: XFree86 and kernel development
3719 S: 1507 145th Place SE #B5 3720 S: 1507 145th Place SE #B5
3720 S: Bellevue, Washington 98007 3721 S: Bellevue, Washington 98007
3721 S: USA 3722 S: USA
3722 3723
3723 N: Richard Zidlicky 3724 N: Richard Zidlicky
3724 E: rz@linux-m68k.org, rdzidlic@geocities.com 3725 E: rz@linux-m68k.org, rdzidlic@geocities.com
3725 W: http://www.geocities.com/rdzidlic 3726 W: http://www.geocities.com/rdzidlic
3726 D: Q40 port - see arch/m68k/q40/README 3727 D: Q40 port - see arch/m68k/q40/README
3727 D: various m68k hacks 3728 D: various m68k hacks
3728 S: Germany 3729 S: Germany
3729 3730
3730 N: Werner Zimmermann 3731 N: Werner Zimmermann
3731 E: Werner.Zimmermann@fht-esslingen.de 3732 E: Werner.Zimmermann@fht-esslingen.de
3732 D: CDROM driver "aztcd" (Aztech/Okano/Orchid/Wearnes) 3733 D: CDROM driver "aztcd" (Aztech/Okano/Orchid/Wearnes)
3733 S: Flandernstrasse 101 3734 S: Flandernstrasse 101
3734 S: D-73732 Esslingen 3735 S: D-73732 Esslingen
3735 S: Germany 3736 S: Germany
3736 3737
3737 N: Leonard N. Zubkoff 3738 N: Leonard N. Zubkoff
3738 W: http://www.dandelion.com/Linux/ 3739 W: http://www.dandelion.com/Linux/
3739 D: BusLogic SCSI driver 3740 D: BusLogic SCSI driver
3740 D: Mylex DAC960 PCI RAID driver 3741 D: Mylex DAC960 PCI RAID driver
3741 D: Miscellaneous kernel fixes 3742 D: Miscellaneous kernel fixes
3742 3743
3743 N: Alessandro Zummo 3744 N: Alessandro Zummo
3744 E: a.zummo@towertech.it 3745 E: a.zummo@towertech.it
3745 D: CMI8330 support is sb_card.c 3746 D: CMI8330 support is sb_card.c
3746 D: ISAPnP fixes in sb_card.c 3747 D: ISAPnP fixes in sb_card.c
3747 D: ZyXEL omni.net lcd plus driver 3748 D: ZyXEL omni.net lcd plus driver
3748 D: RTC subsystem 3749 D: RTC subsystem
3749 S: Italy 3750 S: Italy
3750 3751
3751 N: Marc Zyngier 3752 N: Marc Zyngier
3752 E: maz@wild-wind.fr.eu.org 3753 E: maz@wild-wind.fr.eu.org
3753 W: http://www.misterjones.org 3754 W: http://www.misterjones.org
3754 D: MD driver 3755 D: MD driver
3755 D: EISA/sysfs subsystem 3756 D: EISA/sysfs subsystem
3756 S: France 3757 S: France
3757 3758
3758 3759
3759 # Don't add your name here, unless you really _are_ after Marc 3760 # Don't add your name here, unless you really _are_ after Marc
3760 # alphabetically. Leonard used to be very proud of being the 3761 # alphabetically. Leonard used to be very proud of being the
3761 # last entry, and he'll get positively pissed if he can't even 3762 # last entry, and he'll get positively pissed if he can't even
3762 # be second-to-last. (and this file really _is_ supposed to be 3763 # be second-to-last. (and this file really _is_ supposed to be
3763 # in alphabetic order) 3764 # in alphabetic order)
3764 3765
include/linux/module.h
1 #ifndef _LINUX_MODULE_H 1 #ifndef _LINUX_MODULE_H
2 #define _LINUX_MODULE_H 2 #define _LINUX_MODULE_H
3 /* 3 /*
4 * Dynamic loading of modules into the kernel. 4 * Dynamic loading of modules into the kernel.
5 * 5 *
6 * Rewritten by Richard Henderson <rth@tamu.edu> Dec 1996 6 * Rewritten by Richard Henderson <rth@tamu.edu> Dec 1996
7 * Rewritten again by Rusty Russell, 2002 7 * Rewritten again by Rusty Russell, 2002
8 */ 8 */
9 #include <linux/sched.h> 9 #include <linux/sched.h>
10 #include <linux/spinlock.h> 10 #include <linux/spinlock.h>
11 #include <linux/list.h> 11 #include <linux/list.h>
12 #include <linux/stat.h> 12 #include <linux/stat.h>
13 #include <linux/compiler.h> 13 #include <linux/compiler.h>
14 #include <linux/cache.h> 14 #include <linux/cache.h>
15 #include <linux/kmod.h> 15 #include <linux/kmod.h>
16 #include <linux/elf.h> 16 #include <linux/elf.h>
17 #include <linux/stringify.h> 17 #include <linux/stringify.h>
18 #include <linux/kobject.h> 18 #include <linux/kobject.h>
19 #include <linux/moduleparam.h> 19 #include <linux/moduleparam.h>
20 #include <asm/local.h> 20 #include <asm/local.h>
21 21
22 #include <asm/module.h> 22 #include <asm/module.h>
23 23
24 /* Not Yet Implemented */ 24 /* Not Yet Implemented */
25 #define MODULE_SUPPORTED_DEVICE(name) 25 #define MODULE_SUPPORTED_DEVICE(name)
26 26
27 /* v850 toolchain uses a `_' prefix for all user symbols */ 27 /* v850 toolchain uses a `_' prefix for all user symbols */
28 #ifndef MODULE_SYMBOL_PREFIX 28 #ifndef MODULE_SYMBOL_PREFIX
29 #define MODULE_SYMBOL_PREFIX "" 29 #define MODULE_SYMBOL_PREFIX ""
30 #endif 30 #endif
31 31
32 #define MODULE_NAME_LEN (64 - sizeof(unsigned long)) 32 #define MODULE_NAME_LEN (64 - sizeof(unsigned long))
33 33
34 struct kernel_symbol 34 struct kernel_symbol
35 { 35 {
36 unsigned long value; 36 unsigned long value;
37 const char *name; 37 const char *name;
38 }; 38 };
39 39
40 struct modversion_info 40 struct modversion_info
41 { 41 {
42 unsigned long crc; 42 unsigned long crc;
43 char name[MODULE_NAME_LEN]; 43 char name[MODULE_NAME_LEN];
44 }; 44 };
45 45
46 struct module; 46 struct module;
47 47
48 struct module_attribute { 48 struct module_attribute {
49 struct attribute attr; 49 struct attribute attr;
50 ssize_t (*show)(struct module_attribute *, struct module *, char *); 50 ssize_t (*show)(struct module_attribute *, struct module *, char *);
51 ssize_t (*store)(struct module_attribute *, struct module *, 51 ssize_t (*store)(struct module_attribute *, struct module *,
52 const char *, size_t count); 52 const char *, size_t count);
53 void (*setup)(struct module *, const char *); 53 void (*setup)(struct module *, const char *);
54 int (*test)(struct module *); 54 int (*test)(struct module *);
55 void (*free)(struct module *); 55 void (*free)(struct module *);
56 }; 56 };
57 57
58 struct module_kobject 58 struct module_kobject
59 { 59 {
60 struct kobject kobj; 60 struct kobject kobj;
61 struct module *mod; 61 struct module *mod;
62 }; 62 };
63 63
64 /* These are either module local, or the kernel's dummy ones. */ 64 /* These are either module local, or the kernel's dummy ones. */
65 extern int init_module(void); 65 extern int init_module(void);
66 extern void cleanup_module(void); 66 extern void cleanup_module(void);
67 67
68 /* Archs provide a method of finding the correct exception table. */ 68 /* Archs provide a method of finding the correct exception table. */
69 struct exception_table_entry; 69 struct exception_table_entry;
70 70
71 const struct exception_table_entry * 71 const struct exception_table_entry *
72 search_extable(const struct exception_table_entry *first, 72 search_extable(const struct exception_table_entry *first,
73 const struct exception_table_entry *last, 73 const struct exception_table_entry *last,
74 unsigned long value); 74 unsigned long value);
75 void sort_extable(struct exception_table_entry *start, 75 void sort_extable(struct exception_table_entry *start,
76 struct exception_table_entry *finish); 76 struct exception_table_entry *finish);
77 void sort_main_extable(void); 77 void sort_main_extable(void);
78 78
79 extern struct subsystem module_subsys; 79 extern struct subsystem module_subsys;
80 80
81 #ifdef MODULE 81 #ifdef MODULE
82 #define MODULE_GENERIC_TABLE(gtype,name) \ 82 #define MODULE_GENERIC_TABLE(gtype,name) \
83 extern const struct gtype##_id __mod_##gtype##_table \ 83 extern const struct gtype##_id __mod_##gtype##_table \
84 __attribute__ ((unused, alias(__stringify(name)))) 84 __attribute__ ((unused, alias(__stringify(name))))
85 85
86 extern struct module __this_module; 86 extern struct module __this_module;
87 #define THIS_MODULE (&__this_module) 87 #define THIS_MODULE (&__this_module)
88 #else /* !MODULE */ 88 #else /* !MODULE */
89 #define MODULE_GENERIC_TABLE(gtype,name) 89 #define MODULE_GENERIC_TABLE(gtype,name)
90 #define THIS_MODULE ((struct module *)0) 90 #define THIS_MODULE ((struct module *)0)
91 #endif 91 #endif
92 92
93 /* Generic info of form tag = "info" */ 93 /* Generic info of form tag = "info" */
94 #define MODULE_INFO(tag, info) __MODULE_INFO(tag, tag, info) 94 #define MODULE_INFO(tag, info) __MODULE_INFO(tag, tag, info)
95 95
96 /* For userspace: you can also call me... */ 96 /* For userspace: you can also call me... */
97 #define MODULE_ALIAS(_alias) MODULE_INFO(alias, _alias) 97 #define MODULE_ALIAS(_alias) MODULE_INFO(alias, _alias)
98 98
99 /* 99 /*
100 * The following license idents are currently accepted as indicating free 100 * The following license idents are currently accepted as indicating free
101 * software modules 101 * software modules
102 * 102 *
103 * "GPL" [GNU Public License v2 or later] 103 * "GPL" [GNU Public License v2 or later]
104 * "GPL v2" [GNU Public License v2] 104 * "GPL v2" [GNU Public License v2]
105 * "GPL and additional rights" [GNU Public License v2 rights and more] 105 * "GPL and additional rights" [GNU Public License v2 rights and more]
106 * "Dual BSD/GPL" [GNU Public License v2 106 * "Dual BSD/GPL" [GNU Public License v2
107 * or BSD license choice] 107 * or BSD license choice]
108 * "Dual MIT/GPL" [GNU Public License v2 108 * "Dual MIT/GPL" [GNU Public License v2
109 * or MIT license choice] 109 * or MIT license choice]
110 * "Dual MPL/GPL" [GNU Public License v2 110 * "Dual MPL/GPL" [GNU Public License v2
111 * or Mozilla license choice] 111 * or Mozilla license choice]
112 * 112 *
113 * The following other idents are available 113 * The following other idents are available
114 * 114 *
115 * "Proprietary" [Non free products] 115 * "Proprietary" [Non free products]
116 * 116 *
117 * There are dual licensed components, but when running with Linux it is the 117 * There are dual licensed components, but when running with Linux it is the
118 * GPL that is relevant so this is a non issue. Similarly LGPL linked with GPL 118 * GPL that is relevant so this is a non issue. Similarly LGPL linked with GPL
119 * is a GPL combined work. 119 * is a GPL combined work.
120 * 120 *
121 * This exists for several reasons 121 * This exists for several reasons
122 * 1. So modinfo can show license info for users wanting to vet their setup 122 * 1. So modinfo can show license info for users wanting to vet their setup
123 * is free 123 * is free
124 * 2. So the community can ignore bug reports including proprietary modules 124 * 2. So the community can ignore bug reports including proprietary modules
125 * 3. So vendors can do likewise based on their own policies 125 * 3. So vendors can do likewise based on their own policies
126 */ 126 */
127 #define MODULE_LICENSE(_license) MODULE_INFO(license, _license) 127 #define MODULE_LICENSE(_license) MODULE_INFO(license, _license)
128 128
129 /* Author, ideally of form NAME <EMAIL>[, NAME <EMAIL>]*[ and NAME <EMAIL>] */ 129 /* Author, ideally of form NAME <EMAIL>[, NAME <EMAIL>]*[ and NAME <EMAIL>] */
130 #define MODULE_AUTHOR(_author) MODULE_INFO(author, _author) 130 #define MODULE_AUTHOR(_author) MODULE_INFO(author, _author)
131 131
132 /* What your module does. */ 132 /* What your module does. */
133 #define MODULE_DESCRIPTION(_description) MODULE_INFO(description, _description) 133 #define MODULE_DESCRIPTION(_description) MODULE_INFO(description, _description)
134 134
135 /* One for each parameter, describing how to use it. Some files do 135 /* One for each parameter, describing how to use it. Some files do
136 multiple of these per line, so can't just use MODULE_INFO. */ 136 multiple of these per line, so can't just use MODULE_INFO. */
137 #define MODULE_PARM_DESC(_parm, desc) \ 137 #define MODULE_PARM_DESC(_parm, desc) \
138 __MODULE_INFO(parm, _parm, #_parm ":" desc) 138 __MODULE_INFO(parm, _parm, #_parm ":" desc)
139 139
140 #define MODULE_DEVICE_TABLE(type,name) \ 140 #define MODULE_DEVICE_TABLE(type,name) \
141 MODULE_GENERIC_TABLE(type##_device,name) 141 MODULE_GENERIC_TABLE(type##_device,name)
142 142
143 /* Version of form [<epoch>:]<version>[-<extra-version>]. 143 /* Version of form [<epoch>:]<version>[-<extra-version>].
144 Or for CVS/RCS ID version, everything but the number is stripped. 144 Or for CVS/RCS ID version, everything but the number is stripped.
145 <epoch>: A (small) unsigned integer which allows you to start versions 145 <epoch>: A (small) unsigned integer which allows you to start versions
146 anew. If not mentioned, it's zero. eg. "2:1.0" is after 146 anew. If not mentioned, it's zero. eg. "2:1.0" is after
147 "1:2.0". 147 "1:2.0".
148 <version>: The <version> may contain only alphanumerics and the 148 <version>: The <version> may contain only alphanumerics and the
149 character `.'. Ordered by numeric sort for numeric parts, 149 character `.'. Ordered by numeric sort for numeric parts,
150 ascii sort for ascii parts (as per RPM or DEB algorithm). 150 ascii sort for ascii parts (as per RPM or DEB algorithm).
151 <extraversion>: Like <version>, but inserted for local 151 <extraversion>: Like <version>, but inserted for local
152 customizations, eg "rh3" or "rusty1". 152 customizations, eg "rh3" or "rusty1".
153 153
154 Using this automatically adds a checksum of the .c files and the 154 Using this automatically adds a checksum of the .c files and the
155 local headers in "srcversion". 155 local headers in "srcversion".
156 */ 156 */
157 #define MODULE_VERSION(_version) MODULE_INFO(version, _version) 157 #define MODULE_VERSION(_version) MODULE_INFO(version, _version)
158 158
159 /* Optional firmware file (or files) needed by the module 159 /* Optional firmware file (or files) needed by the module
160 * format is simply firmware file name. Multiple firmware 160 * format is simply firmware file name. Multiple firmware
161 * files require multiple MODULE_FIRMWARE() specifiers */ 161 * files require multiple MODULE_FIRMWARE() specifiers */
162 #define MODULE_FIRMWARE(_firmware) MODULE_INFO(firmware, _firmware) 162 #define MODULE_FIRMWARE(_firmware) MODULE_INFO(firmware, _firmware)
163 163
164 /* Given an address, look for it in the exception tables */ 164 /* Given an address, look for it in the exception tables */
165 const struct exception_table_entry *search_exception_tables(unsigned long add); 165 const struct exception_table_entry *search_exception_tables(unsigned long add);
166 166
167 struct notifier_block; 167 struct notifier_block;
168 168
169 #ifdef CONFIG_MODULES 169 #ifdef CONFIG_MODULES
170 170
171 /* Get/put a kernel symbol (calls must be symmetric) */ 171 /* Get/put a kernel symbol (calls must be symmetric) */
172 void *__symbol_get(const char *symbol); 172 void *__symbol_get(const char *symbol);
173 void *__symbol_get_gpl(const char *symbol); 173 void *__symbol_get_gpl(const char *symbol);
174 #define symbol_get(x) ((typeof(&x))(__symbol_get(MODULE_SYMBOL_PREFIX #x))) 174 #define symbol_get(x) ((typeof(&x))(__symbol_get(MODULE_SYMBOL_PREFIX #x)))
175 175
176 #ifndef __GENKSYMS__ 176 #ifndef __GENKSYMS__
177 #ifdef CONFIG_MODVERSIONS 177 #ifdef CONFIG_MODVERSIONS
178 /* Mark the CRC weak since genksyms apparently decides not to 178 /* Mark the CRC weak since genksyms apparently decides not to
179 * generate a checksums for some symbols */ 179 * generate a checksums for some symbols */
180 #define __CRC_SYMBOL(sym, sec) \ 180 #define __CRC_SYMBOL(sym, sec) \
181 extern void *__crc_##sym __attribute__((weak)); \ 181 extern void *__crc_##sym __attribute__((weak)); \
182 static const unsigned long __kcrctab_##sym \ 182 static const unsigned long __kcrctab_##sym \
183 __attribute_used__ \ 183 __attribute_used__ \
184 __attribute__((section("__kcrctab" sec), unused)) \ 184 __attribute__((section("__kcrctab" sec), unused)) \
185 = (unsigned long) &__crc_##sym; 185 = (unsigned long) &__crc_##sym;
186 #else 186 #else
187 #define __CRC_SYMBOL(sym, sec) 187 #define __CRC_SYMBOL(sym, sec)
188 #endif 188 #endif
189 189
190 /* For every exported symbol, place a struct in the __ksymtab section */ 190 /* For every exported symbol, place a struct in the __ksymtab section */
191 #define __EXPORT_SYMBOL(sym, sec) \ 191 #define __EXPORT_SYMBOL(sym, sec) \
192 extern typeof(sym) sym; \ 192 extern typeof(sym) sym; \
193 __CRC_SYMBOL(sym, sec) \ 193 __CRC_SYMBOL(sym, sec) \
194 static const char __kstrtab_##sym[] \ 194 static const char __kstrtab_##sym[] \
195 __attribute__((section("__ksymtab_strings"))) \ 195 __attribute__((section("__ksymtab_strings"))) \
196 = MODULE_SYMBOL_PREFIX #sym; \ 196 = MODULE_SYMBOL_PREFIX #sym; \
197 static const struct kernel_symbol __ksymtab_##sym \ 197 static const struct kernel_symbol __ksymtab_##sym \
198 __attribute_used__ \ 198 __attribute_used__ \
199 __attribute__((section("__ksymtab" sec), unused)) \ 199 __attribute__((section("__ksymtab" sec), unused)) \
200 = { (unsigned long)&sym, __kstrtab_##sym } 200 = { (unsigned long)&sym, __kstrtab_##sym }
201 201
202 #define EXPORT_SYMBOL(sym) \ 202 #define EXPORT_SYMBOL(sym) \
203 __EXPORT_SYMBOL(sym, "") 203 __EXPORT_SYMBOL(sym, "")
204 204
205 #define EXPORT_SYMBOL_GPL(sym) \ 205 #define EXPORT_SYMBOL_GPL(sym) \
206 __EXPORT_SYMBOL(sym, "_gpl") 206 __EXPORT_SYMBOL(sym, "_gpl")
207 207
208 #define EXPORT_SYMBOL_GPL_FUTURE(sym) \ 208 #define EXPORT_SYMBOL_GPL_FUTURE(sym) \
209 __EXPORT_SYMBOL(sym, "_gpl_future") 209 __EXPORT_SYMBOL(sym, "_gpl_future")
210 210
211 211
212 #ifdef CONFIG_UNUSED_SYMBOLS 212 #ifdef CONFIG_UNUSED_SYMBOLS
213 #define EXPORT_UNUSED_SYMBOL(sym) __EXPORT_SYMBOL(sym, "_unused") 213 #define EXPORT_UNUSED_SYMBOL(sym) __EXPORT_SYMBOL(sym, "_unused")
214 #define EXPORT_UNUSED_SYMBOL_GPL(sym) __EXPORT_SYMBOL(sym, "_unused_gpl") 214 #define EXPORT_UNUSED_SYMBOL_GPL(sym) __EXPORT_SYMBOL(sym, "_unused_gpl")
215 #else 215 #else
216 #define EXPORT_UNUSED_SYMBOL(sym) 216 #define EXPORT_UNUSED_SYMBOL(sym)
217 #define EXPORT_UNUSED_SYMBOL_GPL(sym) 217 #define EXPORT_UNUSED_SYMBOL_GPL(sym)
218 #endif 218 #endif
219 219
220 #endif 220 #endif
221 221
222 struct module_ref 222 struct module_ref
223 { 223 {
224 local_t count; 224 local_t count;
225 } ____cacheline_aligned; 225 } ____cacheline_aligned;
226 226
227 enum module_state 227 enum module_state
228 { 228 {
229 MODULE_STATE_LIVE, 229 MODULE_STATE_LIVE,
230 MODULE_STATE_COMING, 230 MODULE_STATE_COMING,
231 MODULE_STATE_GOING, 231 MODULE_STATE_GOING,
232 }; 232 };
233 233
234 /* Similar stuff for section attributes. */ 234 /* Similar stuff for section attributes. */
235 #define MODULE_SECT_NAME_LEN 32
236 struct module_sect_attr 235 struct module_sect_attr
237 { 236 {
238 struct module_attribute mattr; 237 struct module_attribute mattr;
239 char name[MODULE_SECT_NAME_LEN]; 238 char *name;
240 unsigned long address; 239 unsigned long address;
241 }; 240 };
242 241
243 struct module_sect_attrs 242 struct module_sect_attrs
244 { 243 {
245 struct attribute_group grp; 244 struct attribute_group grp;
245 int nsections;
246 struct module_sect_attr attrs[0]; 246 struct module_sect_attr attrs[0];
247 }; 247 };
248 248
249 struct module_param_attrs; 249 struct module_param_attrs;
250 250
251 struct module 251 struct module
252 { 252 {
253 enum module_state state; 253 enum module_state state;
254 254
255 /* Member of list of modules */ 255 /* Member of list of modules */
256 struct list_head list; 256 struct list_head list;
257 257
258 /* Unique handle for this module */ 258 /* Unique handle for this module */
259 char name[MODULE_NAME_LEN]; 259 char name[MODULE_NAME_LEN];
260 260
261 /* Sysfs stuff. */ 261 /* Sysfs stuff. */
262 struct module_kobject mkobj; 262 struct module_kobject mkobj;
263 struct module_param_attrs *param_attrs; 263 struct module_param_attrs *param_attrs;
264 struct module_attribute *modinfo_attrs; 264 struct module_attribute *modinfo_attrs;
265 const char *version; 265 const char *version;
266 const char *srcversion; 266 const char *srcversion;
267 267
268 /* Exported symbols */ 268 /* Exported symbols */
269 const struct kernel_symbol *syms; 269 const struct kernel_symbol *syms;
270 unsigned int num_syms; 270 unsigned int num_syms;
271 const unsigned long *crcs; 271 const unsigned long *crcs;
272 272
273 /* GPL-only exported symbols. */ 273 /* GPL-only exported symbols. */
274 const struct kernel_symbol *gpl_syms; 274 const struct kernel_symbol *gpl_syms;
275 unsigned int num_gpl_syms; 275 unsigned int num_gpl_syms;
276 const unsigned long *gpl_crcs; 276 const unsigned long *gpl_crcs;
277 277
278 /* unused exported symbols. */ 278 /* unused exported symbols. */
279 const struct kernel_symbol *unused_syms; 279 const struct kernel_symbol *unused_syms;
280 unsigned int num_unused_syms; 280 unsigned int num_unused_syms;
281 const unsigned long *unused_crcs; 281 const unsigned long *unused_crcs;
282 /* GPL-only, unused exported symbols. */ 282 /* GPL-only, unused exported symbols. */
283 const struct kernel_symbol *unused_gpl_syms; 283 const struct kernel_symbol *unused_gpl_syms;
284 unsigned int num_unused_gpl_syms; 284 unsigned int num_unused_gpl_syms;
285 const unsigned long *unused_gpl_crcs; 285 const unsigned long *unused_gpl_crcs;
286 286
287 /* symbols that will be GPL-only in the near future. */ 287 /* symbols that will be GPL-only in the near future. */
288 const struct kernel_symbol *gpl_future_syms; 288 const struct kernel_symbol *gpl_future_syms;
289 unsigned int num_gpl_future_syms; 289 unsigned int num_gpl_future_syms;
290 const unsigned long *gpl_future_crcs; 290 const unsigned long *gpl_future_crcs;
291 291
292 /* Exception table */ 292 /* Exception table */
293 unsigned int num_exentries; 293 unsigned int num_exentries;
294 const struct exception_table_entry *extable; 294 const struct exception_table_entry *extable;
295 295
296 /* Startup function. */ 296 /* Startup function. */
297 int (*init)(void); 297 int (*init)(void);
298 298
299 /* If this is non-NULL, vfree after init() returns */ 299 /* If this is non-NULL, vfree after init() returns */
300 void *module_init; 300 void *module_init;
301 301
302 /* Here is the actual code + data, vfree'd on unload. */ 302 /* Here is the actual code + data, vfree'd on unload. */
303 void *module_core; 303 void *module_core;
304 304
305 /* Here are the sizes of the init and core sections */ 305 /* Here are the sizes of the init and core sections */
306 unsigned long init_size, core_size; 306 unsigned long init_size, core_size;
307 307
308 /* The size of the executable code in each section. */ 308 /* The size of the executable code in each section. */
309 unsigned long init_text_size, core_text_size; 309 unsigned long init_text_size, core_text_size;
310 310
311 /* The handle returned from unwind_add_table. */ 311 /* The handle returned from unwind_add_table. */
312 void *unwind_info; 312 void *unwind_info;
313 313
314 /* Arch-specific module values */ 314 /* Arch-specific module values */
315 struct mod_arch_specific arch; 315 struct mod_arch_specific arch;
316 316
317 /* Am I unsafe to unload? */ 317 /* Am I unsafe to unload? */
318 int unsafe; 318 int unsafe;
319 319
320 /* Am I GPL-compatible */ 320 /* Am I GPL-compatible */
321 int license_gplok; 321 int license_gplok;
322 322
323 #ifdef CONFIG_MODULE_UNLOAD 323 #ifdef CONFIG_MODULE_UNLOAD
324 /* Reference counts */ 324 /* Reference counts */
325 struct module_ref ref[NR_CPUS]; 325 struct module_ref ref[NR_CPUS];
326 326
327 /* What modules depend on me? */ 327 /* What modules depend on me? */
328 struct list_head modules_which_use_me; 328 struct list_head modules_which_use_me;
329 329
330 /* Who is waiting for us to be unloaded */ 330 /* Who is waiting for us to be unloaded */
331 struct task_struct *waiter; 331 struct task_struct *waiter;
332 332
333 /* Destruction function. */ 333 /* Destruction function. */
334 void (*exit)(void); 334 void (*exit)(void);
335 #endif 335 #endif
336 336
337 #ifdef CONFIG_KALLSYMS 337 #ifdef CONFIG_KALLSYMS
338 /* We keep the symbol and string tables for kallsyms. */ 338 /* We keep the symbol and string tables for kallsyms. */
339 Elf_Sym *symtab; 339 Elf_Sym *symtab;
340 unsigned long num_symtab; 340 unsigned long num_symtab;
341 char *strtab; 341 char *strtab;
342 342
343 /* Section attributes */ 343 /* Section attributes */
344 struct module_sect_attrs *sect_attrs; 344 struct module_sect_attrs *sect_attrs;
345 #endif 345 #endif
346 346
347 /* Per-cpu data. */ 347 /* Per-cpu data. */
348 void *percpu; 348 void *percpu;
349 349
350 /* The command line arguments (may be mangled). People like 350 /* The command line arguments (may be mangled). People like
351 keeping pointers to this stuff */ 351 keeping pointers to this stuff */
352 char *args; 352 char *args;
353 }; 353 };
354 354
355 /* FIXME: It'd be nice to isolate modules during init, too, so they 355 /* FIXME: It'd be nice to isolate modules during init, too, so they
356 aren't used before they (may) fail. But presently too much code 356 aren't used before they (may) fail. But presently too much code
357 (IDE & SCSI) require entry into the module during init.*/ 357 (IDE & SCSI) require entry into the module during init.*/
358 static inline int module_is_live(struct module *mod) 358 static inline int module_is_live(struct module *mod)
359 { 359 {
360 return mod->state != MODULE_STATE_GOING; 360 return mod->state != MODULE_STATE_GOING;
361 } 361 }
362 362
363 /* Is this address in a module? (second is with no locks, for oops) */ 363 /* Is this address in a module? (second is with no locks, for oops) */
364 struct module *module_text_address(unsigned long addr); 364 struct module *module_text_address(unsigned long addr);
365 struct module *__module_text_address(unsigned long addr); 365 struct module *__module_text_address(unsigned long addr);
366 int is_module_address(unsigned long addr); 366 int is_module_address(unsigned long addr);
367 367
368 /* Returns module and fills in value, defined and namebuf, or NULL if 368 /* Returns module and fills in value, defined and namebuf, or NULL if
369 symnum out of range. */ 369 symnum out of range. */
370 struct module *module_get_kallsym(unsigned int symnum, unsigned long *value, 370 struct module *module_get_kallsym(unsigned int symnum, unsigned long *value,
371 char *type, char *name, size_t namelen); 371 char *type, char *name, size_t namelen);
372 372
373 /* Look for this name: can be of form module:name. */ 373 /* Look for this name: can be of form module:name. */
374 unsigned long module_kallsyms_lookup_name(const char *name); 374 unsigned long module_kallsyms_lookup_name(const char *name);
375 375
376 int is_exported(const char *name, const struct module *mod); 376 int is_exported(const char *name, const struct module *mod);
377 377
378 extern void __module_put_and_exit(struct module *mod, long code) 378 extern void __module_put_and_exit(struct module *mod, long code)
379 __attribute__((noreturn)); 379 __attribute__((noreturn));
380 #define module_put_and_exit(code) __module_put_and_exit(THIS_MODULE, code); 380 #define module_put_and_exit(code) __module_put_and_exit(THIS_MODULE, code);
381 381
382 #ifdef CONFIG_MODULE_UNLOAD 382 #ifdef CONFIG_MODULE_UNLOAD
383 unsigned int module_refcount(struct module *mod); 383 unsigned int module_refcount(struct module *mod);
384 void __symbol_put(const char *symbol); 384 void __symbol_put(const char *symbol);
385 #define symbol_put(x) __symbol_put(MODULE_SYMBOL_PREFIX #x) 385 #define symbol_put(x) __symbol_put(MODULE_SYMBOL_PREFIX #x)
386 void symbol_put_addr(void *addr); 386 void symbol_put_addr(void *addr);
387 387
388 /* Sometimes we know we already have a refcount, and it's easier not 388 /* Sometimes we know we already have a refcount, and it's easier not
389 to handle the error case (which only happens with rmmod --wait). */ 389 to handle the error case (which only happens with rmmod --wait). */
390 static inline void __module_get(struct module *module) 390 static inline void __module_get(struct module *module)
391 { 391 {
392 if (module) { 392 if (module) {
393 BUG_ON(module_refcount(module) == 0); 393 BUG_ON(module_refcount(module) == 0);
394 local_inc(&module->ref[get_cpu()].count); 394 local_inc(&module->ref[get_cpu()].count);
395 put_cpu(); 395 put_cpu();
396 } 396 }
397 } 397 }
398 398
399 static inline int try_module_get(struct module *module) 399 static inline int try_module_get(struct module *module)
400 { 400 {
401 int ret = 1; 401 int ret = 1;
402 402
403 if (module) { 403 if (module) {
404 unsigned int cpu = get_cpu(); 404 unsigned int cpu = get_cpu();
405 if (likely(module_is_live(module))) 405 if (likely(module_is_live(module)))
406 local_inc(&module->ref[cpu].count); 406 local_inc(&module->ref[cpu].count);
407 else 407 else
408 ret = 0; 408 ret = 0;
409 put_cpu(); 409 put_cpu();
410 } 410 }
411 return ret; 411 return ret;
412 } 412 }
413 413
414 static inline void module_put(struct module *module) 414 static inline void module_put(struct module *module)
415 { 415 {
416 if (module) { 416 if (module) {
417 unsigned int cpu = get_cpu(); 417 unsigned int cpu = get_cpu();
418 local_dec(&module->ref[cpu].count); 418 local_dec(&module->ref[cpu].count);
419 /* Maybe they're waiting for us to drop reference? */ 419 /* Maybe they're waiting for us to drop reference? */
420 if (unlikely(!module_is_live(module))) 420 if (unlikely(!module_is_live(module)))
421 wake_up_process(module->waiter); 421 wake_up_process(module->waiter);
422 put_cpu(); 422 put_cpu();
423 } 423 }
424 } 424 }
425 425
426 #else /*!CONFIG_MODULE_UNLOAD*/ 426 #else /*!CONFIG_MODULE_UNLOAD*/
427 static inline int try_module_get(struct module *module) 427 static inline int try_module_get(struct module *module)
428 { 428 {
429 return !module || module_is_live(module); 429 return !module || module_is_live(module);
430 } 430 }
431 static inline void module_put(struct module *module) 431 static inline void module_put(struct module *module)
432 { 432 {
433 } 433 }
434 static inline void __module_get(struct module *module) 434 static inline void __module_get(struct module *module)
435 { 435 {
436 } 436 }
437 #define symbol_put(x) do { } while(0) 437 #define symbol_put(x) do { } while(0)
438 #define symbol_put_addr(p) do { } while(0) 438 #define symbol_put_addr(p) do { } while(0)
439 439
440 #endif /* CONFIG_MODULE_UNLOAD */ 440 #endif /* CONFIG_MODULE_UNLOAD */
441 441
442 /* This is a #define so the string doesn't get put in every .o file */ 442 /* This is a #define so the string doesn't get put in every .o file */
443 #define module_name(mod) \ 443 #define module_name(mod) \
444 ({ \ 444 ({ \
445 struct module *__mod = (mod); \ 445 struct module *__mod = (mod); \
446 __mod ? __mod->name : "kernel"; \ 446 __mod ? __mod->name : "kernel"; \
447 }) 447 })
448 448
449 #define __unsafe(mod) \ 449 #define __unsafe(mod) \
450 do { \ 450 do { \
451 if (mod && !(mod)->unsafe) { \ 451 if (mod && !(mod)->unsafe) { \
452 printk(KERN_WARNING \ 452 printk(KERN_WARNING \
453 "Module %s cannot be unloaded due to unsafe usage in" \ 453 "Module %s cannot be unloaded due to unsafe usage in" \
454 " %s:%u\n", (mod)->name, __FILE__, __LINE__); \ 454 " %s:%u\n", (mod)->name, __FILE__, __LINE__); \
455 (mod)->unsafe = 1; \ 455 (mod)->unsafe = 1; \
456 } \ 456 } \
457 } while(0) 457 } while(0)
458 458
459 /* For kallsyms to ask for address resolution. NULL means not found. */ 459 /* For kallsyms to ask for address resolution. NULL means not found. */
460 const char *module_address_lookup(unsigned long addr, 460 const char *module_address_lookup(unsigned long addr,
461 unsigned long *symbolsize, 461 unsigned long *symbolsize,
462 unsigned long *offset, 462 unsigned long *offset,
463 char **modname); 463 char **modname);
464 464
465 /* For extable.c to search modules' exception tables. */ 465 /* For extable.c to search modules' exception tables. */
466 const struct exception_table_entry *search_module_extables(unsigned long addr); 466 const struct exception_table_entry *search_module_extables(unsigned long addr);
467 467
468 int register_module_notifier(struct notifier_block * nb); 468 int register_module_notifier(struct notifier_block * nb);
469 int unregister_module_notifier(struct notifier_block * nb); 469 int unregister_module_notifier(struct notifier_block * nb);
470 470
471 extern void print_modules(void); 471 extern void print_modules(void);
472 472
473 struct device_driver; 473 struct device_driver;
474 void module_add_driver(struct module *, struct device_driver *); 474 void module_add_driver(struct module *, struct device_driver *);
475 void module_remove_driver(struct device_driver *); 475 void module_remove_driver(struct device_driver *);
476 476
477 #else /* !CONFIG_MODULES... */ 477 #else /* !CONFIG_MODULES... */
478 #define EXPORT_SYMBOL(sym) 478 #define EXPORT_SYMBOL(sym)
479 #define EXPORT_SYMBOL_GPL(sym) 479 #define EXPORT_SYMBOL_GPL(sym)
480 #define EXPORT_SYMBOL_GPL_FUTURE(sym) 480 #define EXPORT_SYMBOL_GPL_FUTURE(sym)
481 #define EXPORT_UNUSED_SYMBOL(sym) 481 #define EXPORT_UNUSED_SYMBOL(sym)
482 #define EXPORT_UNUSED_SYMBOL_GPL(sym) 482 #define EXPORT_UNUSED_SYMBOL_GPL(sym)
483 483
484 /* Given an address, look for it in the exception tables. */ 484 /* Given an address, look for it in the exception tables. */
485 static inline const struct exception_table_entry * 485 static inline const struct exception_table_entry *
486 search_module_extables(unsigned long addr) 486 search_module_extables(unsigned long addr)
487 { 487 {
488 return NULL; 488 return NULL;
489 } 489 }
490 490
491 /* Is this address in a module? */ 491 /* Is this address in a module? */
492 static inline struct module *module_text_address(unsigned long addr) 492 static inline struct module *module_text_address(unsigned long addr)
493 { 493 {
494 return NULL; 494 return NULL;
495 } 495 }
496 496
497 /* Is this address in a module? (don't take a lock, we're oopsing) */ 497 /* Is this address in a module? (don't take a lock, we're oopsing) */
498 static inline struct module *__module_text_address(unsigned long addr) 498 static inline struct module *__module_text_address(unsigned long addr)
499 { 499 {
500 return NULL; 500 return NULL;
501 } 501 }
502 502
503 static inline int is_module_address(unsigned long addr) 503 static inline int is_module_address(unsigned long addr)
504 { 504 {
505 return 0; 505 return 0;
506 } 506 }
507 507
508 /* Get/put a kernel symbol (calls should be symmetric) */ 508 /* Get/put a kernel symbol (calls should be symmetric) */
509 #define symbol_get(x) ({ extern typeof(x) x __attribute__((weak)); &(x); }) 509 #define symbol_get(x) ({ extern typeof(x) x __attribute__((weak)); &(x); })
510 #define symbol_put(x) do { } while(0) 510 #define symbol_put(x) do { } while(0)
511 #define symbol_put_addr(x) do { } while(0) 511 #define symbol_put_addr(x) do { } while(0)
512 512
513 static inline void __module_get(struct module *module) 513 static inline void __module_get(struct module *module)
514 { 514 {
515 } 515 }
516 516
517 static inline int try_module_get(struct module *module) 517 static inline int try_module_get(struct module *module)
518 { 518 {
519 return 1; 519 return 1;
520 } 520 }
521 521
522 static inline void module_put(struct module *module) 522 static inline void module_put(struct module *module)
523 { 523 {
524 } 524 }
525 525
526 #define module_name(mod) "kernel" 526 #define module_name(mod) "kernel"
527 527
528 #define __unsafe(mod) 528 #define __unsafe(mod)
529 529
530 /* For kallsyms to ask for address resolution. NULL means not found. */ 530 /* For kallsyms to ask for address resolution. NULL means not found. */
531 static inline const char *module_address_lookup(unsigned long addr, 531 static inline const char *module_address_lookup(unsigned long addr,
532 unsigned long *symbolsize, 532 unsigned long *symbolsize,
533 unsigned long *offset, 533 unsigned long *offset,
534 char **modname) 534 char **modname)
535 { 535 {
536 return NULL; 536 return NULL;
537 } 537 }
538 538
539 static inline struct module *module_get_kallsym(unsigned int symnum, 539 static inline struct module *module_get_kallsym(unsigned int symnum,
540 unsigned long *value, 540 unsigned long *value,
541 char *type, char *name, 541 char *type, char *name,
542 size_t namelen) 542 size_t namelen)
543 { 543 {
544 return NULL; 544 return NULL;
545 } 545 }
546 546
547 static inline unsigned long module_kallsyms_lookup_name(const char *name) 547 static inline unsigned long module_kallsyms_lookup_name(const char *name)
548 { 548 {
549 return 0; 549 return 0;
550 } 550 }
551 551
552 static inline int is_exported(const char *name, const struct module *mod) 552 static inline int is_exported(const char *name, const struct module *mod)
553 { 553 {
554 return 0; 554 return 0;
555 } 555 }
556 556
557 static inline int register_module_notifier(struct notifier_block * nb) 557 static inline int register_module_notifier(struct notifier_block * nb)
558 { 558 {
559 /* no events will happen anyway, so this can always succeed */ 559 /* no events will happen anyway, so this can always succeed */
560 return 0; 560 return 0;
561 } 561 }
562 562
563 static inline int unregister_module_notifier(struct notifier_block * nb) 563 static inline int unregister_module_notifier(struct notifier_block * nb)
564 { 564 {
565 return 0; 565 return 0;
566 } 566 }
567 567
568 #define module_put_and_exit(code) do_exit(code) 568 #define module_put_and_exit(code) do_exit(code)
569 569
570 static inline void print_modules(void) 570 static inline void print_modules(void)
571 { 571 {
572 } 572 }
573 573
574 struct device_driver; 574 struct device_driver;
575 struct module; 575 struct module;
576 576
577 static inline void module_add_driver(struct module *module, struct device_driver *driver) 577 static inline void module_add_driver(struct module *module, struct device_driver *driver)
578 { 578 {
579 } 579 }
580 580
581 static inline void module_remove_driver(struct device_driver *driver) 581 static inline void module_remove_driver(struct device_driver *driver)
582 { 582 {
583 } 583 }
584 584
585 #endif /* CONFIG_MODULES */ 585 #endif /* CONFIG_MODULES */
586 586
587 #define symbol_request(x) try_then_request_module(symbol_get(x), "symbol:" #x) 587 #define symbol_request(x) try_then_request_module(symbol_get(x), "symbol:" #x)
588 588
589 /* BELOW HERE ALL THESE ARE OBSOLETE AND WILL VANISH */ 589 /* BELOW HERE ALL THESE ARE OBSOLETE AND WILL VANISH */
590 590
591 #define __MODULE_STRING(x) __stringify(x) 591 #define __MODULE_STRING(x) __stringify(x)
592 592
593 #endif /* _LINUX_MODULE_H */ 593 #endif /* _LINUX_MODULE_H */
1 /* 1 /*
2 Copyright (C) 2002 Richard Henderson 2 Copyright (C) 2002 Richard Henderson
3 Copyright (C) 2001 Rusty Russell, 2002 Rusty Russell IBM. 3 Copyright (C) 2001 Rusty Russell, 2002 Rusty Russell IBM.
4 4
5 This program is free software; you can redistribute it and/or modify 5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by 6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 2 of the License, or 7 the Free Software Foundation; either version 2 of the License, or
8 (at your option) any later version. 8 (at your option) any later version.
9 9
10 This program is distributed in the hope that it will be useful, 10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details. 13 GNU General Public License for more details.
14 14
15 You should have received a copy of the GNU General Public License 15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software 16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 17 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 */ 18 */
19 #include <linux/module.h> 19 #include <linux/module.h>
20 #include <linux/moduleloader.h> 20 #include <linux/moduleloader.h>
21 #include <linux/init.h> 21 #include <linux/init.h>
22 #include <linux/kernel.h> 22 #include <linux/kernel.h>
23 #include <linux/slab.h> 23 #include <linux/slab.h>
24 #include <linux/vmalloc.h> 24 #include <linux/vmalloc.h>
25 #include <linux/elf.h> 25 #include <linux/elf.h>
26 #include <linux/seq_file.h> 26 #include <linux/seq_file.h>
27 #include <linux/syscalls.h> 27 #include <linux/syscalls.h>
28 #include <linux/fcntl.h> 28 #include <linux/fcntl.h>
29 #include <linux/rcupdate.h> 29 #include <linux/rcupdate.h>
30 #include <linux/capability.h> 30 #include <linux/capability.h>
31 #include <linux/cpu.h> 31 #include <linux/cpu.h>
32 #include <linux/moduleparam.h> 32 #include <linux/moduleparam.h>
33 #include <linux/errno.h> 33 #include <linux/errno.h>
34 #include <linux/err.h> 34 #include <linux/err.h>
35 #include <linux/vermagic.h> 35 #include <linux/vermagic.h>
36 #include <linux/notifier.h> 36 #include <linux/notifier.h>
37 #include <linux/stop_machine.h> 37 #include <linux/stop_machine.h>
38 #include <linux/device.h> 38 #include <linux/device.h>
39 #include <linux/string.h> 39 #include <linux/string.h>
40 #include <linux/sched.h> 40 #include <linux/sched.h>
41 #include <linux/mutex.h> 41 #include <linux/mutex.h>
42 #include <linux/unwind.h> 42 #include <linux/unwind.h>
43 #include <asm/uaccess.h> 43 #include <asm/uaccess.h>
44 #include <asm/semaphore.h> 44 #include <asm/semaphore.h>
45 #include <asm/cacheflush.h> 45 #include <asm/cacheflush.h>
46 #include <linux/license.h> 46 #include <linux/license.h>
47 47
48 #if 0 48 #if 0
49 #define DEBUGP printk 49 #define DEBUGP printk
50 #else 50 #else
51 #define DEBUGP(fmt , a...) 51 #define DEBUGP(fmt , a...)
52 #endif 52 #endif
53 53
54 #ifndef ARCH_SHF_SMALL 54 #ifndef ARCH_SHF_SMALL
55 #define ARCH_SHF_SMALL 0 55 #define ARCH_SHF_SMALL 0
56 #endif 56 #endif
57 57
58 /* If this is set, the section belongs in the init part of the module */ 58 /* If this is set, the section belongs in the init part of the module */
59 #define INIT_OFFSET_MASK (1UL << (BITS_PER_LONG-1)) 59 #define INIT_OFFSET_MASK (1UL << (BITS_PER_LONG-1))
60 60
61 /* Protects module list */ 61 /* Protects module list */
62 static DEFINE_SPINLOCK(modlist_lock); 62 static DEFINE_SPINLOCK(modlist_lock);
63 63
64 /* List of modules, protected by module_mutex AND modlist_lock */ 64 /* List of modules, protected by module_mutex AND modlist_lock */
65 static DEFINE_MUTEX(module_mutex); 65 static DEFINE_MUTEX(module_mutex);
66 static LIST_HEAD(modules); 66 static LIST_HEAD(modules);
67 67
68 static BLOCKING_NOTIFIER_HEAD(module_notify_list); 68 static BLOCKING_NOTIFIER_HEAD(module_notify_list);
69 69
70 int register_module_notifier(struct notifier_block * nb) 70 int register_module_notifier(struct notifier_block * nb)
71 { 71 {
72 return blocking_notifier_chain_register(&module_notify_list, nb); 72 return blocking_notifier_chain_register(&module_notify_list, nb);
73 } 73 }
74 EXPORT_SYMBOL(register_module_notifier); 74 EXPORT_SYMBOL(register_module_notifier);
75 75
76 int unregister_module_notifier(struct notifier_block * nb) 76 int unregister_module_notifier(struct notifier_block * nb)
77 { 77 {
78 return blocking_notifier_chain_unregister(&module_notify_list, nb); 78 return blocking_notifier_chain_unregister(&module_notify_list, nb);
79 } 79 }
80 EXPORT_SYMBOL(unregister_module_notifier); 80 EXPORT_SYMBOL(unregister_module_notifier);
81 81
82 /* We require a truly strong try_module_get() */ 82 /* We require a truly strong try_module_get() */
83 static inline int strong_try_module_get(struct module *mod) 83 static inline int strong_try_module_get(struct module *mod)
84 { 84 {
85 if (mod && mod->state == MODULE_STATE_COMING) 85 if (mod && mod->state == MODULE_STATE_COMING)
86 return 0; 86 return 0;
87 return try_module_get(mod); 87 return try_module_get(mod);
88 } 88 }
89 89
90 /* A thread that wants to hold a reference to a module only while it 90 /* A thread that wants to hold a reference to a module only while it
91 * is running can call ths to safely exit. 91 * is running can call ths to safely exit.
92 * nfsd and lockd use this. 92 * nfsd and lockd use this.
93 */ 93 */
94 void __module_put_and_exit(struct module *mod, long code) 94 void __module_put_and_exit(struct module *mod, long code)
95 { 95 {
96 module_put(mod); 96 module_put(mod);
97 do_exit(code); 97 do_exit(code);
98 } 98 }
99 EXPORT_SYMBOL(__module_put_and_exit); 99 EXPORT_SYMBOL(__module_put_and_exit);
100 100
101 /* Find a module section: 0 means not found. */ 101 /* Find a module section: 0 means not found. */
102 static unsigned int find_sec(Elf_Ehdr *hdr, 102 static unsigned int find_sec(Elf_Ehdr *hdr,
103 Elf_Shdr *sechdrs, 103 Elf_Shdr *sechdrs,
104 const char *secstrings, 104 const char *secstrings,
105 const char *name) 105 const char *name)
106 { 106 {
107 unsigned int i; 107 unsigned int i;
108 108
109 for (i = 1; i < hdr->e_shnum; i++) 109 for (i = 1; i < hdr->e_shnum; i++)
110 /* Alloc bit cleared means "ignore it." */ 110 /* Alloc bit cleared means "ignore it." */
111 if ((sechdrs[i].sh_flags & SHF_ALLOC) 111 if ((sechdrs[i].sh_flags & SHF_ALLOC)
112 && strcmp(secstrings+sechdrs[i].sh_name, name) == 0) 112 && strcmp(secstrings+sechdrs[i].sh_name, name) == 0)
113 return i; 113 return i;
114 return 0; 114 return 0;
115 } 115 }
116 116
117 /* Provided by the linker */ 117 /* Provided by the linker */
118 extern const struct kernel_symbol __start___ksymtab[]; 118 extern const struct kernel_symbol __start___ksymtab[];
119 extern const struct kernel_symbol __stop___ksymtab[]; 119 extern const struct kernel_symbol __stop___ksymtab[];
120 extern const struct kernel_symbol __start___ksymtab_gpl[]; 120 extern const struct kernel_symbol __start___ksymtab_gpl[];
121 extern const struct kernel_symbol __stop___ksymtab_gpl[]; 121 extern const struct kernel_symbol __stop___ksymtab_gpl[];
122 extern const struct kernel_symbol __start___ksymtab_gpl_future[]; 122 extern const struct kernel_symbol __start___ksymtab_gpl_future[];
123 extern const struct kernel_symbol __stop___ksymtab_gpl_future[]; 123 extern const struct kernel_symbol __stop___ksymtab_gpl_future[];
124 extern const struct kernel_symbol __start___ksymtab_unused[]; 124 extern const struct kernel_symbol __start___ksymtab_unused[];
125 extern const struct kernel_symbol __stop___ksymtab_unused[]; 125 extern const struct kernel_symbol __stop___ksymtab_unused[];
126 extern const struct kernel_symbol __start___ksymtab_unused_gpl[]; 126 extern const struct kernel_symbol __start___ksymtab_unused_gpl[];
127 extern const struct kernel_symbol __stop___ksymtab_unused_gpl[]; 127 extern const struct kernel_symbol __stop___ksymtab_unused_gpl[];
128 extern const struct kernel_symbol __start___ksymtab_gpl_future[]; 128 extern const struct kernel_symbol __start___ksymtab_gpl_future[];
129 extern const struct kernel_symbol __stop___ksymtab_gpl_future[]; 129 extern const struct kernel_symbol __stop___ksymtab_gpl_future[];
130 extern const unsigned long __start___kcrctab[]; 130 extern const unsigned long __start___kcrctab[];
131 extern const unsigned long __start___kcrctab_gpl[]; 131 extern const unsigned long __start___kcrctab_gpl[];
132 extern const unsigned long __start___kcrctab_gpl_future[]; 132 extern const unsigned long __start___kcrctab_gpl_future[];
133 extern const unsigned long __start___kcrctab_unused[]; 133 extern const unsigned long __start___kcrctab_unused[];
134 extern const unsigned long __start___kcrctab_unused_gpl[]; 134 extern const unsigned long __start___kcrctab_unused_gpl[];
135 135
136 #ifndef CONFIG_MODVERSIONS 136 #ifndef CONFIG_MODVERSIONS
137 #define symversion(base, idx) NULL 137 #define symversion(base, idx) NULL
138 #else 138 #else
139 #define symversion(base, idx) ((base != NULL) ? ((base) + (idx)) : NULL) 139 #define symversion(base, idx) ((base != NULL) ? ((base) + (idx)) : NULL)
140 #endif 140 #endif
141 141
142 /* lookup symbol in given range of kernel_symbols */ 142 /* lookup symbol in given range of kernel_symbols */
143 static const struct kernel_symbol *lookup_symbol(const char *name, 143 static const struct kernel_symbol *lookup_symbol(const char *name,
144 const struct kernel_symbol *start, 144 const struct kernel_symbol *start,
145 const struct kernel_symbol *stop) 145 const struct kernel_symbol *stop)
146 { 146 {
147 const struct kernel_symbol *ks = start; 147 const struct kernel_symbol *ks = start;
148 for (; ks < stop; ks++) 148 for (; ks < stop; ks++)
149 if (strcmp(ks->name, name) == 0) 149 if (strcmp(ks->name, name) == 0)
150 return ks; 150 return ks;
151 return NULL; 151 return NULL;
152 } 152 }
153 153
154 static void printk_unused_warning(const char *name) 154 static void printk_unused_warning(const char *name)
155 { 155 {
156 printk(KERN_WARNING "Symbol %s is marked as UNUSED, " 156 printk(KERN_WARNING "Symbol %s is marked as UNUSED, "
157 "however this module is using it.\n", name); 157 "however this module is using it.\n", name);
158 printk(KERN_WARNING "This symbol will go away in the future.\n"); 158 printk(KERN_WARNING "This symbol will go away in the future.\n");
159 printk(KERN_WARNING "Please evalute if this is the right api to use, " 159 printk(KERN_WARNING "Please evalute if this is the right api to use, "
160 "and if it really is, submit a report the linux kernel " 160 "and if it really is, submit a report the linux kernel "
161 "mailinglist together with submitting your code for " 161 "mailinglist together with submitting your code for "
162 "inclusion.\n"); 162 "inclusion.\n");
163 } 163 }
164 164
165 /* Find a symbol, return value, crc and module which owns it */ 165 /* Find a symbol, return value, crc and module which owns it */
166 static unsigned long __find_symbol(const char *name, 166 static unsigned long __find_symbol(const char *name,
167 struct module **owner, 167 struct module **owner,
168 const unsigned long **crc, 168 const unsigned long **crc,
169 int gplok) 169 int gplok)
170 { 170 {
171 struct module *mod; 171 struct module *mod;
172 const struct kernel_symbol *ks; 172 const struct kernel_symbol *ks;
173 173
174 /* Core kernel first. */ 174 /* Core kernel first. */
175 *owner = NULL; 175 *owner = NULL;
176 ks = lookup_symbol(name, __start___ksymtab, __stop___ksymtab); 176 ks = lookup_symbol(name, __start___ksymtab, __stop___ksymtab);
177 if (ks) { 177 if (ks) {
178 *crc = symversion(__start___kcrctab, (ks - __start___ksymtab)); 178 *crc = symversion(__start___kcrctab, (ks - __start___ksymtab));
179 return ks->value; 179 return ks->value;
180 } 180 }
181 if (gplok) { 181 if (gplok) {
182 ks = lookup_symbol(name, __start___ksymtab_gpl, 182 ks = lookup_symbol(name, __start___ksymtab_gpl,
183 __stop___ksymtab_gpl); 183 __stop___ksymtab_gpl);
184 if (ks) { 184 if (ks) {
185 *crc = symversion(__start___kcrctab_gpl, 185 *crc = symversion(__start___kcrctab_gpl,
186 (ks - __start___ksymtab_gpl)); 186 (ks - __start___ksymtab_gpl));
187 return ks->value; 187 return ks->value;
188 } 188 }
189 } 189 }
190 ks = lookup_symbol(name, __start___ksymtab_gpl_future, 190 ks = lookup_symbol(name, __start___ksymtab_gpl_future,
191 __stop___ksymtab_gpl_future); 191 __stop___ksymtab_gpl_future);
192 if (ks) { 192 if (ks) {
193 if (!gplok) { 193 if (!gplok) {
194 printk(KERN_WARNING "Symbol %s is being used " 194 printk(KERN_WARNING "Symbol %s is being used "
195 "by a non-GPL module, which will not " 195 "by a non-GPL module, which will not "
196 "be allowed in the future\n", name); 196 "be allowed in the future\n", name);
197 printk(KERN_WARNING "Please see the file " 197 printk(KERN_WARNING "Please see the file "
198 "Documentation/feature-removal-schedule.txt " 198 "Documentation/feature-removal-schedule.txt "
199 "in the kernel source tree for more " 199 "in the kernel source tree for more "
200 "details.\n"); 200 "details.\n");
201 } 201 }
202 *crc = symversion(__start___kcrctab_gpl_future, 202 *crc = symversion(__start___kcrctab_gpl_future,
203 (ks - __start___ksymtab_gpl_future)); 203 (ks - __start___ksymtab_gpl_future));
204 return ks->value; 204 return ks->value;
205 } 205 }
206 206
207 ks = lookup_symbol(name, __start___ksymtab_unused, 207 ks = lookup_symbol(name, __start___ksymtab_unused,
208 __stop___ksymtab_unused); 208 __stop___ksymtab_unused);
209 if (ks) { 209 if (ks) {
210 printk_unused_warning(name); 210 printk_unused_warning(name);
211 *crc = symversion(__start___kcrctab_unused, 211 *crc = symversion(__start___kcrctab_unused,
212 (ks - __start___ksymtab_unused)); 212 (ks - __start___ksymtab_unused));
213 return ks->value; 213 return ks->value;
214 } 214 }
215 215
216 if (gplok) 216 if (gplok)
217 ks = lookup_symbol(name, __start___ksymtab_unused_gpl, 217 ks = lookup_symbol(name, __start___ksymtab_unused_gpl,
218 __stop___ksymtab_unused_gpl); 218 __stop___ksymtab_unused_gpl);
219 if (ks) { 219 if (ks) {
220 printk_unused_warning(name); 220 printk_unused_warning(name);
221 *crc = symversion(__start___kcrctab_unused_gpl, 221 *crc = symversion(__start___kcrctab_unused_gpl,
222 (ks - __start___ksymtab_unused_gpl)); 222 (ks - __start___ksymtab_unused_gpl));
223 return ks->value; 223 return ks->value;
224 } 224 }
225 225
226 /* Now try modules. */ 226 /* Now try modules. */
227 list_for_each_entry(mod, &modules, list) { 227 list_for_each_entry(mod, &modules, list) {
228 *owner = mod; 228 *owner = mod;
229 ks = lookup_symbol(name, mod->syms, mod->syms + mod->num_syms); 229 ks = lookup_symbol(name, mod->syms, mod->syms + mod->num_syms);
230 if (ks) { 230 if (ks) {
231 *crc = symversion(mod->crcs, (ks - mod->syms)); 231 *crc = symversion(mod->crcs, (ks - mod->syms));
232 return ks->value; 232 return ks->value;
233 } 233 }
234 234
235 if (gplok) { 235 if (gplok) {
236 ks = lookup_symbol(name, mod->gpl_syms, 236 ks = lookup_symbol(name, mod->gpl_syms,
237 mod->gpl_syms + mod->num_gpl_syms); 237 mod->gpl_syms + mod->num_gpl_syms);
238 if (ks) { 238 if (ks) {
239 *crc = symversion(mod->gpl_crcs, 239 *crc = symversion(mod->gpl_crcs,
240 (ks - mod->gpl_syms)); 240 (ks - mod->gpl_syms));
241 return ks->value; 241 return ks->value;
242 } 242 }
243 } 243 }
244 ks = lookup_symbol(name, mod->unused_syms, mod->unused_syms + mod->num_unused_syms); 244 ks = lookup_symbol(name, mod->unused_syms, mod->unused_syms + mod->num_unused_syms);
245 if (ks) { 245 if (ks) {
246 printk_unused_warning(name); 246 printk_unused_warning(name);
247 *crc = symversion(mod->unused_crcs, (ks - mod->unused_syms)); 247 *crc = symversion(mod->unused_crcs, (ks - mod->unused_syms));
248 return ks->value; 248 return ks->value;
249 } 249 }
250 250
251 if (gplok) { 251 if (gplok) {
252 ks = lookup_symbol(name, mod->unused_gpl_syms, 252 ks = lookup_symbol(name, mod->unused_gpl_syms,
253 mod->unused_gpl_syms + mod->num_unused_gpl_syms); 253 mod->unused_gpl_syms + mod->num_unused_gpl_syms);
254 if (ks) { 254 if (ks) {
255 printk_unused_warning(name); 255 printk_unused_warning(name);
256 *crc = symversion(mod->unused_gpl_crcs, 256 *crc = symversion(mod->unused_gpl_crcs,
257 (ks - mod->unused_gpl_syms)); 257 (ks - mod->unused_gpl_syms));
258 return ks->value; 258 return ks->value;
259 } 259 }
260 } 260 }
261 ks = lookup_symbol(name, mod->gpl_future_syms, 261 ks = lookup_symbol(name, mod->gpl_future_syms,
262 (mod->gpl_future_syms + 262 (mod->gpl_future_syms +
263 mod->num_gpl_future_syms)); 263 mod->num_gpl_future_syms));
264 if (ks) { 264 if (ks) {
265 if (!gplok) { 265 if (!gplok) {
266 printk(KERN_WARNING "Symbol %s is being used " 266 printk(KERN_WARNING "Symbol %s is being used "
267 "by a non-GPL module, which will not " 267 "by a non-GPL module, which will not "
268 "be allowed in the future\n", name); 268 "be allowed in the future\n", name);
269 printk(KERN_WARNING "Please see the file " 269 printk(KERN_WARNING "Please see the file "
270 "Documentation/feature-removal-schedule.txt " 270 "Documentation/feature-removal-schedule.txt "
271 "in the kernel source tree for more " 271 "in the kernel source tree for more "
272 "details.\n"); 272 "details.\n");
273 } 273 }
274 *crc = symversion(mod->gpl_future_crcs, 274 *crc = symversion(mod->gpl_future_crcs,
275 (ks - mod->gpl_future_syms)); 275 (ks - mod->gpl_future_syms));
276 return ks->value; 276 return ks->value;
277 } 277 }
278 } 278 }
279 DEBUGP("Failed to find symbol %s\n", name); 279 DEBUGP("Failed to find symbol %s\n", name);
280 return 0; 280 return 0;
281 } 281 }
282 282
283 /* Search for module by name: must hold module_mutex. */ 283 /* Search for module by name: must hold module_mutex. */
284 static struct module *find_module(const char *name) 284 static struct module *find_module(const char *name)
285 { 285 {
286 struct module *mod; 286 struct module *mod;
287 287
288 list_for_each_entry(mod, &modules, list) { 288 list_for_each_entry(mod, &modules, list) {
289 if (strcmp(mod->name, name) == 0) 289 if (strcmp(mod->name, name) == 0)
290 return mod; 290 return mod;
291 } 291 }
292 return NULL; 292 return NULL;
293 } 293 }
294 294
295 #ifdef CONFIG_SMP 295 #ifdef CONFIG_SMP
296 /* Number of blocks used and allocated. */ 296 /* Number of blocks used and allocated. */
297 static unsigned int pcpu_num_used, pcpu_num_allocated; 297 static unsigned int pcpu_num_used, pcpu_num_allocated;
298 /* Size of each block. -ve means used. */ 298 /* Size of each block. -ve means used. */
299 static int *pcpu_size; 299 static int *pcpu_size;
300 300
301 static int split_block(unsigned int i, unsigned short size) 301 static int split_block(unsigned int i, unsigned short size)
302 { 302 {
303 /* Reallocation required? */ 303 /* Reallocation required? */
304 if (pcpu_num_used + 1 > pcpu_num_allocated) { 304 if (pcpu_num_used + 1 > pcpu_num_allocated) {
305 int *new = kmalloc(sizeof(new[0]) * pcpu_num_allocated*2, 305 int *new = kmalloc(sizeof(new[0]) * pcpu_num_allocated*2,
306 GFP_KERNEL); 306 GFP_KERNEL);
307 if (!new) 307 if (!new)
308 return 0; 308 return 0;
309 309
310 memcpy(new, pcpu_size, sizeof(new[0])*pcpu_num_allocated); 310 memcpy(new, pcpu_size, sizeof(new[0])*pcpu_num_allocated);
311 pcpu_num_allocated *= 2; 311 pcpu_num_allocated *= 2;
312 kfree(pcpu_size); 312 kfree(pcpu_size);
313 pcpu_size = new; 313 pcpu_size = new;
314 } 314 }
315 315
316 /* Insert a new subblock */ 316 /* Insert a new subblock */
317 memmove(&pcpu_size[i+1], &pcpu_size[i], 317 memmove(&pcpu_size[i+1], &pcpu_size[i],
318 sizeof(pcpu_size[0]) * (pcpu_num_used - i)); 318 sizeof(pcpu_size[0]) * (pcpu_num_used - i));
319 pcpu_num_used++; 319 pcpu_num_used++;
320 320
321 pcpu_size[i+1] -= size; 321 pcpu_size[i+1] -= size;
322 pcpu_size[i] = size; 322 pcpu_size[i] = size;
323 return 1; 323 return 1;
324 } 324 }
325 325
326 static inline unsigned int block_size(int val) 326 static inline unsigned int block_size(int val)
327 { 327 {
328 if (val < 0) 328 if (val < 0)
329 return -val; 329 return -val;
330 return val; 330 return val;
331 } 331 }
332 332
333 /* Created by linker magic */ 333 /* Created by linker magic */
334 extern char __per_cpu_start[], __per_cpu_end[]; 334 extern char __per_cpu_start[], __per_cpu_end[];
335 335
336 static void *percpu_modalloc(unsigned long size, unsigned long align, 336 static void *percpu_modalloc(unsigned long size, unsigned long align,
337 const char *name) 337 const char *name)
338 { 338 {
339 unsigned long extra; 339 unsigned long extra;
340 unsigned int i; 340 unsigned int i;
341 void *ptr; 341 void *ptr;
342 342
343 if (align > SMP_CACHE_BYTES) { 343 if (align > SMP_CACHE_BYTES) {
344 printk(KERN_WARNING "%s: per-cpu alignment %li > %i\n", 344 printk(KERN_WARNING "%s: per-cpu alignment %li > %i\n",
345 name, align, SMP_CACHE_BYTES); 345 name, align, SMP_CACHE_BYTES);
346 align = SMP_CACHE_BYTES; 346 align = SMP_CACHE_BYTES;
347 } 347 }
348 348
349 ptr = __per_cpu_start; 349 ptr = __per_cpu_start;
350 for (i = 0; i < pcpu_num_used; ptr += block_size(pcpu_size[i]), i++) { 350 for (i = 0; i < pcpu_num_used; ptr += block_size(pcpu_size[i]), i++) {
351 /* Extra for alignment requirement. */ 351 /* Extra for alignment requirement. */
352 extra = ALIGN((unsigned long)ptr, align) - (unsigned long)ptr; 352 extra = ALIGN((unsigned long)ptr, align) - (unsigned long)ptr;
353 BUG_ON(i == 0 && extra != 0); 353 BUG_ON(i == 0 && extra != 0);
354 354
355 if (pcpu_size[i] < 0 || pcpu_size[i] < extra + size) 355 if (pcpu_size[i] < 0 || pcpu_size[i] < extra + size)
356 continue; 356 continue;
357 357
358 /* Transfer extra to previous block. */ 358 /* Transfer extra to previous block. */
359 if (pcpu_size[i-1] < 0) 359 if (pcpu_size[i-1] < 0)
360 pcpu_size[i-1] -= extra; 360 pcpu_size[i-1] -= extra;
361 else 361 else
362 pcpu_size[i-1] += extra; 362 pcpu_size[i-1] += extra;
363 pcpu_size[i] -= extra; 363 pcpu_size[i] -= extra;
364 ptr += extra; 364 ptr += extra;
365 365
366 /* Split block if warranted */ 366 /* Split block if warranted */
367 if (pcpu_size[i] - size > sizeof(unsigned long)) 367 if (pcpu_size[i] - size > sizeof(unsigned long))
368 if (!split_block(i, size)) 368 if (!split_block(i, size))
369 return NULL; 369 return NULL;
370 370
371 /* Mark allocated */ 371 /* Mark allocated */
372 pcpu_size[i] = -pcpu_size[i]; 372 pcpu_size[i] = -pcpu_size[i];
373 return ptr; 373 return ptr;
374 } 374 }
375 375
376 printk(KERN_WARNING "Could not allocate %lu bytes percpu data\n", 376 printk(KERN_WARNING "Could not allocate %lu bytes percpu data\n",
377 size); 377 size);
378 return NULL; 378 return NULL;
379 } 379 }
380 380
381 static void percpu_modfree(void *freeme) 381 static void percpu_modfree(void *freeme)
382 { 382 {
383 unsigned int i; 383 unsigned int i;
384 void *ptr = __per_cpu_start + block_size(pcpu_size[0]); 384 void *ptr = __per_cpu_start + block_size(pcpu_size[0]);
385 385
386 /* First entry is core kernel percpu data. */ 386 /* First entry is core kernel percpu data. */
387 for (i = 1; i < pcpu_num_used; ptr += block_size(pcpu_size[i]), i++) { 387 for (i = 1; i < pcpu_num_used; ptr += block_size(pcpu_size[i]), i++) {
388 if (ptr == freeme) { 388 if (ptr == freeme) {
389 pcpu_size[i] = -pcpu_size[i]; 389 pcpu_size[i] = -pcpu_size[i];
390 goto free; 390 goto free;
391 } 391 }
392 } 392 }
393 BUG(); 393 BUG();
394 394
395 free: 395 free:
396 /* Merge with previous? */ 396 /* Merge with previous? */
397 if (pcpu_size[i-1] >= 0) { 397 if (pcpu_size[i-1] >= 0) {
398 pcpu_size[i-1] += pcpu_size[i]; 398 pcpu_size[i-1] += pcpu_size[i];
399 pcpu_num_used--; 399 pcpu_num_used--;
400 memmove(&pcpu_size[i], &pcpu_size[i+1], 400 memmove(&pcpu_size[i], &pcpu_size[i+1],
401 (pcpu_num_used - i) * sizeof(pcpu_size[0])); 401 (pcpu_num_used - i) * sizeof(pcpu_size[0]));
402 i--; 402 i--;
403 } 403 }
404 /* Merge with next? */ 404 /* Merge with next? */
405 if (i+1 < pcpu_num_used && pcpu_size[i+1] >= 0) { 405 if (i+1 < pcpu_num_used && pcpu_size[i+1] >= 0) {
406 pcpu_size[i] += pcpu_size[i+1]; 406 pcpu_size[i] += pcpu_size[i+1];
407 pcpu_num_used--; 407 pcpu_num_used--;
408 memmove(&pcpu_size[i+1], &pcpu_size[i+2], 408 memmove(&pcpu_size[i+1], &pcpu_size[i+2],
409 (pcpu_num_used - (i+1)) * sizeof(pcpu_size[0])); 409 (pcpu_num_used - (i+1)) * sizeof(pcpu_size[0]));
410 } 410 }
411 } 411 }
412 412
413 static unsigned int find_pcpusec(Elf_Ehdr *hdr, 413 static unsigned int find_pcpusec(Elf_Ehdr *hdr,
414 Elf_Shdr *sechdrs, 414 Elf_Shdr *sechdrs,
415 const char *secstrings) 415 const char *secstrings)
416 { 416 {
417 return find_sec(hdr, sechdrs, secstrings, ".data.percpu"); 417 return find_sec(hdr, sechdrs, secstrings, ".data.percpu");
418 } 418 }
419 419
420 static int percpu_modinit(void) 420 static int percpu_modinit(void)
421 { 421 {
422 pcpu_num_used = 2; 422 pcpu_num_used = 2;
423 pcpu_num_allocated = 2; 423 pcpu_num_allocated = 2;
424 pcpu_size = kmalloc(sizeof(pcpu_size[0]) * pcpu_num_allocated, 424 pcpu_size = kmalloc(sizeof(pcpu_size[0]) * pcpu_num_allocated,
425 GFP_KERNEL); 425 GFP_KERNEL);
426 /* Static in-kernel percpu data (used). */ 426 /* Static in-kernel percpu data (used). */
427 pcpu_size[0] = -ALIGN(__per_cpu_end-__per_cpu_start, SMP_CACHE_BYTES); 427 pcpu_size[0] = -ALIGN(__per_cpu_end-__per_cpu_start, SMP_CACHE_BYTES);
428 /* Free room. */ 428 /* Free room. */
429 pcpu_size[1] = PERCPU_ENOUGH_ROOM + pcpu_size[0]; 429 pcpu_size[1] = PERCPU_ENOUGH_ROOM + pcpu_size[0];
430 if (pcpu_size[1] < 0) { 430 if (pcpu_size[1] < 0) {
431 printk(KERN_ERR "No per-cpu room for modules.\n"); 431 printk(KERN_ERR "No per-cpu room for modules.\n");
432 pcpu_num_used = 1; 432 pcpu_num_used = 1;
433 } 433 }
434 434
435 return 0; 435 return 0;
436 } 436 }
437 __initcall(percpu_modinit); 437 __initcall(percpu_modinit);
438 #else /* ... !CONFIG_SMP */ 438 #else /* ... !CONFIG_SMP */
439 static inline void *percpu_modalloc(unsigned long size, unsigned long align, 439 static inline void *percpu_modalloc(unsigned long size, unsigned long align,
440 const char *name) 440 const char *name)
441 { 441 {
442 return NULL; 442 return NULL;
443 } 443 }
444 static inline void percpu_modfree(void *pcpuptr) 444 static inline void percpu_modfree(void *pcpuptr)
445 { 445 {
446 BUG(); 446 BUG();
447 } 447 }
448 static inline unsigned int find_pcpusec(Elf_Ehdr *hdr, 448 static inline unsigned int find_pcpusec(Elf_Ehdr *hdr,
449 Elf_Shdr *sechdrs, 449 Elf_Shdr *sechdrs,
450 const char *secstrings) 450 const char *secstrings)
451 { 451 {
452 return 0; 452 return 0;
453 } 453 }
454 static inline void percpu_modcopy(void *pcpudst, const void *src, 454 static inline void percpu_modcopy(void *pcpudst, const void *src,
455 unsigned long size) 455 unsigned long size)
456 { 456 {
457 /* pcpusec should be 0, and size of that section should be 0. */ 457 /* pcpusec should be 0, and size of that section should be 0. */
458 BUG_ON(size != 0); 458 BUG_ON(size != 0);
459 } 459 }
460 #endif /* CONFIG_SMP */ 460 #endif /* CONFIG_SMP */
461 461
462 #define MODINFO_ATTR(field) \ 462 #define MODINFO_ATTR(field) \
463 static void setup_modinfo_##field(struct module *mod, const char *s) \ 463 static void setup_modinfo_##field(struct module *mod, const char *s) \
464 { \ 464 { \
465 mod->field = kstrdup(s, GFP_KERNEL); \ 465 mod->field = kstrdup(s, GFP_KERNEL); \
466 } \ 466 } \
467 static ssize_t show_modinfo_##field(struct module_attribute *mattr, \ 467 static ssize_t show_modinfo_##field(struct module_attribute *mattr, \
468 struct module *mod, char *buffer) \ 468 struct module *mod, char *buffer) \
469 { \ 469 { \
470 return sprintf(buffer, "%s\n", mod->field); \ 470 return sprintf(buffer, "%s\n", mod->field); \
471 } \ 471 } \
472 static int modinfo_##field##_exists(struct module *mod) \ 472 static int modinfo_##field##_exists(struct module *mod) \
473 { \ 473 { \
474 return mod->field != NULL; \ 474 return mod->field != NULL; \
475 } \ 475 } \
476 static void free_modinfo_##field(struct module *mod) \ 476 static void free_modinfo_##field(struct module *mod) \
477 { \ 477 { \
478 kfree(mod->field); \ 478 kfree(mod->field); \
479 mod->field = NULL; \ 479 mod->field = NULL; \
480 } \ 480 } \
481 static struct module_attribute modinfo_##field = { \ 481 static struct module_attribute modinfo_##field = { \
482 .attr = { .name = __stringify(field), .mode = 0444, \ 482 .attr = { .name = __stringify(field), .mode = 0444, \
483 .owner = THIS_MODULE }, \ 483 .owner = THIS_MODULE }, \
484 .show = show_modinfo_##field, \ 484 .show = show_modinfo_##field, \
485 .setup = setup_modinfo_##field, \ 485 .setup = setup_modinfo_##field, \
486 .test = modinfo_##field##_exists, \ 486 .test = modinfo_##field##_exists, \
487 .free = free_modinfo_##field, \ 487 .free = free_modinfo_##field, \
488 }; 488 };
489 489
490 MODINFO_ATTR(version); 490 MODINFO_ATTR(version);
491 MODINFO_ATTR(srcversion); 491 MODINFO_ATTR(srcversion);
492 492
493 #ifdef CONFIG_MODULE_UNLOAD 493 #ifdef CONFIG_MODULE_UNLOAD
494 /* Init the unload section of the module. */ 494 /* Init the unload section of the module. */
495 static void module_unload_init(struct module *mod) 495 static void module_unload_init(struct module *mod)
496 { 496 {
497 unsigned int i; 497 unsigned int i;
498 498
499 INIT_LIST_HEAD(&mod->modules_which_use_me); 499 INIT_LIST_HEAD(&mod->modules_which_use_me);
500 for (i = 0; i < NR_CPUS; i++) 500 for (i = 0; i < NR_CPUS; i++)
501 local_set(&mod->ref[i].count, 0); 501 local_set(&mod->ref[i].count, 0);
502 /* Hold reference count during initialization. */ 502 /* Hold reference count during initialization. */
503 local_set(&mod->ref[raw_smp_processor_id()].count, 1); 503 local_set(&mod->ref[raw_smp_processor_id()].count, 1);
504 /* Backwards compatibility macros put refcount during init. */ 504 /* Backwards compatibility macros put refcount during init. */
505 mod->waiter = current; 505 mod->waiter = current;
506 } 506 }
507 507
508 /* modules using other modules */ 508 /* modules using other modules */
509 struct module_use 509 struct module_use
510 { 510 {
511 struct list_head list; 511 struct list_head list;
512 struct module *module_which_uses; 512 struct module *module_which_uses;
513 }; 513 };
514 514
515 /* Does a already use b? */ 515 /* Does a already use b? */
516 static int already_uses(struct module *a, struct module *b) 516 static int already_uses(struct module *a, struct module *b)
517 { 517 {
518 struct module_use *use; 518 struct module_use *use;
519 519
520 list_for_each_entry(use, &b->modules_which_use_me, list) { 520 list_for_each_entry(use, &b->modules_which_use_me, list) {
521 if (use->module_which_uses == a) { 521 if (use->module_which_uses == a) {
522 DEBUGP("%s uses %s!\n", a->name, b->name); 522 DEBUGP("%s uses %s!\n", a->name, b->name);
523 return 1; 523 return 1;
524 } 524 }
525 } 525 }
526 DEBUGP("%s does not use %s!\n", a->name, b->name); 526 DEBUGP("%s does not use %s!\n", a->name, b->name);
527 return 0; 527 return 0;
528 } 528 }
529 529
530 /* Module a uses b */ 530 /* Module a uses b */
531 static int use_module(struct module *a, struct module *b) 531 static int use_module(struct module *a, struct module *b)
532 { 532 {
533 struct module_use *use; 533 struct module_use *use;
534 if (b == NULL || already_uses(a, b)) return 1; 534 if (b == NULL || already_uses(a, b)) return 1;
535 535
536 if (!strong_try_module_get(b)) 536 if (!strong_try_module_get(b))
537 return 0; 537 return 0;
538 538
539 DEBUGP("Allocating new usage for %s.\n", a->name); 539 DEBUGP("Allocating new usage for %s.\n", a->name);
540 use = kmalloc(sizeof(*use), GFP_ATOMIC); 540 use = kmalloc(sizeof(*use), GFP_ATOMIC);
541 if (!use) { 541 if (!use) {
542 printk("%s: out of memory loading\n", a->name); 542 printk("%s: out of memory loading\n", a->name);
543 module_put(b); 543 module_put(b);
544 return 0; 544 return 0;
545 } 545 }
546 546
547 use->module_which_uses = a; 547 use->module_which_uses = a;
548 list_add(&use->list, &b->modules_which_use_me); 548 list_add(&use->list, &b->modules_which_use_me);
549 return 1; 549 return 1;
550 } 550 }
551 551
552 /* Clear the unload stuff of the module. */ 552 /* Clear the unload stuff of the module. */
553 static void module_unload_free(struct module *mod) 553 static void module_unload_free(struct module *mod)
554 { 554 {
555 struct module *i; 555 struct module *i;
556 556
557 list_for_each_entry(i, &modules, list) { 557 list_for_each_entry(i, &modules, list) {
558 struct module_use *use; 558 struct module_use *use;
559 559
560 list_for_each_entry(use, &i->modules_which_use_me, list) { 560 list_for_each_entry(use, &i->modules_which_use_me, list) {
561 if (use->module_which_uses == mod) { 561 if (use->module_which_uses == mod) {
562 DEBUGP("%s unusing %s\n", mod->name, i->name); 562 DEBUGP("%s unusing %s\n", mod->name, i->name);
563 module_put(i); 563 module_put(i);
564 list_del(&use->list); 564 list_del(&use->list);
565 kfree(use); 565 kfree(use);
566 /* There can be at most one match. */ 566 /* There can be at most one match. */
567 break; 567 break;
568 } 568 }
569 } 569 }
570 } 570 }
571 } 571 }
572 572
573 #ifdef CONFIG_MODULE_FORCE_UNLOAD 573 #ifdef CONFIG_MODULE_FORCE_UNLOAD
574 static inline int try_force_unload(unsigned int flags) 574 static inline int try_force_unload(unsigned int flags)
575 { 575 {
576 int ret = (flags & O_TRUNC); 576 int ret = (flags & O_TRUNC);
577 if (ret) 577 if (ret)
578 add_taint(TAINT_FORCED_RMMOD); 578 add_taint(TAINT_FORCED_RMMOD);
579 return ret; 579 return ret;
580 } 580 }
581 #else 581 #else
582 static inline int try_force_unload(unsigned int flags) 582 static inline int try_force_unload(unsigned int flags)
583 { 583 {
584 return 0; 584 return 0;
585 } 585 }
586 #endif /* CONFIG_MODULE_FORCE_UNLOAD */ 586 #endif /* CONFIG_MODULE_FORCE_UNLOAD */
587 587
588 struct stopref 588 struct stopref
589 { 589 {
590 struct module *mod; 590 struct module *mod;
591 int flags; 591 int flags;
592 int *forced; 592 int *forced;
593 }; 593 };
594 594
595 /* Whole machine is stopped with interrupts off when this runs. */ 595 /* Whole machine is stopped with interrupts off when this runs. */
596 static int __try_stop_module(void *_sref) 596 static int __try_stop_module(void *_sref)
597 { 597 {
598 struct stopref *sref = _sref; 598 struct stopref *sref = _sref;
599 599
600 /* If it's not unused, quit unless we are told to block. */ 600 /* If it's not unused, quit unless we are told to block. */
601 if ((sref->flags & O_NONBLOCK) && module_refcount(sref->mod) != 0) { 601 if ((sref->flags & O_NONBLOCK) && module_refcount(sref->mod) != 0) {
602 if (!(*sref->forced = try_force_unload(sref->flags))) 602 if (!(*sref->forced = try_force_unload(sref->flags)))
603 return -EWOULDBLOCK; 603 return -EWOULDBLOCK;
604 } 604 }
605 605
606 /* Mark it as dying. */ 606 /* Mark it as dying. */
607 sref->mod->state = MODULE_STATE_GOING; 607 sref->mod->state = MODULE_STATE_GOING;
608 return 0; 608 return 0;
609 } 609 }
610 610
611 static int try_stop_module(struct module *mod, int flags, int *forced) 611 static int try_stop_module(struct module *mod, int flags, int *forced)
612 { 612 {
613 struct stopref sref = { mod, flags, forced }; 613 struct stopref sref = { mod, flags, forced };
614 614
615 return stop_machine_run(__try_stop_module, &sref, NR_CPUS); 615 return stop_machine_run(__try_stop_module, &sref, NR_CPUS);
616 } 616 }
617 617
618 unsigned int module_refcount(struct module *mod) 618 unsigned int module_refcount(struct module *mod)
619 { 619 {
620 unsigned int i, total = 0; 620 unsigned int i, total = 0;
621 621
622 for (i = 0; i < NR_CPUS; i++) 622 for (i = 0; i < NR_CPUS; i++)
623 total += local_read(&mod->ref[i].count); 623 total += local_read(&mod->ref[i].count);
624 return total; 624 return total;
625 } 625 }
626 EXPORT_SYMBOL(module_refcount); 626 EXPORT_SYMBOL(module_refcount);
627 627
628 /* This exists whether we can unload or not */ 628 /* This exists whether we can unload or not */
629 static void free_module(struct module *mod); 629 static void free_module(struct module *mod);
630 630
631 static void wait_for_zero_refcount(struct module *mod) 631 static void wait_for_zero_refcount(struct module *mod)
632 { 632 {
633 /* Since we might sleep for some time, drop the semaphore first */ 633 /* Since we might sleep for some time, drop the semaphore first */
634 mutex_unlock(&module_mutex); 634 mutex_unlock(&module_mutex);
635 for (;;) { 635 for (;;) {
636 DEBUGP("Looking at refcount...\n"); 636 DEBUGP("Looking at refcount...\n");
637 set_current_state(TASK_UNINTERRUPTIBLE); 637 set_current_state(TASK_UNINTERRUPTIBLE);
638 if (module_refcount(mod) == 0) 638 if (module_refcount(mod) == 0)
639 break; 639 break;
640 schedule(); 640 schedule();
641 } 641 }
642 current->state = TASK_RUNNING; 642 current->state = TASK_RUNNING;
643 mutex_lock(&module_mutex); 643 mutex_lock(&module_mutex);
644 } 644 }
645 645
646 asmlinkage long 646 asmlinkage long
647 sys_delete_module(const char __user *name_user, unsigned int flags) 647 sys_delete_module(const char __user *name_user, unsigned int flags)
648 { 648 {
649 struct module *mod; 649 struct module *mod;
650 char name[MODULE_NAME_LEN]; 650 char name[MODULE_NAME_LEN];
651 int ret, forced = 0; 651 int ret, forced = 0;
652 652
653 if (!capable(CAP_SYS_MODULE)) 653 if (!capable(CAP_SYS_MODULE))
654 return -EPERM; 654 return -EPERM;
655 655
656 if (strncpy_from_user(name, name_user, MODULE_NAME_LEN-1) < 0) 656 if (strncpy_from_user(name, name_user, MODULE_NAME_LEN-1) < 0)
657 return -EFAULT; 657 return -EFAULT;
658 name[MODULE_NAME_LEN-1] = '\0'; 658 name[MODULE_NAME_LEN-1] = '\0';
659 659
660 if (mutex_lock_interruptible(&module_mutex) != 0) 660 if (mutex_lock_interruptible(&module_mutex) != 0)
661 return -EINTR; 661 return -EINTR;
662 662
663 mod = find_module(name); 663 mod = find_module(name);
664 if (!mod) { 664 if (!mod) {
665 ret = -ENOENT; 665 ret = -ENOENT;
666 goto out; 666 goto out;
667 } 667 }
668 668
669 if (!list_empty(&mod->modules_which_use_me)) { 669 if (!list_empty(&mod->modules_which_use_me)) {
670 /* Other modules depend on us: get rid of them first. */ 670 /* Other modules depend on us: get rid of them first. */
671 ret = -EWOULDBLOCK; 671 ret = -EWOULDBLOCK;
672 goto out; 672 goto out;
673 } 673 }
674 674
675 /* Doing init or already dying? */ 675 /* Doing init or already dying? */
676 if (mod->state != MODULE_STATE_LIVE) { 676 if (mod->state != MODULE_STATE_LIVE) {
677 /* FIXME: if (force), slam module count and wake up 677 /* FIXME: if (force), slam module count and wake up
678 waiter --RR */ 678 waiter --RR */
679 DEBUGP("%s already dying\n", mod->name); 679 DEBUGP("%s already dying\n", mod->name);
680 ret = -EBUSY; 680 ret = -EBUSY;
681 goto out; 681 goto out;
682 } 682 }
683 683
684 /* If it has an init func, it must have an exit func to unload */ 684 /* If it has an init func, it must have an exit func to unload */
685 if ((mod->init != NULL && mod->exit == NULL) 685 if ((mod->init != NULL && mod->exit == NULL)
686 || mod->unsafe) { 686 || mod->unsafe) {
687 forced = try_force_unload(flags); 687 forced = try_force_unload(flags);
688 if (!forced) { 688 if (!forced) {
689 /* This module can't be removed */ 689 /* This module can't be removed */
690 ret = -EBUSY; 690 ret = -EBUSY;
691 goto out; 691 goto out;
692 } 692 }
693 } 693 }
694 694
695 /* Set this up before setting mod->state */ 695 /* Set this up before setting mod->state */
696 mod->waiter = current; 696 mod->waiter = current;
697 697
698 /* Stop the machine so refcounts can't move and disable module. */ 698 /* Stop the machine so refcounts can't move and disable module. */
699 ret = try_stop_module(mod, flags, &forced); 699 ret = try_stop_module(mod, flags, &forced);
700 if (ret != 0) 700 if (ret != 0)
701 goto out; 701 goto out;
702 702
703 /* Never wait if forced. */ 703 /* Never wait if forced. */
704 if (!forced && module_refcount(mod) != 0) 704 if (!forced && module_refcount(mod) != 0)
705 wait_for_zero_refcount(mod); 705 wait_for_zero_refcount(mod);
706 706
707 /* Final destruction now noone is using it. */ 707 /* Final destruction now noone is using it. */
708 if (mod->exit != NULL) { 708 if (mod->exit != NULL) {
709 mutex_unlock(&module_mutex); 709 mutex_unlock(&module_mutex);
710 mod->exit(); 710 mod->exit();
711 mutex_lock(&module_mutex); 711 mutex_lock(&module_mutex);
712 } 712 }
713 free_module(mod); 713 free_module(mod);
714 714
715 out: 715 out:
716 mutex_unlock(&module_mutex); 716 mutex_unlock(&module_mutex);
717 return ret; 717 return ret;
718 } 718 }
719 719
720 static void print_unload_info(struct seq_file *m, struct module *mod) 720 static void print_unload_info(struct seq_file *m, struct module *mod)
721 { 721 {
722 struct module_use *use; 722 struct module_use *use;
723 int printed_something = 0; 723 int printed_something = 0;
724 724
725 seq_printf(m, " %u ", module_refcount(mod)); 725 seq_printf(m, " %u ", module_refcount(mod));
726 726
727 /* Always include a trailing , so userspace can differentiate 727 /* Always include a trailing , so userspace can differentiate
728 between this and the old multi-field proc format. */ 728 between this and the old multi-field proc format. */
729 list_for_each_entry(use, &mod->modules_which_use_me, list) { 729 list_for_each_entry(use, &mod->modules_which_use_me, list) {
730 printed_something = 1; 730 printed_something = 1;
731 seq_printf(m, "%s,", use->module_which_uses->name); 731 seq_printf(m, "%s,", use->module_which_uses->name);
732 } 732 }
733 733
734 if (mod->unsafe) { 734 if (mod->unsafe) {
735 printed_something = 1; 735 printed_something = 1;
736 seq_printf(m, "[unsafe],"); 736 seq_printf(m, "[unsafe],");
737 } 737 }
738 738
739 if (mod->init != NULL && mod->exit == NULL) { 739 if (mod->init != NULL && mod->exit == NULL) {
740 printed_something = 1; 740 printed_something = 1;
741 seq_printf(m, "[permanent],"); 741 seq_printf(m, "[permanent],");
742 } 742 }
743 743
744 if (!printed_something) 744 if (!printed_something)
745 seq_printf(m, "-"); 745 seq_printf(m, "-");
746 } 746 }
747 747
748 void __symbol_put(const char *symbol) 748 void __symbol_put(const char *symbol)
749 { 749 {
750 struct module *owner; 750 struct module *owner;
751 unsigned long flags; 751 unsigned long flags;
752 const unsigned long *crc; 752 const unsigned long *crc;
753 753
754 spin_lock_irqsave(&modlist_lock, flags); 754 spin_lock_irqsave(&modlist_lock, flags);
755 if (!__find_symbol(symbol, &owner, &crc, 1)) 755 if (!__find_symbol(symbol, &owner, &crc, 1))
756 BUG(); 756 BUG();
757 module_put(owner); 757 module_put(owner);
758 spin_unlock_irqrestore(&modlist_lock, flags); 758 spin_unlock_irqrestore(&modlist_lock, flags);
759 } 759 }
760 EXPORT_SYMBOL(__symbol_put); 760 EXPORT_SYMBOL(__symbol_put);
761 761
762 void symbol_put_addr(void *addr) 762 void symbol_put_addr(void *addr)
763 { 763 {
764 struct module *modaddr; 764 struct module *modaddr;
765 765
766 if (core_kernel_text((unsigned long)addr)) 766 if (core_kernel_text((unsigned long)addr))
767 return; 767 return;
768 768
769 if (!(modaddr = module_text_address((unsigned long)addr))) 769 if (!(modaddr = module_text_address((unsigned long)addr)))
770 BUG(); 770 BUG();
771 module_put(modaddr); 771 module_put(modaddr);
772 } 772 }
773 EXPORT_SYMBOL_GPL(symbol_put_addr); 773 EXPORT_SYMBOL_GPL(symbol_put_addr);
774 774
775 static ssize_t show_refcnt(struct module_attribute *mattr, 775 static ssize_t show_refcnt(struct module_attribute *mattr,
776 struct module *mod, char *buffer) 776 struct module *mod, char *buffer)
777 { 777 {
778 /* sysfs holds a reference */ 778 /* sysfs holds a reference */
779 return sprintf(buffer, "%u\n", module_refcount(mod)-1); 779 return sprintf(buffer, "%u\n", module_refcount(mod)-1);
780 } 780 }
781 781
782 static struct module_attribute refcnt = { 782 static struct module_attribute refcnt = {
783 .attr = { .name = "refcnt", .mode = 0444, .owner = THIS_MODULE }, 783 .attr = { .name = "refcnt", .mode = 0444, .owner = THIS_MODULE },
784 .show = show_refcnt, 784 .show = show_refcnt,
785 }; 785 };
786 786
787 #else /* !CONFIG_MODULE_UNLOAD */ 787 #else /* !CONFIG_MODULE_UNLOAD */
788 static void print_unload_info(struct seq_file *m, struct module *mod) 788 static void print_unload_info(struct seq_file *m, struct module *mod)
789 { 789 {
790 /* We don't know the usage count, or what modules are using. */ 790 /* We don't know the usage count, or what modules are using. */
791 seq_printf(m, " - -"); 791 seq_printf(m, " - -");
792 } 792 }
793 793
794 static inline void module_unload_free(struct module *mod) 794 static inline void module_unload_free(struct module *mod)
795 { 795 {
796 } 796 }
797 797
798 static inline int use_module(struct module *a, struct module *b) 798 static inline int use_module(struct module *a, struct module *b)
799 { 799 {
800 return strong_try_module_get(b); 800 return strong_try_module_get(b);
801 } 801 }
802 802
803 static inline void module_unload_init(struct module *mod) 803 static inline void module_unload_init(struct module *mod)
804 { 804 {
805 } 805 }
806 #endif /* CONFIG_MODULE_UNLOAD */ 806 #endif /* CONFIG_MODULE_UNLOAD */
807 807
808 static struct module_attribute *modinfo_attrs[] = { 808 static struct module_attribute *modinfo_attrs[] = {
809 &modinfo_version, 809 &modinfo_version,
810 &modinfo_srcversion, 810 &modinfo_srcversion,
811 #ifdef CONFIG_MODULE_UNLOAD 811 #ifdef CONFIG_MODULE_UNLOAD
812 &refcnt, 812 &refcnt,
813 #endif 813 #endif
814 NULL, 814 NULL,
815 }; 815 };
816 816
817 static const char vermagic[] = VERMAGIC_STRING; 817 static const char vermagic[] = VERMAGIC_STRING;
818 818
819 #ifdef CONFIG_MODVERSIONS 819 #ifdef CONFIG_MODVERSIONS
820 static int check_version(Elf_Shdr *sechdrs, 820 static int check_version(Elf_Shdr *sechdrs,
821 unsigned int versindex, 821 unsigned int versindex,
822 const char *symname, 822 const char *symname,
823 struct module *mod, 823 struct module *mod,
824 const unsigned long *crc) 824 const unsigned long *crc)
825 { 825 {
826 unsigned int i, num_versions; 826 unsigned int i, num_versions;
827 struct modversion_info *versions; 827 struct modversion_info *versions;
828 828
829 /* Exporting module didn't supply crcs? OK, we're already tainted. */ 829 /* Exporting module didn't supply crcs? OK, we're already tainted. */
830 if (!crc) 830 if (!crc)
831 return 1; 831 return 1;
832 832
833 versions = (void *) sechdrs[versindex].sh_addr; 833 versions = (void *) sechdrs[versindex].sh_addr;
834 num_versions = sechdrs[versindex].sh_size 834 num_versions = sechdrs[versindex].sh_size
835 / sizeof(struct modversion_info); 835 / sizeof(struct modversion_info);
836 836
837 for (i = 0; i < num_versions; i++) { 837 for (i = 0; i < num_versions; i++) {
838 if (strcmp(versions[i].name, symname) != 0) 838 if (strcmp(versions[i].name, symname) != 0)
839 continue; 839 continue;
840 840
841 if (versions[i].crc == *crc) 841 if (versions[i].crc == *crc)
842 return 1; 842 return 1;
843 printk("%s: disagrees about version of symbol %s\n", 843 printk("%s: disagrees about version of symbol %s\n",
844 mod->name, symname); 844 mod->name, symname);
845 DEBUGP("Found checksum %lX vs module %lX\n", 845 DEBUGP("Found checksum %lX vs module %lX\n",
846 *crc, versions[i].crc); 846 *crc, versions[i].crc);
847 return 0; 847 return 0;
848 } 848 }
849 /* Not in module's version table. OK, but that taints the kernel. */ 849 /* Not in module's version table. OK, but that taints the kernel. */
850 if (!(tainted & TAINT_FORCED_MODULE)) { 850 if (!(tainted & TAINT_FORCED_MODULE)) {
851 printk("%s: no version for \"%s\" found: kernel tainted.\n", 851 printk("%s: no version for \"%s\" found: kernel tainted.\n",
852 mod->name, symname); 852 mod->name, symname);
853 add_taint(TAINT_FORCED_MODULE); 853 add_taint(TAINT_FORCED_MODULE);
854 } 854 }
855 return 1; 855 return 1;
856 } 856 }
857 857
858 static inline int check_modstruct_version(Elf_Shdr *sechdrs, 858 static inline int check_modstruct_version(Elf_Shdr *sechdrs,
859 unsigned int versindex, 859 unsigned int versindex,
860 struct module *mod) 860 struct module *mod)
861 { 861 {
862 const unsigned long *crc; 862 const unsigned long *crc;
863 struct module *owner; 863 struct module *owner;
864 864
865 if (!__find_symbol("struct_module", &owner, &crc, 1)) 865 if (!__find_symbol("struct_module", &owner, &crc, 1))
866 BUG(); 866 BUG();
867 return check_version(sechdrs, versindex, "struct_module", mod, 867 return check_version(sechdrs, versindex, "struct_module", mod,
868 crc); 868 crc);
869 } 869 }
870 870
871 /* First part is kernel version, which we ignore. */ 871 /* First part is kernel version, which we ignore. */
872 static inline int same_magic(const char *amagic, const char *bmagic) 872 static inline int same_magic(const char *amagic, const char *bmagic)
873 { 873 {
874 amagic += strcspn(amagic, " "); 874 amagic += strcspn(amagic, " ");
875 bmagic += strcspn(bmagic, " "); 875 bmagic += strcspn(bmagic, " ");
876 return strcmp(amagic, bmagic) == 0; 876 return strcmp(amagic, bmagic) == 0;
877 } 877 }
878 #else 878 #else
879 static inline int check_version(Elf_Shdr *sechdrs, 879 static inline int check_version(Elf_Shdr *sechdrs,
880 unsigned int versindex, 880 unsigned int versindex,
881 const char *symname, 881 const char *symname,
882 struct module *mod, 882 struct module *mod,
883 const unsigned long *crc) 883 const unsigned long *crc)
884 { 884 {
885 return 1; 885 return 1;
886 } 886 }
887 887
888 static inline int check_modstruct_version(Elf_Shdr *sechdrs, 888 static inline int check_modstruct_version(Elf_Shdr *sechdrs,
889 unsigned int versindex, 889 unsigned int versindex,
890 struct module *mod) 890 struct module *mod)
891 { 891 {
892 return 1; 892 return 1;
893 } 893 }
894 894
895 static inline int same_magic(const char *amagic, const char *bmagic) 895 static inline int same_magic(const char *amagic, const char *bmagic)
896 { 896 {
897 return strcmp(amagic, bmagic) == 0; 897 return strcmp(amagic, bmagic) == 0;
898 } 898 }
899 #endif /* CONFIG_MODVERSIONS */ 899 #endif /* CONFIG_MODVERSIONS */
900 900
901 /* Resolve a symbol for this module. I.e. if we find one, record usage. 901 /* Resolve a symbol for this module. I.e. if we find one, record usage.
902 Must be holding module_mutex. */ 902 Must be holding module_mutex. */
903 static unsigned long resolve_symbol(Elf_Shdr *sechdrs, 903 static unsigned long resolve_symbol(Elf_Shdr *sechdrs,
904 unsigned int versindex, 904 unsigned int versindex,
905 const char *name, 905 const char *name,
906 struct module *mod) 906 struct module *mod)
907 { 907 {
908 struct module *owner; 908 struct module *owner;
909 unsigned long ret; 909 unsigned long ret;
910 const unsigned long *crc; 910 const unsigned long *crc;
911 911
912 ret = __find_symbol(name, &owner, &crc, mod->license_gplok); 912 ret = __find_symbol(name, &owner, &crc, mod->license_gplok);
913 if (ret) { 913 if (ret) {
914 /* use_module can fail due to OOM, or module unloading */ 914 /* use_module can fail due to OOM, or module unloading */
915 if (!check_version(sechdrs, versindex, name, mod, crc) || 915 if (!check_version(sechdrs, versindex, name, mod, crc) ||
916 !use_module(mod, owner)) 916 !use_module(mod, owner))
917 ret = 0; 917 ret = 0;
918 } 918 }
919 return ret; 919 return ret;
920 } 920 }
921 921
922 922
923 /* 923 /*
924 * /sys/module/foo/sections stuff 924 * /sys/module/foo/sections stuff
925 * J. Corbet <corbet@lwn.net> 925 * J. Corbet <corbet@lwn.net>
926 */ 926 */
927 #ifdef CONFIG_KALLSYMS 927 #ifdef CONFIG_KALLSYMS
928 static ssize_t module_sect_show(struct module_attribute *mattr, 928 static ssize_t module_sect_show(struct module_attribute *mattr,
929 struct module *mod, char *buf) 929 struct module *mod, char *buf)
930 { 930 {
931 struct module_sect_attr *sattr = 931 struct module_sect_attr *sattr =
932 container_of(mattr, struct module_sect_attr, mattr); 932 container_of(mattr, struct module_sect_attr, mattr);
933 return sprintf(buf, "0x%lx\n", sattr->address); 933 return sprintf(buf, "0x%lx\n", sattr->address);
934 } 934 }
935 935
936 static void free_sect_attrs(struct module_sect_attrs *sect_attrs)
937 {
938 int section;
939
940 for (section = 0; section < sect_attrs->nsections; section++)
941 kfree(sect_attrs->attrs[section].name);
942 kfree(sect_attrs);
943 }
944
936 static void add_sect_attrs(struct module *mod, unsigned int nsect, 945 static void add_sect_attrs(struct module *mod, unsigned int nsect,
937 char *secstrings, Elf_Shdr *sechdrs) 946 char *secstrings, Elf_Shdr *sechdrs)
938 { 947 {
939 unsigned int nloaded = 0, i, size[2]; 948 unsigned int nloaded = 0, i, size[2];
940 struct module_sect_attrs *sect_attrs; 949 struct module_sect_attrs *sect_attrs;
941 struct module_sect_attr *sattr; 950 struct module_sect_attr *sattr;
942 struct attribute **gattr; 951 struct attribute **gattr;
943 952
944 /* Count loaded sections and allocate structures */ 953 /* Count loaded sections and allocate structures */
945 for (i = 0; i < nsect; i++) 954 for (i = 0; i < nsect; i++)
946 if (sechdrs[i].sh_flags & SHF_ALLOC) 955 if (sechdrs[i].sh_flags & SHF_ALLOC)
947 nloaded++; 956 nloaded++;
948 size[0] = ALIGN(sizeof(*sect_attrs) 957 size[0] = ALIGN(sizeof(*sect_attrs)
949 + nloaded * sizeof(sect_attrs->attrs[0]), 958 + nloaded * sizeof(sect_attrs->attrs[0]),
950 sizeof(sect_attrs->grp.attrs[0])); 959 sizeof(sect_attrs->grp.attrs[0]));
951 size[1] = (nloaded + 1) * sizeof(sect_attrs->grp.attrs[0]); 960 size[1] = (nloaded + 1) * sizeof(sect_attrs->grp.attrs[0]);
952 if (! (sect_attrs = kmalloc(size[0] + size[1], GFP_KERNEL))) 961 sect_attrs = kzalloc(size[0] + size[1], GFP_KERNEL);
962 if (sect_attrs == NULL)
953 return; 963 return;
954 964
955 /* Setup section attributes. */ 965 /* Setup section attributes. */
956 sect_attrs->grp.name = "sections"; 966 sect_attrs->grp.name = "sections";
957 sect_attrs->grp.attrs = (void *)sect_attrs + size[0]; 967 sect_attrs->grp.attrs = (void *)sect_attrs + size[0];
958 968
969 sect_attrs->nsections = 0;
959 sattr = &sect_attrs->attrs[0]; 970 sattr = &sect_attrs->attrs[0];
960 gattr = &sect_attrs->grp.attrs[0]; 971 gattr = &sect_attrs->grp.attrs[0];
961 for (i = 0; i < nsect; i++) { 972 for (i = 0; i < nsect; i++) {
962 if (! (sechdrs[i].sh_flags & SHF_ALLOC)) 973 if (! (sechdrs[i].sh_flags & SHF_ALLOC))
963 continue; 974 continue;
964 sattr->address = sechdrs[i].sh_addr; 975 sattr->address = sechdrs[i].sh_addr;
965 strlcpy(sattr->name, secstrings + sechdrs[i].sh_name, 976 sattr->name = kstrdup(secstrings + sechdrs[i].sh_name,
966 MODULE_SECT_NAME_LEN); 977 GFP_KERNEL);
978 if (sattr->name == NULL)
979 goto out;
980 sect_attrs->nsections++;
967 sattr->mattr.show = module_sect_show; 981 sattr->mattr.show = module_sect_show;
968 sattr->mattr.store = NULL; 982 sattr->mattr.store = NULL;
969 sattr->mattr.attr.name = sattr->name; 983 sattr->mattr.attr.name = sattr->name;
970 sattr->mattr.attr.owner = mod; 984 sattr->mattr.attr.owner = mod;
971 sattr->mattr.attr.mode = S_IRUGO; 985 sattr->mattr.attr.mode = S_IRUGO;
972 *(gattr++) = &(sattr++)->mattr.attr; 986 *(gattr++) = &(sattr++)->mattr.attr;
973 } 987 }
974 *gattr = NULL; 988 *gattr = NULL;
975 989
976 if (sysfs_create_group(&mod->mkobj.kobj, &sect_attrs->grp)) 990 if (sysfs_create_group(&mod->mkobj.kobj, &sect_attrs->grp))
977 goto out; 991 goto out;
978 992
979 mod->sect_attrs = sect_attrs; 993 mod->sect_attrs = sect_attrs;
980 return; 994 return;
981 out: 995 out:
982 kfree(sect_attrs); 996 free_sect_attrs(sect_attrs);
983 } 997 }
984 998
985 static void remove_sect_attrs(struct module *mod) 999 static void remove_sect_attrs(struct module *mod)
986 { 1000 {
987 if (mod->sect_attrs) { 1001 if (mod->sect_attrs) {
988 sysfs_remove_group(&mod->mkobj.kobj, 1002 sysfs_remove_group(&mod->mkobj.kobj,
989 &mod->sect_attrs->grp); 1003 &mod->sect_attrs->grp);
990 /* We are positive that no one is using any sect attrs 1004 /* We are positive that no one is using any sect attrs
991 * at this point. Deallocate immediately. */ 1005 * at this point. Deallocate immediately. */
992 kfree(mod->sect_attrs); 1006 free_sect_attrs(mod->sect_attrs);
993 mod->sect_attrs = NULL; 1007 mod->sect_attrs = NULL;
994 } 1008 }
995 } 1009 }
996 1010
997
998 #else 1011 #else
1012
999 static inline void add_sect_attrs(struct module *mod, unsigned int nsect, 1013 static inline void add_sect_attrs(struct module *mod, unsigned int nsect,
1000 char *sectstrings, Elf_Shdr *sechdrs) 1014 char *sectstrings, Elf_Shdr *sechdrs)
1001 { 1015 {
1002 } 1016 }
1003 1017
1004 static inline void remove_sect_attrs(struct module *mod) 1018 static inline void remove_sect_attrs(struct module *mod)
1005 { 1019 {
1006 } 1020 }
1007 #endif /* CONFIG_KALLSYMS */ 1021 #endif /* CONFIG_KALLSYMS */
1008 1022
1009 static int module_add_modinfo_attrs(struct module *mod) 1023 static int module_add_modinfo_attrs(struct module *mod)
1010 { 1024 {
1011 struct module_attribute *attr; 1025 struct module_attribute *attr;
1012 struct module_attribute *temp_attr; 1026 struct module_attribute *temp_attr;
1013 int error = 0; 1027 int error = 0;
1014 int i; 1028 int i;
1015 1029
1016 mod->modinfo_attrs = kzalloc((sizeof(struct module_attribute) * 1030 mod->modinfo_attrs = kzalloc((sizeof(struct module_attribute) *
1017 (ARRAY_SIZE(modinfo_attrs) + 1)), 1031 (ARRAY_SIZE(modinfo_attrs) + 1)),
1018 GFP_KERNEL); 1032 GFP_KERNEL);
1019 if (!mod->modinfo_attrs) 1033 if (!mod->modinfo_attrs)
1020 return -ENOMEM; 1034 return -ENOMEM;
1021 1035
1022 temp_attr = mod->modinfo_attrs; 1036 temp_attr = mod->modinfo_attrs;
1023 for (i = 0; (attr = modinfo_attrs[i]) && !error; i++) { 1037 for (i = 0; (attr = modinfo_attrs[i]) && !error; i++) {
1024 if (!attr->test || 1038 if (!attr->test ||
1025 (attr->test && attr->test(mod))) { 1039 (attr->test && attr->test(mod))) {
1026 memcpy(temp_attr, attr, sizeof(*temp_attr)); 1040 memcpy(temp_attr, attr, sizeof(*temp_attr));
1027 temp_attr->attr.owner = mod; 1041 temp_attr->attr.owner = mod;
1028 error = sysfs_create_file(&mod->mkobj.kobj,&temp_attr->attr); 1042 error = sysfs_create_file(&mod->mkobj.kobj,&temp_attr->attr);
1029 ++temp_attr; 1043 ++temp_attr;
1030 } 1044 }
1031 } 1045 }
1032 return error; 1046 return error;
1033 } 1047 }
1034 1048
1035 static void module_remove_modinfo_attrs(struct module *mod) 1049 static void module_remove_modinfo_attrs(struct module *mod)
1036 { 1050 {
1037 struct module_attribute *attr; 1051 struct module_attribute *attr;
1038 int i; 1052 int i;
1039 1053
1040 for (i = 0; (attr = &mod->modinfo_attrs[i]); i++) { 1054 for (i = 0; (attr = &mod->modinfo_attrs[i]); i++) {
1041 /* pick a field to test for end of list */ 1055 /* pick a field to test for end of list */
1042 if (!attr->attr.name) 1056 if (!attr->attr.name)
1043 break; 1057 break;
1044 sysfs_remove_file(&mod->mkobj.kobj,&attr->attr); 1058 sysfs_remove_file(&mod->mkobj.kobj,&attr->attr);
1045 if (attr->free) 1059 if (attr->free)
1046 attr->free(mod); 1060 attr->free(mod);
1047 } 1061 }
1048 kfree(mod->modinfo_attrs); 1062 kfree(mod->modinfo_attrs);
1049 } 1063 }
1050 1064
1051 static int mod_sysfs_setup(struct module *mod, 1065 static int mod_sysfs_setup(struct module *mod,
1052 struct kernel_param *kparam, 1066 struct kernel_param *kparam,
1053 unsigned int num_params) 1067 unsigned int num_params)
1054 { 1068 {
1055 int err; 1069 int err;
1056 1070
1057 if (!module_subsys.kset.subsys) { 1071 if (!module_subsys.kset.subsys) {
1058 printk(KERN_ERR "%s: module_subsys not initialized\n", 1072 printk(KERN_ERR "%s: module_subsys not initialized\n",
1059 mod->name); 1073 mod->name);
1060 err = -EINVAL; 1074 err = -EINVAL;
1061 goto out; 1075 goto out;
1062 } 1076 }
1063 memset(&mod->mkobj.kobj, 0, sizeof(mod->mkobj.kobj)); 1077 memset(&mod->mkobj.kobj, 0, sizeof(mod->mkobj.kobj));
1064 err = kobject_set_name(&mod->mkobj.kobj, "%s", mod->name); 1078 err = kobject_set_name(&mod->mkobj.kobj, "%s", mod->name);
1065 if (err) 1079 if (err)
1066 goto out; 1080 goto out;
1067 kobj_set_kset_s(&mod->mkobj, module_subsys); 1081 kobj_set_kset_s(&mod->mkobj, module_subsys);
1068 mod->mkobj.mod = mod; 1082 mod->mkobj.mod = mod;
1069 err = kobject_register(&mod->mkobj.kobj); 1083 err = kobject_register(&mod->mkobj.kobj);
1070 if (err) 1084 if (err)
1071 goto out; 1085 goto out;
1072 1086
1073 err = module_param_sysfs_setup(mod, kparam, num_params); 1087 err = module_param_sysfs_setup(mod, kparam, num_params);
1074 if (err) 1088 if (err)
1075 goto out_unreg; 1089 goto out_unreg;
1076 1090
1077 err = module_add_modinfo_attrs(mod); 1091 err = module_add_modinfo_attrs(mod);
1078 if (err) 1092 if (err)
1079 goto out_unreg; 1093 goto out_unreg;
1080 1094
1081 return 0; 1095 return 0;
1082 1096
1083 out_unreg: 1097 out_unreg:
1084 kobject_unregister(&mod->mkobj.kobj); 1098 kobject_unregister(&mod->mkobj.kobj);
1085 out: 1099 out:
1086 return err; 1100 return err;
1087 } 1101 }
1088 1102
1089 static void mod_kobject_remove(struct module *mod) 1103 static void mod_kobject_remove(struct module *mod)
1090 { 1104 {
1091 module_remove_modinfo_attrs(mod); 1105 module_remove_modinfo_attrs(mod);
1092 module_param_sysfs_remove(mod); 1106 module_param_sysfs_remove(mod);
1093 1107
1094 kobject_unregister(&mod->mkobj.kobj); 1108 kobject_unregister(&mod->mkobj.kobj);
1095 } 1109 }
1096 1110
1097 /* 1111 /*
1098 * unlink the module with the whole machine is stopped with interrupts off 1112 * unlink the module with the whole machine is stopped with interrupts off
1099 * - this defends against kallsyms not taking locks 1113 * - this defends against kallsyms not taking locks
1100 */ 1114 */
1101 static int __unlink_module(void *_mod) 1115 static int __unlink_module(void *_mod)
1102 { 1116 {
1103 struct module *mod = _mod; 1117 struct module *mod = _mod;
1104 list_del(&mod->list); 1118 list_del(&mod->list);
1105 return 0; 1119 return 0;
1106 } 1120 }
1107 1121
1108 /* Free a module, remove from lists, etc (must hold module mutex). */ 1122 /* Free a module, remove from lists, etc (must hold module mutex). */
1109 static void free_module(struct module *mod) 1123 static void free_module(struct module *mod)
1110 { 1124 {
1111 /* Delete from various lists */ 1125 /* Delete from various lists */
1112 stop_machine_run(__unlink_module, mod, NR_CPUS); 1126 stop_machine_run(__unlink_module, mod, NR_CPUS);
1113 remove_sect_attrs(mod); 1127 remove_sect_attrs(mod);
1114 mod_kobject_remove(mod); 1128 mod_kobject_remove(mod);
1115 1129
1116 unwind_remove_table(mod->unwind_info, 0); 1130 unwind_remove_table(mod->unwind_info, 0);
1117 1131
1118 /* Arch-specific cleanup. */ 1132 /* Arch-specific cleanup. */
1119 module_arch_cleanup(mod); 1133 module_arch_cleanup(mod);
1120 1134
1121 /* Module unload stuff */ 1135 /* Module unload stuff */
1122 module_unload_free(mod); 1136 module_unload_free(mod);
1123 1137
1124 /* This may be NULL, but that's OK */ 1138 /* This may be NULL, but that's OK */
1125 module_free(mod, mod->module_init); 1139 module_free(mod, mod->module_init);
1126 kfree(mod->args); 1140 kfree(mod->args);
1127 if (mod->percpu) 1141 if (mod->percpu)
1128 percpu_modfree(mod->percpu); 1142 percpu_modfree(mod->percpu);
1129 1143
1130 /* Free lock-classes: */ 1144 /* Free lock-classes: */
1131 lockdep_free_key_range(mod->module_core, mod->core_size); 1145 lockdep_free_key_range(mod->module_core, mod->core_size);
1132 1146
1133 /* Finally, free the core (containing the module structure) */ 1147 /* Finally, free the core (containing the module structure) */
1134 module_free(mod, mod->module_core); 1148 module_free(mod, mod->module_core);
1135 } 1149 }
1136 1150
1137 void *__symbol_get(const char *symbol) 1151 void *__symbol_get(const char *symbol)
1138 { 1152 {
1139 struct module *owner; 1153 struct module *owner;
1140 unsigned long value, flags; 1154 unsigned long value, flags;
1141 const unsigned long *crc; 1155 const unsigned long *crc;
1142 1156
1143 spin_lock_irqsave(&modlist_lock, flags); 1157 spin_lock_irqsave(&modlist_lock, flags);
1144 value = __find_symbol(symbol, &owner, &crc, 1); 1158 value = __find_symbol(symbol, &owner, &crc, 1);
1145 if (value && !strong_try_module_get(owner)) 1159 if (value && !strong_try_module_get(owner))
1146 value = 0; 1160 value = 0;
1147 spin_unlock_irqrestore(&modlist_lock, flags); 1161 spin_unlock_irqrestore(&modlist_lock, flags);
1148 1162
1149 return (void *)value; 1163 return (void *)value;
1150 } 1164 }
1151 EXPORT_SYMBOL_GPL(__symbol_get); 1165 EXPORT_SYMBOL_GPL(__symbol_get);
1152 1166
1153 /* 1167 /*
1154 * Ensure that an exported symbol [global namespace] does not already exist 1168 * Ensure that an exported symbol [global namespace] does not already exist
1155 * in the Kernel or in some other modules exported symbol table. 1169 * in the Kernel or in some other modules exported symbol table.
1156 */ 1170 */
1157 static int verify_export_symbols(struct module *mod) 1171 static int verify_export_symbols(struct module *mod)
1158 { 1172 {
1159 const char *name = NULL; 1173 const char *name = NULL;
1160 unsigned long i, ret = 0; 1174 unsigned long i, ret = 0;
1161 struct module *owner; 1175 struct module *owner;
1162 const unsigned long *crc; 1176 const unsigned long *crc;
1163 1177
1164 for (i = 0; i < mod->num_syms; i++) 1178 for (i = 0; i < mod->num_syms; i++)
1165 if (__find_symbol(mod->syms[i].name, &owner, &crc, 1)) { 1179 if (__find_symbol(mod->syms[i].name, &owner, &crc, 1)) {
1166 name = mod->syms[i].name; 1180 name = mod->syms[i].name;
1167 ret = -ENOEXEC; 1181 ret = -ENOEXEC;
1168 goto dup; 1182 goto dup;
1169 } 1183 }
1170 1184
1171 for (i = 0; i < mod->num_gpl_syms; i++) 1185 for (i = 0; i < mod->num_gpl_syms; i++)
1172 if (__find_symbol(mod->gpl_syms[i].name, &owner, &crc, 1)) { 1186 if (__find_symbol(mod->gpl_syms[i].name, &owner, &crc, 1)) {
1173 name = mod->gpl_syms[i].name; 1187 name = mod->gpl_syms[i].name;
1174 ret = -ENOEXEC; 1188 ret = -ENOEXEC;
1175 goto dup; 1189 goto dup;
1176 } 1190 }
1177 1191
1178 dup: 1192 dup:
1179 if (ret) 1193 if (ret)
1180 printk(KERN_ERR "%s: exports duplicate symbol %s (owned by %s)\n", 1194 printk(KERN_ERR "%s: exports duplicate symbol %s (owned by %s)\n",
1181 mod->name, name, module_name(owner)); 1195 mod->name, name, module_name(owner));
1182 1196
1183 return ret; 1197 return ret;
1184 } 1198 }
1185 1199
1186 /* Change all symbols so that sh_value encodes the pointer directly. */ 1200 /* Change all symbols so that sh_value encodes the pointer directly. */
1187 static int simplify_symbols(Elf_Shdr *sechdrs, 1201 static int simplify_symbols(Elf_Shdr *sechdrs,
1188 unsigned int symindex, 1202 unsigned int symindex,
1189 const char *strtab, 1203 const char *strtab,
1190 unsigned int versindex, 1204 unsigned int versindex,
1191 unsigned int pcpuindex, 1205 unsigned int pcpuindex,
1192 struct module *mod) 1206 struct module *mod)
1193 { 1207 {
1194 Elf_Sym *sym = (void *)sechdrs[symindex].sh_addr; 1208 Elf_Sym *sym = (void *)sechdrs[symindex].sh_addr;
1195 unsigned long secbase; 1209 unsigned long secbase;
1196 unsigned int i, n = sechdrs[symindex].sh_size / sizeof(Elf_Sym); 1210 unsigned int i, n = sechdrs[symindex].sh_size / sizeof(Elf_Sym);
1197 int ret = 0; 1211 int ret = 0;
1198 1212
1199 for (i = 1; i < n; i++) { 1213 for (i = 1; i < n; i++) {
1200 switch (sym[i].st_shndx) { 1214 switch (sym[i].st_shndx) {
1201 case SHN_COMMON: 1215 case SHN_COMMON:
1202 /* We compiled with -fno-common. These are not 1216 /* We compiled with -fno-common. These are not
1203 supposed to happen. */ 1217 supposed to happen. */
1204 DEBUGP("Common symbol: %s\n", strtab + sym[i].st_name); 1218 DEBUGP("Common symbol: %s\n", strtab + sym[i].st_name);
1205 printk("%s: please compile with -fno-common\n", 1219 printk("%s: please compile with -fno-common\n",
1206 mod->name); 1220 mod->name);
1207 ret = -ENOEXEC; 1221 ret = -ENOEXEC;
1208 break; 1222 break;
1209 1223
1210 case SHN_ABS: 1224 case SHN_ABS:
1211 /* Don't need to do anything */ 1225 /* Don't need to do anything */
1212 DEBUGP("Absolute symbol: 0x%08lx\n", 1226 DEBUGP("Absolute symbol: 0x%08lx\n",
1213 (long)sym[i].st_value); 1227 (long)sym[i].st_value);
1214 break; 1228 break;
1215 1229
1216 case SHN_UNDEF: 1230 case SHN_UNDEF:
1217 sym[i].st_value 1231 sym[i].st_value
1218 = resolve_symbol(sechdrs, versindex, 1232 = resolve_symbol(sechdrs, versindex,
1219 strtab + sym[i].st_name, mod); 1233 strtab + sym[i].st_name, mod);
1220 1234
1221 /* Ok if resolved. */ 1235 /* Ok if resolved. */
1222 if (sym[i].st_value != 0) 1236 if (sym[i].st_value != 0)
1223 break; 1237 break;
1224 /* Ok if weak. */ 1238 /* Ok if weak. */
1225 if (ELF_ST_BIND(sym[i].st_info) == STB_WEAK) 1239 if (ELF_ST_BIND(sym[i].st_info) == STB_WEAK)
1226 break; 1240 break;
1227 1241
1228 printk(KERN_WARNING "%s: Unknown symbol %s\n", 1242 printk(KERN_WARNING "%s: Unknown symbol %s\n",
1229 mod->name, strtab + sym[i].st_name); 1243 mod->name, strtab + sym[i].st_name);
1230 ret = -ENOENT; 1244 ret = -ENOENT;
1231 break; 1245 break;
1232 1246
1233 default: 1247 default:
1234 /* Divert to percpu allocation if a percpu var. */ 1248 /* Divert to percpu allocation if a percpu var. */
1235 if (sym[i].st_shndx == pcpuindex) 1249 if (sym[i].st_shndx == pcpuindex)
1236 secbase = (unsigned long)mod->percpu; 1250 secbase = (unsigned long)mod->percpu;
1237 else 1251 else
1238 secbase = sechdrs[sym[i].st_shndx].sh_addr; 1252 secbase = sechdrs[sym[i].st_shndx].sh_addr;
1239 sym[i].st_value += secbase; 1253 sym[i].st_value += secbase;
1240 break; 1254 break;
1241 } 1255 }
1242 } 1256 }
1243 1257
1244 return ret; 1258 return ret;
1245 } 1259 }
1246 1260
1247 /* Update size with this section: return offset. */ 1261 /* Update size with this section: return offset. */
1248 static long get_offset(unsigned long *size, Elf_Shdr *sechdr) 1262 static long get_offset(unsigned long *size, Elf_Shdr *sechdr)
1249 { 1263 {
1250 long ret; 1264 long ret;
1251 1265
1252 ret = ALIGN(*size, sechdr->sh_addralign ?: 1); 1266 ret = ALIGN(*size, sechdr->sh_addralign ?: 1);
1253 *size = ret + sechdr->sh_size; 1267 *size = ret + sechdr->sh_size;
1254 return ret; 1268 return ret;
1255 } 1269 }
1256 1270
1257 /* Lay out the SHF_ALLOC sections in a way not dissimilar to how ld 1271 /* Lay out the SHF_ALLOC sections in a way not dissimilar to how ld
1258 might -- code, read-only data, read-write data, small data. Tally 1272 might -- code, read-only data, read-write data, small data. Tally
1259 sizes, and place the offsets into sh_entsize fields: high bit means it 1273 sizes, and place the offsets into sh_entsize fields: high bit means it
1260 belongs in init. */ 1274 belongs in init. */
1261 static void layout_sections(struct module *mod, 1275 static void layout_sections(struct module *mod,
1262 const Elf_Ehdr *hdr, 1276 const Elf_Ehdr *hdr,
1263 Elf_Shdr *sechdrs, 1277 Elf_Shdr *sechdrs,
1264 const char *secstrings) 1278 const char *secstrings)
1265 { 1279 {
1266 static unsigned long const masks[][2] = { 1280 static unsigned long const masks[][2] = {
1267 /* NOTE: all executable code must be the first section 1281 /* NOTE: all executable code must be the first section
1268 * in this array; otherwise modify the text_size 1282 * in this array; otherwise modify the text_size
1269 * finder in the two loops below */ 1283 * finder in the two loops below */
1270 { SHF_EXECINSTR | SHF_ALLOC, ARCH_SHF_SMALL }, 1284 { SHF_EXECINSTR | SHF_ALLOC, ARCH_SHF_SMALL },
1271 { SHF_ALLOC, SHF_WRITE | ARCH_SHF_SMALL }, 1285 { SHF_ALLOC, SHF_WRITE | ARCH_SHF_SMALL },
1272 { SHF_WRITE | SHF_ALLOC, ARCH_SHF_SMALL }, 1286 { SHF_WRITE | SHF_ALLOC, ARCH_SHF_SMALL },
1273 { ARCH_SHF_SMALL | SHF_ALLOC, 0 } 1287 { ARCH_SHF_SMALL | SHF_ALLOC, 0 }
1274 }; 1288 };
1275 unsigned int m, i; 1289 unsigned int m, i;
1276 1290
1277 for (i = 0; i < hdr->e_shnum; i++) 1291 for (i = 0; i < hdr->e_shnum; i++)
1278 sechdrs[i].sh_entsize = ~0UL; 1292 sechdrs[i].sh_entsize = ~0UL;
1279 1293
1280 DEBUGP("Core section allocation order:\n"); 1294 DEBUGP("Core section allocation order:\n");
1281 for (m = 0; m < ARRAY_SIZE(masks); ++m) { 1295 for (m = 0; m < ARRAY_SIZE(masks); ++m) {
1282 for (i = 0; i < hdr->e_shnum; ++i) { 1296 for (i = 0; i < hdr->e_shnum; ++i) {
1283 Elf_Shdr *s = &sechdrs[i]; 1297 Elf_Shdr *s = &sechdrs[i];
1284 1298
1285 if ((s->sh_flags & masks[m][0]) != masks[m][0] 1299 if ((s->sh_flags & masks[m][0]) != masks[m][0]
1286 || (s->sh_flags & masks[m][1]) 1300 || (s->sh_flags & masks[m][1])
1287 || s->sh_entsize != ~0UL 1301 || s->sh_entsize != ~0UL
1288 || strncmp(secstrings + s->sh_name, 1302 || strncmp(secstrings + s->sh_name,
1289 ".init", 5) == 0) 1303 ".init", 5) == 0)
1290 continue; 1304 continue;
1291 s->sh_entsize = get_offset(&mod->core_size, s); 1305 s->sh_entsize = get_offset(&mod->core_size, s);
1292 DEBUGP("\t%s\n", secstrings + s->sh_name); 1306 DEBUGP("\t%s\n", secstrings + s->sh_name);
1293 } 1307 }
1294 if (m == 0) 1308 if (m == 0)
1295 mod->core_text_size = mod->core_size; 1309 mod->core_text_size = mod->core_size;
1296 } 1310 }
1297 1311
1298 DEBUGP("Init section allocation order:\n"); 1312 DEBUGP("Init section allocation order:\n");
1299 for (m = 0; m < ARRAY_SIZE(masks); ++m) { 1313 for (m = 0; m < ARRAY_SIZE(masks); ++m) {
1300 for (i = 0; i < hdr->e_shnum; ++i) { 1314 for (i = 0; i < hdr->e_shnum; ++i) {
1301 Elf_Shdr *s = &sechdrs[i]; 1315 Elf_Shdr *s = &sechdrs[i];
1302 1316
1303 if ((s->sh_flags & masks[m][0]) != masks[m][0] 1317 if ((s->sh_flags & masks[m][0]) != masks[m][0]
1304 || (s->sh_flags & masks[m][1]) 1318 || (s->sh_flags & masks[m][1])
1305 || s->sh_entsize != ~0UL 1319 || s->sh_entsize != ~0UL
1306 || strncmp(secstrings + s->sh_name, 1320 || strncmp(secstrings + s->sh_name,
1307 ".init", 5) != 0) 1321 ".init", 5) != 0)
1308 continue; 1322 continue;
1309 s->sh_entsize = (get_offset(&mod->init_size, s) 1323 s->sh_entsize = (get_offset(&mod->init_size, s)
1310 | INIT_OFFSET_MASK); 1324 | INIT_OFFSET_MASK);
1311 DEBUGP("\t%s\n", secstrings + s->sh_name); 1325 DEBUGP("\t%s\n", secstrings + s->sh_name);
1312 } 1326 }
1313 if (m == 0) 1327 if (m == 0)
1314 mod->init_text_size = mod->init_size; 1328 mod->init_text_size = mod->init_size;
1315 } 1329 }
1316 } 1330 }
1317 1331
1318 static void set_license(struct module *mod, const char *license) 1332 static void set_license(struct module *mod, const char *license)
1319 { 1333 {
1320 if (!license) 1334 if (!license)
1321 license = "unspecified"; 1335 license = "unspecified";
1322 1336
1323 mod->license_gplok = license_is_gpl_compatible(license); 1337 mod->license_gplok = license_is_gpl_compatible(license);
1324 if (!mod->license_gplok && !(tainted & TAINT_PROPRIETARY_MODULE)) { 1338 if (!mod->license_gplok && !(tainted & TAINT_PROPRIETARY_MODULE)) {
1325 printk(KERN_WARNING "%s: module license '%s' taints kernel.\n", 1339 printk(KERN_WARNING "%s: module license '%s' taints kernel.\n",
1326 mod->name, license); 1340 mod->name, license);
1327 add_taint(TAINT_PROPRIETARY_MODULE); 1341 add_taint(TAINT_PROPRIETARY_MODULE);
1328 } 1342 }
1329 } 1343 }
1330 1344
1331 /* Parse tag=value strings from .modinfo section */ 1345 /* Parse tag=value strings from .modinfo section */
1332 static char *next_string(char *string, unsigned long *secsize) 1346 static char *next_string(char *string, unsigned long *secsize)
1333 { 1347 {
1334 /* Skip non-zero chars */ 1348 /* Skip non-zero chars */
1335 while (string[0]) { 1349 while (string[0]) {
1336 string++; 1350 string++;
1337 if ((*secsize)-- <= 1) 1351 if ((*secsize)-- <= 1)
1338 return NULL; 1352 return NULL;
1339 } 1353 }
1340 1354
1341 /* Skip any zero padding. */ 1355 /* Skip any zero padding. */
1342 while (!string[0]) { 1356 while (!string[0]) {
1343 string++; 1357 string++;
1344 if ((*secsize)-- <= 1) 1358 if ((*secsize)-- <= 1)
1345 return NULL; 1359 return NULL;
1346 } 1360 }
1347 return string; 1361 return string;
1348 } 1362 }
1349 1363
1350 static char *get_modinfo(Elf_Shdr *sechdrs, 1364 static char *get_modinfo(Elf_Shdr *sechdrs,
1351 unsigned int info, 1365 unsigned int info,
1352 const char *tag) 1366 const char *tag)
1353 { 1367 {
1354 char *p; 1368 char *p;
1355 unsigned int taglen = strlen(tag); 1369 unsigned int taglen = strlen(tag);
1356 unsigned long size = sechdrs[info].sh_size; 1370 unsigned long size = sechdrs[info].sh_size;
1357 1371
1358 for (p = (char *)sechdrs[info].sh_addr; p; p = next_string(p, &size)) { 1372 for (p = (char *)sechdrs[info].sh_addr; p; p = next_string(p, &size)) {
1359 if (strncmp(p, tag, taglen) == 0 && p[taglen] == '=') 1373 if (strncmp(p, tag, taglen) == 0 && p[taglen] == '=')
1360 return p + taglen + 1; 1374 return p + taglen + 1;
1361 } 1375 }
1362 return NULL; 1376 return NULL;
1363 } 1377 }
1364 1378
1365 static void setup_modinfo(struct module *mod, Elf_Shdr *sechdrs, 1379 static void setup_modinfo(struct module *mod, Elf_Shdr *sechdrs,
1366 unsigned int infoindex) 1380 unsigned int infoindex)
1367 { 1381 {
1368 struct module_attribute *attr; 1382 struct module_attribute *attr;
1369 int i; 1383 int i;
1370 1384
1371 for (i = 0; (attr = modinfo_attrs[i]); i++) { 1385 for (i = 0; (attr = modinfo_attrs[i]); i++) {
1372 if (attr->setup) 1386 if (attr->setup)
1373 attr->setup(mod, 1387 attr->setup(mod,
1374 get_modinfo(sechdrs, 1388 get_modinfo(sechdrs,
1375 infoindex, 1389 infoindex,
1376 attr->attr.name)); 1390 attr->attr.name));
1377 } 1391 }
1378 } 1392 }
1379 1393
1380 #ifdef CONFIG_KALLSYMS 1394 #ifdef CONFIG_KALLSYMS
1381 int is_exported(const char *name, const struct module *mod) 1395 int is_exported(const char *name, const struct module *mod)
1382 { 1396 {
1383 if (!mod && lookup_symbol(name, __start___ksymtab, __stop___ksymtab)) 1397 if (!mod && lookup_symbol(name, __start___ksymtab, __stop___ksymtab))
1384 return 1; 1398 return 1;
1385 else 1399 else
1386 if (mod && lookup_symbol(name, mod->syms, mod->syms + mod->num_syms)) 1400 if (mod && lookup_symbol(name, mod->syms, mod->syms + mod->num_syms))
1387 return 1; 1401 return 1;
1388 else 1402 else
1389 return 0; 1403 return 0;
1390 } 1404 }
1391 1405
1392 /* As per nm */ 1406 /* As per nm */
1393 static char elf_type(const Elf_Sym *sym, 1407 static char elf_type(const Elf_Sym *sym,
1394 Elf_Shdr *sechdrs, 1408 Elf_Shdr *sechdrs,
1395 const char *secstrings, 1409 const char *secstrings,
1396 struct module *mod) 1410 struct module *mod)
1397 { 1411 {
1398 if (ELF_ST_BIND(sym->st_info) == STB_WEAK) { 1412 if (ELF_ST_BIND(sym->st_info) == STB_WEAK) {
1399 if (ELF_ST_TYPE(sym->st_info) == STT_OBJECT) 1413 if (ELF_ST_TYPE(sym->st_info) == STT_OBJECT)
1400 return 'v'; 1414 return 'v';
1401 else 1415 else
1402 return 'w'; 1416 return 'w';
1403 } 1417 }
1404 if (sym->st_shndx == SHN_UNDEF) 1418 if (sym->st_shndx == SHN_UNDEF)
1405 return 'U'; 1419 return 'U';
1406 if (sym->st_shndx == SHN_ABS) 1420 if (sym->st_shndx == SHN_ABS)
1407 return 'a'; 1421 return 'a';
1408 if (sym->st_shndx >= SHN_LORESERVE) 1422 if (sym->st_shndx >= SHN_LORESERVE)
1409 return '?'; 1423 return '?';
1410 if (sechdrs[sym->st_shndx].sh_flags & SHF_EXECINSTR) 1424 if (sechdrs[sym->st_shndx].sh_flags & SHF_EXECINSTR)
1411 return 't'; 1425 return 't';
1412 if (sechdrs[sym->st_shndx].sh_flags & SHF_ALLOC 1426 if (sechdrs[sym->st_shndx].sh_flags & SHF_ALLOC
1413 && sechdrs[sym->st_shndx].sh_type != SHT_NOBITS) { 1427 && sechdrs[sym->st_shndx].sh_type != SHT_NOBITS) {
1414 if (!(sechdrs[sym->st_shndx].sh_flags & SHF_WRITE)) 1428 if (!(sechdrs[sym->st_shndx].sh_flags & SHF_WRITE))
1415 return 'r'; 1429 return 'r';
1416 else if (sechdrs[sym->st_shndx].sh_flags & ARCH_SHF_SMALL) 1430 else if (sechdrs[sym->st_shndx].sh_flags & ARCH_SHF_SMALL)
1417 return 'g'; 1431 return 'g';
1418 else 1432 else
1419 return 'd'; 1433 return 'd';
1420 } 1434 }
1421 if (sechdrs[sym->st_shndx].sh_type == SHT_NOBITS) { 1435 if (sechdrs[sym->st_shndx].sh_type == SHT_NOBITS) {
1422 if (sechdrs[sym->st_shndx].sh_flags & ARCH_SHF_SMALL) 1436 if (sechdrs[sym->st_shndx].sh_flags & ARCH_SHF_SMALL)
1423 return 's'; 1437 return 's';
1424 else 1438 else
1425 return 'b'; 1439 return 'b';
1426 } 1440 }
1427 if (strncmp(secstrings + sechdrs[sym->st_shndx].sh_name, 1441 if (strncmp(secstrings + sechdrs[sym->st_shndx].sh_name,
1428 ".debug", strlen(".debug")) == 0) 1442 ".debug", strlen(".debug")) == 0)
1429 return 'n'; 1443 return 'n';
1430 return '?'; 1444 return '?';
1431 } 1445 }
1432 1446
1433 static void add_kallsyms(struct module *mod, 1447 static void add_kallsyms(struct module *mod,
1434 Elf_Shdr *sechdrs, 1448 Elf_Shdr *sechdrs,
1435 unsigned int symindex, 1449 unsigned int symindex,
1436 unsigned int strindex, 1450 unsigned int strindex,
1437 const char *secstrings) 1451 const char *secstrings)
1438 { 1452 {
1439 unsigned int i; 1453 unsigned int i;
1440 1454
1441 mod->symtab = (void *)sechdrs[symindex].sh_addr; 1455 mod->symtab = (void *)sechdrs[symindex].sh_addr;
1442 mod->num_symtab = sechdrs[symindex].sh_size / sizeof(Elf_Sym); 1456 mod->num_symtab = sechdrs[symindex].sh_size / sizeof(Elf_Sym);
1443 mod->strtab = (void *)sechdrs[strindex].sh_addr; 1457 mod->strtab = (void *)sechdrs[strindex].sh_addr;
1444 1458
1445 /* Set types up while we still have access to sections. */ 1459 /* Set types up while we still have access to sections. */
1446 for (i = 0; i < mod->num_symtab; i++) 1460 for (i = 0; i < mod->num_symtab; i++)
1447 mod->symtab[i].st_info 1461 mod->symtab[i].st_info
1448 = elf_type(&mod->symtab[i], sechdrs, secstrings, mod); 1462 = elf_type(&mod->symtab[i], sechdrs, secstrings, mod);
1449 } 1463 }
1450 #else 1464 #else
1451 static inline void add_kallsyms(struct module *mod, 1465 static inline void add_kallsyms(struct module *mod,
1452 Elf_Shdr *sechdrs, 1466 Elf_Shdr *sechdrs,
1453 unsigned int symindex, 1467 unsigned int symindex,
1454 unsigned int strindex, 1468 unsigned int strindex,
1455 const char *secstrings) 1469 const char *secstrings)
1456 { 1470 {
1457 } 1471 }
1458 #endif /* CONFIG_KALLSYMS */ 1472 #endif /* CONFIG_KALLSYMS */
1459 1473
1460 /* Allocate and load the module: note that size of section 0 is always 1474 /* Allocate and load the module: note that size of section 0 is always
1461 zero, and we rely on this for optional sections. */ 1475 zero, and we rely on this for optional sections. */
1462 static struct module *load_module(void __user *umod, 1476 static struct module *load_module(void __user *umod,
1463 unsigned long len, 1477 unsigned long len,
1464 const char __user *uargs) 1478 const char __user *uargs)
1465 { 1479 {
1466 Elf_Ehdr *hdr; 1480 Elf_Ehdr *hdr;
1467 Elf_Shdr *sechdrs; 1481 Elf_Shdr *sechdrs;
1468 char *secstrings, *args, *modmagic, *strtab = NULL; 1482 char *secstrings, *args, *modmagic, *strtab = NULL;
1469 unsigned int i; 1483 unsigned int i;
1470 unsigned int symindex = 0; 1484 unsigned int symindex = 0;
1471 unsigned int strindex = 0; 1485 unsigned int strindex = 0;
1472 unsigned int setupindex; 1486 unsigned int setupindex;
1473 unsigned int exindex; 1487 unsigned int exindex;
1474 unsigned int exportindex; 1488 unsigned int exportindex;
1475 unsigned int modindex; 1489 unsigned int modindex;
1476 unsigned int obsparmindex; 1490 unsigned int obsparmindex;
1477 unsigned int infoindex; 1491 unsigned int infoindex;
1478 unsigned int gplindex; 1492 unsigned int gplindex;
1479 unsigned int crcindex; 1493 unsigned int crcindex;
1480 unsigned int gplcrcindex; 1494 unsigned int gplcrcindex;
1481 unsigned int versindex; 1495 unsigned int versindex;
1482 unsigned int pcpuindex; 1496 unsigned int pcpuindex;
1483 unsigned int gplfutureindex; 1497 unsigned int gplfutureindex;
1484 unsigned int gplfuturecrcindex; 1498 unsigned int gplfuturecrcindex;
1485 unsigned int unwindex = 0; 1499 unsigned int unwindex = 0;
1486 unsigned int unusedindex; 1500 unsigned int unusedindex;
1487 unsigned int unusedcrcindex; 1501 unsigned int unusedcrcindex;
1488 unsigned int unusedgplindex; 1502 unsigned int unusedgplindex;
1489 unsigned int unusedgplcrcindex; 1503 unsigned int unusedgplcrcindex;
1490 struct module *mod; 1504 struct module *mod;
1491 long err = 0; 1505 long err = 0;
1492 void *percpu = NULL, *ptr = NULL; /* Stops spurious gcc warning */ 1506 void *percpu = NULL, *ptr = NULL; /* Stops spurious gcc warning */
1493 struct exception_table_entry *extable; 1507 struct exception_table_entry *extable;
1494 mm_segment_t old_fs; 1508 mm_segment_t old_fs;
1495 1509
1496 DEBUGP("load_module: umod=%p, len=%lu, uargs=%p\n", 1510 DEBUGP("load_module: umod=%p, len=%lu, uargs=%p\n",
1497 umod, len, uargs); 1511 umod, len, uargs);
1498 if (len < sizeof(*hdr)) 1512 if (len < sizeof(*hdr))
1499 return ERR_PTR(-ENOEXEC); 1513 return ERR_PTR(-ENOEXEC);
1500 1514
1501 /* Suck in entire file: we'll want most of it. */ 1515 /* Suck in entire file: we'll want most of it. */
1502 /* vmalloc barfs on "unusual" numbers. Check here */ 1516 /* vmalloc barfs on "unusual" numbers. Check here */
1503 if (len > 64 * 1024 * 1024 || (hdr = vmalloc(len)) == NULL) 1517 if (len > 64 * 1024 * 1024 || (hdr = vmalloc(len)) == NULL)
1504 return ERR_PTR(-ENOMEM); 1518 return ERR_PTR(-ENOMEM);
1505 if (copy_from_user(hdr, umod, len) != 0) { 1519 if (copy_from_user(hdr, umod, len) != 0) {
1506 err = -EFAULT; 1520 err = -EFAULT;
1507 goto free_hdr; 1521 goto free_hdr;
1508 } 1522 }
1509 1523
1510 /* Sanity checks against insmoding binaries or wrong arch, 1524 /* Sanity checks against insmoding binaries or wrong arch,
1511 weird elf version */ 1525 weird elf version */
1512 if (memcmp(hdr->e_ident, ELFMAG, 4) != 0 1526 if (memcmp(hdr->e_ident, ELFMAG, 4) != 0
1513 || hdr->e_type != ET_REL 1527 || hdr->e_type != ET_REL
1514 || !elf_check_arch(hdr) 1528 || !elf_check_arch(hdr)
1515 || hdr->e_shentsize != sizeof(*sechdrs)) { 1529 || hdr->e_shentsize != sizeof(*sechdrs)) {
1516 err = -ENOEXEC; 1530 err = -ENOEXEC;
1517 goto free_hdr; 1531 goto free_hdr;
1518 } 1532 }
1519 1533
1520 if (len < hdr->e_shoff + hdr->e_shnum * sizeof(Elf_Shdr)) 1534 if (len < hdr->e_shoff + hdr->e_shnum * sizeof(Elf_Shdr))
1521 goto truncated; 1535 goto truncated;
1522 1536
1523 /* Convenience variables */ 1537 /* Convenience variables */
1524 sechdrs = (void *)hdr + hdr->e_shoff; 1538 sechdrs = (void *)hdr + hdr->e_shoff;
1525 secstrings = (void *)hdr + sechdrs[hdr->e_shstrndx].sh_offset; 1539 secstrings = (void *)hdr + sechdrs[hdr->e_shstrndx].sh_offset;
1526 sechdrs[0].sh_addr = 0; 1540 sechdrs[0].sh_addr = 0;
1527 1541
1528 for (i = 1; i < hdr->e_shnum; i++) { 1542 for (i = 1; i < hdr->e_shnum; i++) {
1529 if (sechdrs[i].sh_type != SHT_NOBITS 1543 if (sechdrs[i].sh_type != SHT_NOBITS
1530 && len < sechdrs[i].sh_offset + sechdrs[i].sh_size) 1544 && len < sechdrs[i].sh_offset + sechdrs[i].sh_size)
1531 goto truncated; 1545 goto truncated;
1532 1546
1533 /* Mark all sections sh_addr with their address in the 1547 /* Mark all sections sh_addr with their address in the
1534 temporary image. */ 1548 temporary image. */
1535 sechdrs[i].sh_addr = (size_t)hdr + sechdrs[i].sh_offset; 1549 sechdrs[i].sh_addr = (size_t)hdr + sechdrs[i].sh_offset;
1536 1550
1537 /* Internal symbols and strings. */ 1551 /* Internal symbols and strings. */
1538 if (sechdrs[i].sh_type == SHT_SYMTAB) { 1552 if (sechdrs[i].sh_type == SHT_SYMTAB) {
1539 symindex = i; 1553 symindex = i;
1540 strindex = sechdrs[i].sh_link; 1554 strindex = sechdrs[i].sh_link;
1541 strtab = (char *)hdr + sechdrs[strindex].sh_offset; 1555 strtab = (char *)hdr + sechdrs[strindex].sh_offset;
1542 } 1556 }
1543 #ifndef CONFIG_MODULE_UNLOAD 1557 #ifndef CONFIG_MODULE_UNLOAD
1544 /* Don't load .exit sections */ 1558 /* Don't load .exit sections */
1545 if (strncmp(secstrings+sechdrs[i].sh_name, ".exit", 5) == 0) 1559 if (strncmp(secstrings+sechdrs[i].sh_name, ".exit", 5) == 0)
1546 sechdrs[i].sh_flags &= ~(unsigned long)SHF_ALLOC; 1560 sechdrs[i].sh_flags &= ~(unsigned long)SHF_ALLOC;
1547 #endif 1561 #endif
1548 } 1562 }
1549 1563
1550 modindex = find_sec(hdr, sechdrs, secstrings, 1564 modindex = find_sec(hdr, sechdrs, secstrings,
1551 ".gnu.linkonce.this_module"); 1565 ".gnu.linkonce.this_module");
1552 if (!modindex) { 1566 if (!modindex) {
1553 printk(KERN_WARNING "No module found in object\n"); 1567 printk(KERN_WARNING "No module found in object\n");
1554 err = -ENOEXEC; 1568 err = -ENOEXEC;
1555 goto free_hdr; 1569 goto free_hdr;
1556 } 1570 }
1557 mod = (void *)sechdrs[modindex].sh_addr; 1571 mod = (void *)sechdrs[modindex].sh_addr;
1558 1572
1559 if (symindex == 0) { 1573 if (symindex == 0) {
1560 printk(KERN_WARNING "%s: module has no symbols (stripped?)\n", 1574 printk(KERN_WARNING "%s: module has no symbols (stripped?)\n",
1561 mod->name); 1575 mod->name);
1562 err = -ENOEXEC; 1576 err = -ENOEXEC;
1563 goto free_hdr; 1577 goto free_hdr;
1564 } 1578 }
1565 1579
1566 /* Optional sections */ 1580 /* Optional sections */
1567 exportindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab"); 1581 exportindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab");
1568 gplindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab_gpl"); 1582 gplindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab_gpl");
1569 gplfutureindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab_gpl_future"); 1583 gplfutureindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab_gpl_future");
1570 unusedindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab_unused"); 1584 unusedindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab_unused");
1571 unusedgplindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab_unused_gpl"); 1585 unusedgplindex = find_sec(hdr, sechdrs, secstrings, "__ksymtab_unused_gpl");
1572 crcindex = find_sec(hdr, sechdrs, secstrings, "__kcrctab"); 1586 crcindex = find_sec(hdr, sechdrs, secstrings, "__kcrctab");
1573 gplcrcindex = find_sec(hdr, sechdrs, secstrings, "__kcrctab_gpl"); 1587 gplcrcindex = find_sec(hdr, sechdrs, secstrings, "__kcrctab_gpl");
1574 gplfuturecrcindex = find_sec(hdr, sechdrs, secstrings, "__kcrctab_gpl_future"); 1588 gplfuturecrcindex = find_sec(hdr, sechdrs, secstrings, "__kcrctab_gpl_future");
1575 unusedcrcindex = find_sec(hdr, sechdrs, secstrings, "__kcrctab_unused"); 1589 unusedcrcindex = find_sec(hdr, sechdrs, secstrings, "__kcrctab_unused");
1576 unusedgplcrcindex = find_sec(hdr, sechdrs, secstrings, "__kcrctab_unused_gpl"); 1590 unusedgplcrcindex = find_sec(hdr, sechdrs, secstrings, "__kcrctab_unused_gpl");
1577 setupindex = find_sec(hdr, sechdrs, secstrings, "__param"); 1591 setupindex = find_sec(hdr, sechdrs, secstrings, "__param");
1578 exindex = find_sec(hdr, sechdrs, secstrings, "__ex_table"); 1592 exindex = find_sec(hdr, sechdrs, secstrings, "__ex_table");
1579 obsparmindex = find_sec(hdr, sechdrs, secstrings, "__obsparm"); 1593 obsparmindex = find_sec(hdr, sechdrs, secstrings, "__obsparm");
1580 versindex = find_sec(hdr, sechdrs, secstrings, "__versions"); 1594 versindex = find_sec(hdr, sechdrs, secstrings, "__versions");
1581 infoindex = find_sec(hdr, sechdrs, secstrings, ".modinfo"); 1595 infoindex = find_sec(hdr, sechdrs, secstrings, ".modinfo");
1582 pcpuindex = find_pcpusec(hdr, sechdrs, secstrings); 1596 pcpuindex = find_pcpusec(hdr, sechdrs, secstrings);
1583 #ifdef ARCH_UNWIND_SECTION_NAME 1597 #ifdef ARCH_UNWIND_SECTION_NAME
1584 unwindex = find_sec(hdr, sechdrs, secstrings, ARCH_UNWIND_SECTION_NAME); 1598 unwindex = find_sec(hdr, sechdrs, secstrings, ARCH_UNWIND_SECTION_NAME);
1585 #endif 1599 #endif
1586 1600
1587 /* Don't keep modinfo section */ 1601 /* Don't keep modinfo section */
1588 sechdrs[infoindex].sh_flags &= ~(unsigned long)SHF_ALLOC; 1602 sechdrs[infoindex].sh_flags &= ~(unsigned long)SHF_ALLOC;
1589 #ifdef CONFIG_KALLSYMS 1603 #ifdef CONFIG_KALLSYMS
1590 /* Keep symbol and string tables for decoding later. */ 1604 /* Keep symbol and string tables for decoding later. */
1591 sechdrs[symindex].sh_flags |= SHF_ALLOC; 1605 sechdrs[symindex].sh_flags |= SHF_ALLOC;
1592 sechdrs[strindex].sh_flags |= SHF_ALLOC; 1606 sechdrs[strindex].sh_flags |= SHF_ALLOC;
1593 #endif 1607 #endif
1594 if (unwindex) 1608 if (unwindex)
1595 sechdrs[unwindex].sh_flags |= SHF_ALLOC; 1609 sechdrs[unwindex].sh_flags |= SHF_ALLOC;
1596 1610
1597 /* Check module struct version now, before we try to use module. */ 1611 /* Check module struct version now, before we try to use module. */
1598 if (!check_modstruct_version(sechdrs, versindex, mod)) { 1612 if (!check_modstruct_version(sechdrs, versindex, mod)) {
1599 err = -ENOEXEC; 1613 err = -ENOEXEC;
1600 goto free_hdr; 1614 goto free_hdr;
1601 } 1615 }
1602 1616
1603 modmagic = get_modinfo(sechdrs, infoindex, "vermagic"); 1617 modmagic = get_modinfo(sechdrs, infoindex, "vermagic");
1604 /* This is allowed: modprobe --force will invalidate it. */ 1618 /* This is allowed: modprobe --force will invalidate it. */
1605 if (!modmagic) { 1619 if (!modmagic) {
1606 add_taint(TAINT_FORCED_MODULE); 1620 add_taint(TAINT_FORCED_MODULE);
1607 printk(KERN_WARNING "%s: no version magic, tainting kernel.\n", 1621 printk(KERN_WARNING "%s: no version magic, tainting kernel.\n",
1608 mod->name); 1622 mod->name);
1609 } else if (!same_magic(modmagic, vermagic)) { 1623 } else if (!same_magic(modmagic, vermagic)) {
1610 printk(KERN_ERR "%s: version magic '%s' should be '%s'\n", 1624 printk(KERN_ERR "%s: version magic '%s' should be '%s'\n",
1611 mod->name, modmagic, vermagic); 1625 mod->name, modmagic, vermagic);
1612 err = -ENOEXEC; 1626 err = -ENOEXEC;
1613 goto free_hdr; 1627 goto free_hdr;
1614 } 1628 }
1615 1629
1616 /* Now copy in args */ 1630 /* Now copy in args */
1617 args = strndup_user(uargs, ~0UL >> 1); 1631 args = strndup_user(uargs, ~0UL >> 1);
1618 if (IS_ERR(args)) { 1632 if (IS_ERR(args)) {
1619 err = PTR_ERR(args); 1633 err = PTR_ERR(args);
1620 goto free_hdr; 1634 goto free_hdr;
1621 } 1635 }
1622 1636
1623 if (find_module(mod->name)) { 1637 if (find_module(mod->name)) {
1624 err = -EEXIST; 1638 err = -EEXIST;
1625 goto free_mod; 1639 goto free_mod;
1626 } 1640 }
1627 1641
1628 mod->state = MODULE_STATE_COMING; 1642 mod->state = MODULE_STATE_COMING;
1629 1643
1630 /* Allow arches to frob section contents and sizes. */ 1644 /* Allow arches to frob section contents and sizes. */
1631 err = module_frob_arch_sections(hdr, sechdrs, secstrings, mod); 1645 err = module_frob_arch_sections(hdr, sechdrs, secstrings, mod);
1632 if (err < 0) 1646 if (err < 0)
1633 goto free_mod; 1647 goto free_mod;
1634 1648
1635 if (pcpuindex) { 1649 if (pcpuindex) {
1636 /* We have a special allocation for this section. */ 1650 /* We have a special allocation for this section. */
1637 percpu = percpu_modalloc(sechdrs[pcpuindex].sh_size, 1651 percpu = percpu_modalloc(sechdrs[pcpuindex].sh_size,
1638 sechdrs[pcpuindex].sh_addralign, 1652 sechdrs[pcpuindex].sh_addralign,
1639 mod->name); 1653 mod->name);
1640 if (!percpu) { 1654 if (!percpu) {
1641 err = -ENOMEM; 1655 err = -ENOMEM;
1642 goto free_mod; 1656 goto free_mod;
1643 } 1657 }
1644 sechdrs[pcpuindex].sh_flags &= ~(unsigned long)SHF_ALLOC; 1658 sechdrs[pcpuindex].sh_flags &= ~(unsigned long)SHF_ALLOC;
1645 mod->percpu = percpu; 1659 mod->percpu = percpu;
1646 } 1660 }
1647 1661
1648 /* Determine total sizes, and put offsets in sh_entsize. For now 1662 /* Determine total sizes, and put offsets in sh_entsize. For now
1649 this is done generically; there doesn't appear to be any 1663 this is done generically; there doesn't appear to be any
1650 special cases for the architectures. */ 1664 special cases for the architectures. */
1651 layout_sections(mod, hdr, sechdrs, secstrings); 1665 layout_sections(mod, hdr, sechdrs, secstrings);
1652 1666
1653 /* Do the allocs. */ 1667 /* Do the allocs. */
1654 ptr = module_alloc(mod->core_size); 1668 ptr = module_alloc(mod->core_size);
1655 if (!ptr) { 1669 if (!ptr) {
1656 err = -ENOMEM; 1670 err = -ENOMEM;
1657 goto free_percpu; 1671 goto free_percpu;
1658 } 1672 }
1659 memset(ptr, 0, mod->core_size); 1673 memset(ptr, 0, mod->core_size);
1660 mod->module_core = ptr; 1674 mod->module_core = ptr;
1661 1675
1662 ptr = module_alloc(mod->init_size); 1676 ptr = module_alloc(mod->init_size);
1663 if (!ptr && mod->init_size) { 1677 if (!ptr && mod->init_size) {
1664 err = -ENOMEM; 1678 err = -ENOMEM;
1665 goto free_core; 1679 goto free_core;
1666 } 1680 }
1667 memset(ptr, 0, mod->init_size); 1681 memset(ptr, 0, mod->init_size);
1668 mod->module_init = ptr; 1682 mod->module_init = ptr;
1669 1683
1670 /* Transfer each section which specifies SHF_ALLOC */ 1684 /* Transfer each section which specifies SHF_ALLOC */
1671 DEBUGP("final section addresses:\n"); 1685 DEBUGP("final section addresses:\n");
1672 for (i = 0; i < hdr->e_shnum; i++) { 1686 for (i = 0; i < hdr->e_shnum; i++) {
1673 void *dest; 1687 void *dest;
1674 1688
1675 if (!(sechdrs[i].sh_flags & SHF_ALLOC)) 1689 if (!(sechdrs[i].sh_flags & SHF_ALLOC))
1676 continue; 1690 continue;
1677 1691
1678 if (sechdrs[i].sh_entsize & INIT_OFFSET_MASK) 1692 if (sechdrs[i].sh_entsize & INIT_OFFSET_MASK)
1679 dest = mod->module_init 1693 dest = mod->module_init
1680 + (sechdrs[i].sh_entsize & ~INIT_OFFSET_MASK); 1694 + (sechdrs[i].sh_entsize & ~INIT_OFFSET_MASK);
1681 else 1695 else
1682 dest = mod->module_core + sechdrs[i].sh_entsize; 1696 dest = mod->module_core + sechdrs[i].sh_entsize;
1683 1697
1684 if (sechdrs[i].sh_type != SHT_NOBITS) 1698 if (sechdrs[i].sh_type != SHT_NOBITS)
1685 memcpy(dest, (void *)sechdrs[i].sh_addr, 1699 memcpy(dest, (void *)sechdrs[i].sh_addr,
1686 sechdrs[i].sh_size); 1700 sechdrs[i].sh_size);
1687 /* Update sh_addr to point to copy in image. */ 1701 /* Update sh_addr to point to copy in image. */
1688 sechdrs[i].sh_addr = (unsigned long)dest; 1702 sechdrs[i].sh_addr = (unsigned long)dest;
1689 DEBUGP("\t0x%lx %s\n", sechdrs[i].sh_addr, secstrings + sechdrs[i].sh_name); 1703 DEBUGP("\t0x%lx %s\n", sechdrs[i].sh_addr, secstrings + sechdrs[i].sh_name);
1690 } 1704 }
1691 /* Module has been moved. */ 1705 /* Module has been moved. */
1692 mod = (void *)sechdrs[modindex].sh_addr; 1706 mod = (void *)sechdrs[modindex].sh_addr;
1693 1707
1694 /* Now we've moved module, initialize linked lists, etc. */ 1708 /* Now we've moved module, initialize linked lists, etc. */
1695 module_unload_init(mod); 1709 module_unload_init(mod);
1696 1710
1697 /* Set up license info based on the info section */ 1711 /* Set up license info based on the info section */
1698 set_license(mod, get_modinfo(sechdrs, infoindex, "license")); 1712 set_license(mod, get_modinfo(sechdrs, infoindex, "license"));
1699 1713
1700 if (strcmp(mod->name, "ndiswrapper") == 0) 1714 if (strcmp(mod->name, "ndiswrapper") == 0)
1701 add_taint(TAINT_PROPRIETARY_MODULE); 1715 add_taint(TAINT_PROPRIETARY_MODULE);
1702 if (strcmp(mod->name, "driverloader") == 0) 1716 if (strcmp(mod->name, "driverloader") == 0)
1703 add_taint(TAINT_PROPRIETARY_MODULE); 1717 add_taint(TAINT_PROPRIETARY_MODULE);
1704 1718
1705 /* Set up MODINFO_ATTR fields */ 1719 /* Set up MODINFO_ATTR fields */
1706 setup_modinfo(mod, sechdrs, infoindex); 1720 setup_modinfo(mod, sechdrs, infoindex);
1707 1721
1708 /* Fix up syms, so that st_value is a pointer to location. */ 1722 /* Fix up syms, so that st_value is a pointer to location. */
1709 err = simplify_symbols(sechdrs, symindex, strtab, versindex, pcpuindex, 1723 err = simplify_symbols(sechdrs, symindex, strtab, versindex, pcpuindex,
1710 mod); 1724 mod);
1711 if (err < 0) 1725 if (err < 0)
1712 goto cleanup; 1726 goto cleanup;
1713 1727
1714 /* Set up EXPORTed & EXPORT_GPLed symbols (section 0 is 0 length) */ 1728 /* Set up EXPORTed & EXPORT_GPLed symbols (section 0 is 0 length) */
1715 mod->num_syms = sechdrs[exportindex].sh_size / sizeof(*mod->syms); 1729 mod->num_syms = sechdrs[exportindex].sh_size / sizeof(*mod->syms);
1716 mod->syms = (void *)sechdrs[exportindex].sh_addr; 1730 mod->syms = (void *)sechdrs[exportindex].sh_addr;
1717 if (crcindex) 1731 if (crcindex)
1718 mod->crcs = (void *)sechdrs[crcindex].sh_addr; 1732 mod->crcs = (void *)sechdrs[crcindex].sh_addr;
1719 mod->num_gpl_syms = sechdrs[gplindex].sh_size / sizeof(*mod->gpl_syms); 1733 mod->num_gpl_syms = sechdrs[gplindex].sh_size / sizeof(*mod->gpl_syms);
1720 mod->gpl_syms = (void *)sechdrs[gplindex].sh_addr; 1734 mod->gpl_syms = (void *)sechdrs[gplindex].sh_addr;
1721 if (gplcrcindex) 1735 if (gplcrcindex)
1722 mod->gpl_crcs = (void *)sechdrs[gplcrcindex].sh_addr; 1736 mod->gpl_crcs = (void *)sechdrs[gplcrcindex].sh_addr;
1723 mod->num_gpl_future_syms = sechdrs[gplfutureindex].sh_size / 1737 mod->num_gpl_future_syms = sechdrs[gplfutureindex].sh_size /
1724 sizeof(*mod->gpl_future_syms); 1738 sizeof(*mod->gpl_future_syms);
1725 mod->num_unused_syms = sechdrs[unusedindex].sh_size / 1739 mod->num_unused_syms = sechdrs[unusedindex].sh_size /
1726 sizeof(*mod->unused_syms); 1740 sizeof(*mod->unused_syms);
1727 mod->num_unused_gpl_syms = sechdrs[unusedgplindex].sh_size / 1741 mod->num_unused_gpl_syms = sechdrs[unusedgplindex].sh_size /
1728 sizeof(*mod->unused_gpl_syms); 1742 sizeof(*mod->unused_gpl_syms);
1729 mod->gpl_future_syms = (void *)sechdrs[gplfutureindex].sh_addr; 1743 mod->gpl_future_syms = (void *)sechdrs[gplfutureindex].sh_addr;
1730 if (gplfuturecrcindex) 1744 if (gplfuturecrcindex)
1731 mod->gpl_future_crcs = (void *)sechdrs[gplfuturecrcindex].sh_addr; 1745 mod->gpl_future_crcs = (void *)sechdrs[gplfuturecrcindex].sh_addr;
1732 1746
1733 mod->unused_syms = (void *)sechdrs[unusedindex].sh_addr; 1747 mod->unused_syms = (void *)sechdrs[unusedindex].sh_addr;
1734 if (unusedcrcindex) 1748 if (unusedcrcindex)
1735 mod->unused_crcs = (void *)sechdrs[unusedcrcindex].sh_addr; 1749 mod->unused_crcs = (void *)sechdrs[unusedcrcindex].sh_addr;
1736 mod->unused_gpl_syms = (void *)sechdrs[unusedgplindex].sh_addr; 1750 mod->unused_gpl_syms = (void *)sechdrs[unusedgplindex].sh_addr;
1737 if (unusedgplcrcindex) 1751 if (unusedgplcrcindex)
1738 mod->unused_crcs = (void *)sechdrs[unusedgplcrcindex].sh_addr; 1752 mod->unused_crcs = (void *)sechdrs[unusedgplcrcindex].sh_addr;
1739 1753
1740 #ifdef CONFIG_MODVERSIONS 1754 #ifdef CONFIG_MODVERSIONS
1741 if ((mod->num_syms && !crcindex) || 1755 if ((mod->num_syms && !crcindex) ||
1742 (mod->num_gpl_syms && !gplcrcindex) || 1756 (mod->num_gpl_syms && !gplcrcindex) ||
1743 (mod->num_gpl_future_syms && !gplfuturecrcindex) || 1757 (mod->num_gpl_future_syms && !gplfuturecrcindex) ||
1744 (mod->num_unused_syms && !unusedcrcindex) || 1758 (mod->num_unused_syms && !unusedcrcindex) ||
1745 (mod->num_unused_gpl_syms && !unusedgplcrcindex)) { 1759 (mod->num_unused_gpl_syms && !unusedgplcrcindex)) {
1746 printk(KERN_WARNING "%s: No versions for exported symbols." 1760 printk(KERN_WARNING "%s: No versions for exported symbols."
1747 " Tainting kernel.\n", mod->name); 1761 " Tainting kernel.\n", mod->name);
1748 add_taint(TAINT_FORCED_MODULE); 1762 add_taint(TAINT_FORCED_MODULE);
1749 } 1763 }
1750 #endif 1764 #endif
1751 1765
1752 /* Now do relocations. */ 1766 /* Now do relocations. */
1753 for (i = 1; i < hdr->e_shnum; i++) { 1767 for (i = 1; i < hdr->e_shnum; i++) {
1754 const char *strtab = (char *)sechdrs[strindex].sh_addr; 1768 const char *strtab = (char *)sechdrs[strindex].sh_addr;
1755 unsigned int info = sechdrs[i].sh_info; 1769 unsigned int info = sechdrs[i].sh_info;
1756 1770
1757 /* Not a valid relocation section? */ 1771 /* Not a valid relocation section? */
1758 if (info >= hdr->e_shnum) 1772 if (info >= hdr->e_shnum)
1759 continue; 1773 continue;
1760 1774
1761 /* Don't bother with non-allocated sections */ 1775 /* Don't bother with non-allocated sections */
1762 if (!(sechdrs[info].sh_flags & SHF_ALLOC)) 1776 if (!(sechdrs[info].sh_flags & SHF_ALLOC))
1763 continue; 1777 continue;
1764 1778
1765 if (sechdrs[i].sh_type == SHT_REL) 1779 if (sechdrs[i].sh_type == SHT_REL)
1766 err = apply_relocate(sechdrs, strtab, symindex, i,mod); 1780 err = apply_relocate(sechdrs, strtab, symindex, i,mod);
1767 else if (sechdrs[i].sh_type == SHT_RELA) 1781 else if (sechdrs[i].sh_type == SHT_RELA)
1768 err = apply_relocate_add(sechdrs, strtab, symindex, i, 1782 err = apply_relocate_add(sechdrs, strtab, symindex, i,
1769 mod); 1783 mod);
1770 if (err < 0) 1784 if (err < 0)
1771 goto cleanup; 1785 goto cleanup;
1772 } 1786 }
1773 1787
1774 /* Find duplicate symbols */ 1788 /* Find duplicate symbols */
1775 err = verify_export_symbols(mod); 1789 err = verify_export_symbols(mod);
1776 1790
1777 if (err < 0) 1791 if (err < 0)
1778 goto cleanup; 1792 goto cleanup;
1779 1793
1780 /* Set up and sort exception table */ 1794 /* Set up and sort exception table */
1781 mod->num_exentries = sechdrs[exindex].sh_size / sizeof(*mod->extable); 1795 mod->num_exentries = sechdrs[exindex].sh_size / sizeof(*mod->extable);
1782 mod->extable = extable = (void *)sechdrs[exindex].sh_addr; 1796 mod->extable = extable = (void *)sechdrs[exindex].sh_addr;
1783 sort_extable(extable, extable + mod->num_exentries); 1797 sort_extable(extable, extable + mod->num_exentries);
1784 1798
1785 /* Finally, copy percpu area over. */ 1799 /* Finally, copy percpu area over. */
1786 percpu_modcopy(mod->percpu, (void *)sechdrs[pcpuindex].sh_addr, 1800 percpu_modcopy(mod->percpu, (void *)sechdrs[pcpuindex].sh_addr,
1787 sechdrs[pcpuindex].sh_size); 1801 sechdrs[pcpuindex].sh_size);
1788 1802
1789 add_kallsyms(mod, sechdrs, symindex, strindex, secstrings); 1803 add_kallsyms(mod, sechdrs, symindex, strindex, secstrings);
1790 1804
1791 err = module_finalize(hdr, sechdrs, mod); 1805 err = module_finalize(hdr, sechdrs, mod);
1792 if (err < 0) 1806 if (err < 0)
1793 goto cleanup; 1807 goto cleanup;
1794 1808
1795 /* flush the icache in correct context */ 1809 /* flush the icache in correct context */
1796 old_fs = get_fs(); 1810 old_fs = get_fs();
1797 set_fs(KERNEL_DS); 1811 set_fs(KERNEL_DS);
1798 1812
1799 /* 1813 /*
1800 * Flush the instruction cache, since we've played with text. 1814 * Flush the instruction cache, since we've played with text.
1801 * Do it before processing of module parameters, so the module 1815 * Do it before processing of module parameters, so the module
1802 * can provide parameter accessor functions of its own. 1816 * can provide parameter accessor functions of its own.
1803 */ 1817 */
1804 if (mod->module_init) 1818 if (mod->module_init)
1805 flush_icache_range((unsigned long)mod->module_init, 1819 flush_icache_range((unsigned long)mod->module_init,
1806 (unsigned long)mod->module_init 1820 (unsigned long)mod->module_init
1807 + mod->init_size); 1821 + mod->init_size);
1808 flush_icache_range((unsigned long)mod->module_core, 1822 flush_icache_range((unsigned long)mod->module_core,
1809 (unsigned long)mod->module_core + mod->core_size); 1823 (unsigned long)mod->module_core + mod->core_size);
1810 1824
1811 set_fs(old_fs); 1825 set_fs(old_fs);
1812 1826
1813 mod->args = args; 1827 mod->args = args;
1814 if (obsparmindex) 1828 if (obsparmindex)
1815 printk(KERN_WARNING "%s: Ignoring obsolete parameters\n", 1829 printk(KERN_WARNING "%s: Ignoring obsolete parameters\n",
1816 mod->name); 1830 mod->name);
1817 1831
1818 /* Size of section 0 is 0, so this works well if no params */ 1832 /* Size of section 0 is 0, so this works well if no params */
1819 err = parse_args(mod->name, mod->args, 1833 err = parse_args(mod->name, mod->args,
1820 (struct kernel_param *) 1834 (struct kernel_param *)
1821 sechdrs[setupindex].sh_addr, 1835 sechdrs[setupindex].sh_addr,
1822 sechdrs[setupindex].sh_size 1836 sechdrs[setupindex].sh_size
1823 / sizeof(struct kernel_param), 1837 / sizeof(struct kernel_param),
1824 NULL); 1838 NULL);
1825 if (err < 0) 1839 if (err < 0)
1826 goto arch_cleanup; 1840 goto arch_cleanup;
1827 1841
1828 err = mod_sysfs_setup(mod, 1842 err = mod_sysfs_setup(mod,
1829 (struct kernel_param *) 1843 (struct kernel_param *)
1830 sechdrs[setupindex].sh_addr, 1844 sechdrs[setupindex].sh_addr,
1831 sechdrs[setupindex].sh_size 1845 sechdrs[setupindex].sh_size
1832 / sizeof(struct kernel_param)); 1846 / sizeof(struct kernel_param));
1833 if (err < 0) 1847 if (err < 0)
1834 goto arch_cleanup; 1848 goto arch_cleanup;
1835 add_sect_attrs(mod, hdr->e_shnum, secstrings, sechdrs); 1849 add_sect_attrs(mod, hdr->e_shnum, secstrings, sechdrs);
1836 1850
1837 /* Size of section 0 is 0, so this works well if no unwind info. */ 1851 /* Size of section 0 is 0, so this works well if no unwind info. */
1838 mod->unwind_info = unwind_add_table(mod, 1852 mod->unwind_info = unwind_add_table(mod,
1839 (void *)sechdrs[unwindex].sh_addr, 1853 (void *)sechdrs[unwindex].sh_addr,
1840 sechdrs[unwindex].sh_size); 1854 sechdrs[unwindex].sh_size);
1841 1855
1842 /* Get rid of temporary copy */ 1856 /* Get rid of temporary copy */
1843 vfree(hdr); 1857 vfree(hdr);
1844 1858
1845 /* Done! */ 1859 /* Done! */
1846 return mod; 1860 return mod;
1847 1861
1848 arch_cleanup: 1862 arch_cleanup:
1849 module_arch_cleanup(mod); 1863 module_arch_cleanup(mod);
1850 cleanup: 1864 cleanup:
1851 module_unload_free(mod); 1865 module_unload_free(mod);
1852 module_free(mod, mod->module_init); 1866 module_free(mod, mod->module_init);
1853 free_core: 1867 free_core:
1854 module_free(mod, mod->module_core); 1868 module_free(mod, mod->module_core);
1855 free_percpu: 1869 free_percpu:
1856 if (percpu) 1870 if (percpu)
1857 percpu_modfree(percpu); 1871 percpu_modfree(percpu);
1858 free_mod: 1872 free_mod:
1859 kfree(args); 1873 kfree(args);
1860 free_hdr: 1874 free_hdr:
1861 vfree(hdr); 1875 vfree(hdr);
1862 return ERR_PTR(err); 1876 return ERR_PTR(err);
1863 1877
1864 truncated: 1878 truncated:
1865 printk(KERN_ERR "Module len %lu truncated\n", len); 1879 printk(KERN_ERR "Module len %lu truncated\n", len);
1866 err = -ENOEXEC; 1880 err = -ENOEXEC;
1867 goto free_hdr; 1881 goto free_hdr;
1868 } 1882 }
1869 1883
1870 /* 1884 /*
1871 * link the module with the whole machine is stopped with interrupts off 1885 * link the module with the whole machine is stopped with interrupts off
1872 * - this defends against kallsyms not taking locks 1886 * - this defends against kallsyms not taking locks
1873 */ 1887 */
1874 static int __link_module(void *_mod) 1888 static int __link_module(void *_mod)
1875 { 1889 {
1876 struct module *mod = _mod; 1890 struct module *mod = _mod;
1877 list_add(&mod->list, &modules); 1891 list_add(&mod->list, &modules);
1878 return 0; 1892 return 0;
1879 } 1893 }
1880 1894
1881 /* This is where the real work happens */ 1895 /* This is where the real work happens */
1882 asmlinkage long 1896 asmlinkage long
1883 sys_init_module(void __user *umod, 1897 sys_init_module(void __user *umod,
1884 unsigned long len, 1898 unsigned long len,
1885 const char __user *uargs) 1899 const char __user *uargs)
1886 { 1900 {
1887 struct module *mod; 1901 struct module *mod;
1888 int ret = 0; 1902 int ret = 0;
1889 1903
1890 /* Must have permission */ 1904 /* Must have permission */
1891 if (!capable(CAP_SYS_MODULE)) 1905 if (!capable(CAP_SYS_MODULE))
1892 return -EPERM; 1906 return -EPERM;
1893 1907
1894 /* Only one module load at a time, please */ 1908 /* Only one module load at a time, please */
1895 if (mutex_lock_interruptible(&module_mutex) != 0) 1909 if (mutex_lock_interruptible(&module_mutex) != 0)
1896 return -EINTR; 1910 return -EINTR;
1897 1911
1898 /* Do all the hard work */ 1912 /* Do all the hard work */
1899 mod = load_module(umod, len, uargs); 1913 mod = load_module(umod, len, uargs);
1900 if (IS_ERR(mod)) { 1914 if (IS_ERR(mod)) {
1901 mutex_unlock(&module_mutex); 1915 mutex_unlock(&module_mutex);
1902 return PTR_ERR(mod); 1916 return PTR_ERR(mod);
1903 } 1917 }
1904 1918
1905 /* Now sew it into the lists. They won't access us, since 1919 /* Now sew it into the lists. They won't access us, since
1906 strong_try_module_get() will fail. */ 1920 strong_try_module_get() will fail. */
1907 stop_machine_run(__link_module, mod, NR_CPUS); 1921 stop_machine_run(__link_module, mod, NR_CPUS);
1908 1922
1909 /* Drop lock so they can recurse */ 1923 /* Drop lock so they can recurse */
1910 mutex_unlock(&module_mutex); 1924 mutex_unlock(&module_mutex);
1911 1925
1912 blocking_notifier_call_chain(&module_notify_list, 1926 blocking_notifier_call_chain(&module_notify_list,
1913 MODULE_STATE_COMING, mod); 1927 MODULE_STATE_COMING, mod);
1914 1928
1915 /* Start the module */ 1929 /* Start the module */
1916 if (mod->init != NULL) 1930 if (mod->init != NULL)
1917 ret = mod->init(); 1931 ret = mod->init();
1918 if (ret < 0) { 1932 if (ret < 0) {
1919 /* Init routine failed: abort. Try to protect us from 1933 /* Init routine failed: abort. Try to protect us from
1920 buggy refcounters. */ 1934 buggy refcounters. */
1921 mod->state = MODULE_STATE_GOING; 1935 mod->state = MODULE_STATE_GOING;
1922 synchronize_sched(); 1936 synchronize_sched();
1923 if (mod->unsafe) 1937 if (mod->unsafe)
1924 printk(KERN_ERR "%s: module is now stuck!\n", 1938 printk(KERN_ERR "%s: module is now stuck!\n",
1925 mod->name); 1939 mod->name);
1926 else { 1940 else {
1927 module_put(mod); 1941 module_put(mod);
1928 mutex_lock(&module_mutex); 1942 mutex_lock(&module_mutex);
1929 free_module(mod); 1943 free_module(mod);
1930 mutex_unlock(&module_mutex); 1944 mutex_unlock(&module_mutex);
1931 } 1945 }
1932 return ret; 1946 return ret;
1933 } 1947 }
1934 1948
1935 /* Now it's a first class citizen! */ 1949 /* Now it's a first class citizen! */
1936 mutex_lock(&module_mutex); 1950 mutex_lock(&module_mutex);
1937 mod->state = MODULE_STATE_LIVE; 1951 mod->state = MODULE_STATE_LIVE;
1938 /* Drop initial reference. */ 1952 /* Drop initial reference. */
1939 module_put(mod); 1953 module_put(mod);
1940 unwind_remove_table(mod->unwind_info, 1); 1954 unwind_remove_table(mod->unwind_info, 1);
1941 module_free(mod, mod->module_init); 1955 module_free(mod, mod->module_init);
1942 mod->module_init = NULL; 1956 mod->module_init = NULL;
1943 mod->init_size = 0; 1957 mod->init_size = 0;
1944 mod->init_text_size = 0; 1958 mod->init_text_size = 0;
1945 mutex_unlock(&module_mutex); 1959 mutex_unlock(&module_mutex);
1946 1960
1947 return 0; 1961 return 0;
1948 } 1962 }
1949 1963
1950 static inline int within(unsigned long addr, void *start, unsigned long size) 1964 static inline int within(unsigned long addr, void *start, unsigned long size)
1951 { 1965 {
1952 return ((void *)addr >= start && (void *)addr < start + size); 1966 return ((void *)addr >= start && (void *)addr < start + size);
1953 } 1967 }
1954 1968
1955 #ifdef CONFIG_KALLSYMS 1969 #ifdef CONFIG_KALLSYMS
1956 /* 1970 /*
1957 * This ignores the intensely annoying "mapping symbols" found 1971 * This ignores the intensely annoying "mapping symbols" found
1958 * in ARM ELF files: $a, $t and $d. 1972 * in ARM ELF files: $a, $t and $d.
1959 */ 1973 */
1960 static inline int is_arm_mapping_symbol(const char *str) 1974 static inline int is_arm_mapping_symbol(const char *str)
1961 { 1975 {
1962 return str[0] == '$' && strchr("atd", str[1]) 1976 return str[0] == '$' && strchr("atd", str[1])
1963 && (str[2] == '\0' || str[2] == '.'); 1977 && (str[2] == '\0' || str[2] == '.');
1964 } 1978 }
1965 1979
1966 static const char *get_ksymbol(struct module *mod, 1980 static const char *get_ksymbol(struct module *mod,
1967 unsigned long addr, 1981 unsigned long addr,
1968 unsigned long *size, 1982 unsigned long *size,
1969 unsigned long *offset) 1983 unsigned long *offset)
1970 { 1984 {
1971 unsigned int i, best = 0; 1985 unsigned int i, best = 0;
1972 unsigned long nextval; 1986 unsigned long nextval;
1973 1987
1974 /* At worse, next value is at end of module */ 1988 /* At worse, next value is at end of module */
1975 if (within(addr, mod->module_init, mod->init_size)) 1989 if (within(addr, mod->module_init, mod->init_size))
1976 nextval = (unsigned long)mod->module_init+mod->init_text_size; 1990 nextval = (unsigned long)mod->module_init+mod->init_text_size;
1977 else 1991 else
1978 nextval = (unsigned long)mod->module_core+mod->core_text_size; 1992 nextval = (unsigned long)mod->module_core+mod->core_text_size;
1979 1993
1980 /* Scan for closest preceeding symbol, and next symbol. (ELF 1994 /* Scan for closest preceeding symbol, and next symbol. (ELF
1981 starts real symbols at 1). */ 1995 starts real symbols at 1). */
1982 for (i = 1; i < mod->num_symtab; i++) { 1996 for (i = 1; i < mod->num_symtab; i++) {
1983 if (mod->symtab[i].st_shndx == SHN_UNDEF) 1997 if (mod->symtab[i].st_shndx == SHN_UNDEF)
1984 continue; 1998 continue;
1985 1999
1986 /* We ignore unnamed symbols: they're uninformative 2000 /* We ignore unnamed symbols: they're uninformative
1987 * and inserted at a whim. */ 2001 * and inserted at a whim. */
1988 if (mod->symtab[i].st_value <= addr 2002 if (mod->symtab[i].st_value <= addr
1989 && mod->symtab[i].st_value > mod->symtab[best].st_value 2003 && mod->symtab[i].st_value > mod->symtab[best].st_value
1990 && *(mod->strtab + mod->symtab[i].st_name) != '\0' 2004 && *(mod->strtab + mod->symtab[i].st_name) != '\0'
1991 && !is_arm_mapping_symbol(mod->strtab + mod->symtab[i].st_name)) 2005 && !is_arm_mapping_symbol(mod->strtab + mod->symtab[i].st_name))
1992 best = i; 2006 best = i;
1993 if (mod->symtab[i].st_value > addr 2007 if (mod->symtab[i].st_value > addr
1994 && mod->symtab[i].st_value < nextval 2008 && mod->symtab[i].st_value < nextval
1995 && *(mod->strtab + mod->symtab[i].st_name) != '\0' 2009 && *(mod->strtab + mod->symtab[i].st_name) != '\0'
1996 && !is_arm_mapping_symbol(mod->strtab + mod->symtab[i].st_name)) 2010 && !is_arm_mapping_symbol(mod->strtab + mod->symtab[i].st_name))
1997 nextval = mod->symtab[i].st_value; 2011 nextval = mod->symtab[i].st_value;
1998 } 2012 }
1999 2013
2000 if (!best) 2014 if (!best)
2001 return NULL; 2015 return NULL;
2002 2016
2003 *size = nextval - mod->symtab[best].st_value; 2017 *size = nextval - mod->symtab[best].st_value;
2004 *offset = addr - mod->symtab[best].st_value; 2018 *offset = addr - mod->symtab[best].st_value;
2005 return mod->strtab + mod->symtab[best].st_name; 2019 return mod->strtab + mod->symtab[best].st_name;
2006 } 2020 }
2007 2021
2008 /* For kallsyms to ask for address resolution. NULL means not found. 2022 /* For kallsyms to ask for address resolution. NULL means not found.
2009 We don't lock, as this is used for oops resolution and races are a 2023 We don't lock, as this is used for oops resolution and races are a
2010 lesser concern. */ 2024 lesser concern. */
2011 const char *module_address_lookup(unsigned long addr, 2025 const char *module_address_lookup(unsigned long addr,
2012 unsigned long *size, 2026 unsigned long *size,
2013 unsigned long *offset, 2027 unsigned long *offset,
2014 char **modname) 2028 char **modname)
2015 { 2029 {
2016 struct module *mod; 2030 struct module *mod;
2017 2031
2018 list_for_each_entry(mod, &modules, list) { 2032 list_for_each_entry(mod, &modules, list) {
2019 if (within(addr, mod->module_init, mod->init_size) 2033 if (within(addr, mod->module_init, mod->init_size)
2020 || within(addr, mod->module_core, mod->core_size)) { 2034 || within(addr, mod->module_core, mod->core_size)) {
2021 *modname = mod->name; 2035 *modname = mod->name;
2022 return get_ksymbol(mod, addr, size, offset); 2036 return get_ksymbol(mod, addr, size, offset);
2023 } 2037 }
2024 } 2038 }
2025 return NULL; 2039 return NULL;
2026 } 2040 }
2027 2041
2028 struct module *module_get_kallsym(unsigned int symnum, unsigned long *value, 2042 struct module *module_get_kallsym(unsigned int symnum, unsigned long *value,
2029 char *type, char *name, size_t namelen) 2043 char *type, char *name, size_t namelen)
2030 { 2044 {
2031 struct module *mod; 2045 struct module *mod;
2032 2046
2033 mutex_lock(&module_mutex); 2047 mutex_lock(&module_mutex);
2034 list_for_each_entry(mod, &modules, list) { 2048 list_for_each_entry(mod, &modules, list) {
2035 if (symnum < mod->num_symtab) { 2049 if (symnum < mod->num_symtab) {
2036 *value = mod->symtab[symnum].st_value; 2050 *value = mod->symtab[symnum].st_value;
2037 *type = mod->symtab[symnum].st_info; 2051 *type = mod->symtab[symnum].st_info;
2038 strlcpy(name, mod->strtab + mod->symtab[symnum].st_name, 2052 strlcpy(name, mod->strtab + mod->symtab[symnum].st_name,
2039 namelen); 2053 namelen);
2040 mutex_unlock(&module_mutex); 2054 mutex_unlock(&module_mutex);
2041 return mod; 2055 return mod;
2042 } 2056 }
2043 symnum -= mod->num_symtab; 2057 symnum -= mod->num_symtab;
2044 } 2058 }
2045 mutex_unlock(&module_mutex); 2059 mutex_unlock(&module_mutex);
2046 return NULL; 2060 return NULL;
2047 } 2061 }
2048 2062
2049 static unsigned long mod_find_symname(struct module *mod, const char *name) 2063 static unsigned long mod_find_symname(struct module *mod, const char *name)
2050 { 2064 {
2051 unsigned int i; 2065 unsigned int i;
2052 2066
2053 for (i = 0; i < mod->num_symtab; i++) 2067 for (i = 0; i < mod->num_symtab; i++)
2054 if (strcmp(name, mod->strtab+mod->symtab[i].st_name) == 0 && 2068 if (strcmp(name, mod->strtab+mod->symtab[i].st_name) == 0 &&
2055 mod->symtab[i].st_info != 'U') 2069 mod->symtab[i].st_info != 'U')
2056 return mod->symtab[i].st_value; 2070 return mod->symtab[i].st_value;
2057 return 0; 2071 return 0;
2058 } 2072 }
2059 2073
2060 /* Look for this name: can be of form module:name. */ 2074 /* Look for this name: can be of form module:name. */
2061 unsigned long module_kallsyms_lookup_name(const char *name) 2075 unsigned long module_kallsyms_lookup_name(const char *name)
2062 { 2076 {
2063 struct module *mod; 2077 struct module *mod;
2064 char *colon; 2078 char *colon;
2065 unsigned long ret = 0; 2079 unsigned long ret = 0;
2066 2080
2067 /* Don't lock: we're in enough trouble already. */ 2081 /* Don't lock: we're in enough trouble already. */
2068 if ((colon = strchr(name, ':')) != NULL) { 2082 if ((colon = strchr(name, ':')) != NULL) {
2069 *colon = '\0'; 2083 *colon = '\0';
2070 if ((mod = find_module(name)) != NULL) 2084 if ((mod = find_module(name)) != NULL)
2071 ret = mod_find_symname(mod, colon+1); 2085 ret = mod_find_symname(mod, colon+1);
2072 *colon = ':'; 2086 *colon = ':';
2073 } else { 2087 } else {
2074 list_for_each_entry(mod, &modules, list) 2088 list_for_each_entry(mod, &modules, list)
2075 if ((ret = mod_find_symname(mod, name)) != 0) 2089 if ((ret = mod_find_symname(mod, name)) != 0)
2076 break; 2090 break;
2077 } 2091 }
2078 return ret; 2092 return ret;
2079 } 2093 }
2080 #endif /* CONFIG_KALLSYMS */ 2094 #endif /* CONFIG_KALLSYMS */
2081 2095
2082 /* Called by the /proc file system to return a list of modules. */ 2096 /* Called by the /proc file system to return a list of modules. */
2083 static void *m_start(struct seq_file *m, loff_t *pos) 2097 static void *m_start(struct seq_file *m, loff_t *pos)
2084 { 2098 {
2085 struct list_head *i; 2099 struct list_head *i;
2086 loff_t n = 0; 2100 loff_t n = 0;
2087 2101
2088 mutex_lock(&module_mutex); 2102 mutex_lock(&module_mutex);
2089 list_for_each(i, &modules) { 2103 list_for_each(i, &modules) {
2090 if (n++ == *pos) 2104 if (n++ == *pos)
2091 break; 2105 break;
2092 } 2106 }
2093 if (i == &modules) 2107 if (i == &modules)
2094 return NULL; 2108 return NULL;
2095 return i; 2109 return i;
2096 } 2110 }
2097 2111
2098 static void *m_next(struct seq_file *m, void *p, loff_t *pos) 2112 static void *m_next(struct seq_file *m, void *p, loff_t *pos)
2099 { 2113 {
2100 struct list_head *i = p; 2114 struct list_head *i = p;
2101 (*pos)++; 2115 (*pos)++;
2102 if (i->next == &modules) 2116 if (i->next == &modules)
2103 return NULL; 2117 return NULL;
2104 return i->next; 2118 return i->next;
2105 } 2119 }
2106 2120
2107 static void m_stop(struct seq_file *m, void *p) 2121 static void m_stop(struct seq_file *m, void *p)
2108 { 2122 {
2109 mutex_unlock(&module_mutex); 2123 mutex_unlock(&module_mutex);
2110 } 2124 }
2111 2125
2112 static int m_show(struct seq_file *m, void *p) 2126 static int m_show(struct seq_file *m, void *p)
2113 { 2127 {
2114 struct module *mod = list_entry(p, struct module, list); 2128 struct module *mod = list_entry(p, struct module, list);
2115 seq_printf(m, "%s %lu", 2129 seq_printf(m, "%s %lu",
2116 mod->name, mod->init_size + mod->core_size); 2130 mod->name, mod->init_size + mod->core_size);
2117 print_unload_info(m, mod); 2131 print_unload_info(m, mod);
2118 2132
2119 /* Informative for users. */ 2133 /* Informative for users. */
2120 seq_printf(m, " %s", 2134 seq_printf(m, " %s",
2121 mod->state == MODULE_STATE_GOING ? "Unloading": 2135 mod->state == MODULE_STATE_GOING ? "Unloading":
2122 mod->state == MODULE_STATE_COMING ? "Loading": 2136 mod->state == MODULE_STATE_COMING ? "Loading":
2123 "Live"); 2137 "Live");
2124 /* Used by oprofile and other similar tools. */ 2138 /* Used by oprofile and other similar tools. */
2125 seq_printf(m, " 0x%p", mod->module_core); 2139 seq_printf(m, " 0x%p", mod->module_core);
2126 2140
2127 seq_printf(m, "\n"); 2141 seq_printf(m, "\n");
2128 return 0; 2142 return 0;
2129 } 2143 }
2130 2144
2131 /* Format: modulename size refcount deps address 2145 /* Format: modulename size refcount deps address
2132 2146
2133 Where refcount is a number or -, and deps is a comma-separated list 2147 Where refcount is a number or -, and deps is a comma-separated list
2134 of depends or -. 2148 of depends or -.
2135 */ 2149 */
2136 struct seq_operations modules_op = { 2150 struct seq_operations modules_op = {
2137 .start = m_start, 2151 .start = m_start,
2138 .next = m_next, 2152 .next = m_next,
2139 .stop = m_stop, 2153 .stop = m_stop,
2140 .show = m_show 2154 .show = m_show
2141 }; 2155 };
2142 2156
2143 /* Given an address, look for it in the module exception tables. */ 2157 /* Given an address, look for it in the module exception tables. */
2144 const struct exception_table_entry *search_module_extables(unsigned long addr) 2158 const struct exception_table_entry *search_module_extables(unsigned long addr)
2145 { 2159 {
2146 unsigned long flags; 2160 unsigned long flags;
2147 const struct exception_table_entry *e = NULL; 2161 const struct exception_table_entry *e = NULL;
2148 struct module *mod; 2162 struct module *mod;
2149 2163
2150 spin_lock_irqsave(&modlist_lock, flags); 2164 spin_lock_irqsave(&modlist_lock, flags);
2151 list_for_each_entry(mod, &modules, list) { 2165 list_for_each_entry(mod, &modules, list) {
2152 if (mod->num_exentries == 0) 2166 if (mod->num_exentries == 0)
2153 continue; 2167 continue;
2154 2168
2155 e = search_extable(mod->extable, 2169 e = search_extable(mod->extable,
2156 mod->extable + mod->num_exentries - 1, 2170 mod->extable + mod->num_exentries - 1,
2157 addr); 2171 addr);
2158 if (e) 2172 if (e)
2159 break; 2173 break;
2160 } 2174 }
2161 spin_unlock_irqrestore(&modlist_lock, flags); 2175 spin_unlock_irqrestore(&modlist_lock, flags);
2162 2176
2163 /* Now, if we found one, we are running inside it now, hence 2177 /* Now, if we found one, we are running inside it now, hence
2164 we cannot unload the module, hence no refcnt needed. */ 2178 we cannot unload the module, hence no refcnt needed. */
2165 return e; 2179 return e;
2166 } 2180 }
2167 2181
2168 /* 2182 /*
2169 * Is this a valid module address? 2183 * Is this a valid module address?
2170 */ 2184 */
2171 int is_module_address(unsigned long addr) 2185 int is_module_address(unsigned long addr)
2172 { 2186 {
2173 unsigned long flags; 2187 unsigned long flags;
2174 struct module *mod; 2188 struct module *mod;
2175 2189
2176 spin_lock_irqsave(&modlist_lock, flags); 2190 spin_lock_irqsave(&modlist_lock, flags);
2177 2191
2178 list_for_each_entry(mod, &modules, list) { 2192 list_for_each_entry(mod, &modules, list) {
2179 if (within(addr, mod->module_core, mod->core_size)) { 2193 if (within(addr, mod->module_core, mod->core_size)) {
2180 spin_unlock_irqrestore(&modlist_lock, flags); 2194 spin_unlock_irqrestore(&modlist_lock, flags);
2181 return 1; 2195 return 1;
2182 } 2196 }
2183 } 2197 }
2184 2198
2185 spin_unlock_irqrestore(&modlist_lock, flags); 2199 spin_unlock_irqrestore(&modlist_lock, flags);
2186 2200
2187 return 0; 2201 return 0;
2188 } 2202 }
2189 2203
2190 2204
2191 /* Is this a valid kernel address? We don't grab the lock: we are oopsing. */ 2205 /* Is this a valid kernel address? We don't grab the lock: we are oopsing. */
2192 struct module *__module_text_address(unsigned long addr) 2206 struct module *__module_text_address(unsigned long addr)
2193 { 2207 {
2194 struct module *mod; 2208 struct module *mod;
2195 2209
2196 list_for_each_entry(mod, &modules, list) 2210 list_for_each_entry(mod, &modules, list)
2197 if (within(addr, mod->module_init, mod->init_text_size) 2211 if (within(addr, mod->module_init, mod->init_text_size)
2198 || within(addr, mod->module_core, mod->core_text_size)) 2212 || within(addr, mod->module_core, mod->core_text_size))
2199 return mod; 2213 return mod;
2200 return NULL; 2214 return NULL;
2201 } 2215 }
2202 2216
2203 struct module *module_text_address(unsigned long addr) 2217 struct module *module_text_address(unsigned long addr)
2204 { 2218 {
2205 struct module *mod; 2219 struct module *mod;
2206 unsigned long flags; 2220 unsigned long flags;
2207 2221
2208 spin_lock_irqsave(&modlist_lock, flags); 2222 spin_lock_irqsave(&modlist_lock, flags);
2209 mod = __module_text_address(addr); 2223 mod = __module_text_address(addr);
2210 spin_unlock_irqrestore(&modlist_lock, flags); 2224 spin_unlock_irqrestore(&modlist_lock, flags);
2211 2225
2212 return mod; 2226 return mod;
2213 } 2227 }
2214 2228
2215 /* Don't grab lock, we're oopsing. */ 2229 /* Don't grab lock, we're oopsing. */
2216 void print_modules(void) 2230 void print_modules(void)
2217 { 2231 {
2218 struct module *mod; 2232 struct module *mod;
2219 2233
2220 printk("Modules linked in:"); 2234 printk("Modules linked in:");
2221 list_for_each_entry(mod, &modules, list) 2235 list_for_each_entry(mod, &modules, list)
2222 printk(" %s", mod->name); 2236 printk(" %s", mod->name);
2223 printk("\n"); 2237 printk("\n");
2224 } 2238 }
2225 2239
2226 void module_add_driver(struct module *mod, struct device_driver *drv) 2240 void module_add_driver(struct module *mod, struct device_driver *drv)
2227 { 2241 {
2228 if (!mod || !drv) 2242 if (!mod || !drv)
2229 return; 2243 return;
2230 2244
2231 /* Don't check return code; this call is idempotent */ 2245 /* Don't check return code; this call is idempotent */
2232 sysfs_create_link(&drv->kobj, &mod->mkobj.kobj, "module"); 2246 sysfs_create_link(&drv->kobj, &mod->mkobj.kobj, "module");
2233 } 2247 }
2234 EXPORT_SYMBOL(module_add_driver); 2248 EXPORT_SYMBOL(module_add_driver);
2235 2249
2236 void module_remove_driver(struct device_driver *drv) 2250 void module_remove_driver(struct device_driver *drv)
2237 { 2251 {
2238 if (!drv) 2252 if (!drv)
2239 return; 2253 return;
2240 sysfs_remove_link(&drv->kobj, "module"); 2254 sysfs_remove_link(&drv->kobj, "module");
2241 } 2255 }
2242 EXPORT_SYMBOL(module_remove_driver); 2256 EXPORT_SYMBOL(module_remove_driver);
2243 2257
2244 #ifdef CONFIG_MODVERSIONS 2258 #ifdef CONFIG_MODVERSIONS
2245 /* Generate the signature for struct module here, too, for modversions. */ 2259 /* Generate the signature for struct module here, too, for modversions. */
2246 void struct_module(struct module *mod) { return; } 2260 void struct_module(struct module *mod) { return; }
2247 EXPORT_SYMBOL(struct_module); 2261 EXPORT_SYMBOL(struct_module);
2248 #endif 2262 #endif