Commit 14897e35fdc045fff9baabf0354570da22386706

Authored by Linus Torvalds

Merge branch 'docs' of git://git.lwn.net/linux-2.6

* 'docs' of git://git.lwn.net/linux-2.6:
  Add additional examples in Documentation/spinlocks.txt
  Move sched-rt-group.txt to scheduler/
  Documentation: move rpc-cache.txt to filesystems/
  Documentation: move nfsroot.txt to filesystems/
  Spell out behavior of atomic_dec_and_lock() in kerneldoc
  Fix a typo in highres.txt
  Fixes to the seq_file document
  Fill out information on patch tags in SubmittingPatches
  Add the seq_file documentation

Showing 18 changed files Inline Diff

Documentation/00-INDEX
1 1
2 This is a brief list of all the files in ./linux/Documentation and what 2 This is a brief list of all the files in ./linux/Documentation and what
3 they contain. If you add a documentation file, please list it here in 3 they contain. If you add a documentation file, please list it here in
4 alphabetical order as well, or risk being hunted down like a rabid dog. 4 alphabetical order as well, or risk being hunted down like a rabid dog.
5 Please try and keep the descriptions small enough to fit on one line. 5 Please try and keep the descriptions small enough to fit on one line.
6 Thanks -- Paul G. 6 Thanks -- Paul G.
7 7
8 Following translations are available on the WWW: 8 Following translations are available on the WWW:
9 9
10 - Japanese, maintained by the JF Project (JF@linux.or.jp), at 10 - Japanese, maintained by the JF Project (JF@linux.or.jp), at
11 http://www.linux.or.jp/JF/ 11 http://www.linux.or.jp/JF/
12 12
13 00-INDEX 13 00-INDEX
14 - this file. 14 - this file.
15 ABI/ 15 ABI/
16 - info on kernel <-> userspace ABI and relative interface stability. 16 - info on kernel <-> userspace ABI and relative interface stability.
17 17
18 BUG-HUNTING 18 BUG-HUNTING
19 - brute force method of doing binary search of patches to find bug. 19 - brute force method of doing binary search of patches to find bug.
20 Changes 20 Changes
21 - list of changes that break older software packages. 21 - list of changes that break older software packages.
22 CodingStyle 22 CodingStyle
23 - how the boss likes the C code in the kernel to look. 23 - how the boss likes the C code in the kernel to look.
24 DMA-API.txt 24 DMA-API.txt
25 - DMA API, pci_ API & extensions for non-consistent memory machines. 25 - DMA API, pci_ API & extensions for non-consistent memory machines.
26 DMA-ISA-LPC.txt 26 DMA-ISA-LPC.txt
27 - How to do DMA with ISA (and LPC) devices. 27 - How to do DMA with ISA (and LPC) devices.
28 DMA-mapping.txt 28 DMA-mapping.txt
29 - info for PCI drivers using DMA portably across all platforms. 29 - info for PCI drivers using DMA portably across all platforms.
30 DocBook/ 30 DocBook/
31 - directory with DocBook templates etc. for kernel documentation. 31 - directory with DocBook templates etc. for kernel documentation.
32 HOWTO 32 HOWTO
33 - the process and procedures of how to do Linux kernel development. 33 - the process and procedures of how to do Linux kernel development.
34 IO-mapping.txt 34 IO-mapping.txt
35 - how to access I/O mapped memory from within device drivers. 35 - how to access I/O mapped memory from within device drivers.
36 IPMI.txt 36 IPMI.txt
37 - info on Linux Intelligent Platform Management Interface (IPMI) Driver. 37 - info on Linux Intelligent Platform Management Interface (IPMI) Driver.
38 IRQ-affinity.txt 38 IRQ-affinity.txt
39 - how to select which CPU(s) handle which interrupt events on SMP. 39 - how to select which CPU(s) handle which interrupt events on SMP.
40 IRQ.txt 40 IRQ.txt
41 - description of what an IRQ is. 41 - description of what an IRQ is.
42 ManagementStyle 42 ManagementStyle
43 - how to (attempt to) manage kernel hackers. 43 - how to (attempt to) manage kernel hackers.
44 MSI-HOWTO.txt 44 MSI-HOWTO.txt
45 - the Message Signaled Interrupts (MSI) Driver Guide HOWTO and FAQ. 45 - the Message Signaled Interrupts (MSI) Driver Guide HOWTO and FAQ.
46 PCIEBUS-HOWTO.txt 46 PCIEBUS-HOWTO.txt
47 - a guide describing the PCI Express Port Bus driver. 47 - a guide describing the PCI Express Port Bus driver.
48 RCU/ 48 RCU/
49 - directory with info on RCU (read-copy update). 49 - directory with info on RCU (read-copy update).
50 README.DAC960 50 README.DAC960
51 - info on Mylex DAC960/DAC1100 PCI RAID Controller Driver for Linux. 51 - info on Mylex DAC960/DAC1100 PCI RAID Controller Driver for Linux.
52 README.cycladesZ 52 README.cycladesZ
53 - info on Cyclades-Z firmware loading. 53 - info on Cyclades-Z firmware loading.
54 SAK.txt 54 SAK.txt
55 - info on Secure Attention Keys. 55 - info on Secure Attention Keys.
56 SM501.txt 56 SM501.txt
57 - Silicon Motion SM501 multimedia companion chip 57 - Silicon Motion SM501 multimedia companion chip
58 SecurityBugs 58 SecurityBugs
59 - procedure for reporting security bugs found in the kernel. 59 - procedure for reporting security bugs found in the kernel.
60 SubmitChecklist 60 SubmitChecklist
61 - Linux kernel patch submission checklist. 61 - Linux kernel patch submission checklist.
62 SubmittingDrivers 62 SubmittingDrivers
63 - procedure to get a new driver source included into the kernel tree. 63 - procedure to get a new driver source included into the kernel tree.
64 SubmittingPatches 64 SubmittingPatches
65 - procedure to get a source patch included into the kernel tree. 65 - procedure to get a source patch included into the kernel tree.
66 VGA-softcursor.txt 66 VGA-softcursor.txt
67 - how to change your VGA cursor from a blinking underscore. 67 - how to change your VGA cursor from a blinking underscore.
68 accounting/ 68 accounting/
69 - documentation on accounting and taskstats. 69 - documentation on accounting and taskstats.
70 acpi/ 70 acpi/
71 - info on ACPI-specific hooks in the kernel. 71 - info on ACPI-specific hooks in the kernel.
72 aoe/ 72 aoe/
73 - description of AoE (ATA over Ethernet) along with config examples. 73 - description of AoE (ATA over Ethernet) along with config examples.
74 applying-patches.txt 74 applying-patches.txt
75 - description of various trees and how to apply their patches. 75 - description of various trees and how to apply their patches.
76 arm/ 76 arm/
77 - directory with info about Linux on the ARM architecture. 77 - directory with info about Linux on the ARM architecture.
78 atomic_ops.txt 78 atomic_ops.txt
79 - semantics and behavior of atomic and bitmask operations. 79 - semantics and behavior of atomic and bitmask operations.
80 auxdisplay/ 80 auxdisplay/
81 - misc. LCD driver documentation (cfag12864b, ks0108). 81 - misc. LCD driver documentation (cfag12864b, ks0108).
82 basic_profiling.txt 82 basic_profiling.txt
83 - basic instructions for those who wants to profile Linux kernel. 83 - basic instructions for those who wants to profile Linux kernel.
84 binfmt_misc.txt 84 binfmt_misc.txt
85 - info on the kernel support for extra binary formats. 85 - info on the kernel support for extra binary formats.
86 blackfin/ 86 blackfin/
87 - directory with documentation for the Blackfin arch. 87 - directory with documentation for the Blackfin arch.
88 block/ 88 block/
89 - info on the Block I/O (BIO) layer. 89 - info on the Block I/O (BIO) layer.
90 cachetlb.txt 90 cachetlb.txt
91 - describes the cache/TLB flushing interfaces Linux uses. 91 - describes the cache/TLB flushing interfaces Linux uses.
92 cciss.txt 92 cciss.txt
93 - info, major/minor #'s for Compaq's SMART Array Controllers. 93 - info, major/minor #'s for Compaq's SMART Array Controllers.
94 cdrom/ 94 cdrom/
95 - directory with information on the CD-ROM drivers that Linux has. 95 - directory with information on the CD-ROM drivers that Linux has.
96 cli-sti-removal.txt 96 cli-sti-removal.txt
97 - cli()/sti() removal guide. 97 - cli()/sti() removal guide.
98 computone.txt 98 computone.txt
99 - info on Computone Intelliport II/Plus Multiport Serial Driver. 99 - info on Computone Intelliport II/Plus Multiport Serial Driver.
100 connector/ 100 connector/
101 - docs on the netlink based userspace<->kernel space communication mod. 101 - docs on the netlink based userspace<->kernel space communication mod.
102 console/ 102 console/
103 - documentation on Linux console drivers. 103 - documentation on Linux console drivers.
104 cpqarray.txt 104 cpqarray.txt
105 - info on using Compaq's SMART2 Intelligent Disk Array Controllers. 105 - info on using Compaq's SMART2 Intelligent Disk Array Controllers.
106 cpu-freq/ 106 cpu-freq/
107 - info on CPU frequency and voltage scaling. 107 - info on CPU frequency and voltage scaling.
108 cpu-hotplug.txt 108 cpu-hotplug.txt
109 - document describing CPU hotplug support in the Linux kernel. 109 - document describing CPU hotplug support in the Linux kernel.
110 cpu-load.txt 110 cpu-load.txt
111 - document describing how CPU load statistics are collected. 111 - document describing how CPU load statistics are collected.
112 cpuidle/ 112 cpuidle/
113 - info on CPU_IDLE, CPU idle state management subsystem. 113 - info on CPU_IDLE, CPU idle state management subsystem.
114 cpusets.txt 114 cpusets.txt
115 - documents the cpusets feature; assign CPUs and Mem to a set of tasks. 115 - documents the cpusets feature; assign CPUs and Mem to a set of tasks.
116 cputopology.txt 116 cputopology.txt
117 - documentation on how CPU topology info is exported via sysfs. 117 - documentation on how CPU topology info is exported via sysfs.
118 cris/ 118 cris/
119 - directory with info about Linux on CRIS architecture. 119 - directory with info about Linux on CRIS architecture.
120 crypto/ 120 crypto/
121 - directory with info on the Crypto API. 121 - directory with info on the Crypto API.
122 dcdbas.txt 122 dcdbas.txt
123 - information on the Dell Systems Management Base Driver. 123 - information on the Dell Systems Management Base Driver.
124 debugging-modules.txt 124 debugging-modules.txt
125 - some notes on debugging modules after Linux 2.6.3. 125 - some notes on debugging modules after Linux 2.6.3.
126 dell_rbu.txt 126 dell_rbu.txt
127 - document demonstrating the use of the Dell Remote BIOS Update driver. 127 - document demonstrating the use of the Dell Remote BIOS Update driver.
128 device-mapper/ 128 device-mapper/
129 - directory with info on Device Mapper. 129 - directory with info on Device Mapper.
130 devices.txt 130 devices.txt
131 - plain ASCII listing of all the nodes in /dev/ with major minor #'s. 131 - plain ASCII listing of all the nodes in /dev/ with major minor #'s.
132 digiepca.txt 132 digiepca.txt
133 - info on Digi Intl. {PC,PCI,EISA}Xx and Xem series cards. 133 - info on Digi Intl. {PC,PCI,EISA}Xx and Xem series cards.
134 dontdiff 134 dontdiff
135 - file containing a list of files that should never be diff'ed. 135 - file containing a list of files that should never be diff'ed.
136 driver-model/ 136 driver-model/
137 - directory with info about Linux driver model. 137 - directory with info about Linux driver model.
138 dvb/ 138 dvb/
139 - info on Linux Digital Video Broadcast (DVB) subsystem. 139 - info on Linux Digital Video Broadcast (DVB) subsystem.
140 early-userspace/ 140 early-userspace/
141 - info about initramfs, klibc, and userspace early during boot. 141 - info about initramfs, klibc, and userspace early during boot.
142 edac.txt 142 edac.txt
143 - information on EDAC - Error Detection And Correction 143 - information on EDAC - Error Detection And Correction
144 eisa.txt 144 eisa.txt
145 - info on EISA bus support. 145 - info on EISA bus support.
146 exception.txt 146 exception.txt
147 - how Linux v2.2 handles exceptions without verify_area etc. 147 - how Linux v2.2 handles exceptions without verify_area etc.
148 fault-injection/ 148 fault-injection/
149 - dir with docs about the fault injection capabilities infrastructure. 149 - dir with docs about the fault injection capabilities infrastructure.
150 fb/ 150 fb/
151 - directory with info on the frame buffer graphics abstraction layer. 151 - directory with info on the frame buffer graphics abstraction layer.
152 feature-removal-schedule.txt 152 feature-removal-schedule.txt
153 - list of files and features that are going to be removed. 153 - list of files and features that are going to be removed.
154 filesystems/ 154 filesystems/
155 - info on the vfs and the various filesystems that Linux supports. 155 - info on the vfs and the various filesystems that Linux supports.
156 firmware_class/ 156 firmware_class/
157 - request_firmware() hotplug interface info. 157 - request_firmware() hotplug interface info.
158 floppy.txt 158 floppy.txt
159 - notes and driver options for the floppy disk driver. 159 - notes and driver options for the floppy disk driver.
160 frv/ 160 frv/
161 - Fujitsu FR-V Linux documentation. 161 - Fujitsu FR-V Linux documentation.
162 gpio.txt 162 gpio.txt
163 - overview of GPIO (General Purpose Input/Output) access conventions. 163 - overview of GPIO (General Purpose Input/Output) access conventions.
164 hayes-esp.txt 164 hayes-esp.txt
165 - info on using the Hayes ESP serial driver. 165 - info on using the Hayes ESP serial driver.
166 highuid.txt 166 highuid.txt
167 - notes on the change from 16 bit to 32 bit user/group IDs. 167 - notes on the change from 16 bit to 32 bit user/group IDs.
168 hpet.txt 168 hpet.txt
169 - High Precision Event Timer Driver for Linux. 169 - High Precision Event Timer Driver for Linux.
170 hrtimer/ 170 hrtimer/
171 - info on the timer_stats debugging facility for timer (ab)use. 171 - info on the timer_stats debugging facility for timer (ab)use.
172 hrtimers/ 172 hrtimers/
173 - info on the hrtimers subsystem for high-resolution kernel timers. 173 - info on the hrtimers subsystem for high-resolution kernel timers.
174 hw_random.txt 174 hw_random.txt
175 - info on Linux support for random number generator in i8xx chipsets. 175 - info on Linux support for random number generator in i8xx chipsets.
176 hwmon/ 176 hwmon/
177 - directory with docs on various hardware monitoring drivers. 177 - directory with docs on various hardware monitoring drivers.
178 i2c/ 178 i2c/
179 - directory with info about the I2C bus/protocol (2 wire, kHz speed). 179 - directory with info about the I2C bus/protocol (2 wire, kHz speed).
180 i2o/ 180 i2o/
181 - directory with info about the Linux I2O subsystem. 181 - directory with info about the Linux I2O subsystem.
182 i386/ 182 i386/
183 - directory with info about Linux on Intel 32 bit architecture. 183 - directory with info about Linux on Intel 32 bit architecture.
184 ia64/ 184 ia64/
185 - directory with info about Linux on Intel 64 bit architecture. 185 - directory with info about Linux on Intel 64 bit architecture.
186 infiniband/ 186 infiniband/
187 - directory with documents concerning Linux InfiniBand support. 187 - directory with documents concerning Linux InfiniBand support.
188 initrd.txt 188 initrd.txt
189 - how to use the RAM disk as an initial/temporary root filesystem. 189 - how to use the RAM disk as an initial/temporary root filesystem.
190 input/ 190 input/
191 - info on Linux input device support. 191 - info on Linux input device support.
192 io_ordering.txt 192 io_ordering.txt
193 - info on ordering I/O writes to memory-mapped addresses. 193 - info on ordering I/O writes to memory-mapped addresses.
194 ioctl/ 194 ioctl/
195 - directory with documents describing various IOCTL calls. 195 - directory with documents describing various IOCTL calls.
196 ioctl-number.txt 196 ioctl-number.txt
197 - how to implement and register device/driver ioctl calls. 197 - how to implement and register device/driver ioctl calls.
198 iostats.txt 198 iostats.txt
199 - info on I/O statistics Linux kernel provides. 199 - info on I/O statistics Linux kernel provides.
200 irqflags-tracing.txt 200 irqflags-tracing.txt
201 - how to use the irq-flags tracing feature. 201 - how to use the irq-flags tracing feature.
202 isapnp.txt 202 isapnp.txt
203 - info on Linux ISA Plug & Play support. 203 - info on Linux ISA Plug & Play support.
204 isdn/ 204 isdn/
205 - directory with info on the Linux ISDN support, and supported cards. 205 - directory with info on the Linux ISDN support, and supported cards.
206 java.txt 206 java.txt
207 - info on the in-kernel binary support for Java(tm). 207 - info on the in-kernel binary support for Java(tm).
208 kbuild/ 208 kbuild/
209 - directory with info about the kernel build process. 209 - directory with info about the kernel build process.
210 kdump/ 210 kdump/
211 - directory with mini HowTo on getting the crash dump code to work. 211 - directory with mini HowTo on getting the crash dump code to work.
212 kernel-doc-nano-HOWTO.txt 212 kernel-doc-nano-HOWTO.txt
213 - mini HowTo on generation and location of kernel documentation files. 213 - mini HowTo on generation and location of kernel documentation files.
214 kernel-docs.txt 214 kernel-docs.txt
215 - listing of various WWW + books that document kernel internals. 215 - listing of various WWW + books that document kernel internals.
216 kernel-parameters.txt 216 kernel-parameters.txt
217 - summary listing of command line / boot prompt args for the kernel. 217 - summary listing of command line / boot prompt args for the kernel.
218 keys-request-key.txt 218 keys-request-key.txt
219 - description of the kernel key request service. 219 - description of the kernel key request service.
220 keys.txt 220 keys.txt
221 - description of the kernel key retention service. 221 - description of the kernel key retention service.
222 kobject.txt 222 kobject.txt
223 - info of the kobject infrastructure of the Linux kernel. 223 - info of the kobject infrastructure of the Linux kernel.
224 kprobes.txt 224 kprobes.txt
225 - documents the kernel probes debugging feature. 225 - documents the kernel probes debugging feature.
226 kref.txt 226 kref.txt
227 - docs on adding reference counters (krefs) to kernel objects. 227 - docs on adding reference counters (krefs) to kernel objects.
228 laptops/ 228 laptops/
229 - directory with laptop related info and laptop driver documentation. 229 - directory with laptop related info and laptop driver documentation.
230 ldm.txt 230 ldm.txt
231 - a brief description of LDM (Windows Dynamic Disks). 231 - a brief description of LDM (Windows Dynamic Disks).
232 leds-class.txt 232 leds-class.txt
233 - documents LED handling under Linux. 233 - documents LED handling under Linux.
234 local_ops.txt 234 local_ops.txt
235 - semantics and behavior of local atomic operations. 235 - semantics and behavior of local atomic operations.
236 lockdep-design.txt 236 lockdep-design.txt
237 - documentation on the runtime locking correctness validator. 237 - documentation on the runtime locking correctness validator.
238 logo.gif 238 logo.gif
239 - full colour GIF image of Linux logo (penguin - Tux). 239 - full colour GIF image of Linux logo (penguin - Tux).
240 logo.txt 240 logo.txt
241 - info on creator of above logo & site to get additional images from. 241 - info on creator of above logo & site to get additional images from.
242 m68k/ 242 m68k/
243 - directory with info about Linux on Motorola 68k architecture. 243 - directory with info about Linux on Motorola 68k architecture.
244 magic-number.txt 244 magic-number.txt
245 - list of magic numbers used to mark/protect kernel data structures. 245 - list of magic numbers used to mark/protect kernel data structures.
246 mca.txt 246 mca.txt
247 - info on supporting Micro Channel Architecture (e.g. PS/2) systems. 247 - info on supporting Micro Channel Architecture (e.g. PS/2) systems.
248 md.txt 248 md.txt
249 - info on boot arguments for the multiple devices driver. 249 - info on boot arguments for the multiple devices driver.
250 memory-barriers.txt 250 memory-barriers.txt
251 - info on Linux kernel memory barriers. 251 - info on Linux kernel memory barriers.
252 memory-hotplug.txt 252 memory-hotplug.txt
253 - Hotpluggable memory support, how to use and current status. 253 - Hotpluggable memory support, how to use and current status.
254 memory.txt 254 memory.txt
255 - info on typical Linux memory problems. 255 - info on typical Linux memory problems.
256 mips/ 256 mips/
257 - directory with info about Linux on MIPS architecture. 257 - directory with info about Linux on MIPS architecture.
258 mono.txt 258 mono.txt
259 - how to execute Mono-based .NET binaries with the help of BINFMT_MISC. 259 - how to execute Mono-based .NET binaries with the help of BINFMT_MISC.
260 moxa-smartio 260 moxa-smartio
261 - file with info on installing/using Moxa multiport serial driver. 261 - file with info on installing/using Moxa multiport serial driver.
262 mtrr.txt 262 mtrr.txt
263 - how to use PPro Memory Type Range Registers to increase performance. 263 - how to use PPro Memory Type Range Registers to increase performance.
264 mutex-design.txt 264 mutex-design.txt
265 - info on the generic mutex subsystem. 265 - info on the generic mutex subsystem.
266 namespaces/ 266 namespaces/
267 - directory with various information about namespaces 267 - directory with various information about namespaces
268 nbd.txt 268 nbd.txt
269 - info on a TCP implementation of a network block device. 269 - info on a TCP implementation of a network block device.
270 netlabel/ 270 netlabel/
271 - directory with information on the NetLabel subsystem. 271 - directory with information on the NetLabel subsystem.
272 networking/ 272 networking/
273 - directory with info on various aspects of networking with Linux. 273 - directory with info on various aspects of networking with Linux.
274 nfsroot.txt
275 - short guide on setting up a diskless box with NFS root filesystem.
276 nmi_watchdog.txt 274 nmi_watchdog.txt
277 - info on NMI watchdog for SMP systems. 275 - info on NMI watchdog for SMP systems.
278 nommu-mmap.txt 276 nommu-mmap.txt
279 - documentation about no-mmu memory mapping support. 277 - documentation about no-mmu memory mapping support.
280 numastat.txt 278 numastat.txt
281 - info on how to read Numa policy hit/miss statistics in sysfs. 279 - info on how to read Numa policy hit/miss statistics in sysfs.
282 oops-tracing.txt 280 oops-tracing.txt
283 - how to decode those nasty internal kernel error dump messages. 281 - how to decode those nasty internal kernel error dump messages.
284 paride.txt 282 paride.txt
285 - information about the parallel port IDE subsystem. 283 - information about the parallel port IDE subsystem.
286 parisc/ 284 parisc/
287 - directory with info on using Linux on PA-RISC architecture. 285 - directory with info on using Linux on PA-RISC architecture.
288 parport.txt 286 parport.txt
289 - how to use the parallel-port driver. 287 - how to use the parallel-port driver.
290 parport-lowlevel.txt 288 parport-lowlevel.txt
291 - description and usage of the low level parallel port functions. 289 - description and usage of the low level parallel port functions.
292 pci-error-recovery.txt 290 pci-error-recovery.txt
293 - info on PCI error recovery. 291 - info on PCI error recovery.
294 pci.txt 292 pci.txt
295 - info on the PCI subsystem for device driver authors. 293 - info on the PCI subsystem for device driver authors.
296 pcieaer-howto.txt 294 pcieaer-howto.txt
297 - the PCI Express Advanced Error Reporting Driver Guide HOWTO. 295 - the PCI Express Advanced Error Reporting Driver Guide HOWTO.
298 pcmcia/ 296 pcmcia/
299 - info on the Linux PCMCIA driver. 297 - info on the Linux PCMCIA driver.
300 pi-futex.txt 298 pi-futex.txt
301 - documentation on lightweight PI-futexes. 299 - documentation on lightweight PI-futexes.
302 pnp.txt 300 pnp.txt
303 - Linux Plug and Play documentation. 301 - Linux Plug and Play documentation.
304 power/ 302 power/
305 - directory with info on Linux PCI power management. 303 - directory with info on Linux PCI power management.
306 powerpc/ 304 powerpc/
307 - directory with info on using Linux with the PowerPC. 305 - directory with info on using Linux with the PowerPC.
308 preempt-locking.txt 306 preempt-locking.txt
309 - info on locking under a preemptive kernel. 307 - info on locking under a preemptive kernel.
310 prio_tree.txt 308 prio_tree.txt
311 - info on radix-priority-search-tree use for indexing vmas. 309 - info on radix-priority-search-tree use for indexing vmas.
312 ramdisk.txt 310 ramdisk.txt
313 - short guide on how to set up and use the RAM disk. 311 - short guide on how to set up and use the RAM disk.
314 rbtree.txt 312 rbtree.txt
315 - info on what red-black trees are and what they are for. 313 - info on what red-black trees are and what they are for.
316 riscom8.txt 314 riscom8.txt
317 - notes on using the RISCom/8 multi-port serial driver. 315 - notes on using the RISCom/8 multi-port serial driver.
318 robust-futex-ABI.txt 316 robust-futex-ABI.txt
319 - documentation of the robust futex ABI. 317 - documentation of the robust futex ABI.
320 robust-futexes.txt 318 robust-futexes.txt
321 - a description of what robust futexes are. 319 - a description of what robust futexes are.
322 rocket.txt 320 rocket.txt
323 - info on the Comtrol RocketPort multiport serial driver. 321 - info on the Comtrol RocketPort multiport serial driver.
324 rpc-cache.txt
325 - introduction to the caching mechanisms in the sunrpc layer.
326 rt-mutex-design.txt 322 rt-mutex-design.txt
327 - description of the RealTime mutex implementation design. 323 - description of the RealTime mutex implementation design.
328 rt-mutex.txt 324 rt-mutex.txt
329 - desc. of RT-mutex subsystem with PI (Priority Inheritance) support. 325 - desc. of RT-mutex subsystem with PI (Priority Inheritance) support.
330 rtc.txt 326 rtc.txt
331 - notes on how to use the Real Time Clock (aka CMOS clock) driver. 327 - notes on how to use the Real Time Clock (aka CMOS clock) driver.
332 s390/ 328 s390/
333 - directory with info on using Linux on the IBM S390. 329 - directory with info on using Linux on the IBM S390.
334 scheduler/ 330 scheduler/
335 - directory with info on the scheduler. 331 - directory with info on the scheduler.
336 scsi/ 332 scsi/
337 - directory with info on Linux scsi support. 333 - directory with info on Linux scsi support.
338 serial/ 334 serial/
339 - directory with info on the low level serial API. 335 - directory with info on the low level serial API.
340 serial-console.txt 336 serial-console.txt
341 - how to set up Linux with a serial line console as the default. 337 - how to set up Linux with a serial line console as the default.
342 sgi-ioc4.txt 338 sgi-ioc4.txt
343 - description of the SGI IOC4 PCI (multi function) device. 339 - description of the SGI IOC4 PCI (multi function) device.
344 sgi-visws.txt 340 sgi-visws.txt
345 - short blurb on the SGI Visual Workstations. 341 - short blurb on the SGI Visual Workstations.
346 sh/ 342 sh/
347 - directory with info on porting Linux to a new architecture. 343 - directory with info on porting Linux to a new architecture.
348 smart-config.txt 344 smart-config.txt
349 - description of the Smart Config makefile feature. 345 - description of the Smart Config makefile feature.
350 sound/ 346 sound/
351 - directory with info on sound card support. 347 - directory with info on sound card support.
352 sparc/ 348 sparc/
353 - directory with info on using Linux on Sparc architecture. 349 - directory with info on using Linux on Sparc architecture.
354 sparse.txt 350 sparse.txt
355 - info on how to obtain and use the sparse tool for typechecking. 351 - info on how to obtain and use the sparse tool for typechecking.
356 specialix.txt 352 specialix.txt
357 - info on hardware/driver for specialix IO8+ multiport serial card. 353 - info on hardware/driver for specialix IO8+ multiport serial card.
358 spi/ 354 spi/
359 - overview of Linux kernel Serial Peripheral Interface (SPI) support. 355 - overview of Linux kernel Serial Peripheral Interface (SPI) support.
360 spinlocks.txt 356 spinlocks.txt
361 - info on using spinlocks to provide exclusive access in kernel. 357 - info on using spinlocks to provide exclusive access in kernel.
362 stable_api_nonsense.txt 358 stable_api_nonsense.txt
363 - info on why the kernel does not have a stable in-kernel api or abi. 359 - info on why the kernel does not have a stable in-kernel api or abi.
364 stable_kernel_rules.txt 360 stable_kernel_rules.txt
365 - rules and procedures for the -stable kernel releases. 361 - rules and procedures for the -stable kernel releases.
366 stallion.txt 362 stallion.txt
367 - info on using the Stallion multiport serial driver. 363 - info on using the Stallion multiport serial driver.
368 svga.txt 364 svga.txt
369 - short guide on selecting video modes at boot via VGA BIOS. 365 - short guide on selecting video modes at boot via VGA BIOS.
370 sysfs-rules.txt 366 sysfs-rules.txt
371 - How not to use sysfs. 367 - How not to use sysfs.
372 sx.txt 368 sx.txt
373 - info on the Specialix SX/SI multiport serial driver. 369 - info on the Specialix SX/SI multiport serial driver.
374 sysctl/ 370 sysctl/
375 - directory with info on the /proc/sys/* files. 371 - directory with info on the /proc/sys/* files.
376 sysrq.txt 372 sysrq.txt
377 - info on the magic SysRq key. 373 - info on the magic SysRq key.
378 telephony/ 374 telephony/
379 - directory with info on telephony (e.g. voice over IP) support. 375 - directory with info on telephony (e.g. voice over IP) support.
380 time_interpolators.txt 376 time_interpolators.txt
381 - info on time interpolators. 377 - info on time interpolators.
382 tipar.txt 378 tipar.txt
383 - information about Parallel link cable for Texas Instruments handhelds. 379 - information about Parallel link cable for Texas Instruments handhelds.
384 tty.txt 380 tty.txt
385 - guide to the locking policies of the tty layer. 381 - guide to the locking policies of the tty layer.
386 uml/ 382 uml/
387 - directory with information about User Mode Linux. 383 - directory with information about User Mode Linux.
388 unicode.txt 384 unicode.txt
389 - info on the Unicode character/font mapping used in Linux. 385 - info on the Unicode character/font mapping used in Linux.
390 unshare.txt 386 unshare.txt
391 - description of the Linux unshare system call. 387 - description of the Linux unshare system call.
392 usb/ 388 usb/
393 - directory with info regarding the Universal Serial Bus. 389 - directory with info regarding the Universal Serial Bus.
394 video-output.txt 390 video-output.txt
395 - sysfs class driver interface to enable/disable a video output device. 391 - sysfs class driver interface to enable/disable a video output device.
396 video4linux/ 392 video4linux/
397 - directory with info regarding video/TV/radio cards and linux. 393 - directory with info regarding video/TV/radio cards and linux.
398 vm/ 394 vm/
399 - directory with info on the Linux vm code. 395 - directory with info on the Linux vm code.
400 volatile-considered-harmful.txt 396 volatile-considered-harmful.txt
401 - Why the "volatile" type class should not be used 397 - Why the "volatile" type class should not be used
402 voyager.txt 398 voyager.txt
403 - guide to running Linux on the Voyager architecture. 399 - guide to running Linux on the Voyager architecture.
404 w1/ 400 w1/
405 - directory with documents regarding the 1-wire (w1) subsystem. 401 - directory with documents regarding the 1-wire (w1) subsystem.
406 watchdog/ 402 watchdog/
407 - how to auto-reboot Linux if it has "fallen and can't get up". ;-) 403 - how to auto-reboot Linux if it has "fallen and can't get up". ;-)
408 x86_64/ 404 x86_64/
409 - directory with info on Linux support for AMD x86-64 (Hammer) machines. 405 - directory with info on Linux support for AMD x86-64 (Hammer) machines.
410 zorro.txt 406 zorro.txt
411 - info on writing drivers for Zorro bus devices found on Amigas. 407 - info on writing drivers for Zorro bus devices found on Amigas.
412 408
Documentation/SubmittingPatches
1 1
2 How to Get Your Change Into the Linux Kernel 2 How to Get Your Change Into the Linux Kernel
3 or 3 or
4 Care And Operation Of Your Linus Torvalds 4 Care And Operation Of Your Linus Torvalds
5 5
6 6
7 7
8 For a person or company who wishes to submit a change to the Linux 8 For a person or company who wishes to submit a change to the Linux
9 kernel, the process can sometimes be daunting if you're not familiar 9 kernel, the process can sometimes be daunting if you're not familiar
10 with "the system." This text is a collection of suggestions which 10 with "the system." This text is a collection of suggestions which
11 can greatly increase the chances of your change being accepted. 11 can greatly increase the chances of your change being accepted.
12 12
13 Read Documentation/SubmitChecklist for a list of items to check 13 Read Documentation/SubmitChecklist for a list of items to check
14 before submitting code. If you are submitting a driver, also read 14 before submitting code. If you are submitting a driver, also read
15 Documentation/SubmittingDrivers. 15 Documentation/SubmittingDrivers.
16 16
17 17
18 18
19 -------------------------------------------- 19 --------------------------------------------
20 SECTION 1 - CREATING AND SENDING YOUR CHANGE 20 SECTION 1 - CREATING AND SENDING YOUR CHANGE
21 -------------------------------------------- 21 --------------------------------------------
22 22
23 23
24 24
25 1) "diff -up" 25 1) "diff -up"
26 ------------ 26 ------------
27 27
28 Use "diff -up" or "diff -uprN" to create patches. 28 Use "diff -up" or "diff -uprN" to create patches.
29 29
30 All changes to the Linux kernel occur in the form of patches, as 30 All changes to the Linux kernel occur in the form of patches, as
31 generated by diff(1). When creating your patch, make sure to create it 31 generated by diff(1). When creating your patch, make sure to create it
32 in "unified diff" format, as supplied by the '-u' argument to diff(1). 32 in "unified diff" format, as supplied by the '-u' argument to diff(1).
33 Also, please use the '-p' argument which shows which C function each 33 Also, please use the '-p' argument which shows which C function each
34 change is in - that makes the resultant diff a lot easier to read. 34 change is in - that makes the resultant diff a lot easier to read.
35 Patches should be based in the root kernel source directory, 35 Patches should be based in the root kernel source directory,
36 not in any lower subdirectory. 36 not in any lower subdirectory.
37 37
38 To create a patch for a single file, it is often sufficient to do: 38 To create a patch for a single file, it is often sufficient to do:
39 39
40 SRCTREE= linux-2.6 40 SRCTREE= linux-2.6
41 MYFILE= drivers/net/mydriver.c 41 MYFILE= drivers/net/mydriver.c
42 42
43 cd $SRCTREE 43 cd $SRCTREE
44 cp $MYFILE $MYFILE.orig 44 cp $MYFILE $MYFILE.orig
45 vi $MYFILE # make your change 45 vi $MYFILE # make your change
46 cd .. 46 cd ..
47 diff -up $SRCTREE/$MYFILE{.orig,} > /tmp/patch 47 diff -up $SRCTREE/$MYFILE{.orig,} > /tmp/patch
48 48
49 To create a patch for multiple files, you should unpack a "vanilla", 49 To create a patch for multiple files, you should unpack a "vanilla",
50 or unmodified kernel source tree, and generate a diff against your 50 or unmodified kernel source tree, and generate a diff against your
51 own source tree. For example: 51 own source tree. For example:
52 52
53 MYSRC= /devel/linux-2.6 53 MYSRC= /devel/linux-2.6
54 54
55 tar xvfz linux-2.6.12.tar.gz 55 tar xvfz linux-2.6.12.tar.gz
56 mv linux-2.6.12 linux-2.6.12-vanilla 56 mv linux-2.6.12 linux-2.6.12-vanilla
57 diff -uprN -X linux-2.6.12-vanilla/Documentation/dontdiff \ 57 diff -uprN -X linux-2.6.12-vanilla/Documentation/dontdiff \
58 linux-2.6.12-vanilla $MYSRC > /tmp/patch 58 linux-2.6.12-vanilla $MYSRC > /tmp/patch
59 59
60 "dontdiff" is a list of files which are generated by the kernel during 60 "dontdiff" is a list of files which are generated by the kernel during
61 the build process, and should be ignored in any diff(1)-generated 61 the build process, and should be ignored in any diff(1)-generated
62 patch. The "dontdiff" file is included in the kernel tree in 62 patch. The "dontdiff" file is included in the kernel tree in
63 2.6.12 and later. For earlier kernel versions, you can get it 63 2.6.12 and later. For earlier kernel versions, you can get it
64 from <http://www.xenotime.net/linux/doc/dontdiff>. 64 from <http://www.xenotime.net/linux/doc/dontdiff>.
65 65
66 Make sure your patch does not include any extra files which do not 66 Make sure your patch does not include any extra files which do not
67 belong in a patch submission. Make sure to review your patch -after- 67 belong in a patch submission. Make sure to review your patch -after-
68 generated it with diff(1), to ensure accuracy. 68 generated it with diff(1), to ensure accuracy.
69 69
70 If your changes produce a lot of deltas, you may want to look into 70 If your changes produce a lot of deltas, you may want to look into
71 splitting them into individual patches which modify things in 71 splitting them into individual patches which modify things in
72 logical stages. This will facilitate easier reviewing by other 72 logical stages. This will facilitate easier reviewing by other
73 kernel developers, very important if you want your patch accepted. 73 kernel developers, very important if you want your patch accepted.
74 There are a number of scripts which can aid in this: 74 There are a number of scripts which can aid in this:
75 75
76 Quilt: 76 Quilt:
77 http://savannah.nongnu.org/projects/quilt 77 http://savannah.nongnu.org/projects/quilt
78 78
79 Andrew Morton's patch scripts: 79 Andrew Morton's patch scripts:
80 http://www.zip.com.au/~akpm/linux/patches/ 80 http://www.zip.com.au/~akpm/linux/patches/
81 Instead of these scripts, quilt is the recommended patch management 81 Instead of these scripts, quilt is the recommended patch management
82 tool (see above). 82 tool (see above).
83 83
84 84
85 85
86 2) Describe your changes. 86 2) Describe your changes.
87 87
88 Describe the technical detail of the change(s) your patch includes. 88 Describe the technical detail of the change(s) your patch includes.
89 89
90 Be as specific as possible. The WORST descriptions possible include 90 Be as specific as possible. The WORST descriptions possible include
91 things like "update driver X", "bug fix for driver X", or "this patch 91 things like "update driver X", "bug fix for driver X", or "this patch
92 includes updates for subsystem X. Please apply." 92 includes updates for subsystem X. Please apply."
93 93
94 If your description starts to get long, that's a sign that you probably 94 If your description starts to get long, that's a sign that you probably
95 need to split up your patch. See #3, next. 95 need to split up your patch. See #3, next.
96 96
97 97
98 98
99 3) Separate your changes. 99 3) Separate your changes.
100 100
101 Separate _logical changes_ into a single patch file. 101 Separate _logical changes_ into a single patch file.
102 102
103 For example, if your changes include both bug fixes and performance 103 For example, if your changes include both bug fixes and performance
104 enhancements for a single driver, separate those changes into two 104 enhancements for a single driver, separate those changes into two
105 or more patches. If your changes include an API update, and a new 105 or more patches. If your changes include an API update, and a new
106 driver which uses that new API, separate those into two patches. 106 driver which uses that new API, separate those into two patches.
107 107
108 On the other hand, if you make a single change to numerous files, 108 On the other hand, if you make a single change to numerous files,
109 group those changes into a single patch. Thus a single logical change 109 group those changes into a single patch. Thus a single logical change
110 is contained within a single patch. 110 is contained within a single patch.
111 111
112 If one patch depends on another patch in order for a change to be 112 If one patch depends on another patch in order for a change to be
113 complete, that is OK. Simply note "this patch depends on patch X" 113 complete, that is OK. Simply note "this patch depends on patch X"
114 in your patch description. 114 in your patch description.
115 115
116 If you cannot condense your patch set into a smaller set of patches, 116 If you cannot condense your patch set into a smaller set of patches,
117 then only post say 15 or so at a time and wait for review and integration. 117 then only post say 15 or so at a time and wait for review and integration.
118 118
119 119
120 120
121 4) Style check your changes. 121 4) Style check your changes.
122 122
123 Check your patch for basic style violations, details of which can be 123 Check your patch for basic style violations, details of which can be
124 found in Documentation/CodingStyle. Failure to do so simply wastes 124 found in Documentation/CodingStyle. Failure to do so simply wastes
125 the reviewers time and will get your patch rejected, probably 125 the reviewers time and will get your patch rejected, probably
126 without even being read. 126 without even being read.
127 127
128 At a minimum you should check your patches with the patch style 128 At a minimum you should check your patches with the patch style
129 checker prior to submission (scripts/checkpatch.pl). You should 129 checker prior to submission (scripts/checkpatch.pl). You should
130 be able to justify all violations that remain in your patch. 130 be able to justify all violations that remain in your patch.
131 131
132 132
133 133
134 5) Select e-mail destination. 134 5) Select e-mail destination.
135 135
136 Look through the MAINTAINERS file and the source code, and determine 136 Look through the MAINTAINERS file and the source code, and determine
137 if your change applies to a specific subsystem of the kernel, with 137 if your change applies to a specific subsystem of the kernel, with
138 an assigned maintainer. If so, e-mail that person. 138 an assigned maintainer. If so, e-mail that person.
139 139
140 If no maintainer is listed, or the maintainer does not respond, send 140 If no maintainer is listed, or the maintainer does not respond, send
141 your patch to the primary Linux kernel developer's mailing list, 141 your patch to the primary Linux kernel developer's mailing list,
142 linux-kernel@vger.kernel.org. Most kernel developers monitor this 142 linux-kernel@vger.kernel.org. Most kernel developers monitor this
143 e-mail list, and can comment on your changes. 143 e-mail list, and can comment on your changes.
144 144
145 145
146 Do not send more than 15 patches at once to the vger mailing lists!!! 146 Do not send more than 15 patches at once to the vger mailing lists!!!
147 147
148 148
149 Linus Torvalds is the final arbiter of all changes accepted into the 149 Linus Torvalds is the final arbiter of all changes accepted into the
150 Linux kernel. His e-mail address is <torvalds@linux-foundation.org>. 150 Linux kernel. His e-mail address is <torvalds@linux-foundation.org>.
151 He gets a lot of e-mail, so typically you should do your best to -avoid- 151 He gets a lot of e-mail, so typically you should do your best to -avoid-
152 sending him e-mail. 152 sending him e-mail.
153 153
154 Patches which are bug fixes, are "obvious" changes, or similarly 154 Patches which are bug fixes, are "obvious" changes, or similarly
155 require little discussion should be sent or CC'd to Linus. Patches 155 require little discussion should be sent or CC'd to Linus. Patches
156 which require discussion or do not have a clear advantage should 156 which require discussion or do not have a clear advantage should
157 usually be sent first to linux-kernel. Only after the patch is 157 usually be sent first to linux-kernel. Only after the patch is
158 discussed should the patch then be submitted to Linus. 158 discussed should the patch then be submitted to Linus.
159 159
160 160
161 161
162 6) Select your CC (e-mail carbon copy) list. 162 6) Select your CC (e-mail carbon copy) list.
163 163
164 Unless you have a reason NOT to do so, CC linux-kernel@vger.kernel.org. 164 Unless you have a reason NOT to do so, CC linux-kernel@vger.kernel.org.
165 165
166 Other kernel developers besides Linus need to be aware of your change, 166 Other kernel developers besides Linus need to be aware of your change,
167 so that they may comment on it and offer code review and suggestions. 167 so that they may comment on it and offer code review and suggestions.
168 linux-kernel is the primary Linux kernel developer mailing list. 168 linux-kernel is the primary Linux kernel developer mailing list.
169 Other mailing lists are available for specific subsystems, such as 169 Other mailing lists are available for specific subsystems, such as
170 USB, framebuffer devices, the VFS, the SCSI subsystem, etc. See the 170 USB, framebuffer devices, the VFS, the SCSI subsystem, etc. See the
171 MAINTAINERS file for a mailing list that relates specifically to 171 MAINTAINERS file for a mailing list that relates specifically to
172 your change. 172 your change.
173 173
174 Majordomo lists of VGER.KERNEL.ORG at: 174 Majordomo lists of VGER.KERNEL.ORG at:
175 <http://vger.kernel.org/vger-lists.html> 175 <http://vger.kernel.org/vger-lists.html>
176 176
177 If changes affect userland-kernel interfaces, please send 177 If changes affect userland-kernel interfaces, please send
178 the MAN-PAGES maintainer (as listed in the MAINTAINERS file) 178 the MAN-PAGES maintainer (as listed in the MAINTAINERS file)
179 a man-pages patch, or at least a notification of the change, 179 a man-pages patch, or at least a notification of the change,
180 so that some information makes its way into the manual pages. 180 so that some information makes its way into the manual pages.
181 181
182 Even if the maintainer did not respond in step #4, make sure to ALWAYS 182 Even if the maintainer did not respond in step #4, make sure to ALWAYS
183 copy the maintainer when you change their code. 183 copy the maintainer when you change their code.
184 184
185 For small patches you may want to CC the Trivial Patch Monkey 185 For small patches you may want to CC the Trivial Patch Monkey
186 trivial@kernel.org managed by Adrian Bunk; which collects "trivial" 186 trivial@kernel.org managed by Adrian Bunk; which collects "trivial"
187 patches. Trivial patches must qualify for one of the following rules: 187 patches. Trivial patches must qualify for one of the following rules:
188 Spelling fixes in documentation 188 Spelling fixes in documentation
189 Spelling fixes which could break grep(1) 189 Spelling fixes which could break grep(1)
190 Warning fixes (cluttering with useless warnings is bad) 190 Warning fixes (cluttering with useless warnings is bad)
191 Compilation fixes (only if they are actually correct) 191 Compilation fixes (only if they are actually correct)
192 Runtime fixes (only if they actually fix things) 192 Runtime fixes (only if they actually fix things)
193 Removing use of deprecated functions/macros (eg. check_region) 193 Removing use of deprecated functions/macros (eg. check_region)
194 Contact detail and documentation fixes 194 Contact detail and documentation fixes
195 Non-portable code replaced by portable code (even in arch-specific, 195 Non-portable code replaced by portable code (even in arch-specific,
196 since people copy, as long as it's trivial) 196 since people copy, as long as it's trivial)
197 Any fix by the author/maintainer of the file (ie. patch monkey 197 Any fix by the author/maintainer of the file (ie. patch monkey
198 in re-transmission mode) 198 in re-transmission mode)
199 URL: <http://www.kernel.org/pub/linux/kernel/people/bunk/trivial/> 199 URL: <http://www.kernel.org/pub/linux/kernel/people/bunk/trivial/>
200 200
201 201
202 202
203 7) No MIME, no links, no compression, no attachments. Just plain text. 203 7) No MIME, no links, no compression, no attachments. Just plain text.
204 204
205 Linus and other kernel developers need to be able to read and comment 205 Linus and other kernel developers need to be able to read and comment
206 on the changes you are submitting. It is important for a kernel 206 on the changes you are submitting. It is important for a kernel
207 developer to be able to "quote" your changes, using standard e-mail 207 developer to be able to "quote" your changes, using standard e-mail
208 tools, so that they may comment on specific portions of your code. 208 tools, so that they may comment on specific portions of your code.
209 209
210 For this reason, all patches should be submitting e-mail "inline". 210 For this reason, all patches should be submitting e-mail "inline".
211 WARNING: Be wary of your editor's word-wrap corrupting your patch, 211 WARNING: Be wary of your editor's word-wrap corrupting your patch,
212 if you choose to cut-n-paste your patch. 212 if you choose to cut-n-paste your patch.
213 213
214 Do not attach the patch as a MIME attachment, compressed or not. 214 Do not attach the patch as a MIME attachment, compressed or not.
215 Many popular e-mail applications will not always transmit a MIME 215 Many popular e-mail applications will not always transmit a MIME
216 attachment as plain text, making it impossible to comment on your 216 attachment as plain text, making it impossible to comment on your
217 code. A MIME attachment also takes Linus a bit more time to process, 217 code. A MIME attachment also takes Linus a bit more time to process,
218 decreasing the likelihood of your MIME-attached change being accepted. 218 decreasing the likelihood of your MIME-attached change being accepted.
219 219
220 Exception: If your mailer is mangling patches then someone may ask 220 Exception: If your mailer is mangling patches then someone may ask
221 you to re-send them using MIME. 221 you to re-send them using MIME.
222 222
223 See Documentation/email-clients.txt for hints about configuring 223 See Documentation/email-clients.txt for hints about configuring
224 your e-mail client so that it sends your patches untouched. 224 your e-mail client so that it sends your patches untouched.
225 225
226 8) E-mail size. 226 8) E-mail size.
227 227
228 When sending patches to Linus, always follow step #7. 228 When sending patches to Linus, always follow step #7.
229 229
230 Large changes are not appropriate for mailing lists, and some 230 Large changes are not appropriate for mailing lists, and some
231 maintainers. If your patch, uncompressed, exceeds 40 kB in size, 231 maintainers. If your patch, uncompressed, exceeds 40 kB in size,
232 it is preferred that you store your patch on an Internet-accessible 232 it is preferred that you store your patch on an Internet-accessible
233 server, and provide instead a URL (link) pointing to your patch. 233 server, and provide instead a URL (link) pointing to your patch.
234 234
235 235
236 236
237 9) Name your kernel version. 237 9) Name your kernel version.
238 238
239 It is important to note, either in the subject line or in the patch 239 It is important to note, either in the subject line or in the patch
240 description, the kernel version to which this patch applies. 240 description, the kernel version to which this patch applies.
241 241
242 If the patch does not apply cleanly to the latest kernel version, 242 If the patch does not apply cleanly to the latest kernel version,
243 Linus will not apply it. 243 Linus will not apply it.
244 244
245 245
246 246
247 10) Don't get discouraged. Re-submit. 247 10) Don't get discouraged. Re-submit.
248 248
249 After you have submitted your change, be patient and wait. If Linus 249 After you have submitted your change, be patient and wait. If Linus
250 likes your change and applies it, it will appear in the next version 250 likes your change and applies it, it will appear in the next version
251 of the kernel that he releases. 251 of the kernel that he releases.
252 252
253 However, if your change doesn't appear in the next version of the 253 However, if your change doesn't appear in the next version of the
254 kernel, there could be any number of reasons. It's YOUR job to 254 kernel, there could be any number of reasons. It's YOUR job to
255 narrow down those reasons, correct what was wrong, and submit your 255 narrow down those reasons, correct what was wrong, and submit your
256 updated change. 256 updated change.
257 257
258 It is quite common for Linus to "drop" your patch without comment. 258 It is quite common for Linus to "drop" your patch without comment.
259 That's the nature of the system. If he drops your patch, it could be 259 That's the nature of the system. If he drops your patch, it could be
260 due to 260 due to
261 * Your patch did not apply cleanly to the latest kernel version. 261 * Your patch did not apply cleanly to the latest kernel version.
262 * Your patch was not sufficiently discussed on linux-kernel. 262 * Your patch was not sufficiently discussed on linux-kernel.
263 * A style issue (see section 2). 263 * A style issue (see section 2).
264 * An e-mail formatting issue (re-read this section). 264 * An e-mail formatting issue (re-read this section).
265 * A technical problem with your change. 265 * A technical problem with your change.
266 * He gets tons of e-mail, and yours got lost in the shuffle. 266 * He gets tons of e-mail, and yours got lost in the shuffle.
267 * You are being annoying. 267 * You are being annoying.
268 268
269 When in doubt, solicit comments on linux-kernel mailing list. 269 When in doubt, solicit comments on linux-kernel mailing list.
270 270
271 271
272 272
273 11) Include PATCH in the subject 273 11) Include PATCH in the subject
274 274
275 Due to high e-mail traffic to Linus, and to linux-kernel, it is common 275 Due to high e-mail traffic to Linus, and to linux-kernel, it is common
276 convention to prefix your subject line with [PATCH]. This lets Linus 276 convention to prefix your subject line with [PATCH]. This lets Linus
277 and other kernel developers more easily distinguish patches from other 277 and other kernel developers more easily distinguish patches from other
278 e-mail discussions. 278 e-mail discussions.
279 279
280 280
281 281
282 12) Sign your work 282 12) Sign your work
283 283
284 To improve tracking of who did what, especially with patches that can 284 To improve tracking of who did what, especially with patches that can
285 percolate to their final resting place in the kernel through several 285 percolate to their final resting place in the kernel through several
286 layers of maintainers, we've introduced a "sign-off" procedure on 286 layers of maintainers, we've introduced a "sign-off" procedure on
287 patches that are being emailed around. 287 patches that are being emailed around.
288 288
289 The sign-off is a simple line at the end of the explanation for the 289 The sign-off is a simple line at the end of the explanation for the
290 patch, which certifies that you wrote it or otherwise have the right to 290 patch, which certifies that you wrote it or otherwise have the right to
291 pass it on as a open-source patch. The rules are pretty simple: if you 291 pass it on as a open-source patch. The rules are pretty simple: if you
292 can certify the below: 292 can certify the below:
293 293
294 Developer's Certificate of Origin 1.1 294 Developer's Certificate of Origin 1.1
295 295
296 By making a contribution to this project, I certify that: 296 By making a contribution to this project, I certify that:
297 297
298 (a) The contribution was created in whole or in part by me and I 298 (a) The contribution was created in whole or in part by me and I
299 have the right to submit it under the open source license 299 have the right to submit it under the open source license
300 indicated in the file; or 300 indicated in the file; or
301 301
302 (b) The contribution is based upon previous work that, to the best 302 (b) The contribution is based upon previous work that, to the best
303 of my knowledge, is covered under an appropriate open source 303 of my knowledge, is covered under an appropriate open source
304 license and I have the right under that license to submit that 304 license and I have the right under that license to submit that
305 work with modifications, whether created in whole or in part 305 work with modifications, whether created in whole or in part
306 by me, under the same open source license (unless I am 306 by me, under the same open source license (unless I am
307 permitted to submit under a different license), as indicated 307 permitted to submit under a different license), as indicated
308 in the file; or 308 in the file; or
309 309
310 (c) The contribution was provided directly to me by some other 310 (c) The contribution was provided directly to me by some other
311 person who certified (a), (b) or (c) and I have not modified 311 person who certified (a), (b) or (c) and I have not modified
312 it. 312 it.
313 313
314 (d) I understand and agree that this project and the contribution 314 (d) I understand and agree that this project and the contribution
315 are public and that a record of the contribution (including all 315 are public and that a record of the contribution (including all
316 personal information I submit with it, including my sign-off) is 316 personal information I submit with it, including my sign-off) is
317 maintained indefinitely and may be redistributed consistent with 317 maintained indefinitely and may be redistributed consistent with
318 this project or the open source license(s) involved. 318 this project or the open source license(s) involved.
319 319
320 then you just add a line saying 320 then you just add a line saying
321 321
322 Signed-off-by: Random J Developer <random@developer.example.org> 322 Signed-off-by: Random J Developer <random@developer.example.org>
323 323
324 using your real name (sorry, no pseudonyms or anonymous contributions.) 324 using your real name (sorry, no pseudonyms or anonymous contributions.)
325 325
326 Some people also put extra tags at the end. They'll just be ignored for 326 Some people also put extra tags at the end. They'll just be ignored for
327 now, but you can do this to mark internal company procedures or just 327 now, but you can do this to mark internal company procedures or just
328 point out some special detail about the sign-off. 328 point out some special detail about the sign-off.
329 329
330 330
331 13) When to use Acked-by: 331 13) When to use Acked-by: and Cc:
332 332
333 The Signed-off-by: tag indicates that the signer was involved in the 333 The Signed-off-by: tag indicates that the signer was involved in the
334 development of the patch, or that he/she was in the patch's delivery path. 334 development of the patch, or that he/she was in the patch's delivery path.
335 335
336 If a person was not directly involved in the preparation or handling of a 336 If a person was not directly involved in the preparation or handling of a
337 patch but wishes to signify and record their approval of it then they can 337 patch but wishes to signify and record their approval of it then they can
338 arrange to have an Acked-by: line added to the patch's changelog. 338 arrange to have an Acked-by: line added to the patch's changelog.
339 339
340 Acked-by: is often used by the maintainer of the affected code when that 340 Acked-by: is often used by the maintainer of the affected code when that
341 maintainer neither contributed to nor forwarded the patch. 341 maintainer neither contributed to nor forwarded the patch.
342 342
343 Acked-by: is not as formal as Signed-off-by:. It is a record that the acker 343 Acked-by: is not as formal as Signed-off-by:. It is a record that the acker
344 has at least reviewed the patch and has indicated acceptance. Hence patch 344 has at least reviewed the patch and has indicated acceptance. Hence patch
345 mergers will sometimes manually convert an acker's "yep, looks good to me" 345 mergers will sometimes manually convert an acker's "yep, looks good to me"
346 into an Acked-by:. 346 into an Acked-by:.
347 347
348 Acked-by: does not necessarily indicate acknowledgement of the entire patch. 348 Acked-by: does not necessarily indicate acknowledgement of the entire patch.
349 For example, if a patch affects multiple subsystems and has an Acked-by: from 349 For example, if a patch affects multiple subsystems and has an Acked-by: from
350 one subsystem maintainer then this usually indicates acknowledgement of just 350 one subsystem maintainer then this usually indicates acknowledgement of just
351 the part which affects that maintainer's code. Judgement should be used here. 351 the part which affects that maintainer's code. Judgement should be used here.
352 When in doubt people should refer to the original discussion in the mailing 352 When in doubt people should refer to the original discussion in the mailing
353 list archives. 353 list archives.
354 354
355 If a person has had the opportunity to comment on a patch, but has not
356 provided such comments, you may optionally add a "Cc:" tag to the patch.
357 This is the only tag which might be added without an explicit action by the
358 person it names. This tag documents that potentially interested parties
359 have been included in the discussion
355 360
356 14) The canonical patch format 361
362 14) Using Test-by: and Reviewed-by:
363
364 A Tested-by: tag indicates that the patch has been successfully tested (in
365 some environment) by the person named. This tag informs maintainers that
366 some testing has been performed, provides a means to locate testers for
367 future patches, and ensures credit for the testers.
368
369 Reviewed-by:, instead, indicates that the patch has been reviewed and found
370 acceptable according to the Reviewer's Statement:
371
372 Reviewer's statement of oversight
373
374 By offering my Reviewed-by: tag, I state that:
375
376 (a) I have carried out a technical review of this patch to
377 evaluate its appropriateness and readiness for inclusion into
378 the mainline kernel.
379
380 (b) Any problems, concerns, or questions relating to the patch
381 have been communicated back to the submitter. I am satisfied
382 with the submitter's response to my comments.
383
384 (c) While there may be things that could be improved with this
385 submission, I believe that it is, at this time, (1) a
386 worthwhile modification to the kernel, and (2) free of known
387 issues which would argue against its inclusion.
388
389 (d) While I have reviewed the patch and believe it to be sound, I
390 do not (unless explicitly stated elsewhere) make any
391 warranties or guarantees that it will achieve its stated
392 purpose or function properly in any given situation.
393
394 A Reviewed-by tag is a statement of opinion that the patch is an
395 appropriate modification of the kernel without any remaining serious
396 technical issues. Any interested reviewer (who has done the work) can
397 offer a Reviewed-by tag for a patch. This tag serves to give credit to
398 reviewers and to inform maintainers of the degree of review which has been
399 done on the patch. Reviewed-by: tags, when supplied by reviewers known to
400 understand the subject area and to perform thorough reviews, will normally
401 increase the liklihood of your patch getting into the kernel.
402
403
404 15) The canonical patch format
357 405
358 The canonical patch subject line is: 406 The canonical patch subject line is:
359 407
360 Subject: [PATCH 001/123] subsystem: summary phrase 408 Subject: [PATCH 001/123] subsystem: summary phrase
361 409
362 The canonical patch message body contains the following: 410 The canonical patch message body contains the following:
363 411
364 - A "from" line specifying the patch author. 412 - A "from" line specifying the patch author.
365 413
366 - An empty line. 414 - An empty line.
367 415
368 - The body of the explanation, which will be copied to the 416 - The body of the explanation, which will be copied to the
369 permanent changelog to describe this patch. 417 permanent changelog to describe this patch.
370 418
371 - The "Signed-off-by:" lines, described above, which will 419 - The "Signed-off-by:" lines, described above, which will
372 also go in the changelog. 420 also go in the changelog.
373 421
374 - A marker line containing simply "---". 422 - A marker line containing simply "---".
375 423
376 - Any additional comments not suitable for the changelog. 424 - Any additional comments not suitable for the changelog.
377 425
378 - The actual patch (diff output). 426 - The actual patch (diff output).
379 427
380 The Subject line format makes it very easy to sort the emails 428 The Subject line format makes it very easy to sort the emails
381 alphabetically by subject line - pretty much any email reader will 429 alphabetically by subject line - pretty much any email reader will
382 support that - since because the sequence number is zero-padded, 430 support that - since because the sequence number is zero-padded,
383 the numerical and alphabetic sort is the same. 431 the numerical and alphabetic sort is the same.
384 432
385 The "subsystem" in the email's Subject should identify which 433 The "subsystem" in the email's Subject should identify which
386 area or subsystem of the kernel is being patched. 434 area or subsystem of the kernel is being patched.
387 435
388 The "summary phrase" in the email's Subject should concisely 436 The "summary phrase" in the email's Subject should concisely
389 describe the patch which that email contains. The "summary 437 describe the patch which that email contains. The "summary
390 phrase" should not be a filename. Do not use the same "summary 438 phrase" should not be a filename. Do not use the same "summary
391 phrase" for every patch in a whole patch series (where a "patch 439 phrase" for every patch in a whole patch series (where a "patch
392 series" is an ordered sequence of multiple, related patches). 440 series" is an ordered sequence of multiple, related patches).
393 441
394 Bear in mind that the "summary phrase" of your email becomes 442 Bear in mind that the "summary phrase" of your email becomes
395 a globally-unique identifier for that patch. It propagates 443 a globally-unique identifier for that patch. It propagates
396 all the way into the git changelog. The "summary phrase" may 444 all the way into the git changelog. The "summary phrase" may
397 later be used in developer discussions which refer to the patch. 445 later be used in developer discussions which refer to the patch.
398 People will want to google for the "summary phrase" to read 446 People will want to google for the "summary phrase" to read
399 discussion regarding that patch. 447 discussion regarding that patch.
400 448
401 A couple of example Subjects: 449 A couple of example Subjects:
402 450
403 Subject: [patch 2/5] ext2: improve scalability of bitmap searching 451 Subject: [patch 2/5] ext2: improve scalability of bitmap searching
404 Subject: [PATCHv2 001/207] x86: fix eflags tracking 452 Subject: [PATCHv2 001/207] x86: fix eflags tracking
405 453
406 The "from" line must be the very first line in the message body, 454 The "from" line must be the very first line in the message body,
407 and has the form: 455 and has the form:
408 456
409 From: Original Author <author@example.com> 457 From: Original Author <author@example.com>
410 458
411 The "from" line specifies who will be credited as the author of the 459 The "from" line specifies who will be credited as the author of the
412 patch in the permanent changelog. If the "from" line is missing, 460 patch in the permanent changelog. If the "from" line is missing,
413 then the "From:" line from the email header will be used to determine 461 then the "From:" line from the email header will be used to determine
414 the patch author in the changelog. 462 the patch author in the changelog.
415 463
416 The explanation body will be committed to the permanent source 464 The explanation body will be committed to the permanent source
417 changelog, so should make sense to a competent reader who has long 465 changelog, so should make sense to a competent reader who has long
418 since forgotten the immediate details of the discussion that might 466 since forgotten the immediate details of the discussion that might
419 have led to this patch. 467 have led to this patch.
420 468
421 The "---" marker line serves the essential purpose of marking for patch 469 The "---" marker line serves the essential purpose of marking for patch
422 handling tools where the changelog message ends. 470 handling tools where the changelog message ends.
423 471
424 One good use for the additional comments after the "---" marker is for 472 One good use for the additional comments after the "---" marker is for
425 a diffstat, to show what files have changed, and the number of inserted 473 a diffstat, to show what files have changed, and the number of inserted
426 and deleted lines per file. A diffstat is especially useful on bigger 474 and deleted lines per file. A diffstat is especially useful on bigger
427 patches. Other comments relevant only to the moment or the maintainer, 475 patches. Other comments relevant only to the moment or the maintainer,
428 not suitable for the permanent changelog, should also go here. 476 not suitable for the permanent changelog, should also go here.
429 Use diffstat options "-p 1 -w 70" so that filenames are listed from the 477 Use diffstat options "-p 1 -w 70" so that filenames are listed from the
430 top of the kernel source tree and don't use too much horizontal space 478 top of the kernel source tree and don't use too much horizontal space
431 (easily fit in 80 columns, maybe with some indentation). 479 (easily fit in 80 columns, maybe with some indentation).
432 480
433 See more details on the proper patch format in the following 481 See more details on the proper patch format in the following
434 references. 482 references.
435 483
436 484
437 485
438 486
439 ----------------------------------- 487 -----------------------------------
440 SECTION 2 - HINTS, TIPS, AND TRICKS 488 SECTION 2 - HINTS, TIPS, AND TRICKS
441 ----------------------------------- 489 -----------------------------------
442 490
443 This section lists many of the common "rules" associated with code 491 This section lists many of the common "rules" associated with code
444 submitted to the kernel. There are always exceptions... but you must 492 submitted to the kernel. There are always exceptions... but you must
445 have a really good reason for doing so. You could probably call this 493 have a really good reason for doing so. You could probably call this
446 section Linus Computer Science 101. 494 section Linus Computer Science 101.
447 495
448 496
449 497
450 1) Read Documentation/CodingStyle 498 1) Read Documentation/CodingStyle
451 499
452 Nuff said. If your code deviates too much from this, it is likely 500 Nuff said. If your code deviates too much from this, it is likely
453 to be rejected without further review, and without comment. 501 to be rejected without further review, and without comment.
454 502
455 One significant exception is when moving code from one file to 503 One significant exception is when moving code from one file to
456 another -- in this case you should not modify the moved code at all in 504 another -- in this case you should not modify the moved code at all in
457 the same patch which moves it. This clearly delineates the act of 505 the same patch which moves it. This clearly delineates the act of
458 moving the code and your changes. This greatly aids review of the 506 moving the code and your changes. This greatly aids review of the
459 actual differences and allows tools to better track the history of 507 actual differences and allows tools to better track the history of
460 the code itself. 508 the code itself.
461 509
462 Check your patches with the patch style checker prior to submission 510 Check your patches with the patch style checker prior to submission
463 (scripts/checkpatch.pl). The style checker should be viewed as 511 (scripts/checkpatch.pl). The style checker should be viewed as
464 a guide not as the final word. If your code looks better with 512 a guide not as the final word. If your code looks better with
465 a violation then its probably best left alone. 513 a violation then its probably best left alone.
466 514
467 The checker reports at three levels: 515 The checker reports at three levels:
468 - ERROR: things that are very likely to be wrong 516 - ERROR: things that are very likely to be wrong
469 - WARNING: things requiring careful review 517 - WARNING: things requiring careful review
470 - CHECK: things requiring thought 518 - CHECK: things requiring thought
471 519
472 You should be able to justify all violations that remain in your 520 You should be able to justify all violations that remain in your
473 patch. 521 patch.
474 522
475 523
476 524
477 2) #ifdefs are ugly 525 2) #ifdefs are ugly
478 526
479 Code cluttered with ifdefs is difficult to read and maintain. Don't do 527 Code cluttered with ifdefs is difficult to read and maintain. Don't do
480 it. Instead, put your ifdefs in a header, and conditionally define 528 it. Instead, put your ifdefs in a header, and conditionally define
481 'static inline' functions, or macros, which are used in the code. 529 'static inline' functions, or macros, which are used in the code.
482 Let the compiler optimize away the "no-op" case. 530 Let the compiler optimize away the "no-op" case.
483 531
484 Simple example, of poor code: 532 Simple example, of poor code:
485 533
486 dev = alloc_etherdev (sizeof(struct funky_private)); 534 dev = alloc_etherdev (sizeof(struct funky_private));
487 if (!dev) 535 if (!dev)
488 return -ENODEV; 536 return -ENODEV;
489 #ifdef CONFIG_NET_FUNKINESS 537 #ifdef CONFIG_NET_FUNKINESS
490 init_funky_net(dev); 538 init_funky_net(dev);
491 #endif 539 #endif
492 540
493 Cleaned-up example: 541 Cleaned-up example:
494 542
495 (in header) 543 (in header)
496 #ifndef CONFIG_NET_FUNKINESS 544 #ifndef CONFIG_NET_FUNKINESS
497 static inline void init_funky_net (struct net_device *d) {} 545 static inline void init_funky_net (struct net_device *d) {}
498 #endif 546 #endif
499 547
500 (in the code itself) 548 (in the code itself)
501 dev = alloc_etherdev (sizeof(struct funky_private)); 549 dev = alloc_etherdev (sizeof(struct funky_private));
502 if (!dev) 550 if (!dev)
503 return -ENODEV; 551 return -ENODEV;
504 init_funky_net(dev); 552 init_funky_net(dev);
505 553
506 554
507 555
508 3) 'static inline' is better than a macro 556 3) 'static inline' is better than a macro
509 557
510 Static inline functions are greatly preferred over macros. 558 Static inline functions are greatly preferred over macros.
511 They provide type safety, have no length limitations, no formatting 559 They provide type safety, have no length limitations, no formatting
512 limitations, and under gcc they are as cheap as macros. 560 limitations, and under gcc they are as cheap as macros.
513 561
514 Macros should only be used for cases where a static inline is clearly 562 Macros should only be used for cases where a static inline is clearly
515 suboptimal [there are a few, isolated cases of this in fast paths], 563 suboptimal [there are a few, isolated cases of this in fast paths],
516 or where it is impossible to use a static inline function [such as 564 or where it is impossible to use a static inline function [such as
517 string-izing]. 565 string-izing].
518 566
519 'static inline' is preferred over 'static __inline__', 'extern inline', 567 'static inline' is preferred over 'static __inline__', 'extern inline',
520 and 'extern __inline__'. 568 and 'extern __inline__'.
521 569
522 570
523 571
524 4) Don't over-design. 572 4) Don't over-design.
525 573
526 Don't try to anticipate nebulous future cases which may or may not 574 Don't try to anticipate nebulous future cases which may or may not
527 be useful: "Make it as simple as you can, and no simpler." 575 be useful: "Make it as simple as you can, and no simpler."
528 576
529 577
530 578
531 ---------------------- 579 ----------------------
532 SECTION 3 - REFERENCES 580 SECTION 3 - REFERENCES
533 ---------------------- 581 ----------------------
534 582
535 Andrew Morton, "The perfect patch" (tpp). 583 Andrew Morton, "The perfect patch" (tpp).
536 <http://www.zip.com.au/~akpm/linux/patches/stuff/tpp.txt> 584 <http://www.zip.com.au/~akpm/linux/patches/stuff/tpp.txt>
537 585
538 Jeff Garzik, "Linux kernel patch submission format". 586 Jeff Garzik, "Linux kernel patch submission format".
539 <http://linux.yyz.us/patch-format.html> 587 <http://linux.yyz.us/patch-format.html>
540 588
541 Greg Kroah-Hartman, "How to piss off a kernel subsystem maintainer". 589 Greg Kroah-Hartman, "How to piss off a kernel subsystem maintainer".
542 <http://www.kroah.com/log/2005/03/31/> 590 <http://www.kroah.com/log/2005/03/31/>
543 <http://www.kroah.com/log/2005/07/08/> 591 <http://www.kroah.com/log/2005/07/08/>
544 <http://www.kroah.com/log/2005/10/19/> 592 <http://www.kroah.com/log/2005/10/19/>
545 <http://www.kroah.com/log/2006/01/11/> 593 <http://www.kroah.com/log/2006/01/11/>
546 594
547 NO!!!! No more huge patch bombs to linux-kernel@vger.kernel.org people! 595 NO!!!! No more huge patch bombs to linux-kernel@vger.kernel.org people!
548 <http://marc.theaimsgroup.com/?l=linux-kernel&m=112112749912944&w=2> 596 <http://marc.theaimsgroup.com/?l=linux-kernel&m=112112749912944&w=2>
549 597
550 Kernel Documentation/CodingStyle: 598 Kernel Documentation/CodingStyle:
551 <http://users.sosdg.org/~qiyong/lxr/source/Documentation/CodingStyle> 599 <http://users.sosdg.org/~qiyong/lxr/source/Documentation/CodingStyle>
552 600
553 Linus Torvalds's mail on the canonical patch format: 601 Linus Torvalds's mail on the canonical patch format:
554 <http://lkml.org/lkml/2005/4/7/183> 602 <http://lkml.org/lkml/2005/4/7/183>
555 -- 603 --
556 604
Documentation/filesystems/00-INDEX
1 00-INDEX 1 00-INDEX
2 - this file (info on some of the filesystems supported by linux). 2 - this file (info on some of the filesystems supported by linux).
3 Exporting 3 Exporting
4 - explanation of how to make filesystems exportable. 4 - explanation of how to make filesystems exportable.
5 Locking 5 Locking
6 - info on locking rules as they pertain to Linux VFS. 6 - info on locking rules as they pertain to Linux VFS.
7 9p.txt 7 9p.txt
8 - 9p (v9fs) is an implementation of the Plan 9 remote fs protocol. 8 - 9p (v9fs) is an implementation of the Plan 9 remote fs protocol.
9 adfs.txt 9 adfs.txt
10 - info and mount options for the Acorn Advanced Disc Filing System. 10 - info and mount options for the Acorn Advanced Disc Filing System.
11 afs.txt 11 afs.txt
12 - info and examples for the distributed AFS (Andrew File System) fs. 12 - info and examples for the distributed AFS (Andrew File System) fs.
13 affs.txt 13 affs.txt
14 - info and mount options for the Amiga Fast File System. 14 - info and mount options for the Amiga Fast File System.
15 automount-support.txt 15 automount-support.txt
16 - information about filesystem automount support. 16 - information about filesystem automount support.
17 befs.txt 17 befs.txt
18 - information about the BeOS filesystem for Linux. 18 - information about the BeOS filesystem for Linux.
19 bfs.txt 19 bfs.txt
20 - info for the SCO UnixWare Boot Filesystem (BFS). 20 - info for the SCO UnixWare Boot Filesystem (BFS).
21 cifs.txt 21 cifs.txt
22 - description of the CIFS filesystem. 22 - description of the CIFS filesystem.
23 coda.txt 23 coda.txt
24 - description of the CODA filesystem. 24 - description of the CODA filesystem.
25 configfs/ 25 configfs/
26 - directory containing configfs documentation and example code. 26 - directory containing configfs documentation and example code.
27 cramfs.txt 27 cramfs.txt
28 - info on the cram filesystem for small storage (ROMs etc). 28 - info on the cram filesystem for small storage (ROMs etc).
29 dentry-locking.txt 29 dentry-locking.txt
30 - info on the RCU-based dcache locking model. 30 - info on the RCU-based dcache locking model.
31 directory-locking 31 directory-locking
32 - info about the locking scheme used for directory operations. 32 - info about the locking scheme used for directory operations.
33 dlmfs.txt 33 dlmfs.txt
34 - info on the userspace interface to the OCFS2 DLM. 34 - info on the userspace interface to the OCFS2 DLM.
35 dnotify.txt 35 dnotify.txt
36 - info about directory notification in Linux. 36 - info about directory notification in Linux.
37 ecryptfs.txt 37 ecryptfs.txt
38 - docs on eCryptfs: stacked cryptographic filesystem for Linux. 38 - docs on eCryptfs: stacked cryptographic filesystem for Linux.
39 ext2.txt 39 ext2.txt
40 - info, mount options and specifications for the Ext2 filesystem. 40 - info, mount options and specifications for the Ext2 filesystem.
41 ext3.txt 41 ext3.txt
42 - info, mount options and specifications for the Ext3 filesystem. 42 - info, mount options and specifications for the Ext3 filesystem.
43 ext4.txt 43 ext4.txt
44 - info, mount options and specifications for the Ext4 filesystem. 44 - info, mount options and specifications for the Ext4 filesystem.
45 files.txt 45 files.txt
46 - info on file management in the Linux kernel. 46 - info on file management in the Linux kernel.
47 fuse.txt 47 fuse.txt
48 - info on the Filesystem in User SpacE including mount options. 48 - info on the Filesystem in User SpacE including mount options.
49 gfs2.txt 49 gfs2.txt
50 - info on the Global File System 2. 50 - info on the Global File System 2.
51 hfs.txt 51 hfs.txt
52 - info on the Macintosh HFS Filesystem for Linux. 52 - info on the Macintosh HFS Filesystem for Linux.
53 hfsplus.txt 53 hfsplus.txt
54 - info on the Macintosh HFSPlus Filesystem for Linux. 54 - info on the Macintosh HFSPlus Filesystem for Linux.
55 hpfs.txt 55 hpfs.txt
56 - info and mount options for the OS/2 HPFS. 56 - info and mount options for the OS/2 HPFS.
57 inotify.txt 57 inotify.txt
58 - info on the powerful yet simple file change notification system. 58 - info on the powerful yet simple file change notification system.
59 isofs.txt 59 isofs.txt
60 - info and mount options for the ISO 9660 (CDROM) filesystem. 60 - info and mount options for the ISO 9660 (CDROM) filesystem.
61 jfs.txt 61 jfs.txt
62 - info and mount options for the JFS filesystem. 62 - info and mount options for the JFS filesystem.
63 locks.txt 63 locks.txt
64 - info on file locking implementations, flock() vs. fcntl(), etc. 64 - info on file locking implementations, flock() vs. fcntl(), etc.
65 mandatory-locking.txt 65 mandatory-locking.txt
66 - info on the Linux implementation of Sys V mandatory file locking. 66 - info on the Linux implementation of Sys V mandatory file locking.
67 ncpfs.txt 67 ncpfs.txt
68 - info on Novell Netware(tm) filesystem using NCP protocol. 68 - info on Novell Netware(tm) filesystem using NCP protocol.
69 nfsroot.txt
70 - short guide on setting up a diskless box with NFS root filesystem.
69 ntfs.txt 71 ntfs.txt
70 - info and mount options for the NTFS filesystem (Windows NT). 72 - info and mount options for the NTFS filesystem (Windows NT).
71 ocfs2.txt 73 ocfs2.txt
72 - info and mount options for the OCFS2 clustered filesystem. 74 - info and mount options for the OCFS2 clustered filesystem.
73 porting 75 porting
74 - various information on filesystem porting. 76 - various information on filesystem porting.
75 proc.txt 77 proc.txt
76 - info on Linux's /proc filesystem. 78 - info on Linux's /proc filesystem.
77 ramfs-rootfs-initramfs.txt 79 ramfs-rootfs-initramfs.txt
78 - info on the 'in memory' filesystems ramfs, rootfs and initramfs. 80 - info on the 'in memory' filesystems ramfs, rootfs and initramfs.
79 reiser4.txt 81 reiser4.txt
80 - info on the Reiser4 filesystem based on dancing tree algorithms. 82 - info on the Reiser4 filesystem based on dancing tree algorithms.
81 relay.txt 83 relay.txt
82 - info on relay, for efficient streaming from kernel to user space. 84 - info on relay, for efficient streaming from kernel to user space.
83 romfs.txt 85 romfs.txt
84 - description of the ROMFS filesystem. 86 - description of the ROMFS filesystem.
87 rpc-cache.txt
88 - introduction to the caching mechanisms in the sunrpc layer.
89 seq_file.txt
90 - how to use the seq_file API
85 sharedsubtree.txt 91 sharedsubtree.txt
86 - a description of shared subtrees for namespaces. 92 - a description of shared subtrees for namespaces.
87 smbfs.txt 93 smbfs.txt
88 - info on using filesystems with the SMB protocol (Win 3.11 and NT). 94 - info on using filesystems with the SMB protocol (Win 3.11 and NT).
89 spufs.txt 95 spufs.txt
90 - info and mount options for the SPU filesystem used on Cell. 96 - info and mount options for the SPU filesystem used on Cell.
91 sysfs-pci.txt 97 sysfs-pci.txt
92 - info on accessing PCI device resources through sysfs. 98 - info on accessing PCI device resources through sysfs.
93 sysfs.txt 99 sysfs.txt
94 - info on sysfs, a ram-based filesystem for exporting kernel objects. 100 - info on sysfs, a ram-based filesystem for exporting kernel objects.
95 sysv-fs.txt 101 sysv-fs.txt
96 - info on the SystemV/V7/Xenix/Coherent filesystem. 102 - info on the SystemV/V7/Xenix/Coherent filesystem.
97 tmpfs.txt 103 tmpfs.txt
98 - info on tmpfs, a filesystem that holds all files in virtual memory. 104 - info on tmpfs, a filesystem that holds all files in virtual memory.
99 udf.txt 105 udf.txt
100 - info and mount options for the UDF filesystem. 106 - info and mount options for the UDF filesystem.
101 ufs.txt 107 ufs.txt
102 - info on the ufs filesystem. 108 - info on the ufs filesystem.
103 vfat.txt 109 vfat.txt
104 - info on using the VFAT filesystem used in Windows NT and Windows 95 110 - info on using the VFAT filesystem used in Windows NT and Windows 95
105 vfs.txt 111 vfs.txt
106 - overview of the Virtual File System 112 - overview of the Virtual File System
107 xfs.txt 113 xfs.txt
108 - info and mount options for the XFS filesystem. 114 - info and mount options for the XFS filesystem.
109 xip.txt 115 xip.txt
110 - info on execute-in-place for file mappings. 116 - info on execute-in-place for file mappings.
111 117
Documentation/filesystems/nfsroot.txt
File was created 1 Mounting the root filesystem via NFS (nfsroot)
2 ===============================================
3
4 Written 1996 by Gero Kuhlmann <gero@gkminix.han.de>
5 Updated 1997 by Martin Mares <mj@atrey.karlin.mff.cuni.cz>
6 Updated 2006 by Nico Schottelius <nico-kernel-nfsroot@schottelius.org>
7 Updated 2006 by Horms <horms@verge.net.au>
8
9
10
11 In order to use a diskless system, such as an X-terminal or printer server
12 for example, it is necessary for the root filesystem to be present on a
13 non-disk device. This may be an initramfs (see Documentation/filesystems/
14 ramfs-rootfs-initramfs.txt), a ramdisk (see Documentation/initrd.txt) or a
15 filesystem mounted via NFS. The following text describes on how to use NFS
16 for the root filesystem. For the rest of this text 'client' means the
17 diskless system, and 'server' means the NFS server.
18
19
20
21
22 1.) Enabling nfsroot capabilities
23 -----------------------------
24
25 In order to use nfsroot, NFS client support needs to be selected as
26 built-in during configuration. Once this has been selected, the nfsroot
27 option will become available, which should also be selected.
28
29 In the networking options, kernel level autoconfiguration can be selected,
30 along with the types of autoconfiguration to support. Selecting all of
31 DHCP, BOOTP and RARP is safe.
32
33
34
35
36 2.) Kernel command line
37 -------------------
38
39 When the kernel has been loaded by a boot loader (see below) it needs to be
40 told what root fs device to use. And in the case of nfsroot, where to find
41 both the server and the name of the directory on the server to mount as root.
42 This can be established using the following kernel command line parameters:
43
44
45 root=/dev/nfs
46
47 This is necessary to enable the pseudo-NFS-device. Note that it's not a
48 real device but just a synonym to tell the kernel to use NFS instead of
49 a real device.
50
51
52 nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
53
54 If the `nfsroot' parameter is NOT given on the command line,
55 the default "/tftpboot/%s" will be used.
56
57 <server-ip> Specifies the IP address of the NFS server.
58 The default address is determined by the `ip' parameter
59 (see below). This parameter allows the use of different
60 servers for IP autoconfiguration and NFS.
61
62 <root-dir> Name of the directory on the server to mount as root.
63 If there is a "%s" token in the string, it will be
64 replaced by the ASCII-representation of the client's
65 IP address.
66
67 <nfs-options> Standard NFS options. All options are separated by commas.
68 The following defaults are used:
69 port = as given by server portmap daemon
70 rsize = 4096
71 wsize = 4096
72 timeo = 7
73 retrans = 3
74 acregmin = 3
75 acregmax = 60
76 acdirmin = 30
77 acdirmax = 60
78 flags = hard, nointr, noposix, cto, ac
79
80
81 ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>
82
83 This parameter tells the kernel how to configure IP addresses of devices
84 and also how to set up the IP routing table. It was originally called
85 `nfsaddrs', but now the boot-time IP configuration works independently of
86 NFS, so it was renamed to `ip' and the old name remained as an alias for
87 compatibility reasons.
88
89 If this parameter is missing from the kernel command line, all fields are
90 assumed to be empty, and the defaults mentioned below apply. In general
91 this means that the kernel tries to configure everything using
92 autoconfiguration.
93
94 The <autoconf> parameter can appear alone as the value to the `ip'
95 parameter (without all the ':' characters before). If the value is
96 "ip=off" or "ip=none", no autoconfiguration will take place, otherwise
97 autoconfiguration will take place. The most common way to use this
98 is "ip=dhcp".
99
100 <client-ip> IP address of the client.
101
102 Default: Determined using autoconfiguration.
103
104 <server-ip> IP address of the NFS server. If RARP is used to determine
105 the client address and this parameter is NOT empty only
106 replies from the specified server are accepted.
107
108 Only required for for NFS root. That is autoconfiguration
109 will not be triggered if it is missing and NFS root is not
110 in operation.
111
112 Default: Determined using autoconfiguration.
113 The address of the autoconfiguration server is used.
114
115 <gw-ip> IP address of a gateway if the server is on a different subnet.
116
117 Default: Determined using autoconfiguration.
118
119 <netmask> Netmask for local network interface. If unspecified
120 the netmask is derived from the client IP address assuming
121 classful addressing.
122
123 Default: Determined using autoconfiguration.
124
125 <hostname> Name of the client. May be supplied by autoconfiguration,
126 but its absence will not trigger autoconfiguration.
127
128 Default: Client IP address is used in ASCII notation.
129
130 <device> Name of network device to use.
131
132 Default: If the host only has one device, it is used.
133 Otherwise the device is determined using
134 autoconfiguration. This is done by sending
135 autoconfiguration requests out of all devices,
136 and using the device that received the first reply.
137
138 <autoconf> Method to use for autoconfiguration. In the case of options
139 which specify multiple autoconfiguration protocols,
140 requests are sent using all protocols, and the first one
141 to reply is used.
142
143 Only autoconfiguration protocols that have been compiled
144 into the kernel will be used, regardless of the value of
145 this option.
146
147 off or none: don't use autoconfiguration
148 (do static IP assignment instead)
149 on or any: use any protocol available in the kernel
150 (default)
151 dhcp: use DHCP
152 bootp: use BOOTP
153 rarp: use RARP
154 both: use both BOOTP and RARP but not DHCP
155 (old option kept for backwards compatibility)
156
157 Default: any
158
159
160
161
162 3.) Boot Loader
163 ----------
164
165 To get the kernel into memory different approaches can be used.
166 They depend on various facilities being available:
167
168
169 3.1) Booting from a floppy using syslinux
170
171 When building kernels, an easy way to create a boot floppy that uses
172 syslinux is to use the zdisk or bzdisk make targets which use
173 and bzimage images respectively. Both targets accept the
174 FDARGS parameter which can be used to set the kernel command line.
175
176 e.g.
177 make bzdisk FDARGS="root=/dev/nfs"
178
179 Note that the user running this command will need to have
180 access to the floppy drive device, /dev/fd0
181
182 For more information on syslinux, including how to create bootdisks
183 for prebuilt kernels, see http://syslinux.zytor.com/
184
185 N.B: Previously it was possible to write a kernel directly to
186 a floppy using dd, configure the boot device using rdev, and
187 boot using the resulting floppy. Linux no longer supports this
188 method of booting.
189
190 3.2) Booting from a cdrom using isolinux
191
192 When building kernels, an easy way to create a bootable cdrom that
193 uses isolinux is to use the isoimage target which uses a bzimage
194 image. Like zdisk and bzdisk, this target accepts the FDARGS
195 parameter which can be used to set the kernel command line.
196
197 e.g.
198 make isoimage FDARGS="root=/dev/nfs"
199
200 The resulting iso image will be arch/<ARCH>/boot/image.iso
201 This can be written to a cdrom using a variety of tools including
202 cdrecord.
203
204 e.g.
205 cdrecord dev=ATAPI:1,0,0 arch/i386/boot/image.iso
206
207 For more information on isolinux, including how to create bootdisks
208 for prebuilt kernels, see http://syslinux.zytor.com/
209
210 3.2) Using LILO
211 When using LILO all the necessary command line parameters may be
212 specified using the 'append=' directive in the LILO configuration
213 file.
214
215 However, to use the 'root=' directive you also need to create
216 a dummy root device, which may be removed after LILO is run.
217
218 mknod /dev/boot255 c 0 255
219
220 For information on configuring LILO, please refer to its documentation.
221
222 3.3) Using GRUB
223 When using GRUB, kernel parameter are simply appended after the kernel
224 specification: kernel <kernel> <parameters>
225
226 3.4) Using loadlin
227 loadlin may be used to boot Linux from a DOS command prompt without
228 requiring a local hard disk to mount as root. This has not been
229 thoroughly tested by the authors of this document, but in general
230 it should be possible configure the kernel command line similarly
231 to the configuration of LILO.
232
233 Please refer to the loadlin documentation for further information.
234
235 3.5) Using a boot ROM
236 This is probably the most elegant way of booting a diskless client.
237 With a boot ROM the kernel is loaded using the TFTP protocol. The
238 authors of this document are not aware of any no commercial boot
239 ROMs that support booting Linux over the network. However, there
240 are two free implementations of a boot ROM, netboot-nfs and
241 etherboot, both of which are available on sunsite.unc.edu, and both
242 of which contain everything you need to boot a diskless Linux client.
243
244 3.6) Using pxelinux
245 Pxelinux may be used to boot linux using the PXE boot loader
246 which is present on many modern network cards.
247
248 When using pxelinux, the kernel image is specified using
249 "kernel <relative-path-below /tftpboot>". The nfsroot parameters
250 are passed to the kernel by adding them to the "append" line.
251 It is common to use serial console in conjunction with pxeliunx,
252 see Documentation/serial-console.txt for more information.
253
254 For more information on isolinux, including how to create bootdisks
255 for prebuilt kernels, see http://syslinux.zytor.com/
256
257
258
259
260 4.) Credits
261 -------
262
263 The nfsroot code in the kernel and the RARP support have been written
264 by Gero Kuhlmann <gero@gkminix.han.de>.
265
266 The rest of the IP layer autoconfiguration code has been written
267 by Martin Mares <mj@atrey.karlin.mff.cuni.cz>.
268
269 In order to write the initial version of nfsroot I would like to thank
270 Jens-Uwe Mager <jum@anubis.han.de> for his help.
271
Documentation/filesystems/rpc-cache.txt
File was created 1 This document gives a brief introduction to the caching
2 mechanisms in the sunrpc layer that is used, in particular,
3 for NFS authentication.
4
5 CACHES
6 ======
7 The caching replaces the old exports table and allows for
8 a wide variety of values to be caches.
9
10 There are a number of caches that are similar in structure though
11 quite possibly very different in content and use. There is a corpus
12 of common code for managing these caches.
13
14 Examples of caches that are likely to be needed are:
15 - mapping from IP address to client name
16 - mapping from client name and filesystem to export options
17 - mapping from UID to list of GIDs, to work around NFS's limitation
18 of 16 gids.
19 - mappings between local UID/GID and remote UID/GID for sites that
20 do not have uniform uid assignment
21 - mapping from network identify to public key for crypto authentication.
22
23 The common code handles such things as:
24 - general cache lookup with correct locking
25 - supporting 'NEGATIVE' as well as positive entries
26 - allowing an EXPIRED time on cache items, and removing
27 items after they expire, and are no longer in-use.
28 - making requests to user-space to fill in cache entries
29 - allowing user-space to directly set entries in the cache
30 - delaying RPC requests that depend on as-yet incomplete
31 cache entries, and replaying those requests when the cache entry
32 is complete.
33 - clean out old entries as they expire.
34
35 Creating a Cache
36 ----------------
37
38 1/ A cache needs a datum to store. This is in the form of a
39 structure definition that must contain a
40 struct cache_head
41 as an element, usually the first.
42 It will also contain a key and some content.
43 Each cache element is reference counted and contains
44 expiry and update times for use in cache management.
45 2/ A cache needs a "cache_detail" structure that
46 describes the cache. This stores the hash table, some
47 parameters for cache management, and some operations detailing how
48 to work with particular cache items.
49 The operations requires are:
50 struct cache_head *alloc(void)
51 This simply allocates appropriate memory and returns
52 a pointer to the cache_detail embedded within the
53 structure
54 void cache_put(struct kref *)
55 This is called when the last reference to an item is
56 dropped. The pointer passed is to the 'ref' field
57 in the cache_head. cache_put should release any
58 references create by 'cache_init' and, if CACHE_VALID
59 is set, any references created by cache_update.
60 It should then release the memory allocated by
61 'alloc'.
62 int match(struct cache_head *orig, struct cache_head *new)
63 test if the keys in the two structures match. Return
64 1 if they do, 0 if they don't.
65 void init(struct cache_head *orig, struct cache_head *new)
66 Set the 'key' fields in 'new' from 'orig'. This may
67 include taking references to shared objects.
68 void update(struct cache_head *orig, struct cache_head *new)
69 Set the 'content' fileds in 'new' from 'orig'.
70 int cache_show(struct seq_file *m, struct cache_detail *cd,
71 struct cache_head *h)
72 Optional. Used to provide a /proc file that lists the
73 contents of a cache. This should show one item,
74 usually on just one line.
75 int cache_request(struct cache_detail *cd, struct cache_head *h,
76 char **bpp, int *blen)
77 Format a request to be send to user-space for an item
78 to be instantiated. *bpp is a buffer of size *blen.
79 bpp should be moved forward over the encoded message,
80 and *blen should be reduced to show how much free
81 space remains. Return 0 on success or <0 if not
82 enough room or other problem.
83 int cache_parse(struct cache_detail *cd, char *buf, int len)
84 A message from user space has arrived to fill out a
85 cache entry. It is in 'buf' of length 'len'.
86 cache_parse should parse this, find the item in the
87 cache with sunrpc_cache_lookup, and update the item
88 with sunrpc_cache_update.
89
90
91 3/ A cache needs to be registered using cache_register(). This
92 includes it on a list of caches that will be regularly
93 cleaned to discard old data.
94
95 Using a cache
96 -------------
97
98 To find a value in a cache, call sunrpc_cache_lookup passing a pointer
99 to the cache_head in a sample item with the 'key' fields filled in.
100 This will be passed to ->match to identify the target entry. If no
101 entry is found, a new entry will be create, added to the cache, and
102 marked as not containing valid data.
103
104 The item returned is typically passed to cache_check which will check
105 if the data is valid, and may initiate an up-call to get fresh data.
106 cache_check will return -ENOENT in the entry is negative or if an up
107 call is needed but not possible, -EAGAIN if an upcall is pending,
108 or 0 if the data is valid;
109
110 cache_check can be passed a "struct cache_req *". This structure is
111 typically embedded in the actual request and can be used to create a
112 deferred copy of the request (struct cache_deferred_req). This is
113 done when the found cache item is not uptodate, but the is reason to
114 believe that userspace might provide information soon. When the cache
115 item does become valid, the deferred copy of the request will be
116 revisited (->revisit). It is expected that this method will
117 reschedule the request for processing.
118
119 The value returned by sunrpc_cache_lookup can also be passed to
120 sunrpc_cache_update to set the content for the item. A second item is
121 passed which should hold the content. If the item found by _lookup
122 has valid data, then it is discarded and a new item is created. This
123 saves any user of an item from worrying about content changing while
124 it is being inspected. If the item found by _lookup does not contain
125 valid data, then the content is copied across and CACHE_VALID is set.
126
127 Populating a cache
128 ------------------
129
130 Each cache has a name, and when the cache is registered, a directory
131 with that name is created in /proc/net/rpc
132
133 This directory contains a file called 'channel' which is a channel
134 for communicating between kernel and user for populating the cache.
135 This directory may later contain other files of interacting
136 with the cache.
137
138 The 'channel' works a bit like a datagram socket. Each 'write' is
139 passed as a whole to the cache for parsing and interpretation.
140 Each cache can treat the write requests differently, but it is
141 expected that a message written will contain:
142 - a key
143 - an expiry time
144 - a content.
145 with the intention that an item in the cache with the give key
146 should be create or updated to have the given content, and the
147 expiry time should be set on that item.
148
149 Reading from a channel is a bit more interesting. When a cache
150 lookup fails, or when it succeeds but finds an entry that may soon
151 expire, a request is lodged for that cache item to be updated by
152 user-space. These requests appear in the channel file.
153
154 Successive reads will return successive requests.
155 If there are no more requests to return, read will return EOF, but a
156 select or poll for read will block waiting for another request to be
157 added.
158
159 Thus a user-space helper is likely to:
160 open the channel.
161 select for readable
162 read a request
163 write a response
164 loop.
165
166 If it dies and needs to be restarted, any requests that have not been
167 answered will still appear in the file and will be read by the new
168 instance of the helper.
169
170 Each cache should define a "cache_parse" method which takes a message
171 written from user-space and processes it. It should return an error
172 (which propagates back to the write syscall) or 0.
173
174 Each cache should also define a "cache_request" method which
175 takes a cache item and encodes a request into the buffer
176 provided.
177
178 Note: If a cache has no active readers on the channel, and has had not
179 active readers for more than 60 seconds, further requests will not be
180 added to the channel but instead all lookups that do not find a valid
181 entry will fail. This is partly for backward compatibility: The
182 previous nfs exports table was deemed to be authoritative and a
183 failed lookup meant a definite 'no'.
184
185 request/response format
186 -----------------------
187
188 While each cache is free to use it's own format for requests
189 and responses over channel, the following is recommended as
190 appropriate and support routines are available to help:
191 Each request or response record should be printable ASCII
192 with precisely one newline character which should be at the end.
193 Fields within the record should be separated by spaces, normally one.
194 If spaces, newlines, or nul characters are needed in a field they
195 much be quoted. two mechanisms are available:
196 1/ If a field begins '\x' then it must contain an even number of
197 hex digits, and pairs of these digits provide the bytes in the
198 field.
199 2/ otherwise a \ in the field must be followed by 3 octal digits
200 which give the code for a byte. Other characters are treated
201 as them selves. At the very least, space, newline, nul, and
202 '\' must be quoted in this way.
203
Documentation/filesystems/seq_file.txt
File was created 1 The seq_file interface
2
3 Copyright 2003 Jonathan Corbet <corbet@lwn.net>
4 This file is originally from the LWN.net Driver Porting series at
5 http://lwn.net/Articles/driver-porting/
6
7
8 There are numerous ways for a device driver (or other kernel component) to
9 provide information to the user or system administrator. One useful
10 technique is the creation of virtual files, in debugfs, /proc or elsewhere.
11 Virtual files can provide human-readable output that is easy to get at
12 without any special utility programs; they can also make life easier for
13 script writers. It is not surprising that the use of virtual files has
14 grown over the years.
15
16 Creating those files correctly has always been a bit of a challenge,
17 however. It is not that hard to make a virtual file which returns a
18 string. But life gets trickier if the output is long - anything greater
19 than an application is likely to read in a single operation. Handling
20 multiple reads (and seeks) requires careful attention to the reader's
21 position within the virtual file - that position is, likely as not, in the
22 middle of a line of output. The kernel has traditionally had a number of
23 implementations that got this wrong.
24
25 The 2.6 kernel contains a set of functions (implemented by Alexander Viro)
26 which are designed to make it easy for virtual file creators to get it
27 right.
28
29 The seq_file interface is available via <linux/seq_file.h>. There are
30 three aspects to seq_file:
31
32 * An iterator interface which lets a virtual file implementation
33 step through the objects it is presenting.
34
35 * Some utility functions for formatting objects for output without
36 needing to worry about things like output buffers.
37
38 * A set of canned file_operations which implement most operations on
39 the virtual file.
40
41 We'll look at the seq_file interface via an extremely simple example: a
42 loadable module which creates a file called /proc/sequence. The file, when
43 read, simply produces a set of increasing integer values, one per line. The
44 sequence will continue until the user loses patience and finds something
45 better to do. The file is seekable, in that one can do something like the
46 following:
47
48 dd if=/proc/sequence of=out1 count=1
49 dd if=/proc/sequence skip=1 out=out2 count=1
50
51 Then concatenate the output files out1 and out2 and get the right
52 result. Yes, it is a thoroughly useless module, but the point is to show
53 how the mechanism works without getting lost in other details. (Those
54 wanting to see the full source for this module can find it at
55 http://lwn.net/Articles/22359/).
56
57
58 The iterator interface
59
60 Modules implementing a virtual file with seq_file must implement a simple
61 iterator object that allows stepping through the data of interest.
62 Iterators must be able to move to a specific position - like the file they
63 implement - but the interpretation of that position is up to the iterator
64 itself. A seq_file implementation that is formatting firewall rules, for
65 example, could interpret position N as the Nth rule in the chain.
66 Positioning can thus be done in whatever way makes the most sense for the
67 generator of the data, which need not be aware of how a position translates
68 to an offset in the virtual file. The one obvious exception is that a
69 position of zero should indicate the beginning of the file.
70
71 The /proc/sequence iterator just uses the count of the next number it
72 will output as its position.
73
74 Four functions must be implemented to make the iterator work. The first,
75 called start() takes a position as an argument and returns an iterator
76 which will start reading at that position. For our simple sequence example,
77 the start() function looks like:
78
79 static void *ct_seq_start(struct seq_file *s, loff_t *pos)
80 {
81 loff_t *spos = kmalloc(sizeof(loff_t), GFP_KERNEL);
82 if (! spos)
83 return NULL;
84 *spos = *pos;
85 return spos;
86 }
87
88 The entire data structure for this iterator is a single loff_t value
89 holding the current position. There is no upper bound for the sequence
90 iterator, but that will not be the case for most other seq_file
91 implementations; in most cases the start() function should check for a
92 "past end of file" condition and return NULL if need be.
93
94 For more complicated applications, the private field of the seq_file
95 structure can be used. There is also a special value whch can be returned
96 by the start() function called SEQ_START_TOKEN; it can be used if you wish
97 to instruct your show() function (described below) to print a header at the
98 top of the output. SEQ_START_TOKEN should only be used if the offset is
99 zero, however.
100
101 The next function to implement is called, amazingly, next(); its job is to
102 move the iterator forward to the next position in the sequence. The
103 example module can simply increment the position by one; more useful
104 modules will do what is needed to step through some data structure. The
105 next() function returns a new iterator, or NULL if the sequence is
106 complete. Here's the example version:
107
108 static void *ct_seq_next(struct seq_file *s, void *v, loff_t *pos)
109 {
110 loff_t *spos = v;
111 *pos = ++*spos;
112 return spos;
113 }
114
115 The stop() function is called when iteration is complete; its job, of
116 course, is to clean up. If dynamic memory is allocated for the iterator,
117 stop() is the place to free it.
118
119 static void ct_seq_stop(struct seq_file *s, void *v)
120 {
121 kfree(v);
122 }
123
124 Finally, the show() function should format the object currently pointed to
125 by the iterator for output. It should return zero, or an error code if
126 something goes wrong. The example module's show() function is:
127
128 static int ct_seq_show(struct seq_file *s, void *v)
129 {
130 loff_t *spos = v;
131 seq_printf(s, "%lld\n", (long long)*spos);
132 return 0;
133 }
134
135 We will look at seq_printf() in a moment. But first, the definition of the
136 seq_file iterator is finished by creating a seq_operations structure with
137 the four functions we have just defined:
138
139 static const struct seq_operations ct_seq_ops = {
140 .start = ct_seq_start,
141 .next = ct_seq_next,
142 .stop = ct_seq_stop,
143 .show = ct_seq_show
144 };
145
146 This structure will be needed to tie our iterator to the /proc file in
147 a little bit.
148
149 It's worth noting that the interator value returned by start() and
150 manipulated by the other functions is considered to be completely opaque by
151 the seq_file code. It can thus be anything that is useful in stepping
152 through the data to be output. Counters can be useful, but it could also be
153 a direct pointer into an array or linked list. Anything goes, as long as
154 the programmer is aware that things can happen between calls to the
155 iterator function. However, the seq_file code (by design) will not sleep
156 between the calls to start() and stop(), so holding a lock during that time
157 is a reasonable thing to do. The seq_file code will also avoid taking any
158 other locks while the iterator is active.
159
160
161 Formatted output
162
163 The seq_file code manages positioning within the output created by the
164 iterator and getting it into the user's buffer. But, for that to work, that
165 output must be passed to the seq_file code. Some utility functions have
166 been defined which make this task easy.
167
168 Most code will simply use seq_printf(), which works pretty much like
169 printk(), but which requires the seq_file pointer as an argument. It is
170 common to ignore the return value from seq_printf(), but a function
171 producing complicated output may want to check that value and quit if
172 something non-zero is returned; an error return means that the seq_file
173 buffer has been filled and further output will be discarded.
174
175 For straight character output, the following functions may be used:
176
177 int seq_putc(struct seq_file *m, char c);
178 int seq_puts(struct seq_file *m, const char *s);
179 int seq_escape(struct seq_file *m, const char *s, const char *esc);
180
181 The first two output a single character and a string, just like one would
182 expect. seq_escape() is like seq_puts(), except that any character in s
183 which is in the string esc will be represented in octal form in the output.
184
185 There is also a function for printing filenames:
186
187 int seq_path(struct seq_file *m, struct path *path, char *esc);
188
189 Here, path indicates the file of interest, and esc is a set of characters
190 which should be escaped in the output.
191
192
193 Making it all work
194
195 So far, we have a nice set of functions which can produce output within the
196 seq_file system, but we have not yet turned them into a file that a user
197 can see. Creating a file within the kernel requires, of course, the
198 creation of a set of file_operations which implement the operations on that
199 file. The seq_file interface provides a set of canned operations which do
200 most of the work. The virtual file author still must implement the open()
201 method, however, to hook everything up. The open function is often a single
202 line, as in the example module:
203
204 static int ct_open(struct inode *inode, struct file *file)
205 {
206 return seq_open(file, &ct_seq_ops);
207 }
208
209 Here, the call to seq_open() takes the seq_operations structure we created
210 before, and gets set up to iterate through the virtual file.
211
212 On a successful open, seq_open() stores the struct seq_file pointer in
213 file->private_data. If you have an application where the same iterator can
214 be used for more than one file, you can store an arbitrary pointer in the
215 private field of the seq_file structure; that value can then be retrieved
216 by the iterator functions.
217
218 The other operations of interest - read(), llseek(), and release() - are
219 all implemented by the seq_file code itself. So a virtual file's
220 file_operations structure will look like:
221
222 static const struct file_operations ct_file_ops = {
223 .owner = THIS_MODULE,
224 .open = ct_open,
225 .read = seq_read,
226 .llseek = seq_lseek,
227 .release = seq_release
228 };
229
230 There is also a seq_release_private() which passes the contents of the
231 seq_file private field to kfree() before releasing the structure.
232
233 The final step is the creation of the /proc file itself. In the example
234 code, that is done in the initialization code in the usual way:
235
236 static int ct_init(void)
237 {
238 struct proc_dir_entry *entry;
239
240 entry = create_proc_entry("sequence", 0, NULL);
241 if (entry)
242 entry->proc_fops = &ct_file_ops;
243 return 0;
244 }
245
246 module_init(ct_init);
247
248 And that is pretty much it.
249
250
251 seq_list
252
253 If your file will be iterating through a linked list, you may find these
254 routines useful:
255
256 struct list_head *seq_list_start(struct list_head *head,
257 loff_t pos);
258 struct list_head *seq_list_start_head(struct list_head *head,
259 loff_t pos);
260 struct list_head *seq_list_next(void *v, struct list_head *head,
261 loff_t *ppos);
262
263 These helpers will interpret pos as a position within the list and iterate
264 accordingly. Your start() and next() functions need only invoke the
265 seq_list_* helpers with a pointer to the appropriate list_head structure.
266
267
268 The extra-simple version
269
270 For extremely simple virtual files, there is an even easier interface. A
271 module can define only the show() function, which should create all the
272 output that the virtual file will contain. The file's open() method then
273 calls:
274
275 int single_open(struct file *file,
276 int (*show)(struct seq_file *m, void *p),
277 void *data);
278
279 When output time comes, the show() function will be called once. The data
280 value given to single_open() can be found in the private field of the
281 seq_file structure. When using single_open(), the programmer should use
282 single_release() instead of seq_release() in the file_operations structure
283 to avoid a memory leak.
284
Documentation/hrtimers/highres.txt
1 High resolution timers and dynamic ticks design notes 1 High resolution timers and dynamic ticks design notes
2 ----------------------------------------------------- 2 -----------------------------------------------------
3 3
4 Further information can be found in the paper of the OLS 2006 talk "hrtimers 4 Further information can be found in the paper of the OLS 2006 talk "hrtimers
5 and beyond". The paper is part of the OLS 2006 Proceedings Volume 1, which can 5 and beyond". The paper is part of the OLS 2006 Proceedings Volume 1, which can
6 be found on the OLS website: 6 be found on the OLS website:
7 http://www.linuxsymposium.org/2006/linuxsymposium_procv1.pdf 7 http://www.linuxsymposium.org/2006/linuxsymposium_procv1.pdf
8 8
9 The slides to this talk are available from: 9 The slides to this talk are available from:
10 http://tglx.de/projects/hrtimers/ols2006-hrtimers.pdf 10 http://tglx.de/projects/hrtimers/ols2006-hrtimers.pdf
11 11
12 The slides contain five figures (pages 2, 15, 18, 20, 22), which illustrate the 12 The slides contain five figures (pages 2, 15, 18, 20, 22), which illustrate the
13 changes in the time(r) related Linux subsystems. Figure #1 (p. 2) shows the 13 changes in the time(r) related Linux subsystems. Figure #1 (p. 2) shows the
14 design of the Linux time(r) system before hrtimers and other building blocks 14 design of the Linux time(r) system before hrtimers and other building blocks
15 got merged into mainline. 15 got merged into mainline.
16 16
17 Note: the paper and the slides are talking about "clock event source", while we 17 Note: the paper and the slides are talking about "clock event source", while we
18 switched to the name "clock event devices" in meantime. 18 switched to the name "clock event devices" in meantime.
19 19
20 The design contains the following basic building blocks: 20 The design contains the following basic building blocks:
21 21
22 - hrtimer base infrastructure 22 - hrtimer base infrastructure
23 - timeofday and clock source management 23 - timeofday and clock source management
24 - clock event management 24 - clock event management
25 - high resolution timer functionality 25 - high resolution timer functionality
26 - dynamic ticks 26 - dynamic ticks
27 27
28 28
29 hrtimer base infrastructure 29 hrtimer base infrastructure
30 --------------------------- 30 ---------------------------
31 31
32 The hrtimer base infrastructure was merged into the 2.6.16 kernel. Details of 32 The hrtimer base infrastructure was merged into the 2.6.16 kernel. Details of
33 the base implementation are covered in Documentation/hrtimers/hrtimer.txt. See 33 the base implementation are covered in Documentation/hrtimers/hrtimer.txt. See
34 also figure #2 (OLS slides p. 15) 34 also figure #2 (OLS slides p. 15)
35 35
36 The main differences to the timer wheel, which holds the armed timer_list type 36 The main differences to the timer wheel, which holds the armed timer_list type
37 timers are: 37 timers are:
38 - time ordered enqueueing into a rb-tree 38 - time ordered enqueueing into a rb-tree
39 - independent of ticks (the processing is based on nanoseconds) 39 - independent of ticks (the processing is based on nanoseconds)
40 40
41 41
42 timeofday and clock source management 42 timeofday and clock source management
43 ------------------------------------- 43 -------------------------------------
44 44
45 John Stultz's Generic Time Of Day (GTOD) framework moves a large portion of 45 John Stultz's Generic Time Of Day (GTOD) framework moves a large portion of
46 code out of the architecture-specific areas into a generic management 46 code out of the architecture-specific areas into a generic management
47 framework, as illustrated in figure #3 (OLS slides p. 18). The architecture 47 framework, as illustrated in figure #3 (OLS slides p. 18). The architecture
48 specific portion is reduced to the low level hardware details of the clock 48 specific portion is reduced to the low level hardware details of the clock
49 sources, which are registered in the framework and selected on a quality based 49 sources, which are registered in the framework and selected on a quality based
50 decision. The low level code provides hardware setup and readout routines and 50 decision. The low level code provides hardware setup and readout routines and
51 initializes data structures, which are used by the generic time keeping code to 51 initializes data structures, which are used by the generic time keeping code to
52 convert the clock ticks to nanosecond based time values. All other time keeping 52 convert the clock ticks to nanosecond based time values. All other time keeping
53 related functionality is moved into the generic code. The GTOD base patch got 53 related functionality is moved into the generic code. The GTOD base patch got
54 merged into the 2.6.18 kernel. 54 merged into the 2.6.18 kernel.
55 55
56 Further information about the Generic Time Of Day framework is available in the 56 Further information about the Generic Time Of Day framework is available in the
57 OLS 2005 Proceedings Volume 1: 57 OLS 2005 Proceedings Volume 1:
58 http://www.linuxsymposium.org/2005/linuxsymposium_procv1.pdf 58 http://www.linuxsymposium.org/2005/linuxsymposium_procv1.pdf
59 59
60 The paper "We Are Not Getting Any Younger: A New Approach to Time and 60 The paper "We Are Not Getting Any Younger: A New Approach to Time and
61 Timers" was written by J. Stultz, D.V. Hart, & N. Aravamudan. 61 Timers" was written by J. Stultz, D.V. Hart, & N. Aravamudan.
62 62
63 Figure #3 (OLS slides p.18) illustrates the transformation. 63 Figure #3 (OLS slides p.18) illustrates the transformation.
64 64
65 65
66 clock event management 66 clock event management
67 ---------------------- 67 ----------------------
68 68
69 While clock sources provide read access to the monotonically increasing time 69 While clock sources provide read access to the monotonically increasing time
70 value, clock event devices are used to schedule the next event 70 value, clock event devices are used to schedule the next event
71 interrupt(s). The next event is currently defined to be periodic, with its 71 interrupt(s). The next event is currently defined to be periodic, with its
72 period defined at compile time. The setup and selection of the event device 72 period defined at compile time. The setup and selection of the event device
73 for various event driven functionalities is hardwired into the architecture 73 for various event driven functionalities is hardwired into the architecture
74 dependent code. This results in duplicated code across all architectures and 74 dependent code. This results in duplicated code across all architectures and
75 makes it extremely difficult to change the configuration of the system to use 75 makes it extremely difficult to change the configuration of the system to use
76 event interrupt devices other than those already built into the 76 event interrupt devices other than those already built into the
77 architecture. Another implication of the current design is that it is necessary 77 architecture. Another implication of the current design is that it is necessary
78 to touch all the architecture-specific implementations in order to provide new 78 to touch all the architecture-specific implementations in order to provide new
79 functionality like high resolution timers or dynamic ticks. 79 functionality like high resolution timers or dynamic ticks.
80 80
81 The clock events subsystem tries to address this problem by providing a generic 81 The clock events subsystem tries to address this problem by providing a generic
82 solution to manage clock event devices and their usage for the various clock 82 solution to manage clock event devices and their usage for the various clock
83 event driven kernel functionalities. The goal of the clock event subsystem is 83 event driven kernel functionalities. The goal of the clock event subsystem is
84 to minimize the clock event related architecture dependent code to the pure 84 to minimize the clock event related architecture dependent code to the pure
85 hardware related handling and to allow easy addition and utilization of new 85 hardware related handling and to allow easy addition and utilization of new
86 clock event devices. It also minimizes the duplicated code across the 86 clock event devices. It also minimizes the duplicated code across the
87 architectures as it provides generic functionality down to the interrupt 87 architectures as it provides generic functionality down to the interrupt
88 service handler, which is almost inherently hardware dependent. 88 service handler, which is almost inherently hardware dependent.
89 89
90 Clock event devices are registered either by the architecture dependent boot 90 Clock event devices are registered either by the architecture dependent boot
91 code or at module insertion time. Each clock event device fills a data 91 code or at module insertion time. Each clock event device fills a data
92 structure with clock-specific property parameters and callback functions. The 92 structure with clock-specific property parameters and callback functions. The
93 clock event management decides, by using the specified property parameters, the 93 clock event management decides, by using the specified property parameters, the
94 set of system functions a clock event device will be used to support. This 94 set of system functions a clock event device will be used to support. This
95 includes the distinction of per-CPU and per-system global event devices. 95 includes the distinction of per-CPU and per-system global event devices.
96 96
97 System-level global event devices are used for the Linux periodic tick. Per-CPU 97 System-level global event devices are used for the Linux periodic tick. Per-CPU
98 event devices are used to provide local CPU functionality such as process 98 event devices are used to provide local CPU functionality such as process
99 accounting, profiling, and high resolution timers. 99 accounting, profiling, and high resolution timers.
100 100
101 The management layer assignes one or more of the folliwing functions to a clock 101 The management layer assigns one or more of the following functions to a clock
102 event device: 102 event device:
103 - system global periodic tick (jiffies update) 103 - system global periodic tick (jiffies update)
104 - cpu local update_process_times 104 - cpu local update_process_times
105 - cpu local profiling 105 - cpu local profiling
106 - cpu local next event interrupt (non periodic mode) 106 - cpu local next event interrupt (non periodic mode)
107 107
108 The clock event device delegates the selection of those timer interrupt related 108 The clock event device delegates the selection of those timer interrupt related
109 functions completely to the management layer. The clock management layer stores 109 functions completely to the management layer. The clock management layer stores
110 a function pointer in the device description structure, which has to be called 110 a function pointer in the device description structure, which has to be called
111 from the hardware level handler. This removes a lot of duplicated code from the 111 from the hardware level handler. This removes a lot of duplicated code from the
112 architecture specific timer interrupt handlers and hands the control over the 112 architecture specific timer interrupt handlers and hands the control over the
113 clock event devices and the assignment of timer interrupt related functionality 113 clock event devices and the assignment of timer interrupt related functionality
114 to the core code. 114 to the core code.
115 115
116 The clock event layer API is rather small. Aside from the clock event device 116 The clock event layer API is rather small. Aside from the clock event device
117 registration interface it provides functions to schedule the next event 117 registration interface it provides functions to schedule the next event
118 interrupt, clock event device notification service and support for suspend and 118 interrupt, clock event device notification service and support for suspend and
119 resume. 119 resume.
120 120
121 The framework adds about 700 lines of code which results in a 2KB increase of 121 The framework adds about 700 lines of code which results in a 2KB increase of
122 the kernel binary size. The conversion of i386 removes about 100 lines of 122 the kernel binary size. The conversion of i386 removes about 100 lines of
123 code. The binary size decrease is in the range of 400 byte. We believe that the 123 code. The binary size decrease is in the range of 400 byte. We believe that the
124 increase of flexibility and the avoidance of duplicated code across 124 increase of flexibility and the avoidance of duplicated code across
125 architectures justifies the slight increase of the binary size. 125 architectures justifies the slight increase of the binary size.
126 126
127 The conversion of an architecture has no functional impact, but allows to 127 The conversion of an architecture has no functional impact, but allows to
128 utilize the high resolution and dynamic tick functionalites without any change 128 utilize the high resolution and dynamic tick functionalites without any change
129 to the clock event device and timer interrupt code. After the conversion the 129 to the clock event device and timer interrupt code. After the conversion the
130 enabling of high resolution timers and dynamic ticks is simply provided by 130 enabling of high resolution timers and dynamic ticks is simply provided by
131 adding the kernel/time/Kconfig file to the architecture specific Kconfig and 131 adding the kernel/time/Kconfig file to the architecture specific Kconfig and
132 adding the dynamic tick specific calls to the idle routine (a total of 3 lines 132 adding the dynamic tick specific calls to the idle routine (a total of 3 lines
133 added to the idle function and the Kconfig file) 133 added to the idle function and the Kconfig file)
134 134
135 Figure #4 (OLS slides p.20) illustrates the transformation. 135 Figure #4 (OLS slides p.20) illustrates the transformation.
136 136
137 137
138 high resolution timer functionality 138 high resolution timer functionality
139 ----------------------------------- 139 -----------------------------------
140 140
141 During system boot it is not possible to use the high resolution timer 141 During system boot it is not possible to use the high resolution timer
142 functionality, while making it possible would be difficult and would serve no 142 functionality, while making it possible would be difficult and would serve no
143 useful function. The initialization of the clock event device framework, the 143 useful function. The initialization of the clock event device framework, the
144 clock source framework (GTOD) and hrtimers itself has to be done and 144 clock source framework (GTOD) and hrtimers itself has to be done and
145 appropriate clock sources and clock event devices have to be registered before 145 appropriate clock sources and clock event devices have to be registered before
146 the high resolution functionality can work. Up to the point where hrtimers are 146 the high resolution functionality can work. Up to the point where hrtimers are
147 initialized, the system works in the usual low resolution periodic mode. The 147 initialized, the system works in the usual low resolution periodic mode. The
148 clock source and the clock event device layers provide notification functions 148 clock source and the clock event device layers provide notification functions
149 which inform hrtimers about availability of new hardware. hrtimers validates 149 which inform hrtimers about availability of new hardware. hrtimers validates
150 the usability of the registered clock sources and clock event devices before 150 the usability of the registered clock sources and clock event devices before
151 switching to high resolution mode. This ensures also that a kernel which is 151 switching to high resolution mode. This ensures also that a kernel which is
152 configured for high resolution timers can run on a system which lacks the 152 configured for high resolution timers can run on a system which lacks the
153 necessary hardware support. 153 necessary hardware support.
154 154
155 The high resolution timer code does not support SMP machines which have only 155 The high resolution timer code does not support SMP machines which have only
156 global clock event devices. The support of such hardware would involve IPI 156 global clock event devices. The support of such hardware would involve IPI
157 calls when an interrupt happens. The overhead would be much larger than the 157 calls when an interrupt happens. The overhead would be much larger than the
158 benefit. This is the reason why we currently disable high resolution and 158 benefit. This is the reason why we currently disable high resolution and
159 dynamic ticks on i386 SMP systems which stop the local APIC in C3 power 159 dynamic ticks on i386 SMP systems which stop the local APIC in C3 power
160 state. A workaround is available as an idea, but the problem has not been 160 state. A workaround is available as an idea, but the problem has not been
161 tackled yet. 161 tackled yet.
162 162
163 The time ordered insertion of timers provides all the infrastructure to decide 163 The time ordered insertion of timers provides all the infrastructure to decide
164 whether the event device has to be reprogrammed when a timer is added. The 164 whether the event device has to be reprogrammed when a timer is added. The
165 decision is made per timer base and synchronized across per-cpu timer bases in 165 decision is made per timer base and synchronized across per-cpu timer bases in
166 a support function. The design allows the system to utilize separate per-CPU 166 a support function. The design allows the system to utilize separate per-CPU
167 clock event devices for the per-CPU timer bases, but currently only one 167 clock event devices for the per-CPU timer bases, but currently only one
168 reprogrammable clock event device per-CPU is utilized. 168 reprogrammable clock event device per-CPU is utilized.
169 169
170 When the timer interrupt happens, the next event interrupt handler is called 170 When the timer interrupt happens, the next event interrupt handler is called
171 from the clock event distribution code and moves expired timers from the 171 from the clock event distribution code and moves expired timers from the
172 red-black tree to a separate double linked list and invokes the softirq 172 red-black tree to a separate double linked list and invokes the softirq
173 handler. An additional mode field in the hrtimer structure allows the system to 173 handler. An additional mode field in the hrtimer structure allows the system to
174 execute callback functions directly from the next event interrupt handler. This 174 execute callback functions directly from the next event interrupt handler. This
175 is restricted to code which can safely be executed in the hard interrupt 175 is restricted to code which can safely be executed in the hard interrupt
176 context. This applies, for example, to the common case of a wakeup function as 176 context. This applies, for example, to the common case of a wakeup function as
177 used by nanosleep. The advantage of executing the handler in the interrupt 177 used by nanosleep. The advantage of executing the handler in the interrupt
178 context is the avoidance of up to two context switches - from the interrupted 178 context is the avoidance of up to two context switches - from the interrupted
179 context to the softirq and to the task which is woken up by the expired 179 context to the softirq and to the task which is woken up by the expired
180 timer. 180 timer.
181 181
182 Once a system has switched to high resolution mode, the periodic tick is 182 Once a system has switched to high resolution mode, the periodic tick is
183 switched off. This disables the per system global periodic clock event device - 183 switched off. This disables the per system global periodic clock event device -
184 e.g. the PIT on i386 SMP systems. 184 e.g. the PIT on i386 SMP systems.
185 185
186 The periodic tick functionality is provided by an per-cpu hrtimer. The callback 186 The periodic tick functionality is provided by an per-cpu hrtimer. The callback
187 function is executed in the next event interrupt context and updates jiffies 187 function is executed in the next event interrupt context and updates jiffies
188 and calls update_process_times and profiling. The implementation of the hrtimer 188 and calls update_process_times and profiling. The implementation of the hrtimer
189 based periodic tick is designed to be extended with dynamic tick functionality. 189 based periodic tick is designed to be extended with dynamic tick functionality.
190 This allows to use a single clock event device to schedule high resolution 190 This allows to use a single clock event device to schedule high resolution
191 timer and periodic events (jiffies tick, profiling, process accounting) on UP 191 timer and periodic events (jiffies tick, profiling, process accounting) on UP
192 systems. This has been proved to work with the PIT on i386 and the Incrementer 192 systems. This has been proved to work with the PIT on i386 and the Incrementer
193 on PPC. 193 on PPC.
194 194
195 The softirq for running the hrtimer queues and executing the callbacks has been 195 The softirq for running the hrtimer queues and executing the callbacks has been
196 separated from the tick bound timer softirq to allow accurate delivery of high 196 separated from the tick bound timer softirq to allow accurate delivery of high
197 resolution timer signals which are used by itimer and POSIX interval 197 resolution timer signals which are used by itimer and POSIX interval
198 timers. The execution of this softirq can still be delayed by other softirqs, 198 timers. The execution of this softirq can still be delayed by other softirqs,
199 but the overall latencies have been significantly improved by this separation. 199 but the overall latencies have been significantly improved by this separation.
200 200
201 Figure #5 (OLS slides p.22) illustrates the transformation. 201 Figure #5 (OLS slides p.22) illustrates the transformation.
202 202
203 203
204 dynamic ticks 204 dynamic ticks
205 ------------- 205 -------------
206 206
207 Dynamic ticks are the logical consequence of the hrtimer based periodic tick 207 Dynamic ticks are the logical consequence of the hrtimer based periodic tick
208 replacement (sched_tick). The functionality of the sched_tick hrtimer is 208 replacement (sched_tick). The functionality of the sched_tick hrtimer is
209 extended by three functions: 209 extended by three functions:
210 210
211 - hrtimer_stop_sched_tick 211 - hrtimer_stop_sched_tick
212 - hrtimer_restart_sched_tick 212 - hrtimer_restart_sched_tick
213 - hrtimer_update_jiffies 213 - hrtimer_update_jiffies
214 214
215 hrtimer_stop_sched_tick() is called when a CPU goes into idle state. The code 215 hrtimer_stop_sched_tick() is called when a CPU goes into idle state. The code
216 evaluates the next scheduled timer event (from both hrtimers and the timer 216 evaluates the next scheduled timer event (from both hrtimers and the timer
217 wheel) and in case that the next event is further away than the next tick it 217 wheel) and in case that the next event is further away than the next tick it
218 reprograms the sched_tick to this future event, to allow longer idle sleeps 218 reprograms the sched_tick to this future event, to allow longer idle sleeps
219 without worthless interruption by the periodic tick. The function is also 219 without worthless interruption by the periodic tick. The function is also
220 called when an interrupt happens during the idle period, which does not cause a 220 called when an interrupt happens during the idle period, which does not cause a
221 reschedule. The call is necessary as the interrupt handler might have armed a 221 reschedule. The call is necessary as the interrupt handler might have armed a
222 new timer whose expiry time is before the time which was identified as the 222 new timer whose expiry time is before the time which was identified as the
223 nearest event in the previous call to hrtimer_stop_sched_tick. 223 nearest event in the previous call to hrtimer_stop_sched_tick.
224 224
225 hrtimer_restart_sched_tick() is called when the CPU leaves the idle state before 225 hrtimer_restart_sched_tick() is called when the CPU leaves the idle state before
226 it calls schedule(). hrtimer_restart_sched_tick() resumes the periodic tick, 226 it calls schedule(). hrtimer_restart_sched_tick() resumes the periodic tick,
227 which is kept active until the next call to hrtimer_stop_sched_tick(). 227 which is kept active until the next call to hrtimer_stop_sched_tick().
228 228
229 hrtimer_update_jiffies() is called from irq_enter() when an interrupt happens 229 hrtimer_update_jiffies() is called from irq_enter() when an interrupt happens
230 in the idle period to make sure that jiffies are up to date and the interrupt 230 in the idle period to make sure that jiffies are up to date and the interrupt
231 handler has not to deal with an eventually stale jiffy value. 231 handler has not to deal with an eventually stale jiffy value.
232 232
233 The dynamic tick feature provides statistical values which are exported to 233 The dynamic tick feature provides statistical values which are exported to
234 userspace via /proc/stats and can be made available for enhanced power 234 userspace via /proc/stats and can be made available for enhanced power
235 management control. 235 management control.
236 236
237 The implementation leaves room for further development like full tickless 237 The implementation leaves room for further development like full tickless
238 systems, where the time slice is controlled by the scheduler, variable 238 systems, where the time slice is controlled by the scheduler, variable
239 frequency profiling, and a complete removal of jiffies in the future. 239 frequency profiling, and a complete removal of jiffies in the future.
240 240
241 241
242 Aside the current initial submission of i386 support, the patchset has been 242 Aside the current initial submission of i386 support, the patchset has been
243 extended to x86_64 and ARM already. Initial (work in progress) support is also 243 extended to x86_64 and ARM already. Initial (work in progress) support is also
244 available for MIPS and PowerPC. 244 available for MIPS and PowerPC.
245 245
246 Thomas, Ingo 246 Thomas, Ingo
247 247
248 248
249 249
250 250
Documentation/kernel-parameters.txt
1 Kernel Parameters 1 Kernel Parameters
2 ~~~~~~~~~~~~~~~~~ 2 ~~~~~~~~~~~~~~~~~
3 3
4 The following is a consolidated list of the kernel parameters as implemented 4 The following is a consolidated list of the kernel parameters as implemented
5 (mostly) by the __setup() macro and sorted into English Dictionary order 5 (mostly) by the __setup() macro and sorted into English Dictionary order
6 (defined as ignoring all punctuation and sorting digits before letters in a 6 (defined as ignoring all punctuation and sorting digits before letters in a
7 case insensitive manner), and with descriptions where known. 7 case insensitive manner), and with descriptions where known.
8 8
9 Module parameters for loadable modules are specified only as the 9 Module parameters for loadable modules are specified only as the
10 parameter name with optional '=' and value as appropriate, such as: 10 parameter name with optional '=' and value as appropriate, such as:
11 11
12 modprobe usbcore blinkenlights=1 12 modprobe usbcore blinkenlights=1
13 13
14 Module parameters for modules that are built into the kernel image 14 Module parameters for modules that are built into the kernel image
15 are specified on the kernel command line with the module name plus 15 are specified on the kernel command line with the module name plus
16 '.' plus parameter name, with '=' and value if appropriate, such as: 16 '.' plus parameter name, with '=' and value if appropriate, such as:
17 17
18 usbcore.blinkenlights=1 18 usbcore.blinkenlights=1
19 19
20 This document may not be entirely up to date and comprehensive. The command 20 This document may not be entirely up to date and comprehensive. The command
21 "modinfo -p ${modulename}" shows a current list of all parameters of a loadable 21 "modinfo -p ${modulename}" shows a current list of all parameters of a loadable
22 module. Loadable modules, after being loaded into the running kernel, also 22 module. Loadable modules, after being loaded into the running kernel, also
23 reveal their parameters in /sys/module/${modulename}/parameters/. Some of these 23 reveal their parameters in /sys/module/${modulename}/parameters/. Some of these
24 parameters may be changed at runtime by the command 24 parameters may be changed at runtime by the command
25 "echo -n ${value} > /sys/module/${modulename}/parameters/${parm}". 25 "echo -n ${value} > /sys/module/${modulename}/parameters/${parm}".
26 26
27 The parameters listed below are only valid if certain kernel build options were 27 The parameters listed below are only valid if certain kernel build options were
28 enabled and if respective hardware is present. The text in square brackets at 28 enabled and if respective hardware is present. The text in square brackets at
29 the beginning of each description states the restrictions within which a 29 the beginning of each description states the restrictions within which a
30 parameter is applicable: 30 parameter is applicable:
31 31
32 ACPI ACPI support is enabled. 32 ACPI ACPI support is enabled.
33 AGP AGP (Accelerated Graphics Port) is enabled. 33 AGP AGP (Accelerated Graphics Port) is enabled.
34 ALSA ALSA sound support is enabled. 34 ALSA ALSA sound support is enabled.
35 APIC APIC support is enabled. 35 APIC APIC support is enabled.
36 APM Advanced Power Management support is enabled. 36 APM Advanced Power Management support is enabled.
37 AVR32 AVR32 architecture is enabled. 37 AVR32 AVR32 architecture is enabled.
38 AX25 Appropriate AX.25 support is enabled. 38 AX25 Appropriate AX.25 support is enabled.
39 BLACKFIN Blackfin architecture is enabled. 39 BLACKFIN Blackfin architecture is enabled.
40 DRM Direct Rendering Management support is enabled. 40 DRM Direct Rendering Management support is enabled.
41 EDD BIOS Enhanced Disk Drive Services (EDD) is enabled 41 EDD BIOS Enhanced Disk Drive Services (EDD) is enabled
42 EFI EFI Partitioning (GPT) is enabled 42 EFI EFI Partitioning (GPT) is enabled
43 EIDE EIDE/ATAPI support is enabled. 43 EIDE EIDE/ATAPI support is enabled.
44 FB The frame buffer device is enabled. 44 FB The frame buffer device is enabled.
45 HW Appropriate hardware is enabled. 45 HW Appropriate hardware is enabled.
46 IA-64 IA-64 architecture is enabled. 46 IA-64 IA-64 architecture is enabled.
47 IOSCHED More than one I/O scheduler is enabled. 47 IOSCHED More than one I/O scheduler is enabled.
48 IP_PNP IP DHCP, BOOTP, or RARP is enabled. 48 IP_PNP IP DHCP, BOOTP, or RARP is enabled.
49 ISAPNP ISA PnP code is enabled. 49 ISAPNP ISA PnP code is enabled.
50 ISDN Appropriate ISDN support is enabled. 50 ISDN Appropriate ISDN support is enabled.
51 JOY Appropriate joystick support is enabled. 51 JOY Appropriate joystick support is enabled.
52 LIBATA Libata driver is enabled 52 LIBATA Libata driver is enabled
53 LP Printer support is enabled. 53 LP Printer support is enabled.
54 LOOP Loopback device support is enabled. 54 LOOP Loopback device support is enabled.
55 M68k M68k architecture is enabled. 55 M68k M68k architecture is enabled.
56 These options have more detailed description inside of 56 These options have more detailed description inside of
57 Documentation/m68k/kernel-options.txt. 57 Documentation/m68k/kernel-options.txt.
58 MCA MCA bus support is enabled. 58 MCA MCA bus support is enabled.
59 MDA MDA console support is enabled. 59 MDA MDA console support is enabled.
60 MOUSE Appropriate mouse support is enabled. 60 MOUSE Appropriate mouse support is enabled.
61 MSI Message Signaled Interrupts (PCI). 61 MSI Message Signaled Interrupts (PCI).
62 MTD MTD (Memory Technology Device) support is enabled. 62 MTD MTD (Memory Technology Device) support is enabled.
63 NET Appropriate network support is enabled. 63 NET Appropriate network support is enabled.
64 NUMA NUMA support is enabled. 64 NUMA NUMA support is enabled.
65 GENERIC_TIME The generic timeofday code is enabled. 65 GENERIC_TIME The generic timeofday code is enabled.
66 NFS Appropriate NFS support is enabled. 66 NFS Appropriate NFS support is enabled.
67 OSS OSS sound support is enabled. 67 OSS OSS sound support is enabled.
68 PV_OPS A paravirtualized kernel is enabled. 68 PV_OPS A paravirtualized kernel is enabled.
69 PARIDE The ParIDE (parallel port IDE) subsystem is enabled. 69 PARIDE The ParIDE (parallel port IDE) subsystem is enabled.
70 PARISC The PA-RISC architecture is enabled. 70 PARISC The PA-RISC architecture is enabled.
71 PCI PCI bus support is enabled. 71 PCI PCI bus support is enabled.
72 PCIE PCI Express support is enabled. 72 PCIE PCI Express support is enabled.
73 PCMCIA The PCMCIA subsystem is enabled. 73 PCMCIA The PCMCIA subsystem is enabled.
74 PNP Plug & Play support is enabled. 74 PNP Plug & Play support is enabled.
75 PPC PowerPC architecture is enabled. 75 PPC PowerPC architecture is enabled.
76 PPT Parallel port support is enabled. 76 PPT Parallel port support is enabled.
77 PS2 Appropriate PS/2 support is enabled. 77 PS2 Appropriate PS/2 support is enabled.
78 RAM RAM disk support is enabled. 78 RAM RAM disk support is enabled.
79 ROOTPLUG The example Root Plug LSM is enabled. 79 ROOTPLUG The example Root Plug LSM is enabled.
80 S390 S390 architecture is enabled. 80 S390 S390 architecture is enabled.
81 SCSI Appropriate SCSI support is enabled. 81 SCSI Appropriate SCSI support is enabled.
82 A lot of drivers has their options described inside of 82 A lot of drivers has their options described inside of
83 Documentation/scsi/. 83 Documentation/scsi/.
84 SECURITY Different security models are enabled. 84 SECURITY Different security models are enabled.
85 SELINUX SELinux support is enabled. 85 SELINUX SELinux support is enabled.
86 SERIAL Serial support is enabled. 86 SERIAL Serial support is enabled.
87 SH SuperH architecture is enabled. 87 SH SuperH architecture is enabled.
88 SMP The kernel is an SMP kernel. 88 SMP The kernel is an SMP kernel.
89 SPARC Sparc architecture is enabled. 89 SPARC Sparc architecture is enabled.
90 SWSUSP Software suspend is enabled. 90 SWSUSP Software suspend is enabled.
91 TS Appropriate touchscreen support is enabled. 91 TS Appropriate touchscreen support is enabled.
92 USB USB support is enabled. 92 USB USB support is enabled.
93 USBHID USB Human Interface Device support is enabled. 93 USBHID USB Human Interface Device support is enabled.
94 V4L Video For Linux support is enabled. 94 V4L Video For Linux support is enabled.
95 VGA The VGA console has been enabled. 95 VGA The VGA console has been enabled.
96 VT Virtual terminal support is enabled. 96 VT Virtual terminal support is enabled.
97 WDT Watchdog support is enabled. 97 WDT Watchdog support is enabled.
98 XT IBM PC/XT MFM hard disk support is enabled. 98 XT IBM PC/XT MFM hard disk support is enabled.
99 X86-32 X86-32, aka i386 architecture is enabled. 99 X86-32 X86-32, aka i386 architecture is enabled.
100 X86-64 X86-64 architecture is enabled. 100 X86-64 X86-64 architecture is enabled.
101 More X86-64 boot options can be found in 101 More X86-64 boot options can be found in
102 Documentation/x86_64/boot-options.txt . 102 Documentation/x86_64/boot-options.txt .
103 103
104 In addition, the following text indicates that the option: 104 In addition, the following text indicates that the option:
105 105
106 BUGS= Relates to possible processor bugs on the said processor. 106 BUGS= Relates to possible processor bugs on the said processor.
107 KNL Is a kernel start-up parameter. 107 KNL Is a kernel start-up parameter.
108 BOOT Is a boot loader parameter. 108 BOOT Is a boot loader parameter.
109 109
110 Parameters denoted with BOOT are actually interpreted by the boot 110 Parameters denoted with BOOT are actually interpreted by the boot
111 loader, and have no meaning to the kernel directly. 111 loader, and have no meaning to the kernel directly.
112 Do not modify the syntax of boot loader parameters without extreme 112 Do not modify the syntax of boot loader parameters without extreme
113 need or coordination with <Documentation/i386/boot.txt>. 113 need or coordination with <Documentation/i386/boot.txt>.
114 114
115 There are also arch-specific kernel-parameters not documented here. 115 There are also arch-specific kernel-parameters not documented here.
116 See for example <Documentation/x86_64/boot-options.txt>. 116 See for example <Documentation/x86_64/boot-options.txt>.
117 117
118 Note that ALL kernel parameters listed below are CASE SENSITIVE, and that 118 Note that ALL kernel parameters listed below are CASE SENSITIVE, and that
119 a trailing = on the name of any parameter states that that parameter will 119 a trailing = on the name of any parameter states that that parameter will
120 be entered as an environment variable, whereas its absence indicates that 120 be entered as an environment variable, whereas its absence indicates that
121 it will appear as a kernel argument readable via /proc/cmdline by programs 121 it will appear as a kernel argument readable via /proc/cmdline by programs
122 running once the system is up. 122 running once the system is up.
123 123
124 The number of kernel parameters is not limited, but the length of the 124 The number of kernel parameters is not limited, but the length of the
125 complete command line (parameters including spaces etc.) is limited to 125 complete command line (parameters including spaces etc.) is limited to
126 a fixed number of characters. This limit depends on the architecture 126 a fixed number of characters. This limit depends on the architecture
127 and is between 256 and 4096 characters. It is defined in the file 127 and is between 256 and 4096 characters. It is defined in the file
128 ./include/asm/setup.h as COMMAND_LINE_SIZE. 128 ./include/asm/setup.h as COMMAND_LINE_SIZE.
129 129
130 130
131 acpi= [HW,ACPI,X86-64,i386] 131 acpi= [HW,ACPI,X86-64,i386]
132 Advanced Configuration and Power Interface 132 Advanced Configuration and Power Interface
133 Format: { force | off | ht | strict | noirq } 133 Format: { force | off | ht | strict | noirq }
134 force -- enable ACPI if default was off 134 force -- enable ACPI if default was off
135 off -- disable ACPI if default was on 135 off -- disable ACPI if default was on
136 noirq -- do not use ACPI for IRQ routing 136 noirq -- do not use ACPI for IRQ routing
137 ht -- run only enough ACPI to enable Hyper Threading 137 ht -- run only enough ACPI to enable Hyper Threading
138 strict -- Be less tolerant of platforms that are not 138 strict -- Be less tolerant of platforms that are not
139 strictly ACPI specification compliant. 139 strictly ACPI specification compliant.
140 140
141 See also Documentation/power/pm.txt, pci=noacpi 141 See also Documentation/power/pm.txt, pci=noacpi
142 142
143 acpi_apic_instance= [ACPI, IOAPIC] 143 acpi_apic_instance= [ACPI, IOAPIC]
144 Format: <int> 144 Format: <int>
145 2: use 2nd APIC table, if available 145 2: use 2nd APIC table, if available
146 1,0: use 1st APIC table 146 1,0: use 1st APIC table
147 default: 0 147 default: 0
148 148
149 acpi_sleep= [HW,ACPI] Sleep options 149 acpi_sleep= [HW,ACPI] Sleep options
150 Format: { s3_bios, s3_mode, s3_beep } 150 Format: { s3_bios, s3_mode, s3_beep }
151 See Documentation/power/video.txt for s3_bios and s3_mode. 151 See Documentation/power/video.txt for s3_bios and s3_mode.
152 s3_beep is for debugging; it makes the PC's speaker beep 152 s3_beep is for debugging; it makes the PC's speaker beep
153 as soon as the kernel's real-mode entry point is called. 153 as soon as the kernel's real-mode entry point is called.
154 154
155 acpi_sci= [HW,ACPI] ACPI System Control Interrupt trigger mode 155 acpi_sci= [HW,ACPI] ACPI System Control Interrupt trigger mode
156 Format: { level | edge | high | low } 156 Format: { level | edge | high | low }
157 157
158 acpi_irq_balance [HW,ACPI] 158 acpi_irq_balance [HW,ACPI]
159 ACPI will balance active IRQs 159 ACPI will balance active IRQs
160 default in APIC mode 160 default in APIC mode
161 161
162 acpi_irq_nobalance [HW,ACPI] 162 acpi_irq_nobalance [HW,ACPI]
163 ACPI will not move active IRQs (default) 163 ACPI will not move active IRQs (default)
164 default in PIC mode 164 default in PIC mode
165 165
166 acpi_irq_pci= [HW,ACPI] If irq_balance, clear listed IRQs for 166 acpi_irq_pci= [HW,ACPI] If irq_balance, clear listed IRQs for
167 use by PCI 167 use by PCI
168 Format: <irq>,<irq>... 168 Format: <irq>,<irq>...
169 169
170 acpi_irq_isa= [HW,ACPI] If irq_balance, mark listed IRQs used by ISA 170 acpi_irq_isa= [HW,ACPI] If irq_balance, mark listed IRQs used by ISA
171 Format: <irq>,<irq>... 171 Format: <irq>,<irq>...
172 172
173 acpi_no_auto_ssdt [HW,ACPI] Disable automatic loading of SSDT 173 acpi_no_auto_ssdt [HW,ACPI] Disable automatic loading of SSDT
174 174
175 acpi_os_name= [HW,ACPI] Tell ACPI BIOS the name of the OS 175 acpi_os_name= [HW,ACPI] Tell ACPI BIOS the name of the OS
176 Format: To spoof as Windows 98: ="Microsoft Windows" 176 Format: To spoof as Windows 98: ="Microsoft Windows"
177 177
178 acpi_osi= [HW,ACPI] Modify list of supported OS interface strings 178 acpi_osi= [HW,ACPI] Modify list of supported OS interface strings
179 acpi_osi="string1" # add string1 -- only one string 179 acpi_osi="string1" # add string1 -- only one string
180 acpi_osi="!string2" # remove built-in string2 180 acpi_osi="!string2" # remove built-in string2
181 acpi_osi= # disable all strings 181 acpi_osi= # disable all strings
182 182
183 acpi_serialize [HW,ACPI] force serialization of AML methods 183 acpi_serialize [HW,ACPI] force serialization of AML methods
184 184
185 acpi_skip_timer_override [HW,ACPI] 185 acpi_skip_timer_override [HW,ACPI]
186 Recognize and ignore IRQ0/pin2 Interrupt Override. 186 Recognize and ignore IRQ0/pin2 Interrupt Override.
187 For broken nForce2 BIOS resulting in XT-PIC timer. 187 For broken nForce2 BIOS resulting in XT-PIC timer.
188 acpi_use_timer_override [HW,ACPI} 188 acpi_use_timer_override [HW,ACPI}
189 Use timer override. For some broken Nvidia NF5 boards 189 Use timer override. For some broken Nvidia NF5 boards
190 that require a timer override, but don't have 190 that require a timer override, but don't have
191 HPET 191 HPET
192 192
193 acpi.debug_layer= [HW,ACPI] 193 acpi.debug_layer= [HW,ACPI]
194 Format: <int> 194 Format: <int>
195 Each bit of the <int> indicates an ACPI debug layer, 195 Each bit of the <int> indicates an ACPI debug layer,
196 1: enable, 0: disable. It is useful for boot time 196 1: enable, 0: disable. It is useful for boot time
197 debugging. After system has booted up, it can be set 197 debugging. After system has booted up, it can be set
198 via /sys/module/acpi/parameters/debug_layer. 198 via /sys/module/acpi/parameters/debug_layer.
199 CONFIG_ACPI_DEBUG must be enabled for this to produce any output. 199 CONFIG_ACPI_DEBUG must be enabled for this to produce any output.
200 Available bits (add the numbers together) to enable debug output 200 Available bits (add the numbers together) to enable debug output
201 for specific parts of the ACPI subsystem: 201 for specific parts of the ACPI subsystem:
202 0x01 utilities 0x02 hardware 0x04 events 0x08 tables 202 0x01 utilities 0x02 hardware 0x04 events 0x08 tables
203 0x10 namespace 0x20 parser 0x40 dispatcher 203 0x10 namespace 0x20 parser 0x40 dispatcher
204 0x80 executer 0x100 resources 0x200 acpica debugger 204 0x80 executer 0x100 resources 0x200 acpica debugger
205 0x400 os services 0x800 acpica disassembler. 205 0x400 os services 0x800 acpica disassembler.
206 The number can be in decimal or prefixed with 0x in hex. 206 The number can be in decimal or prefixed with 0x in hex.
207 Warning: Many of these options can produce a lot of 207 Warning: Many of these options can produce a lot of
208 output and make your system unusable. Be very careful. 208 output and make your system unusable. Be very careful.
209 209
210 acpi.debug_level= [HW,ACPI] 210 acpi.debug_level= [HW,ACPI]
211 Format: <int> 211 Format: <int>
212 Each bit of the <int> indicates an ACPI debug level, 212 Each bit of the <int> indicates an ACPI debug level,
213 1: enable, 0: disable. It is useful for boot time 213 1: enable, 0: disable. It is useful for boot time
214 debugging. After system has booted up, it can be set 214 debugging. After system has booted up, it can be set
215 via /sys/module/acpi/parameters/debug_level. 215 via /sys/module/acpi/parameters/debug_level.
216 CONFIG_ACPI_DEBUG must be enabled for this to produce any output. 216 CONFIG_ACPI_DEBUG must be enabled for this to produce any output.
217 Available bits (add the numbers together) to enable different 217 Available bits (add the numbers together) to enable different
218 debug output levels of the ACPI subsystem: 218 debug output levels of the ACPI subsystem:
219 0x01 error 0x02 warn 0x04 init 0x08 debug object 219 0x01 error 0x02 warn 0x04 init 0x08 debug object
220 0x10 info 0x20 init names 0x40 parse 0x80 load 220 0x10 info 0x20 init names 0x40 parse 0x80 load
221 0x100 dispatch 0x200 execute 0x400 names 0x800 operation region 221 0x100 dispatch 0x200 execute 0x400 names 0x800 operation region
222 0x1000 bfield 0x2000 tables 0x4000 values 0x8000 objects 222 0x1000 bfield 0x2000 tables 0x4000 values 0x8000 objects
223 0x10000 resources 0x20000 user requests 0x40000 package. 223 0x10000 resources 0x20000 user requests 0x40000 package.
224 The number can be in decimal or prefixed with 0x in hex. 224 The number can be in decimal or prefixed with 0x in hex.
225 Warning: Many of these options can produce a lot of 225 Warning: Many of these options can produce a lot of
226 output and make your system unusable. Be very careful. 226 output and make your system unusable. Be very careful.
227 227
228 acpi_pm_good [X86-32,X86-64] 228 acpi_pm_good [X86-32,X86-64]
229 Override the pmtimer bug detection: force the kernel 229 Override the pmtimer bug detection: force the kernel
230 to assume that this machine's pmtimer latches its value 230 to assume that this machine's pmtimer latches its value
231 and always returns good values. 231 and always returns good values.
232 232
233 agp= [AGP] 233 agp= [AGP]
234 { off | try_unsupported } 234 { off | try_unsupported }
235 off: disable AGP support 235 off: disable AGP support
236 try_unsupported: try to drive unsupported chipsets 236 try_unsupported: try to drive unsupported chipsets
237 (may crash computer or cause data corruption) 237 (may crash computer or cause data corruption)
238 238
239 enable_timer_pin_1 [i386,x86-64] 239 enable_timer_pin_1 [i386,x86-64]
240 Enable PIN 1 of APIC timer 240 Enable PIN 1 of APIC timer
241 Can be useful to work around chipset bugs 241 Can be useful to work around chipset bugs
242 (in particular on some ATI chipsets). 242 (in particular on some ATI chipsets).
243 The kernel tries to set a reasonable default. 243 The kernel tries to set a reasonable default.
244 244
245 disable_timer_pin_1 [i386,x86-64] 245 disable_timer_pin_1 [i386,x86-64]
246 Disable PIN 1 of APIC timer 246 Disable PIN 1 of APIC timer
247 Can be useful to work around chipset bugs. 247 Can be useful to work around chipset bugs.
248 248
249 ad1848= [HW,OSS] 249 ad1848= [HW,OSS]
250 Format: <io>,<irq>,<dma>,<dma2>,<type> 250 Format: <io>,<irq>,<dma>,<dma2>,<type>
251 251
252 advansys= [HW,SCSI] 252 advansys= [HW,SCSI]
253 See header of drivers/scsi/advansys.c. 253 See header of drivers/scsi/advansys.c.
254 254
255 advwdt= [HW,WDT] Advantech WDT 255 advwdt= [HW,WDT] Advantech WDT
256 Format: <iostart>,<iostop> 256 Format: <iostart>,<iostop>
257 257
258 aedsp16= [HW,OSS] Audio Excel DSP 16 258 aedsp16= [HW,OSS] Audio Excel DSP 16
259 Format: <io>,<irq>,<dma>,<mss_io>,<mpu_io>,<mpu_irq> 259 Format: <io>,<irq>,<dma>,<mss_io>,<mpu_io>,<mpu_irq>
260 See also header of sound/oss/aedsp16.c. 260 See also header of sound/oss/aedsp16.c.
261 261
262 aha152x= [HW,SCSI] 262 aha152x= [HW,SCSI]
263 See Documentation/scsi/aha152x.txt. 263 See Documentation/scsi/aha152x.txt.
264 264
265 aha1542= [HW,SCSI] 265 aha1542= [HW,SCSI]
266 Format: <portbase>[,<buson>,<busoff>[,<dmaspeed>]] 266 Format: <portbase>[,<buson>,<busoff>[,<dmaspeed>]]
267 267
268 aic7xxx= [HW,SCSI] 268 aic7xxx= [HW,SCSI]
269 See Documentation/scsi/aic7xxx.txt. 269 See Documentation/scsi/aic7xxx.txt.
270 270
271 aic79xx= [HW,SCSI] 271 aic79xx= [HW,SCSI]
272 See Documentation/scsi/aic79xx.txt. 272 See Documentation/scsi/aic79xx.txt.
273 273
274 amijoy.map= [HW,JOY] Amiga joystick support 274 amijoy.map= [HW,JOY] Amiga joystick support
275 Map of devices attached to JOY0DAT and JOY1DAT 275 Map of devices attached to JOY0DAT and JOY1DAT
276 Format: <a>,<b> 276 Format: <a>,<b>
277 See also Documentation/kernel/input/joystick.txt 277 See also Documentation/kernel/input/joystick.txt
278 278
279 analog.map= [HW,JOY] Analog joystick and gamepad support 279 analog.map= [HW,JOY] Analog joystick and gamepad support
280 Specifies type or capabilities of an analog joystick 280 Specifies type or capabilities of an analog joystick
281 connected to one of 16 gameports 281 connected to one of 16 gameports
282 Format: <type1>,<type2>,..<type16> 282 Format: <type1>,<type2>,..<type16>
283 283
284 apc= [HW,SPARC] 284 apc= [HW,SPARC]
285 Power management functions (SPARCstation-4/5 + deriv.) 285 Power management functions (SPARCstation-4/5 + deriv.)
286 Format: noidle 286 Format: noidle
287 Disable APC CPU standby support. SPARCstation-Fox does 287 Disable APC CPU standby support. SPARCstation-Fox does
288 not play well with APC CPU idle - disable it if you have 288 not play well with APC CPU idle - disable it if you have
289 APC and your system crashes randomly. 289 APC and your system crashes randomly.
290 290
291 apic= [APIC,i386] Advanced Programmable Interrupt Controller 291 apic= [APIC,i386] Advanced Programmable Interrupt Controller
292 Change the output verbosity whilst booting 292 Change the output verbosity whilst booting
293 Format: { quiet (default) | verbose | debug } 293 Format: { quiet (default) | verbose | debug }
294 Change the amount of debugging information output 294 Change the amount of debugging information output
295 when initialising the APIC and IO-APIC components. 295 when initialising the APIC and IO-APIC components.
296 296
297 apm= [APM] Advanced Power Management 297 apm= [APM] Advanced Power Management
298 See header of arch/i386/kernel/apm.c. 298 See header of arch/i386/kernel/apm.c.
299 299
300 arcrimi= [HW,NET] ARCnet - "RIM I" (entirely mem-mapped) cards 300 arcrimi= [HW,NET] ARCnet - "RIM I" (entirely mem-mapped) cards
301 Format: <io>,<irq>,<nodeID> 301 Format: <io>,<irq>,<nodeID>
302 302
303 ataflop= [HW,M68k] 303 ataflop= [HW,M68k]
304 304
305 atarimouse= [HW,MOUSE] Atari Mouse 305 atarimouse= [HW,MOUSE] Atari Mouse
306 306
307 atascsi= [HW,SCSI] Atari SCSI 307 atascsi= [HW,SCSI] Atari SCSI
308 308
309 atkbd.extra= [HW] Enable extra LEDs and keys on IBM RapidAccess, 309 atkbd.extra= [HW] Enable extra LEDs and keys on IBM RapidAccess,
310 EzKey and similar keyboards 310 EzKey and similar keyboards
311 311
312 atkbd.reset= [HW] Reset keyboard during initialization 312 atkbd.reset= [HW] Reset keyboard during initialization
313 313
314 atkbd.set= [HW] Select keyboard code set 314 atkbd.set= [HW] Select keyboard code set
315 Format: <int> (2 = AT (default), 3 = PS/2) 315 Format: <int> (2 = AT (default), 3 = PS/2)
316 316
317 atkbd.scroll= [HW] Enable scroll wheel on MS Office and similar 317 atkbd.scroll= [HW] Enable scroll wheel on MS Office and similar
318 keyboards 318 keyboards
319 319
320 atkbd.softraw= [HW] Choose between synthetic and real raw mode 320 atkbd.softraw= [HW] Choose between synthetic and real raw mode
321 Format: <bool> (0 = real, 1 = synthetic (default)) 321 Format: <bool> (0 = real, 1 = synthetic (default))
322 322
323 atkbd.softrepeat= [HW] 323 atkbd.softrepeat= [HW]
324 Use software keyboard repeat 324 Use software keyboard repeat
325 325
326 autotest [IA64] 326 autotest [IA64]
327 327
328 baycom_epp= [HW,AX25] 328 baycom_epp= [HW,AX25]
329 Format: <io>,<mode> 329 Format: <io>,<mode>
330 330
331 baycom_par= [HW,AX25] BayCom Parallel Port AX.25 Modem 331 baycom_par= [HW,AX25] BayCom Parallel Port AX.25 Modem
332 Format: <io>,<mode> 332 Format: <io>,<mode>
333 See header of drivers/net/hamradio/baycom_par.c. 333 See header of drivers/net/hamradio/baycom_par.c.
334 334
335 baycom_ser_fdx= [HW,AX25] 335 baycom_ser_fdx= [HW,AX25]
336 BayCom Serial Port AX.25 Modem (Full Duplex Mode) 336 BayCom Serial Port AX.25 Modem (Full Duplex Mode)
337 Format: <io>,<irq>,<mode>[,<baud>] 337 Format: <io>,<irq>,<mode>[,<baud>]
338 See header of drivers/net/hamradio/baycom_ser_fdx.c. 338 See header of drivers/net/hamradio/baycom_ser_fdx.c.
339 339
340 baycom_ser_hdx= [HW,AX25] 340 baycom_ser_hdx= [HW,AX25]
341 BayCom Serial Port AX.25 Modem (Half Duplex Mode) 341 BayCom Serial Port AX.25 Modem (Half Duplex Mode)
342 Format: <io>,<irq>,<mode> 342 Format: <io>,<irq>,<mode>
343 See header of drivers/net/hamradio/baycom_ser_hdx.c. 343 See header of drivers/net/hamradio/baycom_ser_hdx.c.
344 344
345 boot_delay= Milliseconds to delay each printk during boot. 345 boot_delay= Milliseconds to delay each printk during boot.
346 Values larger than 10 seconds (10000) are changed to 346 Values larger than 10 seconds (10000) are changed to
347 no delay (0). 347 no delay (0).
348 Format: integer 348 Format: integer
349 349
350 bttv.card= [HW,V4L] bttv (bt848 + bt878 based grabber cards) 350 bttv.card= [HW,V4L] bttv (bt848 + bt878 based grabber cards)
351 bttv.radio= Most important insmod options are available as 351 bttv.radio= Most important insmod options are available as
352 kernel args too. 352 kernel args too.
353 bttv.pll= See Documentation/video4linux/bttv/Insmod-options 353 bttv.pll= See Documentation/video4linux/bttv/Insmod-options
354 bttv.tuner= and Documentation/video4linux/bttv/CARDLIST 354 bttv.tuner= and Documentation/video4linux/bttv/CARDLIST
355 355
356 BusLogic= [HW,SCSI] 356 BusLogic= [HW,SCSI]
357 See drivers/scsi/BusLogic.c, comment before function 357 See drivers/scsi/BusLogic.c, comment before function
358 BusLogic_ParseDriverOptions(). 358 BusLogic_ParseDriverOptions().
359 359
360 c101= [NET] Moxa C101 synchronous serial card 360 c101= [NET] Moxa C101 synchronous serial card
361 361
362 cachesize= [BUGS=X86-32] Override level 2 CPU cache size detection. 362 cachesize= [BUGS=X86-32] Override level 2 CPU cache size detection.
363 Sometimes CPU hardware bugs make them report the cache 363 Sometimes CPU hardware bugs make them report the cache
364 size incorrectly. The kernel will attempt work arounds 364 size incorrectly. The kernel will attempt work arounds
365 to fix known problems, but for some CPUs it is not 365 to fix known problems, but for some CPUs it is not
366 possible to determine what the correct size should be. 366 possible to determine what the correct size should be.
367 This option provides an override for these situations. 367 This option provides an override for these situations.
368 368
369 capability.disable= 369 capability.disable=
370 [SECURITY] Disable capabilities. This would normally 370 [SECURITY] Disable capabilities. This would normally
371 be used only if an alternative security model is to be 371 be used only if an alternative security model is to be
372 configured. Potentially dangerous and should only be 372 configured. Potentially dangerous and should only be
373 used if you are entirely sure of the consequences. 373 used if you are entirely sure of the consequences.
374 374
375 ccw_timeout_log [S390] 375 ccw_timeout_log [S390]
376 See Documentation/s390/CommonIO for details. 376 See Documentation/s390/CommonIO for details.
377 377
378 cgroup_disable= [KNL] Disable a particular controller 378 cgroup_disable= [KNL] Disable a particular controller
379 Format: {name of the controller(s) to disable} 379 Format: {name of the controller(s) to disable}
380 {Currently supported controllers - "memory"} 380 {Currently supported controllers - "memory"}
381 381
382 checkreqprot [SELINUX] Set initial checkreqprot flag value. 382 checkreqprot [SELINUX] Set initial checkreqprot flag value.
383 Format: { "0" | "1" } 383 Format: { "0" | "1" }
384 See security/selinux/Kconfig help text. 384 See security/selinux/Kconfig help text.
385 0 -- check protection applied by kernel (includes 385 0 -- check protection applied by kernel (includes
386 any implied execute protection). 386 any implied execute protection).
387 1 -- check protection requested by application. 387 1 -- check protection requested by application.
388 Default value is set via a kernel config option. 388 Default value is set via a kernel config option.
389 Value can be changed at runtime via 389 Value can be changed at runtime via
390 /selinux/checkreqprot. 390 /selinux/checkreqprot.
391 391
392 cio_ignore= [S390] 392 cio_ignore= [S390]
393 See Documentation/s390/CommonIO for details. 393 See Documentation/s390/CommonIO for details.
394 394
395 cio_msg= [S390] 395 cio_msg= [S390]
396 See Documentation/s390/CommonIO for details. 396 See Documentation/s390/CommonIO for details.
397 397
398 clock= [BUGS=X86-32, HW] gettimeofday clocksource override. 398 clock= [BUGS=X86-32, HW] gettimeofday clocksource override.
399 [Deprecated] 399 [Deprecated]
400 Forces specified clocksource (if available) to be used 400 Forces specified clocksource (if available) to be used
401 when calculating gettimeofday(). If specified 401 when calculating gettimeofday(). If specified
402 clocksource is not available, it defaults to PIT. 402 clocksource is not available, it defaults to PIT.
403 Format: { pit | tsc | cyclone | pmtmr } 403 Format: { pit | tsc | cyclone | pmtmr }
404 404
405 clocksource= [GENERIC_TIME] Override the default clocksource 405 clocksource= [GENERIC_TIME] Override the default clocksource
406 Format: <string> 406 Format: <string>
407 Override the default clocksource and use the clocksource 407 Override the default clocksource and use the clocksource
408 with the name specified. 408 with the name specified.
409 Some clocksource names to choose from, depending on 409 Some clocksource names to choose from, depending on
410 the platform: 410 the platform:
411 [all] jiffies (this is the base, fallback clocksource) 411 [all] jiffies (this is the base, fallback clocksource)
412 [ACPI] acpi_pm 412 [ACPI] acpi_pm
413 [ARM] imx_timer1,OSTS,netx_timer,mpu_timer2, 413 [ARM] imx_timer1,OSTS,netx_timer,mpu_timer2,
414 pxa_timer,timer3,32k_counter,timer0_1 414 pxa_timer,timer3,32k_counter,timer0_1
415 [AVR32] avr32 415 [AVR32] avr32
416 [X86-32] pit,hpet,tsc,vmi-timer; 416 [X86-32] pit,hpet,tsc,vmi-timer;
417 scx200_hrt on Geode; cyclone on IBM x440 417 scx200_hrt on Geode; cyclone on IBM x440
418 [MIPS] MIPS 418 [MIPS] MIPS
419 [PARISC] cr16 419 [PARISC] cr16
420 [S390] tod 420 [S390] tod
421 [SH] SuperH 421 [SH] SuperH
422 [SPARC64] tick 422 [SPARC64] tick
423 [X86-64] hpet,tsc 423 [X86-64] hpet,tsc
424 424
425 clearcpuid=BITNUM [X86] 425 clearcpuid=BITNUM [X86]
426 Disable CPUID feature X for the kernel. See 426 Disable CPUID feature X for the kernel. See
427 include/asm-x86/cpufeature.h for the valid bit numbers. 427 include/asm-x86/cpufeature.h for the valid bit numbers.
428 Note the Linux specific bits are not necessarily 428 Note the Linux specific bits are not necessarily
429 stable over kernel options, but the vendor specific 429 stable over kernel options, but the vendor specific
430 ones should be. 430 ones should be.
431 Also note that user programs calling CPUID directly 431 Also note that user programs calling CPUID directly
432 or using the feature without checking anything 432 or using the feature without checking anything
433 will still see it. This just prevents it from 433 will still see it. This just prevents it from
434 being used by the kernel or shown in /proc/cpuinfo. 434 being used by the kernel or shown in /proc/cpuinfo.
435 Also note the kernel might malfunction if you disable 435 Also note the kernel might malfunction if you disable
436 some critical bits. 436 some critical bits.
437 437
438 code_bytes [IA32/X86_64] How many bytes of object code to print 438 code_bytes [IA32/X86_64] How many bytes of object code to print
439 in an oops report. 439 in an oops report.
440 Range: 0 - 8192 440 Range: 0 - 8192
441 Default: 64 441 Default: 64
442 442
443 disable_8254_timer 443 disable_8254_timer
444 enable_8254_timer 444 enable_8254_timer
445 [IA32/X86_64] Disable/Enable interrupt 0 timer routing 445 [IA32/X86_64] Disable/Enable interrupt 0 timer routing
446 over the 8254 in addition to over the IO-APIC. The 446 over the 8254 in addition to over the IO-APIC. The
447 kernel tries to set a sensible default. 447 kernel tries to set a sensible default.
448 448
449 hpet= [X86-32,HPET] option to control HPET usage 449 hpet= [X86-32,HPET] option to control HPET usage
450 Format: { enable (default) | disable | force } 450 Format: { enable (default) | disable | force }
451 disable: disable HPET and use PIT instead 451 disable: disable HPET and use PIT instead
452 force: allow force enabled of undocumented chips (ICH4, 452 force: allow force enabled of undocumented chips (ICH4,
453 VIA, nVidia) 453 VIA, nVidia)
454 454
455 com20020= [HW,NET] ARCnet - COM20020 chipset 455 com20020= [HW,NET] ARCnet - COM20020 chipset
456 Format: 456 Format:
457 <io>[,<irq>[,<nodeID>[,<backplane>[,<ckp>[,<timeout>]]]]] 457 <io>[,<irq>[,<nodeID>[,<backplane>[,<ckp>[,<timeout>]]]]]
458 458
459 com90io= [HW,NET] ARCnet - COM90xx chipset (IO-mapped buffers) 459 com90io= [HW,NET] ARCnet - COM90xx chipset (IO-mapped buffers)
460 Format: <io>[,<irq>] 460 Format: <io>[,<irq>]
461 461
462 com90xx= [HW,NET] 462 com90xx= [HW,NET]
463 ARCnet - COM90xx chipset (memory-mapped buffers) 463 ARCnet - COM90xx chipset (memory-mapped buffers)
464 Format: <io>[,<irq>[,<memstart>]] 464 Format: <io>[,<irq>[,<memstart>]]
465 465
466 condev= [HW,S390] console device 466 condev= [HW,S390] console device
467 conmode= 467 conmode=
468 468
469 console= [KNL] Output console device and options. 469 console= [KNL] Output console device and options.
470 470
471 tty<n> Use the virtual console device <n>. 471 tty<n> Use the virtual console device <n>.
472 472
473 ttyS<n>[,options] 473 ttyS<n>[,options]
474 ttyUSB0[,options] 474 ttyUSB0[,options]
475 Use the specified serial port. The options are of 475 Use the specified serial port. The options are of
476 the form "bbbbpnf", where "bbbb" is the baud rate, 476 the form "bbbbpnf", where "bbbb" is the baud rate,
477 "p" is parity ("n", "o", or "e"), "n" is number of 477 "p" is parity ("n", "o", or "e"), "n" is number of
478 bits, and "f" is flow control ("r" for RTS or 478 bits, and "f" is flow control ("r" for RTS or
479 omit it). Default is "9600n8". 479 omit it). Default is "9600n8".
480 480
481 See Documentation/serial-console.txt for more 481 See Documentation/serial-console.txt for more
482 information. See 482 information. See
483 Documentation/networking/netconsole.txt for an 483 Documentation/networking/netconsole.txt for an
484 alternative. 484 alternative.
485 485
486 uart[8250],io,<addr>[,options] 486 uart[8250],io,<addr>[,options]
487 uart[8250],mmio,<addr>[,options] 487 uart[8250],mmio,<addr>[,options]
488 Start an early, polled-mode console on the 8250/16550 488 Start an early, polled-mode console on the 8250/16550
489 UART at the specified I/O port or MMIO address, 489 UART at the specified I/O port or MMIO address,
490 switching to the matching ttyS device later. The 490 switching to the matching ttyS device later. The
491 options are the same as for ttyS, above. 491 options are the same as for ttyS, above.
492 492
493 earlycon= [KNL] Output early console device and options. 493 earlycon= [KNL] Output early console device and options.
494 uart[8250],io,<addr>[,options] 494 uart[8250],io,<addr>[,options]
495 uart[8250],mmio,<addr>[,options] 495 uart[8250],mmio,<addr>[,options]
496 Start an early, polled-mode console on the 8250/16550 496 Start an early, polled-mode console on the 8250/16550
497 UART at the specified I/O port or MMIO address. 497 UART at the specified I/O port or MMIO address.
498 The options are the same as for ttyS, above. 498 The options are the same as for ttyS, above.
499 499
500 no_console_suspend 500 no_console_suspend
501 [HW] Never suspend the console 501 [HW] Never suspend the console
502 Disable suspending of consoles during suspend and 502 Disable suspending of consoles during suspend and
503 hibernate operations. Once disabled, debugging 503 hibernate operations. Once disabled, debugging
504 messages can reach various consoles while the rest 504 messages can reach various consoles while the rest
505 of the system is being put to sleep (ie, while 505 of the system is being put to sleep (ie, while
506 debugging driver suspend/resume hooks). This may 506 debugging driver suspend/resume hooks). This may
507 not work reliably with all consoles, but is known 507 not work reliably with all consoles, but is known
508 to work with serial and VGA consoles. 508 to work with serial and VGA consoles.
509 509
510 cpcihp_generic= [HW,PCI] Generic port I/O CompactPCI driver 510 cpcihp_generic= [HW,PCI] Generic port I/O CompactPCI driver
511 Format: 511 Format:
512 <first_slot>,<last_slot>,<port>,<enum_bit>[,<debug>] 512 <first_slot>,<last_slot>,<port>,<enum_bit>[,<debug>]
513 513
514 crashkernel=nn[KMG]@ss[KMG] 514 crashkernel=nn[KMG]@ss[KMG]
515 [KNL] Reserve a chunk of physical memory to 515 [KNL] Reserve a chunk of physical memory to
516 hold a kernel to switch to with kexec on panic. 516 hold a kernel to switch to with kexec on panic.
517 517
518 crashkernel=range1:size1[,range2:size2,...][@offset] 518 crashkernel=range1:size1[,range2:size2,...][@offset]
519 [KNL] Same as above, but depends on the memory 519 [KNL] Same as above, but depends on the memory
520 in the running system. The syntax of range is 520 in the running system. The syntax of range is
521 start-[end] where start and end are both 521 start-[end] where start and end are both
522 a memory unit (amount[KMG]). See also 522 a memory unit (amount[KMG]). See also
523 Documentation/kdump/kdump.txt for a example. 523 Documentation/kdump/kdump.txt for a example.
524 524
525 cs4232= [HW,OSS] 525 cs4232= [HW,OSS]
526 Format: <io>,<irq>,<dma>,<dma2>,<mpuio>,<mpuirq> 526 Format: <io>,<irq>,<dma>,<dma2>,<mpuio>,<mpuirq>
527 527
528 cs89x0_dma= [HW,NET] 528 cs89x0_dma= [HW,NET]
529 Format: <dma> 529 Format: <dma>
530 530
531 cs89x0_media= [HW,NET] 531 cs89x0_media= [HW,NET]
532 Format: { rj45 | aui | bnc } 532 Format: { rj45 | aui | bnc }
533 533
534 dasd= [HW,NET] 534 dasd= [HW,NET]
535 See header of drivers/s390/block/dasd_devmap.c. 535 See header of drivers/s390/block/dasd_devmap.c.
536 536
537 db9.dev[2|3]= [HW,JOY] Multisystem joystick support via parallel port 537 db9.dev[2|3]= [HW,JOY] Multisystem joystick support via parallel port
538 (one device per port) 538 (one device per port)
539 Format: <port#>,<type> 539 Format: <port#>,<type>
540 See also Documentation/input/joystick-parport.txt 540 See also Documentation/input/joystick-parport.txt
541 541
542 debug [KNL] Enable kernel debugging (events log level). 542 debug [KNL] Enable kernel debugging (events log level).
543 543
544 debug_locks_verbose= 544 debug_locks_verbose=
545 [KNL] verbose self-tests 545 [KNL] verbose self-tests
546 Format=<0|1> 546 Format=<0|1>
547 Print debugging info while doing the locking API 547 Print debugging info while doing the locking API
548 self-tests. 548 self-tests.
549 We default to 0 (no extra messages), setting it to 549 We default to 0 (no extra messages), setting it to
550 1 will print _a lot_ more information - normally 550 1 will print _a lot_ more information - normally
551 only useful to kernel developers. 551 only useful to kernel developers.
552 552
553 decnet.addr= [HW,NET] 553 decnet.addr= [HW,NET]
554 Format: <area>[,<node>] 554 Format: <area>[,<node>]
555 See also Documentation/networking/decnet.txt. 555 See also Documentation/networking/decnet.txt.
556 556
557 vt.default_blu= [VT] 557 vt.default_blu= [VT]
558 Format: <blue0>,<blue1>,<blue2>,...,<blue15> 558 Format: <blue0>,<blue1>,<blue2>,...,<blue15>
559 Change the default blue palette of the console. 559 Change the default blue palette of the console.
560 This is a 16-member array composed of values 560 This is a 16-member array composed of values
561 ranging from 0-255. 561 ranging from 0-255.
562 562
563 vt.default_grn= [VT] 563 vt.default_grn= [VT]
564 Format: <green0>,<green1>,<green2>,...,<green15> 564 Format: <green0>,<green1>,<green2>,...,<green15>
565 Change the default green palette of the console. 565 Change the default green palette of the console.
566 This is a 16-member array composed of values 566 This is a 16-member array composed of values
567 ranging from 0-255. 567 ranging from 0-255.
568 568
569 vt.default_red= [VT] 569 vt.default_red= [VT]
570 Format: <red0>,<red1>,<red2>,...,<red15> 570 Format: <red0>,<red1>,<red2>,...,<red15>
571 Change the default red palette of the console. 571 Change the default red palette of the console.
572 This is a 16-member array composed of values 572 This is a 16-member array composed of values
573 ranging from 0-255. 573 ranging from 0-255.
574 574
575 vt.default_utf8= 575 vt.default_utf8=
576 [VT] 576 [VT]
577 Format=<0|1> 577 Format=<0|1>
578 Set system-wide default UTF-8 mode for all tty's. 578 Set system-wide default UTF-8 mode for all tty's.
579 Default is 1, i.e. UTF-8 mode is enabled for all 579 Default is 1, i.e. UTF-8 mode is enabled for all
580 newly opened terminals. 580 newly opened terminals.
581 581
582 dhash_entries= [KNL] 582 dhash_entries= [KNL]
583 Set number of hash buckets for dentry cache. 583 Set number of hash buckets for dentry cache.
584 584
585 digi= [HW,SERIAL] 585 digi= [HW,SERIAL]
586 IO parameters + enable/disable command. 586 IO parameters + enable/disable command.
587 587
588 digiepca= [HW,SERIAL] 588 digiepca= [HW,SERIAL]
589 See drivers/char/README.epca and 589 See drivers/char/README.epca and
590 Documentation/digiepca.txt. 590 Documentation/digiepca.txt.
591 591
592 disable_mtrr_trim [X86, Intel and AMD only] 592 disable_mtrr_trim [X86, Intel and AMD only]
593 By default the kernel will trim any uncacheable 593 By default the kernel will trim any uncacheable
594 memory out of your available memory pool based on 594 memory out of your available memory pool based on
595 MTRR settings. This parameter disables that behavior, 595 MTRR settings. This parameter disables that behavior,
596 possibly causing your machine to run very slowly. 596 possibly causing your machine to run very slowly.
597 597
598 dmasound= [HW,OSS] Sound subsystem buffers 598 dmasound= [HW,OSS] Sound subsystem buffers
599 599
600 dscc4.setup= [NET] 600 dscc4.setup= [NET]
601 601
602 dtc3181e= [HW,SCSI] 602 dtc3181e= [HW,SCSI]
603 603
604 earlyprintk= [X86-32,X86-64,SH,BLACKFIN] 604 earlyprintk= [X86-32,X86-64,SH,BLACKFIN]
605 earlyprintk=vga 605 earlyprintk=vga
606 earlyprintk=serial[,ttySn[,baudrate]] 606 earlyprintk=serial[,ttySn[,baudrate]]
607 607
608 Append ",keep" to not disable it when the real console 608 Append ",keep" to not disable it when the real console
609 takes over. 609 takes over.
610 610
611 Only vga or serial at a time, not both. 611 Only vga or serial at a time, not both.
612 612
613 Currently only ttyS0 and ttyS1 are supported. 613 Currently only ttyS0 and ttyS1 are supported.
614 614
615 Interaction with the standard serial driver is not 615 Interaction with the standard serial driver is not
616 very good. 616 very good.
617 617
618 The VGA output is eventually overwritten by the real 618 The VGA output is eventually overwritten by the real
619 console. 619 console.
620 620
621 eata= [HW,SCSI] 621 eata= [HW,SCSI]
622 622
623 edd= [EDD] 623 edd= [EDD]
624 Format: {"of[f]" | "sk[ipmbr]"} 624 Format: {"of[f]" | "sk[ipmbr]"}
625 See comment in arch/i386/boot/edd.S 625 See comment in arch/i386/boot/edd.S
626 626
627 eisa_irq_edge= [PARISC,HW] 627 eisa_irq_edge= [PARISC,HW]
628 See header of drivers/parisc/eisa.c. 628 See header of drivers/parisc/eisa.c.
629 629
630 elanfreq= [X86-32] 630 elanfreq= [X86-32]
631 See comment before function elanfreq_setup() in 631 See comment before function elanfreq_setup() in
632 arch/i386/kernel/cpu/cpufreq/elanfreq.c. 632 arch/i386/kernel/cpu/cpufreq/elanfreq.c.
633 633
634 elevator= [IOSCHED] 634 elevator= [IOSCHED]
635 Format: {"anticipatory" | "cfq" | "deadline" | "noop"} 635 Format: {"anticipatory" | "cfq" | "deadline" | "noop"}
636 See Documentation/block/as-iosched.txt and 636 See Documentation/block/as-iosched.txt and
637 Documentation/block/deadline-iosched.txt for details. 637 Documentation/block/deadline-iosched.txt for details.
638 638
639 elfcorehdr= [X86-32, X86_64] 639 elfcorehdr= [X86-32, X86_64]
640 Specifies physical address of start of kernel core 640 Specifies physical address of start of kernel core
641 image elf header. Generally kexec loader will 641 image elf header. Generally kexec loader will
642 pass this option to capture kernel. 642 pass this option to capture kernel.
643 See Documentation/kdump/kdump.txt for details. 643 See Documentation/kdump/kdump.txt for details.
644 644
645 enforcing [SELINUX] Set initial enforcing status. 645 enforcing [SELINUX] Set initial enforcing status.
646 Format: {"0" | "1"} 646 Format: {"0" | "1"}
647 See security/selinux/Kconfig help text. 647 See security/selinux/Kconfig help text.
648 0 -- permissive (log only, no denials). 648 0 -- permissive (log only, no denials).
649 1 -- enforcing (deny and log). 649 1 -- enforcing (deny and log).
650 Default value is 0. 650 Default value is 0.
651 Value can be changed at runtime via /selinux/enforce. 651 Value can be changed at runtime via /selinux/enforce.
652 652
653 es1371= [HW,OSS] 653 es1371= [HW,OSS]
654 Format: <spdif>,[<nomix>,[<amplifier>]] 654 Format: <spdif>,[<nomix>,[<amplifier>]]
655 See also header of sound/oss/es1371.c. 655 See also header of sound/oss/es1371.c.
656 656
657 ether= [HW,NET] Ethernet cards parameters 657 ether= [HW,NET] Ethernet cards parameters
658 This option is obsoleted by the "netdev=" option, which 658 This option is obsoleted by the "netdev=" option, which
659 has equivalent usage. See its documentation for details. 659 has equivalent usage. See its documentation for details.
660 660
661 eurwdt= [HW,WDT] Eurotech CPU-1220/1410 onboard watchdog. 661 eurwdt= [HW,WDT] Eurotech CPU-1220/1410 onboard watchdog.
662 Format: <io>[,<irq>] 662 Format: <io>[,<irq>]
663 663
664 failslab= 664 failslab=
665 fail_page_alloc= 665 fail_page_alloc=
666 fail_make_request=[KNL] 666 fail_make_request=[KNL]
667 General fault injection mechanism. 667 General fault injection mechanism.
668 Format: <interval>,<probability>,<space>,<times> 668 Format: <interval>,<probability>,<space>,<times>
669 See also /Documentation/fault-injection/. 669 See also /Documentation/fault-injection/.
670 670
671 fd_mcs= [HW,SCSI] 671 fd_mcs= [HW,SCSI]
672 See header of drivers/scsi/fd_mcs.c. 672 See header of drivers/scsi/fd_mcs.c.
673 673
674 fdomain= [HW,SCSI] 674 fdomain= [HW,SCSI]
675 See header of drivers/scsi/fdomain.c. 675 See header of drivers/scsi/fdomain.c.
676 676
677 floppy= [HW] 677 floppy= [HW]
678 See Documentation/floppy.txt. 678 See Documentation/floppy.txt.
679 679
680 gamecon.map[2|3]= 680 gamecon.map[2|3]=
681 [HW,JOY] Multisystem joystick and NES/SNES/PSX pad 681 [HW,JOY] Multisystem joystick and NES/SNES/PSX pad
682 support via parallel port (up to 5 devices per port) 682 support via parallel port (up to 5 devices per port)
683 Format: <port#>,<pad1>,<pad2>,<pad3>,<pad4>,<pad5> 683 Format: <port#>,<pad1>,<pad2>,<pad3>,<pad4>,<pad5>
684 See also Documentation/input/joystick-parport.txt 684 See also Documentation/input/joystick-parport.txt
685 685
686 gamma= [HW,DRM] 686 gamma= [HW,DRM]
687 687
688 gart_fix_e820= [X86_64] disable the fix e820 for K8 GART 688 gart_fix_e820= [X86_64] disable the fix e820 for K8 GART
689 Format: off | on 689 Format: off | on
690 default: on 690 default: on
691 691
692 gdth= [HW,SCSI] 692 gdth= [HW,SCSI]
693 See header of drivers/scsi/gdth.c. 693 See header of drivers/scsi/gdth.c.
694 694
695 gpt [EFI] Forces disk with valid GPT signature but 695 gpt [EFI] Forces disk with valid GPT signature but
696 invalid Protective MBR to be treated as GPT. 696 invalid Protective MBR to be treated as GPT.
697 697
698 gvp11= [HW,SCSI] 698 gvp11= [HW,SCSI]
699 699
700 hashdist= [KNL,NUMA] Large hashes allocated during boot 700 hashdist= [KNL,NUMA] Large hashes allocated during boot
701 are distributed across NUMA nodes. Defaults on 701 are distributed across NUMA nodes. Defaults on
702 for IA-64, off otherwise. 702 for IA-64, off otherwise.
703 Format: 0 | 1 (for off | on) 703 Format: 0 | 1 (for off | on)
704 704
705 hcl= [IA-64] SGI's Hardware Graph compatibility layer 705 hcl= [IA-64] SGI's Hardware Graph compatibility layer
706 706
707 hd= [EIDE] (E)IDE hard drive subsystem geometry 707 hd= [EIDE] (E)IDE hard drive subsystem geometry
708 Format: <cyl>,<head>,<sect> 708 Format: <cyl>,<head>,<sect>
709 709
710 hd?= [HW] (E)IDE subsystem 710 hd?= [HW] (E)IDE subsystem
711 hd?lun= See Documentation/ide/ide.txt. 711 hd?lun= See Documentation/ide/ide.txt.
712 712
713 highmem=nn[KMG] [KNL,BOOT] forces the highmem zone to have an exact 713 highmem=nn[KMG] [KNL,BOOT] forces the highmem zone to have an exact
714 size of <nn>. This works even on boxes that have no 714 size of <nn>. This works even on boxes that have no
715 highmem otherwise. This also works to reduce highmem 715 highmem otherwise. This also works to reduce highmem
716 size on bigger boxes. 716 size on bigger boxes.
717 717
718 highres= [KNL] Enable/disable high resolution timer mode. 718 highres= [KNL] Enable/disable high resolution timer mode.
719 Valid parameters: "on", "off" 719 Valid parameters: "on", "off"
720 Default: "on" 720 Default: "on"
721 721
722 hisax= [HW,ISDN] 722 hisax= [HW,ISDN]
723 See Documentation/isdn/README.HiSax. 723 See Documentation/isdn/README.HiSax.
724 724
725 hugepages= [HW,X86-32,IA-64] Maximal number of HugeTLB pages. 725 hugepages= [HW,X86-32,IA-64] Maximal number of HugeTLB pages.
726 hugepagesz= [HW,IA-64,PPC] The size of the HugeTLB pages. 726 hugepagesz= [HW,IA-64,PPC] The size of the HugeTLB pages.
727 727
728 i8042.direct [HW] Put keyboard port into non-translated mode 728 i8042.direct [HW] Put keyboard port into non-translated mode
729 i8042.dumbkbd [HW] Pretend that controller can only read data from 729 i8042.dumbkbd [HW] Pretend that controller can only read data from
730 keyboard and cannot control its state 730 keyboard and cannot control its state
731 (Don't attempt to blink the leds) 731 (Don't attempt to blink the leds)
732 i8042.noaux [HW] Don't check for auxiliary (== mouse) port 732 i8042.noaux [HW] Don't check for auxiliary (== mouse) port
733 i8042.nokbd [HW] Don't check/create keyboard port 733 i8042.nokbd [HW] Don't check/create keyboard port
734 i8042.noloop [HW] Disable the AUX Loopback command while probing 734 i8042.noloop [HW] Disable the AUX Loopback command while probing
735 for the AUX port 735 for the AUX port
736 i8042.nomux [HW] Don't check presence of an active multiplexing 736 i8042.nomux [HW] Don't check presence of an active multiplexing
737 controller 737 controller
738 i8042.nopnp [HW] Don't use ACPIPnP / PnPBIOS to discover KBD/AUX 738 i8042.nopnp [HW] Don't use ACPIPnP / PnPBIOS to discover KBD/AUX
739 controllers 739 controllers
740 i8042.panicblink= 740 i8042.panicblink=
741 [HW] Frequency with which keyboard LEDs should blink 741 [HW] Frequency with which keyboard LEDs should blink
742 when kernel panics (default is 0.5 sec) 742 when kernel panics (default is 0.5 sec)
743 i8042.reset [HW] Reset the controller during init and cleanup 743 i8042.reset [HW] Reset the controller during init and cleanup
744 i8042.unlock [HW] Unlock (ignore) the keylock 744 i8042.unlock [HW] Unlock (ignore) the keylock
745 745
746 i810= [HW,DRM] 746 i810= [HW,DRM]
747 747
748 i8k.ignore_dmi [HW] Continue probing hardware even if DMI data 748 i8k.ignore_dmi [HW] Continue probing hardware even if DMI data
749 indicates that the driver is running on unsupported 749 indicates that the driver is running on unsupported
750 hardware. 750 hardware.
751 i8k.force [HW] Activate i8k driver even if SMM BIOS signature 751 i8k.force [HW] Activate i8k driver even if SMM BIOS signature
752 does not match list of supported models. 752 does not match list of supported models.
753 i8k.power_status 753 i8k.power_status
754 [HW] Report power status in /proc/i8k 754 [HW] Report power status in /proc/i8k
755 (disabled by default) 755 (disabled by default)
756 i8k.restricted [HW] Allow controlling fans only if SYS_ADMIN 756 i8k.restricted [HW] Allow controlling fans only if SYS_ADMIN
757 capability is set. 757 capability is set.
758 758
759 ibmmcascsi= [HW,MCA,SCSI] IBM MicroChannel SCSI adapter 759 ibmmcascsi= [HW,MCA,SCSI] IBM MicroChannel SCSI adapter
760 See Documentation/mca.txt. 760 See Documentation/mca.txt.
761 761
762 icn= [HW,ISDN] 762 icn= [HW,ISDN]
763 Format: <io>[,<membase>[,<icn_id>[,<icn_id2>]]] 763 Format: <io>[,<membase>[,<icn_id>[,<icn_id2>]]]
764 764
765 ide= [HW] (E)IDE subsystem 765 ide= [HW] (E)IDE subsystem
766 Format: ide=nodma or ide=doubler or ide=reverse 766 Format: ide=nodma or ide=doubler or ide=reverse
767 See Documentation/ide/ide.txt. 767 See Documentation/ide/ide.txt.
768 768
769 ide?= [HW] (E)IDE subsystem 769 ide?= [HW] (E)IDE subsystem
770 Format: ide?=noprobe or chipset specific parameters. 770 Format: ide?=noprobe or chipset specific parameters.
771 See Documentation/ide/ide.txt. 771 See Documentation/ide/ide.txt.
772 772
773 idebus= [HW] (E)IDE subsystem - VLB/PCI bus speed 773 idebus= [HW] (E)IDE subsystem - VLB/PCI bus speed
774 See Documentation/ide/ide.txt. 774 See Documentation/ide/ide.txt.
775 775
776 idle= [X86] 776 idle= [X86]
777 Format: idle=poll or idle=mwait 777 Format: idle=poll or idle=mwait
778 Poll forces a polling idle loop that can slightly improves the performance 778 Poll forces a polling idle loop that can slightly improves the performance
779 of waking up a idle CPU, but will use a lot of power and make the system 779 of waking up a idle CPU, but will use a lot of power and make the system
780 run hot. Not recommended. 780 run hot. Not recommended.
781 idle=mwait. On systems which support MONITOR/MWAIT but the kernel chose 781 idle=mwait. On systems which support MONITOR/MWAIT but the kernel chose
782 to not use it because it doesn't save as much power as a normal idle 782 to not use it because it doesn't save as much power as a normal idle
783 loop use the MONITOR/MWAIT idle loop anyways. Performance should be the same 783 loop use the MONITOR/MWAIT idle loop anyways. Performance should be the same
784 as idle=poll. 784 as idle=poll.
785 785
786 ide-pci-generic.all-generic-ide [HW] (E)IDE subsystem 786 ide-pci-generic.all-generic-ide [HW] (E)IDE subsystem
787 Claim all unknown PCI IDE storage controllers. 787 Claim all unknown PCI IDE storage controllers.
788 788
789 ignore_loglevel [KNL] 789 ignore_loglevel [KNL]
790 Ignore loglevel setting - this will print /all/ 790 Ignore loglevel setting - this will print /all/
791 kernel messages to the console. Useful for debugging. 791 kernel messages to the console. Useful for debugging.
792 792
793 ihash_entries= [KNL] 793 ihash_entries= [KNL]
794 Set number of hash buckets for inode cache. 794 Set number of hash buckets for inode cache.
795 795
796 in2000= [HW,SCSI] 796 in2000= [HW,SCSI]
797 See header of drivers/scsi/in2000.c. 797 See header of drivers/scsi/in2000.c.
798 798
799 init= [KNL] 799 init= [KNL]
800 Format: <full_path> 800 Format: <full_path>
801 Run specified binary instead of /sbin/init as init 801 Run specified binary instead of /sbin/init as init
802 process. 802 process.
803 803
804 initcall_debug [KNL] Trace initcalls as they are executed. Useful 804 initcall_debug [KNL] Trace initcalls as they are executed. Useful
805 for working out where the kernel is dying during 805 for working out where the kernel is dying during
806 startup. 806 startup.
807 807
808 initrd= [BOOT] Specify the location of the initial ramdisk 808 initrd= [BOOT] Specify the location of the initial ramdisk
809 809
810 inport.irq= [HW] Inport (ATI XL and Microsoft) busmouse driver 810 inport.irq= [HW] Inport (ATI XL and Microsoft) busmouse driver
811 Format: <irq> 811 Format: <irq>
812 812
813 inttest= [IA64] 813 inttest= [IA64]
814 814
815 intel_iommu= [DMAR] Intel IOMMU driver (DMAR) option 815 intel_iommu= [DMAR] Intel IOMMU driver (DMAR) option
816 off 816 off
817 Disable intel iommu driver. 817 Disable intel iommu driver.
818 igfx_off [Default Off] 818 igfx_off [Default Off]
819 By default, gfx is mapped as normal device. If a gfx 819 By default, gfx is mapped as normal device. If a gfx
820 device has a dedicated DMAR unit, the DMAR unit is 820 device has a dedicated DMAR unit, the DMAR unit is
821 bypassed by not enabling DMAR with this option. In 821 bypassed by not enabling DMAR with this option. In
822 this case, gfx device will use physical address for 822 this case, gfx device will use physical address for
823 DMA. 823 DMA.
824 forcedac [x86_64] 824 forcedac [x86_64]
825 With this option iommu will not optimize to look 825 With this option iommu will not optimize to look
826 for io virtual address below 32 bit forcing dual 826 for io virtual address below 32 bit forcing dual
827 address cycle on pci bus for cards supporting greater 827 address cycle on pci bus for cards supporting greater
828 than 32 bit addressing. The default is to look 828 than 32 bit addressing. The default is to look
829 for translation below 32 bit and if not available 829 for translation below 32 bit and if not available
830 then look in the higher range. 830 then look in the higher range.
831 831
832 io_delay= [X86-32,X86-64] I/O delay method 832 io_delay= [X86-32,X86-64] I/O delay method
833 0x80 833 0x80
834 Standard port 0x80 based delay 834 Standard port 0x80 based delay
835 0xed 835 0xed
836 Alternate port 0xed based delay (needed on some systems) 836 Alternate port 0xed based delay (needed on some systems)
837 udelay 837 udelay
838 Simple two microseconds delay 838 Simple two microseconds delay
839 none 839 none
840 No delay 840 No delay
841 841
842 io7= [HW] IO7 for Marvel based alpha systems 842 io7= [HW] IO7 for Marvel based alpha systems
843 See comment before marvel_specify_io7 in 843 See comment before marvel_specify_io7 in
844 arch/alpha/kernel/core_marvel.c. 844 arch/alpha/kernel/core_marvel.c.
845 845
846 ip= [IP_PNP] 846 ip= [IP_PNP]
847 See Documentation/nfsroot.txt. 847 See Documentation/filesystems/nfsroot.txt.
848 848
849 ip2= [HW] Set IO/IRQ pairs for up to 4 IntelliPort boards 849 ip2= [HW] Set IO/IRQ pairs for up to 4 IntelliPort boards
850 See comment before ip2_setup() in 850 See comment before ip2_setup() in
851 drivers/char/ip2/ip2base.c. 851 drivers/char/ip2/ip2base.c.
852 852
853 ips= [HW,SCSI] Adaptec / IBM ServeRAID controller 853 ips= [HW,SCSI] Adaptec / IBM ServeRAID controller
854 See header of drivers/scsi/ips.c. 854 See header of drivers/scsi/ips.c.
855 855
856 ports= [IP_VS_FTP] IPVS ftp helper module 856 ports= [IP_VS_FTP] IPVS ftp helper module
857 Default is 21. 857 Default is 21.
858 Up to 8 (IP_VS_APP_MAX_PORTS) ports 858 Up to 8 (IP_VS_APP_MAX_PORTS) ports
859 may be specified. 859 may be specified.
860 Format: <port>,<port>.... 860 Format: <port>,<port>....
861 861
862 irqfixup [HW] 862 irqfixup [HW]
863 When an interrupt is not handled search all handlers 863 When an interrupt is not handled search all handlers
864 for it. Intended to get systems with badly broken 864 for it. Intended to get systems with badly broken
865 firmware running. 865 firmware running.
866 866
867 irqpoll [HW] 867 irqpoll [HW]
868 When an interrupt is not handled search all handlers 868 When an interrupt is not handled search all handlers
869 for it. Also check all handlers each timer 869 for it. Also check all handlers each timer
870 interrupt. Intended to get systems with badly broken 870 interrupt. Intended to get systems with badly broken
871 firmware running. 871 firmware running.
872 872
873 isapnp= [ISAPNP] 873 isapnp= [ISAPNP]
874 Format: <RDP>,<reset>,<pci_scan>,<verbosity> 874 Format: <RDP>,<reset>,<pci_scan>,<verbosity>
875 875
876 isolcpus= [KNL,SMP] Isolate CPUs from the general scheduler. 876 isolcpus= [KNL,SMP] Isolate CPUs from the general scheduler.
877 Format: 877 Format:
878 <cpu number>,...,<cpu number> 878 <cpu number>,...,<cpu number>
879 or 879 or
880 <cpu number>-<cpu number> (must be a positive range in ascending order) 880 <cpu number>-<cpu number> (must be a positive range in ascending order)
881 or a mixture 881 or a mixture
882 <cpu number>,...,<cpu number>-<cpu number> 882 <cpu number>,...,<cpu number>-<cpu number>
883 This option can be used to specify one or more CPUs 883 This option can be used to specify one or more CPUs
884 to isolate from the general SMP balancing and scheduling 884 to isolate from the general SMP balancing and scheduling
885 algorithms. The only way to move a process onto or off 885 algorithms. The only way to move a process onto or off
886 an "isolated" CPU is via the CPU affinity syscalls. 886 an "isolated" CPU is via the CPU affinity syscalls.
887 <cpu number> begins at 0 and the maximum value is 887 <cpu number> begins at 0 and the maximum value is
888 "number of CPUs in system - 1". 888 "number of CPUs in system - 1".
889 889
890 This option is the preferred way to isolate CPUs. The 890 This option is the preferred way to isolate CPUs. The
891 alternative -- manually setting the CPU mask of all 891 alternative -- manually setting the CPU mask of all
892 tasks in the system -- can cause problems and 892 tasks in the system -- can cause problems and
893 suboptimal load balancer performance. 893 suboptimal load balancer performance.
894 894
895 iucv= [HW,NET] 895 iucv= [HW,NET]
896 896
897 js= [HW,JOY] Analog joystick 897 js= [HW,JOY] Analog joystick
898 See Documentation/input/joystick.txt. 898 See Documentation/input/joystick.txt.
899 899
900 kernelcore=nn[KMG] [KNL,X86-32,IA-64,PPC,X86-64] This parameter 900 kernelcore=nn[KMG] [KNL,X86-32,IA-64,PPC,X86-64] This parameter
901 specifies the amount of memory usable by the kernel 901 specifies the amount of memory usable by the kernel
902 for non-movable allocations. The requested amount is 902 for non-movable allocations. The requested amount is
903 spread evenly throughout all nodes in the system. The 903 spread evenly throughout all nodes in the system. The
904 remaining memory in each node is used for Movable 904 remaining memory in each node is used for Movable
905 pages. In the event, a node is too small to have both 905 pages. In the event, a node is too small to have both
906 kernelcore and Movable pages, kernelcore pages will 906 kernelcore and Movable pages, kernelcore pages will
907 take priority and other nodes will have a larger number 907 take priority and other nodes will have a larger number
908 of kernelcore pages. The Movable zone is used for the 908 of kernelcore pages. The Movable zone is used for the
909 allocation of pages that may be reclaimed or moved 909 allocation of pages that may be reclaimed or moved
910 by the page migration subsystem. This means that 910 by the page migration subsystem. This means that
911 HugeTLB pages may not be allocated from this zone. 911 HugeTLB pages may not be allocated from this zone.
912 Note that allocations like PTEs-from-HighMem still 912 Note that allocations like PTEs-from-HighMem still
913 use the HighMem zone if it exists, and the Normal 913 use the HighMem zone if it exists, and the Normal
914 zone if it does not. 914 zone if it does not.
915 915
916 movablecore=nn[KMG] [KNL,X86-32,IA-64,PPC,X86-64] This parameter 916 movablecore=nn[KMG] [KNL,X86-32,IA-64,PPC,X86-64] This parameter
917 is similar to kernelcore except it specifies the 917 is similar to kernelcore except it specifies the
918 amount of memory used for migratable allocations. 918 amount of memory used for migratable allocations.
919 If both kernelcore and movablecore is specified, 919 If both kernelcore and movablecore is specified,
920 then kernelcore will be at *least* the specified 920 then kernelcore will be at *least* the specified
921 value but may be more. If movablecore on its own 921 value but may be more. If movablecore on its own
922 is specified, the administrator must be careful 922 is specified, the administrator must be careful
923 that the amount of memory usable for all allocations 923 that the amount of memory usable for all allocations
924 is not too small. 924 is not too small.
925 925
926 keepinitrd [HW,ARM] 926 keepinitrd [HW,ARM]
927 927
928 kstack=N [X86-32,X86-64] Print N words from the kernel stack 928 kstack=N [X86-32,X86-64] Print N words from the kernel stack
929 in oops dumps. 929 in oops dumps.
930 930
931 l2cr= [PPC] 931 l2cr= [PPC]
932 932
933 lapic [X86-32,APIC] Enable the local APIC even if BIOS 933 lapic [X86-32,APIC] Enable the local APIC even if BIOS
934 disabled it. 934 disabled it.
935 935
936 lapic_timer_c2_ok [X86-32,x86-64,APIC] trust the local apic timer in 936 lapic_timer_c2_ok [X86-32,x86-64,APIC] trust the local apic timer in
937 C2 power state. 937 C2 power state.
938 938
939 libata.dma= [LIBATA] DMA control 939 libata.dma= [LIBATA] DMA control
940 libata.dma=0 Disable all PATA and SATA DMA 940 libata.dma=0 Disable all PATA and SATA DMA
941 libata.dma=1 PATA and SATA Disk DMA only 941 libata.dma=1 PATA and SATA Disk DMA only
942 libata.dma=2 ATAPI (CDROM) DMA only 942 libata.dma=2 ATAPI (CDROM) DMA only
943 libata.dma=4 Compact Flash DMA only 943 libata.dma=4 Compact Flash DMA only
944 Combinations also work, so libata.dma=3 enables DMA 944 Combinations also work, so libata.dma=3 enables DMA
945 for disks and CDROMs, but not CFs. 945 for disks and CDROMs, but not CFs.
946 946
947 libata.noacpi [LIBATA] Disables use of ACPI in libata suspend/resume 947 libata.noacpi [LIBATA] Disables use of ACPI in libata suspend/resume
948 when set. 948 when set.
949 Format: <int> 949 Format: <int>
950 950
951 libata.force= [LIBATA] Force configurations. The format is comma 951 libata.force= [LIBATA] Force configurations. The format is comma
952 separated list of "[ID:]VAL" where ID is 952 separated list of "[ID:]VAL" where ID is
953 PORT[:DEVICE]. PORT and DEVICE are decimal numbers 953 PORT[:DEVICE]. PORT and DEVICE are decimal numbers
954 matching port, link or device. Basically, it matches 954 matching port, link or device. Basically, it matches
955 the ATA ID string printed on console by libata. If 955 the ATA ID string printed on console by libata. If
956 the whole ID part is omitted, the last PORT and DEVICE 956 the whole ID part is omitted, the last PORT and DEVICE
957 values are used. If ID hasn't been specified yet, the 957 values are used. If ID hasn't been specified yet, the
958 configuration applies to all ports, links and devices. 958 configuration applies to all ports, links and devices.
959 959
960 If only DEVICE is omitted, the parameter applies to 960 If only DEVICE is omitted, the parameter applies to
961 the port and all links and devices behind it. DEVICE 961 the port and all links and devices behind it. DEVICE
962 number of 0 either selects the first device or the 962 number of 0 either selects the first device or the
963 first fan-out link behind PMP device. It does not 963 first fan-out link behind PMP device. It does not
964 select the host link. DEVICE number of 15 selects the 964 select the host link. DEVICE number of 15 selects the
965 host link and device attached to it. 965 host link and device attached to it.
966 966
967 The VAL specifies the configuration to force. As long 967 The VAL specifies the configuration to force. As long
968 as there's no ambiguity shortcut notation is allowed. 968 as there's no ambiguity shortcut notation is allowed.
969 For example, both 1.5 and 1.5G would work for 1.5Gbps. 969 For example, both 1.5 and 1.5G would work for 1.5Gbps.
970 The following configurations can be forced. 970 The following configurations can be forced.
971 971
972 * Cable type: 40c, 80c, short40c, unk, ign or sata. 972 * Cable type: 40c, 80c, short40c, unk, ign or sata.
973 Any ID with matching PORT is used. 973 Any ID with matching PORT is used.
974 974
975 * SATA link speed limit: 1.5Gbps or 3.0Gbps. 975 * SATA link speed limit: 1.5Gbps or 3.0Gbps.
976 976
977 * Transfer mode: pio[0-7], mwdma[0-4] and udma[0-7]. 977 * Transfer mode: pio[0-7], mwdma[0-4] and udma[0-7].
978 udma[/][16,25,33,44,66,100,133] notation is also 978 udma[/][16,25,33,44,66,100,133] notation is also
979 allowed. 979 allowed.
980 980
981 * [no]ncq: Turn on or off NCQ. 981 * [no]ncq: Turn on or off NCQ.
982 982
983 If there are multiple matching configurations changing 983 If there are multiple matching configurations changing
984 the same attribute, the last one is used. 984 the same attribute, the last one is used.
985 985
986 load_ramdisk= [RAM] List of ramdisks to load from floppy 986 load_ramdisk= [RAM] List of ramdisks to load from floppy
987 See Documentation/ramdisk.txt. 987 See Documentation/ramdisk.txt.
988 988
989 lockd.nlm_grace_period=P [NFS] Assign grace period. 989 lockd.nlm_grace_period=P [NFS] Assign grace period.
990 Format: <integer> 990 Format: <integer>
991 991
992 lockd.nlm_tcpport=N [NFS] Assign TCP port. 992 lockd.nlm_tcpport=N [NFS] Assign TCP port.
993 Format: <integer> 993 Format: <integer>
994 994
995 lockd.nlm_timeout=T [NFS] Assign timeout value. 995 lockd.nlm_timeout=T [NFS] Assign timeout value.
996 Format: <integer> 996 Format: <integer>
997 997
998 lockd.nlm_udpport=M [NFS] Assign UDP port. 998 lockd.nlm_udpport=M [NFS] Assign UDP port.
999 Format: <integer> 999 Format: <integer>
1000 1000
1001 logibm.irq= [HW,MOUSE] Logitech Bus Mouse Driver 1001 logibm.irq= [HW,MOUSE] Logitech Bus Mouse Driver
1002 Format: <irq> 1002 Format: <irq>
1003 1003
1004 loglevel= All Kernel Messages with a loglevel smaller than the 1004 loglevel= All Kernel Messages with a loglevel smaller than the
1005 console loglevel will be printed to the console. It can 1005 console loglevel will be printed to the console. It can
1006 also be changed with klogd or other programs. The 1006 also be changed with klogd or other programs. The
1007 loglevels are defined as follows: 1007 loglevels are defined as follows:
1008 1008
1009 0 (KERN_EMERG) system is unusable 1009 0 (KERN_EMERG) system is unusable
1010 1 (KERN_ALERT) action must be taken immediately 1010 1 (KERN_ALERT) action must be taken immediately
1011 2 (KERN_CRIT) critical conditions 1011 2 (KERN_CRIT) critical conditions
1012 3 (KERN_ERR) error conditions 1012 3 (KERN_ERR) error conditions
1013 4 (KERN_WARNING) warning conditions 1013 4 (KERN_WARNING) warning conditions
1014 5 (KERN_NOTICE) normal but significant condition 1014 5 (KERN_NOTICE) normal but significant condition
1015 6 (KERN_INFO) informational 1015 6 (KERN_INFO) informational
1016 7 (KERN_DEBUG) debug-level messages 1016 7 (KERN_DEBUG) debug-level messages
1017 1017
1018 log_buf_len=n Sets the size of the printk ring buffer, in bytes. 1018 log_buf_len=n Sets the size of the printk ring buffer, in bytes.
1019 Format: { n | nk | nM } 1019 Format: { n | nk | nM }
1020 n must be a power of two. The default size 1020 n must be a power of two. The default size
1021 is set in the kernel config file. 1021 is set in the kernel config file.
1022 1022
1023 logo.nologo [FB] Disables display of the built-in Linux logo. 1023 logo.nologo [FB] Disables display of the built-in Linux logo.
1024 This may be used to provide more screen space for 1024 This may be used to provide more screen space for
1025 kernel log messages and is useful when debugging 1025 kernel log messages and is useful when debugging
1026 kernel boot problems. 1026 kernel boot problems.
1027 1027
1028 lp=0 [LP] Specify parallel ports to use, e.g, 1028 lp=0 [LP] Specify parallel ports to use, e.g,
1029 lp=port[,port...] lp=none,parport0 (lp0 not configured, lp1 uses 1029 lp=port[,port...] lp=none,parport0 (lp0 not configured, lp1 uses
1030 lp=reset first parallel port). 'lp=0' disables the 1030 lp=reset first parallel port). 'lp=0' disables the
1031 lp=auto printer driver. 'lp=reset' (which can be 1031 lp=auto printer driver. 'lp=reset' (which can be
1032 specified in addition to the ports) causes 1032 specified in addition to the ports) causes
1033 attached printers to be reset. Using 1033 attached printers to be reset. Using
1034 lp=port1,port2,... specifies the parallel ports 1034 lp=port1,port2,... specifies the parallel ports
1035 to associate lp devices with, starting with 1035 to associate lp devices with, starting with
1036 lp0. A port specification may be 'none' to skip 1036 lp0. A port specification may be 'none' to skip
1037 that lp device, or a parport name such as 1037 that lp device, or a parport name such as
1038 'parport0'. Specifying 'lp=auto' instead of a 1038 'parport0'. Specifying 'lp=auto' instead of a
1039 port specification list means that device IDs 1039 port specification list means that device IDs
1040 from each port should be examined, to see if 1040 from each port should be examined, to see if
1041 an IEEE 1284-compliant printer is attached; if 1041 an IEEE 1284-compliant printer is attached; if
1042 so, the driver will manage that printer. 1042 so, the driver will manage that printer.
1043 See also header of drivers/char/lp.c. 1043 See also header of drivers/char/lp.c.
1044 1044
1045 lpj=n [KNL] 1045 lpj=n [KNL]
1046 Sets loops_per_jiffy to given constant, thus avoiding 1046 Sets loops_per_jiffy to given constant, thus avoiding
1047 time-consuming boot-time autodetection (up to 250 ms per 1047 time-consuming boot-time autodetection (up to 250 ms per
1048 CPU). 0 enables autodetection (default). To determine 1048 CPU). 0 enables autodetection (default). To determine
1049 the correct value for your kernel, boot with normal 1049 the correct value for your kernel, boot with normal
1050 autodetection and see what value is printed. Note that 1050 autodetection and see what value is printed. Note that
1051 on SMP systems the preset will be applied to all CPUs, 1051 on SMP systems the preset will be applied to all CPUs,
1052 which is likely to cause problems if your CPUs need 1052 which is likely to cause problems if your CPUs need
1053 significantly divergent settings. An incorrect value 1053 significantly divergent settings. An incorrect value
1054 will cause delays in the kernel to be wrong, leading to 1054 will cause delays in the kernel to be wrong, leading to
1055 unpredictable I/O errors and other breakage. Although 1055 unpredictable I/O errors and other breakage. Although
1056 unlikely, in the extreme case this might damage your 1056 unlikely, in the extreme case this might damage your
1057 hardware. 1057 hardware.
1058 1058
1059 ltpc= [NET] 1059 ltpc= [NET]
1060 Format: <io>,<irq>,<dma> 1060 Format: <io>,<irq>,<dma>
1061 1061
1062 mac5380= [HW,SCSI] Format: 1062 mac5380= [HW,SCSI] Format:
1063 <can_queue>,<cmd_per_lun>,<sg_tablesize>,<hostid>,<use_tags> 1063 <can_queue>,<cmd_per_lun>,<sg_tablesize>,<hostid>,<use_tags>
1064 1064
1065 mac53c9x= [HW,SCSI] Format: 1065 mac53c9x= [HW,SCSI] Format:
1066 <num_esps>,<disconnect>,<nosync>,<can_queue>,<cmd_per_lun>,<sg_tablesize>,<hostid>,<use_tags> 1066 <num_esps>,<disconnect>,<nosync>,<can_queue>,<cmd_per_lun>,<sg_tablesize>,<hostid>,<use_tags>
1067 1067
1068 machvec= [IA64] Force the use of a particular machine-vector 1068 machvec= [IA64] Force the use of a particular machine-vector
1069 (machvec) in a generic kernel. 1069 (machvec) in a generic kernel.
1070 Example: machvec=hpzx1_swiotlb 1070 Example: machvec=hpzx1_swiotlb
1071 1071
1072 max_loop= [LOOP] Maximum number of loopback devices that can 1072 max_loop= [LOOP] Maximum number of loopback devices that can
1073 be mounted 1073 be mounted
1074 Format: <1-256> 1074 Format: <1-256>
1075 1075
1076 maxcpus= [SMP] Maximum number of processors that an SMP kernel 1076 maxcpus= [SMP] Maximum number of processors that an SMP kernel
1077 should make use of. maxcpus=n : n >= 0 limits the 1077 should make use of. maxcpus=n : n >= 0 limits the
1078 kernel to using 'n' processors. n=0 is a special case, 1078 kernel to using 'n' processors. n=0 is a special case,
1079 it is equivalent to "nosmp", which also disables 1079 it is equivalent to "nosmp", which also disables
1080 the IO APIC. 1080 the IO APIC.
1081 1081
1082 max_addr=[KMG] [KNL,BOOT,ia64] All physical memory greater than or 1082 max_addr=[KMG] [KNL,BOOT,ia64] All physical memory greater than or
1083 equal to this physical address is ignored. 1083 equal to this physical address is ignored.
1084 1084
1085 max_luns= [SCSI] Maximum number of LUNs to probe. 1085 max_luns= [SCSI] Maximum number of LUNs to probe.
1086 Should be between 1 and 2^32-1. 1086 Should be between 1 and 2^32-1.
1087 1087
1088 max_report_luns= 1088 max_report_luns=
1089 [SCSI] Maximum number of LUNs received. 1089 [SCSI] Maximum number of LUNs received.
1090 Should be between 1 and 16384. 1090 Should be between 1 and 16384.
1091 1091
1092 mcatest= [IA-64] 1092 mcatest= [IA-64]
1093 1093
1094 mce [X86-32] Machine Check Exception 1094 mce [X86-32] Machine Check Exception
1095 1095
1096 mce=option [X86-64] See Documentation/x86_64/boot-options.txt 1096 mce=option [X86-64] See Documentation/x86_64/boot-options.txt
1097 1097
1098 md= [HW] RAID subsystems devices and level 1098 md= [HW] RAID subsystems devices and level
1099 See Documentation/md.txt. 1099 See Documentation/md.txt.
1100 1100
1101 mdacon= [MDA] 1101 mdacon= [MDA]
1102 Format: <first>,<last> 1102 Format: <first>,<last>
1103 Specifies range of consoles to be captured by the MDA. 1103 Specifies range of consoles to be captured by the MDA.
1104 1104
1105 mem=nn[KMG] [KNL,BOOT] Force usage of a specific amount of memory 1105 mem=nn[KMG] [KNL,BOOT] Force usage of a specific amount of memory
1106 Amount of memory to be used when the kernel is not able 1106 Amount of memory to be used when the kernel is not able
1107 to see the whole system memory or for test. 1107 to see the whole system memory or for test.
1108 [X86-32] Use together with memmap= to avoid physical 1108 [X86-32] Use together with memmap= to avoid physical
1109 address space collisions. Without memmap= PCI devices 1109 address space collisions. Without memmap= PCI devices
1110 could be placed at addresses belonging to unused RAM. 1110 could be placed at addresses belonging to unused RAM.
1111 1111
1112 mem=nopentium [BUGS=X86-32] Disable usage of 4MB pages for kernel 1112 mem=nopentium [BUGS=X86-32] Disable usage of 4MB pages for kernel
1113 memory. 1113 memory.
1114 1114
1115 memmap=exactmap [KNL,X86-32,X86_64] Enable setting of an exact 1115 memmap=exactmap [KNL,X86-32,X86_64] Enable setting of an exact
1116 E820 memory map, as specified by the user. 1116 E820 memory map, as specified by the user.
1117 Such memmap=exactmap lines can be constructed based on 1117 Such memmap=exactmap lines can be constructed based on
1118 BIOS output or other requirements. See the memmap=nn@ss 1118 BIOS output or other requirements. See the memmap=nn@ss
1119 option description. 1119 option description.
1120 1120
1121 memmap=nn[KMG]@ss[KMG] 1121 memmap=nn[KMG]@ss[KMG]
1122 [KNL] Force usage of a specific region of memory 1122 [KNL] Force usage of a specific region of memory
1123 Region of memory to be used, from ss to ss+nn. 1123 Region of memory to be used, from ss to ss+nn.
1124 1124
1125 memmap=nn[KMG]#ss[KMG] 1125 memmap=nn[KMG]#ss[KMG]
1126 [KNL,ACPI] Mark specific memory as ACPI data. 1126 [KNL,ACPI] Mark specific memory as ACPI data.
1127 Region of memory to be used, from ss to ss+nn. 1127 Region of memory to be used, from ss to ss+nn.
1128 1128
1129 memmap=nn[KMG]$ss[KMG] 1129 memmap=nn[KMG]$ss[KMG]
1130 [KNL,ACPI] Mark specific memory as reserved. 1130 [KNL,ACPI] Mark specific memory as reserved.
1131 Region of memory to be used, from ss to ss+nn. 1131 Region of memory to be used, from ss to ss+nn.
1132 Example: Exclude memory from 0x18690000-0x1869ffff 1132 Example: Exclude memory from 0x18690000-0x1869ffff
1133 memmap=64K$0x18690000 1133 memmap=64K$0x18690000
1134 or 1134 or
1135 memmap=0x10000$0x18690000 1135 memmap=0x10000$0x18690000
1136 1136
1137 meye.*= [HW] Set MotionEye Camera parameters 1137 meye.*= [HW] Set MotionEye Camera parameters
1138 See Documentation/video4linux/meye.txt. 1138 See Documentation/video4linux/meye.txt.
1139 1139
1140 mfgpt_irq= [IA-32] Specify the IRQ to use for the 1140 mfgpt_irq= [IA-32] Specify the IRQ to use for the
1141 Multi-Function General Purpose Timers on AMD Geode 1141 Multi-Function General Purpose Timers on AMD Geode
1142 platforms. 1142 platforms.
1143 1143
1144 mfgptfix [X86-32] Fix MFGPT timers on AMD Geode platforms when 1144 mfgptfix [X86-32] Fix MFGPT timers on AMD Geode platforms when
1145 the BIOS has incorrectly applied a workaround. TinyBIOS 1145 the BIOS has incorrectly applied a workaround. TinyBIOS
1146 version 0.98 is known to be affected, 0.99 fixes the 1146 version 0.98 is known to be affected, 0.99 fixes the
1147 problem by letting the user disable the workaround. 1147 problem by letting the user disable the workaround.
1148 1148
1149 mga= [HW,DRM] 1149 mga= [HW,DRM]
1150 1150
1151 mousedev.tap_time= 1151 mousedev.tap_time=
1152 [MOUSE] Maximum time between finger touching and 1152 [MOUSE] Maximum time between finger touching and
1153 leaving touchpad surface for touch to be considered 1153 leaving touchpad surface for touch to be considered
1154 a tap and be reported as a left button click (for 1154 a tap and be reported as a left button click (for
1155 touchpads working in absolute mode only). 1155 touchpads working in absolute mode only).
1156 Format: <msecs> 1156 Format: <msecs>
1157 mousedev.xres= [MOUSE] Horizontal screen resolution, used for devices 1157 mousedev.xres= [MOUSE] Horizontal screen resolution, used for devices
1158 reporting absolute coordinates, such as tablets 1158 reporting absolute coordinates, such as tablets
1159 mousedev.yres= [MOUSE] Vertical screen resolution, used for devices 1159 mousedev.yres= [MOUSE] Vertical screen resolution, used for devices
1160 reporting absolute coordinates, such as tablets 1160 reporting absolute coordinates, such as tablets
1161 1161
1162 mpu401= [HW,OSS] 1162 mpu401= [HW,OSS]
1163 Format: <io>,<irq> 1163 Format: <io>,<irq>
1164 1164
1165 MTD_Partition= [MTD] 1165 MTD_Partition= [MTD]
1166 Format: <name>,<region-number>,<size>,<offset> 1166 Format: <name>,<region-number>,<size>,<offset>
1167 1167
1168 MTD_Region= [MTD] Format: 1168 MTD_Region= [MTD] Format:
1169 <name>,<region-number>[,<base>,<size>,<buswidth>,<altbuswidth>] 1169 <name>,<region-number>[,<base>,<size>,<buswidth>,<altbuswidth>]
1170 1170
1171 mtdparts= [MTD] 1171 mtdparts= [MTD]
1172 See drivers/mtd/cmdlinepart.c. 1172 See drivers/mtd/cmdlinepart.c.
1173 1173
1174 mtouchusb.raw_coordinates= 1174 mtouchusb.raw_coordinates=
1175 [HW] Make the MicroTouch USB driver use raw coordinates 1175 [HW] Make the MicroTouch USB driver use raw coordinates
1176 ('y', default) or cooked coordinates ('n') 1176 ('y', default) or cooked coordinates ('n')
1177 1177
1178 n2= [NET] SDL Inc. RISCom/N2 synchronous serial card 1178 n2= [NET] SDL Inc. RISCom/N2 synchronous serial card
1179 1179
1180 NCR_D700= [HW,SCSI] 1180 NCR_D700= [HW,SCSI]
1181 See header of drivers/scsi/NCR_D700.c. 1181 See header of drivers/scsi/NCR_D700.c.
1182 1182
1183 ncr5380= [HW,SCSI] 1183 ncr5380= [HW,SCSI]
1184 1184
1185 ncr53c400= [HW,SCSI] 1185 ncr53c400= [HW,SCSI]
1186 1186
1187 ncr53c400a= [HW,SCSI] 1187 ncr53c400a= [HW,SCSI]
1188 1188
1189 ncr53c406a= [HW,SCSI] 1189 ncr53c406a= [HW,SCSI]
1190 1190
1191 ncr53c8xx= [HW,SCSI] 1191 ncr53c8xx= [HW,SCSI]
1192 1192
1193 netdev= [NET] Network devices parameters 1193 netdev= [NET] Network devices parameters
1194 Format: <irq>,<io>,<mem_start>,<mem_end>,<name> 1194 Format: <irq>,<io>,<mem_start>,<mem_end>,<name>
1195 Note that mem_start is often overloaded to mean 1195 Note that mem_start is often overloaded to mean
1196 something different and driver-specific. 1196 something different and driver-specific.
1197 This usage is only documented in each driver source 1197 This usage is only documented in each driver source
1198 file if at all. 1198 file if at all.
1199 1199
1200 nfsaddrs= [NFS] 1200 nfsaddrs= [NFS]
1201 See Documentation/nfsroot.txt. 1201 See Documentation/filesystems/nfsroot.txt.
1202 1202
1203 nfsroot= [NFS] nfs root filesystem for disk-less boxes. 1203 nfsroot= [NFS] nfs root filesystem for disk-less boxes.
1204 See Documentation/nfsroot.txt. 1204 See Documentation/filesystems/nfsroot.txt.
1205 1205
1206 nfs.callback_tcpport= 1206 nfs.callback_tcpport=
1207 [NFS] set the TCP port on which the NFSv4 callback 1207 [NFS] set the TCP port on which the NFSv4 callback
1208 channel should listen. 1208 channel should listen.
1209 1209
1210 nfs.idmap_cache_timeout= 1210 nfs.idmap_cache_timeout=
1211 [NFS] set the maximum lifetime for idmapper cache 1211 [NFS] set the maximum lifetime for idmapper cache
1212 entries. 1212 entries.
1213 1213
1214 nfs.enable_ino64= 1214 nfs.enable_ino64=
1215 [NFS] enable 64-bit inode numbers. 1215 [NFS] enable 64-bit inode numbers.
1216 If zero, the NFS client will fake up a 32-bit inode 1216 If zero, the NFS client will fake up a 32-bit inode
1217 number for the readdir() and stat() syscalls instead 1217 number for the readdir() and stat() syscalls instead
1218 of returning the full 64-bit number. 1218 of returning the full 64-bit number.
1219 The default is to return 64-bit inode numbers. 1219 The default is to return 64-bit inode numbers.
1220 1220
1221 nmi_debug= [KNL,AVR32] Specify one or more actions to take 1221 nmi_debug= [KNL,AVR32] Specify one or more actions to take
1222 when a NMI is triggered. 1222 when a NMI is triggered.
1223 Format: [state][,regs][,debounce][,die] 1223 Format: [state][,regs][,debounce][,die]
1224 1224
1225 nmi_watchdog= [KNL,BUGS=X86-32] Debugging features for SMP kernels 1225 nmi_watchdog= [KNL,BUGS=X86-32] Debugging features for SMP kernels
1226 1226
1227 no387 [BUGS=X86-32] Tells the kernel to use the 387 maths 1227 no387 [BUGS=X86-32] Tells the kernel to use the 387 maths
1228 emulation library even if a 387 maths coprocessor 1228 emulation library even if a 387 maths coprocessor
1229 is present. 1229 is present.
1230 1230
1231 noaliencache [MM, NUMA, SLAB] Disables the allocation of alien 1231 noaliencache [MM, NUMA, SLAB] Disables the allocation of alien
1232 caches in the slab allocator. Saves per-node memory, 1232 caches in the slab allocator. Saves per-node memory,
1233 but will impact performance. 1233 but will impact performance.
1234 1234
1235 noalign [KNL,ARM] 1235 noalign [KNL,ARM]
1236 1236
1237 noapic [SMP,APIC] Tells the kernel to not make use of any 1237 noapic [SMP,APIC] Tells the kernel to not make use of any
1238 IOAPICs that may be present in the system. 1238 IOAPICs that may be present in the system.
1239 1239
1240 nobats [PPC] Do not use BATs for mapping kernel lowmem 1240 nobats [PPC] Do not use BATs for mapping kernel lowmem
1241 on "Classic" PPC cores. 1241 on "Classic" PPC cores.
1242 1242
1243 nocache [ARM] 1243 nocache [ARM]
1244 1244
1245 nodelayacct [KNL] Disable per-task delay accounting 1245 nodelayacct [KNL] Disable per-task delay accounting
1246 1246
1247 nodisconnect [HW,SCSI,M68K] Disables SCSI disconnects. 1247 nodisconnect [HW,SCSI,M68K] Disables SCSI disconnects.
1248 1248
1249 noefi [X86-32,X86-64] Disable EFI runtime services support. 1249 noefi [X86-32,X86-64] Disable EFI runtime services support.
1250 1250
1251 noexec [IA-64] 1251 noexec [IA-64]
1252 1252
1253 noexec [X86-32,X86-64] 1253 noexec [X86-32,X86-64]
1254 noexec=on: enable non-executable mappings (default) 1254 noexec=on: enable non-executable mappings (default)
1255 noexec=off: disable nn-executable mappings 1255 noexec=off: disable nn-executable mappings
1256 1256
1257 nofxsr [BUGS=X86-32] Disables x86 floating point extended 1257 nofxsr [BUGS=X86-32] Disables x86 floating point extended
1258 register save and restore. The kernel will only save 1258 register save and restore. The kernel will only save
1259 legacy floating-point registers on task switch. 1259 legacy floating-point registers on task switch.
1260 1260
1261 noclflush [BUGS=X86] Don't use the CLFLUSH instruction 1261 noclflush [BUGS=X86] Don't use the CLFLUSH instruction
1262 1262
1263 nohlt [BUGS=ARM] 1263 nohlt [BUGS=ARM]
1264 1264
1265 no-hlt [BUGS=X86-32] Tells the kernel that the hlt 1265 no-hlt [BUGS=X86-32] Tells the kernel that the hlt
1266 instruction doesn't work correctly and not to 1266 instruction doesn't work correctly and not to
1267 use it. 1267 use it.
1268 1268
1269 nohalt [IA-64] Tells the kernel not to use the power saving 1269 nohalt [IA-64] Tells the kernel not to use the power saving
1270 function PAL_HALT_LIGHT when idle. This increases 1270 function PAL_HALT_LIGHT when idle. This increases
1271 power-consumption. On the positive side, it reduces 1271 power-consumption. On the positive side, it reduces
1272 interrupt wake-up latency, which may improve performance 1272 interrupt wake-up latency, which may improve performance
1273 in certain environments such as networked servers or 1273 in certain environments such as networked servers or
1274 real-time systems. 1274 real-time systems.
1275 1275
1276 nohz= [KNL] Boottime enable/disable dynamic ticks 1276 nohz= [KNL] Boottime enable/disable dynamic ticks
1277 Valid arguments: on, off 1277 Valid arguments: on, off
1278 Default: on 1278 Default: on
1279 1279
1280 noirqbalance [X86-32,SMP,KNL] Disable kernel irq balancing 1280 noirqbalance [X86-32,SMP,KNL] Disable kernel irq balancing
1281 1281
1282 noirqdebug [X86-32] Disables the code which attempts to detect and 1282 noirqdebug [X86-32] Disables the code which attempts to detect and
1283 disable unhandled interrupt sources. 1283 disable unhandled interrupt sources.
1284 1284
1285 no_timer_check [X86-32,X86_64,APIC] Disables the code which tests for 1285 no_timer_check [X86-32,X86_64,APIC] Disables the code which tests for
1286 broken timer IRQ sources. 1286 broken timer IRQ sources.
1287 1287
1288 noisapnp [ISAPNP] Disables ISA PnP code. 1288 noisapnp [ISAPNP] Disables ISA PnP code.
1289 1289
1290 noinitrd [RAM] Tells the kernel not to load any configured 1290 noinitrd [RAM] Tells the kernel not to load any configured
1291 initial RAM disk. 1291 initial RAM disk.
1292 1292
1293 nointroute [IA-64] 1293 nointroute [IA-64]
1294 1294
1295 nojitter [IA64] Disables jitter checking for ITC timers. 1295 nojitter [IA64] Disables jitter checking for ITC timers.
1296 1296
1297 nolapic [X86-32,APIC] Do not enable or use the local APIC. 1297 nolapic [X86-32,APIC] Do not enable or use the local APIC.
1298 1298
1299 nolapic_timer [X86-32,APIC] Do not use the local APIC timer. 1299 nolapic_timer [X86-32,APIC] Do not use the local APIC timer.
1300 1300
1301 noltlbs [PPC] Do not use large page/tlb entries for kernel 1301 noltlbs [PPC] Do not use large page/tlb entries for kernel
1302 lowmem mapping on PPC40x. 1302 lowmem mapping on PPC40x.
1303 1303
1304 nomca [IA-64] Disable machine check abort handling 1304 nomca [IA-64] Disable machine check abort handling
1305 1305
1306 nomce [X86-32] Machine Check Exception 1306 nomce [X86-32] Machine Check Exception
1307 1307
1308 nomfgpt [X86-32] Disable Multi-Function General Purpose 1308 nomfgpt [X86-32] Disable Multi-Function General Purpose
1309 Timer usage (for AMD Geode machines). 1309 Timer usage (for AMD Geode machines).
1310 1310
1311 noreplace-paravirt [X86-32,PV_OPS] Don't patch paravirt_ops 1311 noreplace-paravirt [X86-32,PV_OPS] Don't patch paravirt_ops
1312 1312
1313 noreplace-smp [X86-32,SMP] Don't replace SMP instructions 1313 noreplace-smp [X86-32,SMP] Don't replace SMP instructions
1314 with UP alternatives 1314 with UP alternatives
1315 1315
1316 noresidual [PPC] Don't use residual data on PReP machines. 1316 noresidual [PPC] Don't use residual data on PReP machines.
1317 1317
1318 noresume [SWSUSP] Disables resume and restores original swap 1318 noresume [SWSUSP] Disables resume and restores original swap
1319 space. 1319 space.
1320 1320
1321 no-scroll [VGA] Disables scrollback. 1321 no-scroll [VGA] Disables scrollback.
1322 This is required for the Braillex ib80-piezo Braille 1322 This is required for the Braillex ib80-piezo Braille
1323 reader made by F.H. Papenmeier (Germany). 1323 reader made by F.H. Papenmeier (Germany).
1324 1324
1325 nosbagart [IA-64] 1325 nosbagart [IA-64]
1326 1326
1327 nosep [BUGS=X86-32] Disables x86 SYSENTER/SYSEXIT support. 1327 nosep [BUGS=X86-32] Disables x86 SYSENTER/SYSEXIT support.
1328 1328
1329 nosmp [SMP] Tells an SMP kernel to act as a UP kernel, 1329 nosmp [SMP] Tells an SMP kernel to act as a UP kernel,
1330 and disable the IO APIC. legacy for "maxcpus=0". 1330 and disable the IO APIC. legacy for "maxcpus=0".
1331 1331
1332 nosoftlockup [KNL] Disable the soft-lockup detector. 1332 nosoftlockup [KNL] Disable the soft-lockup detector.
1333 1333
1334 nosync [HW,M68K] Disables sync negotiation for all devices. 1334 nosync [HW,M68K] Disables sync negotiation for all devices.
1335 1335
1336 notsc [BUGS=X86-32] Disable Time Stamp Counter 1336 notsc [BUGS=X86-32] Disable Time Stamp Counter
1337 1337
1338 nousb [USB] Disable the USB subsystem 1338 nousb [USB] Disable the USB subsystem
1339 1339
1340 nowb [ARM] 1340 nowb [ARM]
1341 1341
1342 numa_zonelist_order= [KNL, BOOT] Select zonelist order for NUMA. 1342 numa_zonelist_order= [KNL, BOOT] Select zonelist order for NUMA.
1343 one of ['zone', 'node', 'default'] can be specified 1343 one of ['zone', 'node', 'default'] can be specified
1344 This can be set from sysctl after boot. 1344 This can be set from sysctl after boot.
1345 See Documentation/sysctl/vm.txt for details. 1345 See Documentation/sysctl/vm.txt for details.
1346 1346
1347 nr_uarts= [SERIAL] maximum number of UARTs to be registered. 1347 nr_uarts= [SERIAL] maximum number of UARTs to be registered.
1348 1348
1349 opl3= [HW,OSS] 1349 opl3= [HW,OSS]
1350 Format: <io> 1350 Format: <io>
1351 1351
1352 oprofile.timer= [HW] 1352 oprofile.timer= [HW]
1353 Use timer interrupt instead of performance counters 1353 Use timer interrupt instead of performance counters
1354 1354
1355 osst= [HW,SCSI] SCSI Tape Driver 1355 osst= [HW,SCSI] SCSI Tape Driver
1356 Format: <buffer_size>,<write_threshold> 1356 Format: <buffer_size>,<write_threshold>
1357 See also Documentation/scsi/st.txt. 1357 See also Documentation/scsi/st.txt.
1358 1358
1359 panic= [KNL] Kernel behaviour on panic 1359 panic= [KNL] Kernel behaviour on panic
1360 Format: <timeout> 1360 Format: <timeout>
1361 1361
1362 parkbd.port= [HW] Parallel port number the keyboard adapter is 1362 parkbd.port= [HW] Parallel port number the keyboard adapter is
1363 connected to, default is 0. 1363 connected to, default is 0.
1364 Format: <parport#> 1364 Format: <parport#>
1365 parkbd.mode= [HW] Parallel port keyboard adapter mode of operation, 1365 parkbd.mode= [HW] Parallel port keyboard adapter mode of operation,
1366 0 for XT, 1 for AT (default is AT). 1366 0 for XT, 1 for AT (default is AT).
1367 Format: <mode> 1367 Format: <mode>
1368 1368
1369 parport= [HW,PPT] Specify parallel ports. 0 disables. 1369 parport= [HW,PPT] Specify parallel ports. 0 disables.
1370 Format: { 0 | auto | 0xBBB[,IRQ[,DMA]] } 1370 Format: { 0 | auto | 0xBBB[,IRQ[,DMA]] }
1371 Use 'auto' to force the driver to use any 1371 Use 'auto' to force the driver to use any
1372 IRQ/DMA settings detected (the default is to 1372 IRQ/DMA settings detected (the default is to
1373 ignore detected IRQ/DMA settings because of 1373 ignore detected IRQ/DMA settings because of
1374 possible conflicts). You can specify the base 1374 possible conflicts). You can specify the base
1375 address, IRQ, and DMA settings; IRQ and DMA 1375 address, IRQ, and DMA settings; IRQ and DMA
1376 should be numbers, or 'auto' (for using detected 1376 should be numbers, or 'auto' (for using detected
1377 settings on that particular port), or 'nofifo' 1377 settings on that particular port), or 'nofifo'
1378 (to avoid using a FIFO even if it is detected). 1378 (to avoid using a FIFO even if it is detected).
1379 Parallel ports are assigned in the order they 1379 Parallel ports are assigned in the order they
1380 are specified on the command line, starting 1380 are specified on the command line, starting
1381 with parport0. 1381 with parport0.
1382 1382
1383 parport_init_mode= [HW,PPT] 1383 parport_init_mode= [HW,PPT]
1384 Configure VIA parallel port to operate in 1384 Configure VIA parallel port to operate in
1385 a specific mode. This is necessary on Pegasos 1385 a specific mode. This is necessary on Pegasos
1386 computer where firmware has no options for setting 1386 computer where firmware has no options for setting
1387 up parallel port mode and sets it to spp. 1387 up parallel port mode and sets it to spp.
1388 Currently this function knows 686a and 8231 chips. 1388 Currently this function knows 686a and 8231 chips.
1389 Format: [spp|ps2|epp|ecp|ecpepp] 1389 Format: [spp|ps2|epp|ecp|ecpepp]
1390 1390
1391 pas2= [HW,OSS] Format: 1391 pas2= [HW,OSS] Format:
1392 <io>,<irq>,<dma>,<dma16>,<sb_io>,<sb_irq>,<sb_dma>,<sb_dma16> 1392 <io>,<irq>,<dma>,<dma16>,<sb_io>,<sb_irq>,<sb_dma>,<sb_dma16>
1393 1393
1394 pas16= [HW,SCSI] 1394 pas16= [HW,SCSI]
1395 See header of drivers/scsi/pas16.c. 1395 See header of drivers/scsi/pas16.c.
1396 1396
1397 pause_on_oops= 1397 pause_on_oops=
1398 Halt all CPUs after the first oops has been printed for 1398 Halt all CPUs after the first oops has been printed for
1399 the specified number of seconds. This is to be used if 1399 the specified number of seconds. This is to be used if
1400 your oopses keep scrolling off the screen. 1400 your oopses keep scrolling off the screen.
1401 1401
1402 pcbit= [HW,ISDN] 1402 pcbit= [HW,ISDN]
1403 1403
1404 pcd. [PARIDE] 1404 pcd. [PARIDE]
1405 See header of drivers/block/paride/pcd.c. 1405 See header of drivers/block/paride/pcd.c.
1406 See also Documentation/paride.txt. 1406 See also Documentation/paride.txt.
1407 1407
1408 pci=option[,option...] [PCI] various PCI subsystem options: 1408 pci=option[,option...] [PCI] various PCI subsystem options:
1409 off [X86-32] don't probe for the PCI bus 1409 off [X86-32] don't probe for the PCI bus
1410 bios [X86-32] force use of PCI BIOS, don't access 1410 bios [X86-32] force use of PCI BIOS, don't access
1411 the hardware directly. Use this if your machine 1411 the hardware directly. Use this if your machine
1412 has a non-standard PCI host bridge. 1412 has a non-standard PCI host bridge.
1413 nobios [X86-32] disallow use of PCI BIOS, only direct 1413 nobios [X86-32] disallow use of PCI BIOS, only direct
1414 hardware access methods are allowed. Use this 1414 hardware access methods are allowed. Use this
1415 if you experience crashes upon bootup and you 1415 if you experience crashes upon bootup and you
1416 suspect they are caused by the BIOS. 1416 suspect they are caused by the BIOS.
1417 conf1 [X86-32] Force use of PCI Configuration 1417 conf1 [X86-32] Force use of PCI Configuration
1418 Mechanism 1. 1418 Mechanism 1.
1419 conf2 [X86-32] Force use of PCI Configuration 1419 conf2 [X86-32] Force use of PCI Configuration
1420 Mechanism 2. 1420 Mechanism 2.
1421 noaer [PCIE] If the PCIEAER kernel config parameter is 1421 noaer [PCIE] If the PCIEAER kernel config parameter is
1422 enabled, this kernel boot option can be used to 1422 enabled, this kernel boot option can be used to
1423 disable the use of PCIE advanced error reporting. 1423 disable the use of PCIE advanced error reporting.
1424 nodomains [PCI] Disable support for multiple PCI 1424 nodomains [PCI] Disable support for multiple PCI
1425 root domains (aka PCI segments, in ACPI-speak). 1425 root domains (aka PCI segments, in ACPI-speak).
1426 nommconf [X86-32,X86_64] Disable use of MMCONFIG for PCI 1426 nommconf [X86-32,X86_64] Disable use of MMCONFIG for PCI
1427 Configuration 1427 Configuration
1428 nomsi [MSI] If the PCI_MSI kernel config parameter is 1428 nomsi [MSI] If the PCI_MSI kernel config parameter is
1429 enabled, this kernel boot option can be used to 1429 enabled, this kernel boot option can be used to
1430 disable the use of MSI interrupts system-wide. 1430 disable the use of MSI interrupts system-wide.
1431 nosort [X86-32] Don't sort PCI devices according to 1431 nosort [X86-32] Don't sort PCI devices according to
1432 order given by the PCI BIOS. This sorting is 1432 order given by the PCI BIOS. This sorting is
1433 done to get a device order compatible with 1433 done to get a device order compatible with
1434 older kernels. 1434 older kernels.
1435 biosirq [X86-32] Use PCI BIOS calls to get the interrupt 1435 biosirq [X86-32] Use PCI BIOS calls to get the interrupt
1436 routing table. These calls are known to be buggy 1436 routing table. These calls are known to be buggy
1437 on several machines and they hang the machine 1437 on several machines and they hang the machine
1438 when used, but on other computers it's the only 1438 when used, but on other computers it's the only
1439 way to get the interrupt routing table. Try 1439 way to get the interrupt routing table. Try
1440 this option if the kernel is unable to allocate 1440 this option if the kernel is unable to allocate
1441 IRQs or discover secondary PCI buses on your 1441 IRQs or discover secondary PCI buses on your
1442 motherboard. 1442 motherboard.
1443 rom [X86-32] Assign address space to expansion ROMs. 1443 rom [X86-32] Assign address space to expansion ROMs.
1444 Use with caution as certain devices share 1444 Use with caution as certain devices share
1445 address decoders between ROMs and other 1445 address decoders between ROMs and other
1446 resources. 1446 resources.
1447 irqmask=0xMMMM [X86-32] Set a bit mask of IRQs allowed to be 1447 irqmask=0xMMMM [X86-32] Set a bit mask of IRQs allowed to be
1448 assigned automatically to PCI devices. You can 1448 assigned automatically to PCI devices. You can
1449 make the kernel exclude IRQs of your ISA cards 1449 make the kernel exclude IRQs of your ISA cards
1450 this way. 1450 this way.
1451 pirqaddr=0xAAAAA [X86-32] Specify the physical address 1451 pirqaddr=0xAAAAA [X86-32] Specify the physical address
1452 of the PIRQ table (normally generated 1452 of the PIRQ table (normally generated
1453 by the BIOS) if it is outside the 1453 by the BIOS) if it is outside the
1454 F0000h-100000h range. 1454 F0000h-100000h range.
1455 lastbus=N [X86-32] Scan all buses thru bus #N. Can be 1455 lastbus=N [X86-32] Scan all buses thru bus #N. Can be
1456 useful if the kernel is unable to find your 1456 useful if the kernel is unable to find your
1457 secondary buses and you want to tell it 1457 secondary buses and you want to tell it
1458 explicitly which ones they are. 1458 explicitly which ones they are.
1459 assign-busses [X86-32] Always assign all PCI bus 1459 assign-busses [X86-32] Always assign all PCI bus
1460 numbers ourselves, overriding 1460 numbers ourselves, overriding
1461 whatever the firmware may have done. 1461 whatever the firmware may have done.
1462 usepirqmask [X86-32] Honor the possible IRQ mask stored 1462 usepirqmask [X86-32] Honor the possible IRQ mask stored
1463 in the BIOS $PIR table. This is needed on 1463 in the BIOS $PIR table. This is needed on
1464 some systems with broken BIOSes, notably 1464 some systems with broken BIOSes, notably
1465 some HP Pavilion N5400 and Omnibook XE3 1465 some HP Pavilion N5400 and Omnibook XE3
1466 notebooks. This will have no effect if ACPI 1466 notebooks. This will have no effect if ACPI
1467 IRQ routing is enabled. 1467 IRQ routing is enabled.
1468 noacpi [X86-32] Do not use ACPI for IRQ routing 1468 noacpi [X86-32] Do not use ACPI for IRQ routing
1469 or for PCI scanning. 1469 or for PCI scanning.
1470 use_crs [X86-32] Use _CRS for PCI resource 1470 use_crs [X86-32] Use _CRS for PCI resource
1471 allocation. 1471 allocation.
1472 routeirq Do IRQ routing for all PCI devices. 1472 routeirq Do IRQ routing for all PCI devices.
1473 This is normally done in pci_enable_device(), 1473 This is normally done in pci_enable_device(),
1474 so this option is a temporary workaround 1474 so this option is a temporary workaround
1475 for broken drivers that don't call it. 1475 for broken drivers that don't call it.
1476 firmware [ARM] Do not re-enumerate the bus but instead 1476 firmware [ARM] Do not re-enumerate the bus but instead
1477 just use the configuration from the 1477 just use the configuration from the
1478 bootloader. This is currently used on 1478 bootloader. This is currently used on
1479 IXP2000 systems where the bus has to be 1479 IXP2000 systems where the bus has to be
1480 configured a certain way for adjunct CPUs. 1480 configured a certain way for adjunct CPUs.
1481 noearly [X86] Don't do any early type 1 scanning. 1481 noearly [X86] Don't do any early type 1 scanning.
1482 This might help on some broken boards which 1482 This might help on some broken boards which
1483 machine check when some devices' config space 1483 machine check when some devices' config space
1484 is read. But various workarounds are disabled 1484 is read. But various workarounds are disabled
1485 and some IOMMU drivers will not work. 1485 and some IOMMU drivers will not work.
1486 bfsort Sort PCI devices into breadth-first order. 1486 bfsort Sort PCI devices into breadth-first order.
1487 This sorting is done to get a device 1487 This sorting is done to get a device
1488 order compatible with older (<= 2.4) kernels. 1488 order compatible with older (<= 2.4) kernels.
1489 nobfsort Don't sort PCI devices into breadth-first order. 1489 nobfsort Don't sort PCI devices into breadth-first order.
1490 cbiosize=nn[KMG] The fixed amount of bus space which is 1490 cbiosize=nn[KMG] The fixed amount of bus space which is
1491 reserved for the CardBus bridge's IO window. 1491 reserved for the CardBus bridge's IO window.
1492 The default value is 256 bytes. 1492 The default value is 256 bytes.
1493 cbmemsize=nn[KMG] The fixed amount of bus space which is 1493 cbmemsize=nn[KMG] The fixed amount of bus space which is
1494 reserved for the CardBus bridge's memory 1494 reserved for the CardBus bridge's memory
1495 window. The default value is 64 megabytes. 1495 window. The default value is 64 megabytes.
1496 1496
1497 pcmv= [HW,PCMCIA] BadgePAD 4 1497 pcmv= [HW,PCMCIA] BadgePAD 4
1498 1498
1499 pd. [PARIDE] 1499 pd. [PARIDE]
1500 See Documentation/paride.txt. 1500 See Documentation/paride.txt.
1501 1501
1502 pdcchassis= [PARISC,HW] Disable/Enable PDC Chassis Status codes at 1502 pdcchassis= [PARISC,HW] Disable/Enable PDC Chassis Status codes at
1503 boot time. 1503 boot time.
1504 Format: { 0 | 1 } 1504 Format: { 0 | 1 }
1505 See arch/parisc/kernel/pdc_chassis.c 1505 See arch/parisc/kernel/pdc_chassis.c
1506 1506
1507 pf. [PARIDE] 1507 pf. [PARIDE]
1508 See Documentation/paride.txt. 1508 See Documentation/paride.txt.
1509 1509
1510 pg. [PARIDE] 1510 pg. [PARIDE]
1511 See Documentation/paride.txt. 1511 See Documentation/paride.txt.
1512 1512
1513 pirq= [SMP,APIC] Manual mp-table setup 1513 pirq= [SMP,APIC] Manual mp-table setup
1514 See Documentation/i386/IO-APIC.txt. 1514 See Documentation/i386/IO-APIC.txt.
1515 1515
1516 plip= [PPT,NET] Parallel port network link 1516 plip= [PPT,NET] Parallel port network link
1517 Format: { parport<nr> | timid | 0 } 1517 Format: { parport<nr> | timid | 0 }
1518 See also Documentation/parport.txt. 1518 See also Documentation/parport.txt.
1519 1519
1520 pnpacpi= [ACPI] 1520 pnpacpi= [ACPI]
1521 { off } 1521 { off }
1522 1522
1523 pnpbios= [ISAPNP] 1523 pnpbios= [ISAPNP]
1524 { on | off | curr | res | no-curr | no-res } 1524 { on | off | curr | res | no-curr | no-res }
1525 1525
1526 pnp_reserve_irq= 1526 pnp_reserve_irq=
1527 [ISAPNP] Exclude IRQs for the autoconfiguration 1527 [ISAPNP] Exclude IRQs for the autoconfiguration
1528 1528
1529 pnp_reserve_dma= 1529 pnp_reserve_dma=
1530 [ISAPNP] Exclude DMAs for the autoconfiguration 1530 [ISAPNP] Exclude DMAs for the autoconfiguration
1531 1531
1532 pnp_reserve_io= [ISAPNP] Exclude I/O ports for the autoconfiguration 1532 pnp_reserve_io= [ISAPNP] Exclude I/O ports for the autoconfiguration
1533 Ranges are in pairs (I/O port base and size). 1533 Ranges are in pairs (I/O port base and size).
1534 1534
1535 pnp_reserve_mem= 1535 pnp_reserve_mem=
1536 [ISAPNP] Exclude memory regions for the 1536 [ISAPNP] Exclude memory regions for the
1537 autoconfiguration. 1537 autoconfiguration.
1538 Ranges are in pairs (memory base and size). 1538 Ranges are in pairs (memory base and size).
1539 1539
1540 print-fatal-signals= 1540 print-fatal-signals=
1541 [KNL] debug: print fatal signals 1541 [KNL] debug: print fatal signals
1542 print-fatal-signals=1: print segfault info to 1542 print-fatal-signals=1: print segfault info to
1543 the kernel console. 1543 the kernel console.
1544 default: off. 1544 default: off.
1545 1545
1546 printk.time= Show timing data prefixed to each printk message line 1546 printk.time= Show timing data prefixed to each printk message line
1547 Format: <bool> (1/Y/y=enable, 0/N/n=disable) 1547 Format: <bool> (1/Y/y=enable, 0/N/n=disable)
1548 1548
1549 profile= [KNL] Enable kernel profiling via /proc/profile 1549 profile= [KNL] Enable kernel profiling via /proc/profile
1550 Format: [schedule,]<number> 1550 Format: [schedule,]<number>
1551 Param: "schedule" - profile schedule points. 1551 Param: "schedule" - profile schedule points.
1552 Param: <number> - step/bucket size as a power of 2 for 1552 Param: <number> - step/bucket size as a power of 2 for
1553 statistical time based profiling. 1553 statistical time based profiling.
1554 Param: "sleep" - profile D-state sleeping (millisecs). 1554 Param: "sleep" - profile D-state sleeping (millisecs).
1555 Requires CONFIG_SCHEDSTATS 1555 Requires CONFIG_SCHEDSTATS
1556 Param: "kvm" - profile VM exits. 1556 Param: "kvm" - profile VM exits.
1557 1557
1558 processor.max_cstate= [HW,ACPI] 1558 processor.max_cstate= [HW,ACPI]
1559 Limit processor to maximum C-state 1559 Limit processor to maximum C-state
1560 max_cstate=9 overrides any DMI blacklist limit. 1560 max_cstate=9 overrides any DMI blacklist limit.
1561 1561
1562 processor.nocst [HW,ACPI] 1562 processor.nocst [HW,ACPI]
1563 Ignore the _CST method to determine C-states, 1563 Ignore the _CST method to determine C-states,
1564 instead using the legacy FADT method 1564 instead using the legacy FADT method
1565 1565
1566 prompt_ramdisk= [RAM] List of RAM disks to prompt for floppy disk 1566 prompt_ramdisk= [RAM] List of RAM disks to prompt for floppy disk
1567 before loading. 1567 before loading.
1568 See Documentation/ramdisk.txt. 1568 See Documentation/ramdisk.txt.
1569 1569
1570 psmouse.proto= [HW,MOUSE] Highest PS2 mouse protocol extension to 1570 psmouse.proto= [HW,MOUSE] Highest PS2 mouse protocol extension to
1571 probe for; one of (bare|imps|exps|lifebook|any). 1571 probe for; one of (bare|imps|exps|lifebook|any).
1572 psmouse.rate= [HW,MOUSE] Set desired mouse report rate, in reports 1572 psmouse.rate= [HW,MOUSE] Set desired mouse report rate, in reports
1573 per second. 1573 per second.
1574 psmouse.resetafter= [HW,MOUSE] 1574 psmouse.resetafter= [HW,MOUSE]
1575 Try to reset the device after so many bad packets 1575 Try to reset the device after so many bad packets
1576 (0 = never). 1576 (0 = never).
1577 psmouse.resolution= 1577 psmouse.resolution=
1578 [HW,MOUSE] Set desired mouse resolution, in dpi. 1578 [HW,MOUSE] Set desired mouse resolution, in dpi.
1579 psmouse.smartscroll= 1579 psmouse.smartscroll=
1580 [HW,MOUSE] Controls Logitech smartscroll autorepeat. 1580 [HW,MOUSE] Controls Logitech smartscroll autorepeat.
1581 0 = disabled, 1 = enabled (default). 1581 0 = disabled, 1 = enabled (default).
1582 1582
1583 pss= [HW,OSS] Personal Sound System (ECHO ESC614) 1583 pss= [HW,OSS] Personal Sound System (ECHO ESC614)
1584 Format: 1584 Format:
1585 <io>,<mss_io>,<mss_irq>,<mss_dma>,<mpu_io>,<mpu_irq> 1585 <io>,<mss_io>,<mss_irq>,<mss_dma>,<mpu_io>,<mpu_irq>
1586 1586
1587 pt. [PARIDE] 1587 pt. [PARIDE]
1588 See Documentation/paride.txt. 1588 See Documentation/paride.txt.
1589 1589
1590 pty.legacy_count= 1590 pty.legacy_count=
1591 [KNL] Number of legacy pty's. Overwrites compiled-in 1591 [KNL] Number of legacy pty's. Overwrites compiled-in
1592 default number. 1592 default number.
1593 1593
1594 quiet [KNL] Disable most log messages 1594 quiet [KNL] Disable most log messages
1595 1595
1596 r128= [HW,DRM] 1596 r128= [HW,DRM]
1597 1597
1598 raid= [HW,RAID] 1598 raid= [HW,RAID]
1599 See Documentation/md.txt. 1599 See Documentation/md.txt.
1600 1600
1601 ramdisk_blocksize= [RAM] 1601 ramdisk_blocksize= [RAM]
1602 See Documentation/ramdisk.txt. 1602 See Documentation/ramdisk.txt.
1603 1603
1604 ramdisk_size= [RAM] Sizes of RAM disks in kilobytes 1604 ramdisk_size= [RAM] Sizes of RAM disks in kilobytes
1605 See Documentation/ramdisk.txt. 1605 See Documentation/ramdisk.txt.
1606 1606
1607 rcupdate.blimit= [KNL,BOOT] 1607 rcupdate.blimit= [KNL,BOOT]
1608 Set maximum number of finished RCU callbacks to process 1608 Set maximum number of finished RCU callbacks to process
1609 in one batch. 1609 in one batch.
1610 1610
1611 rcupdate.qhimark= [KNL,BOOT] 1611 rcupdate.qhimark= [KNL,BOOT]
1612 Set threshold of queued 1612 Set threshold of queued
1613 RCU callbacks over which batch limiting is disabled. 1613 RCU callbacks over which batch limiting is disabled.
1614 1614
1615 rcupdate.qlowmark= [KNL,BOOT] 1615 rcupdate.qlowmark= [KNL,BOOT]
1616 Set threshold of queued RCU callbacks below which 1616 Set threshold of queued RCU callbacks below which
1617 batch limiting is re-enabled. 1617 batch limiting is re-enabled.
1618 1618
1619 rdinit= [KNL] 1619 rdinit= [KNL]
1620 Format: <full_path> 1620 Format: <full_path>
1621 Run specified binary instead of /init from the ramdisk, 1621 Run specified binary instead of /init from the ramdisk,
1622 used for early userspace startup. See initrd. 1622 used for early userspace startup. See initrd.
1623 1623
1624 reboot= [BUGS=X86-32,BUGS=ARM,BUGS=IA-64] Rebooting mode 1624 reboot= [BUGS=X86-32,BUGS=ARM,BUGS=IA-64] Rebooting mode
1625 Format: <reboot_mode>[,<reboot_mode2>[,...]] 1625 Format: <reboot_mode>[,<reboot_mode2>[,...]]
1626 See arch/*/kernel/reboot.c or arch/*/kernel/process.c 1626 See arch/*/kernel/reboot.c or arch/*/kernel/process.c
1627 1627
1628 reserve= [KNL,BUGS] Force the kernel to ignore some iomem area 1628 reserve= [KNL,BUGS] Force the kernel to ignore some iomem area
1629 1629
1630 reservetop= [X86-32] 1630 reservetop= [X86-32]
1631 Format: nn[KMG] 1631 Format: nn[KMG]
1632 Reserves a hole at the top of the kernel virtual 1632 Reserves a hole at the top of the kernel virtual
1633 address space. 1633 address space.
1634 1634
1635 reset_devices [KNL] Force drivers to reset the underlying device 1635 reset_devices [KNL] Force drivers to reset the underlying device
1636 during initialization. 1636 during initialization.
1637 1637
1638 resume= [SWSUSP] 1638 resume= [SWSUSP]
1639 Specify the partition device for software suspend 1639 Specify the partition device for software suspend
1640 1640
1641 resume_offset= [SWSUSP] 1641 resume_offset= [SWSUSP]
1642 Specify the offset from the beginning of the partition 1642 Specify the offset from the beginning of the partition
1643 given by "resume=" at which the swap header is located, 1643 given by "resume=" at which the swap header is located,
1644 in <PAGE_SIZE> units (needed only for swap files). 1644 in <PAGE_SIZE> units (needed only for swap files).
1645 See Documentation/power/swsusp-and-swap-files.txt 1645 See Documentation/power/swsusp-and-swap-files.txt
1646 1646
1647 retain_initrd [RAM] Keep initrd memory after extraction 1647 retain_initrd [RAM] Keep initrd memory after extraction
1648 1648
1649 rhash_entries= [KNL,NET] 1649 rhash_entries= [KNL,NET]
1650 Set number of hash buckets for route cache 1650 Set number of hash buckets for route cache
1651 1651
1652 riscom8= [HW,SERIAL] 1652 riscom8= [HW,SERIAL]
1653 Format: <io_board1>[,<io_board2>[,...<io_boardN>]] 1653 Format: <io_board1>[,<io_board2>[,...<io_boardN>]]
1654 1654
1655 ro [KNL] Mount root device read-only on boot 1655 ro [KNL] Mount root device read-only on boot
1656 1656
1657 root= [KNL] Root filesystem 1657 root= [KNL] Root filesystem
1658 1658
1659 rootdelay= [KNL] Delay (in seconds) to pause before attempting to 1659 rootdelay= [KNL] Delay (in seconds) to pause before attempting to
1660 mount the root filesystem 1660 mount the root filesystem
1661 1661
1662 rootflags= [KNL] Set root filesystem mount option string 1662 rootflags= [KNL] Set root filesystem mount option string
1663 1663
1664 rootfstype= [KNL] Set root filesystem type 1664 rootfstype= [KNL] Set root filesystem type
1665 1665
1666 rootwait [KNL] Wait (indefinitely) for root device to show up. 1666 rootwait [KNL] Wait (indefinitely) for root device to show up.
1667 Useful for devices that are detected asynchronously 1667 Useful for devices that are detected asynchronously
1668 (e.g. USB and MMC devices). 1668 (e.g. USB and MMC devices).
1669 1669
1670 root_plug.vendor_id= 1670 root_plug.vendor_id=
1671 [ROOTPLUG] Override the default vendor ID 1671 [ROOTPLUG] Override the default vendor ID
1672 1672
1673 root_plug.product_id= 1673 root_plug.product_id=
1674 [ROOTPLUG] Override the default product ID 1674 [ROOTPLUG] Override the default product ID
1675 1675
1676 root_plug.debug= 1676 root_plug.debug=
1677 [ROOTPLUG] Enable debugging output 1677 [ROOTPLUG] Enable debugging output
1678 1678
1679 rw [KNL] Mount root device read-write on boot 1679 rw [KNL] Mount root device read-write on boot
1680 1680
1681 S [KNL] Run init in single mode 1681 S [KNL] Run init in single mode
1682 1682
1683 sa1100ir [NET] 1683 sa1100ir [NET]
1684 See drivers/net/irda/sa1100_ir.c. 1684 See drivers/net/irda/sa1100_ir.c.
1685 1685
1686 sbni= [NET] Granch SBNI12 leased line adapter 1686 sbni= [NET] Granch SBNI12 leased line adapter
1687 1687
1688 sc1200wdt= [HW,WDT] SC1200 WDT (watchdog) driver 1688 sc1200wdt= [HW,WDT] SC1200 WDT (watchdog) driver
1689 Format: <io>[,<timeout>[,<isapnp>]] 1689 Format: <io>[,<timeout>[,<isapnp>]]
1690 1690
1691 scsi_debug_*= [SCSI] 1691 scsi_debug_*= [SCSI]
1692 See drivers/scsi/scsi_debug.c. 1692 See drivers/scsi/scsi_debug.c.
1693 1693
1694 scsi_default_dev_flags= 1694 scsi_default_dev_flags=
1695 [SCSI] SCSI default device flags 1695 [SCSI] SCSI default device flags
1696 Format: <integer> 1696 Format: <integer>
1697 1697
1698 scsi_dev_flags= [SCSI] Black/white list entry for vendor and model 1698 scsi_dev_flags= [SCSI] Black/white list entry for vendor and model
1699 Format: <vendor>:<model>:<flags> 1699 Format: <vendor>:<model>:<flags>
1700 (flags are integer value) 1700 (flags are integer value)
1701 1701
1702 scsi_logging_level= [SCSI] a bit mask of logging levels 1702 scsi_logging_level= [SCSI] a bit mask of logging levels
1703 See drivers/scsi/scsi_logging.h for bits. Also 1703 See drivers/scsi/scsi_logging.h for bits. Also
1704 settable via sysctl at dev.scsi.logging_level 1704 settable via sysctl at dev.scsi.logging_level
1705 (/proc/sys/dev/scsi/logging_level). 1705 (/proc/sys/dev/scsi/logging_level).
1706 There is also a nice 'scsi_logging_level' script in the 1706 There is also a nice 'scsi_logging_level' script in the
1707 S390-tools package, available for download at 1707 S390-tools package, available for download at
1708 http://www-128.ibm.com/developerworks/linux/linux390/s390-tools-1.5.4.html 1708 http://www-128.ibm.com/developerworks/linux/linux390/s390-tools-1.5.4.html
1709 1709
1710 scsi_mod.scan= [SCSI] sync (default) scans SCSI busses as they are 1710 scsi_mod.scan= [SCSI] sync (default) scans SCSI busses as they are
1711 discovered. async scans them in kernel threads, 1711 discovered. async scans them in kernel threads,
1712 allowing boot to proceed. none ignores them, expecting 1712 allowing boot to proceed. none ignores them, expecting
1713 user space to do the scan. 1713 user space to do the scan.
1714 1714
1715 selinux [SELINUX] Disable or enable SELinux at boot time. 1715 selinux [SELINUX] Disable or enable SELinux at boot time.
1716 Format: { "0" | "1" } 1716 Format: { "0" | "1" }
1717 See security/selinux/Kconfig help text. 1717 See security/selinux/Kconfig help text.
1718 0 -- disable. 1718 0 -- disable.
1719 1 -- enable. 1719 1 -- enable.
1720 Default value is set via kernel config option. 1720 Default value is set via kernel config option.
1721 If enabled at boot time, /selinux/disable can be used 1721 If enabled at boot time, /selinux/disable can be used
1722 later to disable prior to initial policy load. 1722 later to disable prior to initial policy load.
1723 1723
1724 selinux_compat_net = 1724 selinux_compat_net =
1725 [SELINUX] Set initial selinux_compat_net flag value. 1725 [SELINUX] Set initial selinux_compat_net flag value.
1726 Format: { "0" | "1" } 1726 Format: { "0" | "1" }
1727 0 -- use new secmark-based packet controls 1727 0 -- use new secmark-based packet controls
1728 1 -- use legacy packet controls 1728 1 -- use legacy packet controls
1729 Default value is 0 (preferred). 1729 Default value is 0 (preferred).
1730 Value can be changed at runtime via 1730 Value can be changed at runtime via
1731 /selinux/compat_net. 1731 /selinux/compat_net.
1732 1732
1733 serialnumber [BUGS=X86-32] 1733 serialnumber [BUGS=X86-32]
1734 1734
1735 shapers= [NET] 1735 shapers= [NET]
1736 Maximal number of shapers. 1736 Maximal number of shapers.
1737 1737
1738 sim710= [SCSI,HW] 1738 sim710= [SCSI,HW]
1739 See header of drivers/scsi/sim710.c. 1739 See header of drivers/scsi/sim710.c.
1740 1740
1741 simeth= [IA-64] 1741 simeth= [IA-64]
1742 simscsi= 1742 simscsi=
1743 1743
1744 slram= [HW,MTD] 1744 slram= [HW,MTD]
1745 1745
1746 slub_debug[=options[,slabs]] [MM, SLUB] 1746 slub_debug[=options[,slabs]] [MM, SLUB]
1747 Enabling slub_debug allows one to determine the 1747 Enabling slub_debug allows one to determine the
1748 culprit if slab objects become corrupted. Enabling 1748 culprit if slab objects become corrupted. Enabling
1749 slub_debug can create guard zones around objects and 1749 slub_debug can create guard zones around objects and
1750 may poison objects when not in use. Also tracks the 1750 may poison objects when not in use. Also tracks the
1751 last alloc / free. For more information see 1751 last alloc / free. For more information see
1752 Documentation/vm/slub.txt. 1752 Documentation/vm/slub.txt.
1753 1753
1754 slub_max_order= [MM, SLUB] 1754 slub_max_order= [MM, SLUB]
1755 Determines the maximum allowed order for slabs. 1755 Determines the maximum allowed order for slabs.
1756 A high setting may cause OOMs due to memory 1756 A high setting may cause OOMs due to memory
1757 fragmentation. For more information see 1757 fragmentation. For more information see
1758 Documentation/vm/slub.txt. 1758 Documentation/vm/slub.txt.
1759 1759
1760 slub_min_objects= [MM, SLUB] 1760 slub_min_objects= [MM, SLUB]
1761 The minimum number of objects per slab. SLUB will 1761 The minimum number of objects per slab. SLUB will
1762 increase the slab order up to slub_max_order to 1762 increase the slab order up to slub_max_order to
1763 generate a sufficiently large slab able to contain 1763 generate a sufficiently large slab able to contain
1764 the number of objects indicated. The higher the number 1764 the number of objects indicated. The higher the number
1765 of objects the smaller the overhead of tracking slabs 1765 of objects the smaller the overhead of tracking slabs
1766 and the less frequently locks need to be acquired. 1766 and the less frequently locks need to be acquired.
1767 For more information see Documentation/vm/slub.txt. 1767 For more information see Documentation/vm/slub.txt.
1768 1768
1769 slub_min_order= [MM, SLUB] 1769 slub_min_order= [MM, SLUB]
1770 Determines the mininum page order for slabs. Must be 1770 Determines the mininum page order for slabs. Must be
1771 lower than slub_max_order. 1771 lower than slub_max_order.
1772 For more information see Documentation/vm/slub.txt. 1772 For more information see Documentation/vm/slub.txt.
1773 1773
1774 slub_nomerge [MM, SLUB] 1774 slub_nomerge [MM, SLUB]
1775 Disable merging of slabs with similar size. May be 1775 Disable merging of slabs with similar size. May be
1776 necessary if there is some reason to distinguish 1776 necessary if there is some reason to distinguish
1777 allocs to different slabs. Debug options disable 1777 allocs to different slabs. Debug options disable
1778 merging on their own. 1778 merging on their own.
1779 For more information see Documentation/vm/slub.txt. 1779 For more information see Documentation/vm/slub.txt.
1780 1780
1781 smart2= [HW] 1781 smart2= [HW]
1782 Format: <io1>[,<io2>[,...,<io8>]] 1782 Format: <io1>[,<io2>[,...,<io8>]]
1783 1783
1784 smp-alt-once [X86-32,SMP] On a hotplug CPU system, only 1784 smp-alt-once [X86-32,SMP] On a hotplug CPU system, only
1785 attempt to substitute SMP alternatives once at boot. 1785 attempt to substitute SMP alternatives once at boot.
1786 1786
1787 smsc-ircc2.nopnp [HW] Don't use PNP to discover SMC devices 1787 smsc-ircc2.nopnp [HW] Don't use PNP to discover SMC devices
1788 smsc-ircc2.ircc_cfg= [HW] Device configuration I/O port 1788 smsc-ircc2.ircc_cfg= [HW] Device configuration I/O port
1789 smsc-ircc2.ircc_sir= [HW] SIR base I/O port 1789 smsc-ircc2.ircc_sir= [HW] SIR base I/O port
1790 smsc-ircc2.ircc_fir= [HW] FIR base I/O port 1790 smsc-ircc2.ircc_fir= [HW] FIR base I/O port
1791 smsc-ircc2.ircc_irq= [HW] IRQ line 1791 smsc-ircc2.ircc_irq= [HW] IRQ line
1792 smsc-ircc2.ircc_dma= [HW] DMA channel 1792 smsc-ircc2.ircc_dma= [HW] DMA channel
1793 smsc-ircc2.ircc_transceiver= [HW] Transceiver type: 1793 smsc-ircc2.ircc_transceiver= [HW] Transceiver type:
1794 0: Toshiba Satellite 1800 (GP data pin select) 1794 0: Toshiba Satellite 1800 (GP data pin select)
1795 1: Fast pin select (default) 1795 1: Fast pin select (default)
1796 2: ATC IRMode 1796 2: ATC IRMode
1797 1797
1798 snd-ad1816a= [HW,ALSA] 1798 snd-ad1816a= [HW,ALSA]
1799 1799
1800 snd-ad1848= [HW,ALSA] 1800 snd-ad1848= [HW,ALSA]
1801 1801
1802 snd-ali5451= [HW,ALSA] 1802 snd-ali5451= [HW,ALSA]
1803 1803
1804 snd-als100= [HW,ALSA] 1804 snd-als100= [HW,ALSA]
1805 1805
1806 snd-als4000= [HW,ALSA] 1806 snd-als4000= [HW,ALSA]
1807 1807
1808 snd-azt2320= [HW,ALSA] 1808 snd-azt2320= [HW,ALSA]
1809 1809
1810 snd-cmi8330= [HW,ALSA] 1810 snd-cmi8330= [HW,ALSA]
1811 1811
1812 snd-cmipci= [HW,ALSA] 1812 snd-cmipci= [HW,ALSA]
1813 1813
1814 snd-cs4231= [HW,ALSA] 1814 snd-cs4231= [HW,ALSA]
1815 1815
1816 snd-cs4232= [HW,ALSA] 1816 snd-cs4232= [HW,ALSA]
1817 1817
1818 snd-cs4236= [HW,ALSA] 1818 snd-cs4236= [HW,ALSA]
1819 1819
1820 snd-cs4281= [HW,ALSA] 1820 snd-cs4281= [HW,ALSA]
1821 1821
1822 snd-cs46xx= [HW,ALSA] 1822 snd-cs46xx= [HW,ALSA]
1823 1823
1824 snd-dt019x= [HW,ALSA] 1824 snd-dt019x= [HW,ALSA]
1825 1825
1826 snd-dummy= [HW,ALSA] 1826 snd-dummy= [HW,ALSA]
1827 1827
1828 snd-emu10k1= [HW,ALSA] 1828 snd-emu10k1= [HW,ALSA]
1829 1829
1830 snd-ens1370= [HW,ALSA] 1830 snd-ens1370= [HW,ALSA]
1831 1831
1832 snd-ens1371= [HW,ALSA] 1832 snd-ens1371= [HW,ALSA]
1833 1833
1834 snd-es968= [HW,ALSA] 1834 snd-es968= [HW,ALSA]
1835 1835
1836 snd-es1688= [HW,ALSA] 1836 snd-es1688= [HW,ALSA]
1837 1837
1838 snd-es18xx= [HW,ALSA] 1838 snd-es18xx= [HW,ALSA]
1839 1839
1840 snd-es1938= [HW,ALSA] 1840 snd-es1938= [HW,ALSA]
1841 1841
1842 snd-es1968= [HW,ALSA] 1842 snd-es1968= [HW,ALSA]
1843 1843
1844 snd-fm801= [HW,ALSA] 1844 snd-fm801= [HW,ALSA]
1845 1845
1846 snd-gusclassic= [HW,ALSA] 1846 snd-gusclassic= [HW,ALSA]
1847 1847
1848 snd-gusextreme= [HW,ALSA] 1848 snd-gusextreme= [HW,ALSA]
1849 1849
1850 snd-gusmax= [HW,ALSA] 1850 snd-gusmax= [HW,ALSA]
1851 1851
1852 snd-hdsp= [HW,ALSA] 1852 snd-hdsp= [HW,ALSA]
1853 1853
1854 snd-ice1712= [HW,ALSA] 1854 snd-ice1712= [HW,ALSA]
1855 1855
1856 snd-intel8x0= [HW,ALSA] 1856 snd-intel8x0= [HW,ALSA]
1857 1857
1858 snd-interwave= [HW,ALSA] 1858 snd-interwave= [HW,ALSA]
1859 1859
1860 snd-interwave-stb= 1860 snd-interwave-stb=
1861 [HW,ALSA] 1861 [HW,ALSA]
1862 1862
1863 snd-korg1212= [HW,ALSA] 1863 snd-korg1212= [HW,ALSA]
1864 1864
1865 snd-maestro3= [HW,ALSA] 1865 snd-maestro3= [HW,ALSA]
1866 1866
1867 snd-mpu401= [HW,ALSA] 1867 snd-mpu401= [HW,ALSA]
1868 1868
1869 snd-mtpav= [HW,ALSA] 1869 snd-mtpav= [HW,ALSA]
1870 1870
1871 snd-nm256= [HW,ALSA] 1871 snd-nm256= [HW,ALSA]
1872 1872
1873 snd-opl3sa2= [HW,ALSA] 1873 snd-opl3sa2= [HW,ALSA]
1874 1874
1875 snd-opti92x-ad1848= 1875 snd-opti92x-ad1848=
1876 [HW,ALSA] 1876 [HW,ALSA]
1877 1877
1878 snd-opti92x-cs4231= 1878 snd-opti92x-cs4231=
1879 [HW,ALSA] 1879 [HW,ALSA]
1880 1880
1881 snd-opti93x= [HW,ALSA] 1881 snd-opti93x= [HW,ALSA]
1882 1882
1883 snd-pmac= [HW,ALSA] 1883 snd-pmac= [HW,ALSA]
1884 1884
1885 snd-rme32= [HW,ALSA] 1885 snd-rme32= [HW,ALSA]
1886 1886
1887 snd-rme96= [HW,ALSA] 1887 snd-rme96= [HW,ALSA]
1888 1888
1889 snd-rme9652= [HW,ALSA] 1889 snd-rme9652= [HW,ALSA]
1890 1890
1891 snd-sb8= [HW,ALSA] 1891 snd-sb8= [HW,ALSA]
1892 1892
1893 snd-sb16= [HW,ALSA] 1893 snd-sb16= [HW,ALSA]
1894 1894
1895 snd-sbawe= [HW,ALSA] 1895 snd-sbawe= [HW,ALSA]
1896 1896
1897 snd-serial= [HW,ALSA] 1897 snd-serial= [HW,ALSA]
1898 1898
1899 snd-sgalaxy= [HW,ALSA] 1899 snd-sgalaxy= [HW,ALSA]
1900 1900
1901 snd-sonicvibes= [HW,ALSA] 1901 snd-sonicvibes= [HW,ALSA]
1902 1902
1903 snd-sun-amd7930= 1903 snd-sun-amd7930=
1904 [HW,ALSA] 1904 [HW,ALSA]
1905 1905
1906 snd-sun-cs4231= [HW,ALSA] 1906 snd-sun-cs4231= [HW,ALSA]
1907 1907
1908 snd-trident= [HW,ALSA] 1908 snd-trident= [HW,ALSA]
1909 1909
1910 snd-usb-audio= [HW,ALSA,USB] 1910 snd-usb-audio= [HW,ALSA,USB]
1911 1911
1912 snd-via82xx= [HW,ALSA] 1912 snd-via82xx= [HW,ALSA]
1913 1913
1914 snd-virmidi= [HW,ALSA] 1914 snd-virmidi= [HW,ALSA]
1915 1915
1916 snd-wavefront= [HW,ALSA] 1916 snd-wavefront= [HW,ALSA]
1917 1917
1918 snd-ymfpci= [HW,ALSA] 1918 snd-ymfpci= [HW,ALSA]
1919 1919
1920 sonypi.*= [HW] Sony Programmable I/O Control Device driver 1920 sonypi.*= [HW] Sony Programmable I/O Control Device driver
1921 See Documentation/sonypi.txt 1921 See Documentation/sonypi.txt
1922 1922
1923 specialix= [HW,SERIAL] Specialix multi-serial port adapter 1923 specialix= [HW,SERIAL] Specialix multi-serial port adapter
1924 See Documentation/specialix.txt. 1924 See Documentation/specialix.txt.
1925 1925
1926 spia_io_base= [HW,MTD] 1926 spia_io_base= [HW,MTD]
1927 spia_fio_base= 1927 spia_fio_base=
1928 spia_pedr= 1928 spia_pedr=
1929 spia_peddr= 1929 spia_peddr=
1930 1930
1931 sscape= [HW,OSS] 1931 sscape= [HW,OSS]
1932 Format: <io>,<irq>,<dma>,<mpu_io>,<mpu_irq> 1932 Format: <io>,<irq>,<dma>,<mpu_io>,<mpu_irq>
1933 1933
1934 st= [HW,SCSI] SCSI tape parameters (buffers, etc.) 1934 st= [HW,SCSI] SCSI tape parameters (buffers, etc.)
1935 See Documentation/scsi/st.txt. 1935 See Documentation/scsi/st.txt.
1936 1936
1937 sti= [PARISC,HW] 1937 sti= [PARISC,HW]
1938 Format: <num> 1938 Format: <num>
1939 Set the STI (builtin display/keyboard on the HP-PARISC 1939 Set the STI (builtin display/keyboard on the HP-PARISC
1940 machines) console (graphic card) which should be used 1940 machines) console (graphic card) which should be used
1941 as the initial boot-console. 1941 as the initial boot-console.
1942 See also comment in drivers/video/console/sticore.c. 1942 See also comment in drivers/video/console/sticore.c.
1943 1943
1944 sti_font= [HW] 1944 sti_font= [HW]
1945 See comment in drivers/video/console/sticore.c. 1945 See comment in drivers/video/console/sticore.c.
1946 1946
1947 stifb= [HW] 1947 stifb= [HW]
1948 Format: bpp:<bpp1>[:<bpp2>[:<bpp3>...]] 1948 Format: bpp:<bpp1>[:<bpp2>[:<bpp3>...]]
1949 1949
1950 sunrpc.pool_mode= 1950 sunrpc.pool_mode=
1951 [NFS] 1951 [NFS]
1952 Control how the NFS server code allocates CPUs to 1952 Control how the NFS server code allocates CPUs to
1953 service thread pools. Depending on how many NICs 1953 service thread pools. Depending on how many NICs
1954 you have and where their interrupts are bound, this 1954 you have and where their interrupts are bound, this
1955 option will affect which CPUs will do NFS serving. 1955 option will affect which CPUs will do NFS serving.
1956 Note: this parameter cannot be changed while the 1956 Note: this parameter cannot be changed while the
1957 NFS server is running. 1957 NFS server is running.
1958 1958
1959 auto the server chooses an appropriate mode 1959 auto the server chooses an appropriate mode
1960 automatically using heuristics 1960 automatically using heuristics
1961 global a single global pool contains all CPUs 1961 global a single global pool contains all CPUs
1962 percpu one pool for each CPU 1962 percpu one pool for each CPU
1963 pernode one pool for each NUMA node (equivalent 1963 pernode one pool for each NUMA node (equivalent
1964 to global on non-NUMA machines) 1964 to global on non-NUMA machines)
1965 1965
1966 swiotlb= [IA-64] Number of I/O TLB slabs 1966 swiotlb= [IA-64] Number of I/O TLB slabs
1967 1967
1968 switches= [HW,M68k] 1968 switches= [HW,M68k]
1969 1969
1970 sym53c416= [HW,SCSI] 1970 sym53c416= [HW,SCSI]
1971 See header of drivers/scsi/sym53c416.c. 1971 See header of drivers/scsi/sym53c416.c.
1972 1972
1973 sysrq_always_enabled 1973 sysrq_always_enabled
1974 [KNL] 1974 [KNL]
1975 Ignore sysrq setting - this boot parameter will 1975 Ignore sysrq setting - this boot parameter will
1976 neutralize any effect of /proc/sys/kernel/sysrq. 1976 neutralize any effect of /proc/sys/kernel/sysrq.
1977 Useful for debugging. 1977 Useful for debugging.
1978 1978
1979 t128= [HW,SCSI] 1979 t128= [HW,SCSI]
1980 See header of drivers/scsi/t128.c. 1980 See header of drivers/scsi/t128.c.
1981 1981
1982 tdfx= [HW,DRM] 1982 tdfx= [HW,DRM]
1983 1983
1984 thash_entries= [KNL,NET] 1984 thash_entries= [KNL,NET]
1985 Set number of hash buckets for TCP connection 1985 Set number of hash buckets for TCP connection
1986 1986
1987 thermal.act= [HW,ACPI] 1987 thermal.act= [HW,ACPI]
1988 -1: disable all active trip points in all thermal zones 1988 -1: disable all active trip points in all thermal zones
1989 <degrees C>: override all lowest active trip points 1989 <degrees C>: override all lowest active trip points
1990 1990
1991 thermal.crt= [HW,ACPI] 1991 thermal.crt= [HW,ACPI]
1992 -1: disable all critical trip points in all thermal zones 1992 -1: disable all critical trip points in all thermal zones
1993 <degrees C>: lower all critical trip points 1993 <degrees C>: lower all critical trip points
1994 1994
1995 thermal.nocrt= [HW,ACPI] 1995 thermal.nocrt= [HW,ACPI]
1996 Set to disable actions on ACPI thermal zone 1996 Set to disable actions on ACPI thermal zone
1997 critical and hot trip points. 1997 critical and hot trip points.
1998 1998
1999 thermal.off= [HW,ACPI] 1999 thermal.off= [HW,ACPI]
2000 1: disable ACPI thermal control 2000 1: disable ACPI thermal control
2001 2001
2002 thermal.psv= [HW,ACPI] 2002 thermal.psv= [HW,ACPI]
2003 -1: disable all passive trip points 2003 -1: disable all passive trip points
2004 <degrees C>: override all passive trip points to this value 2004 <degrees C>: override all passive trip points to this value
2005 2005
2006 thermal.tzp= [HW,ACPI] 2006 thermal.tzp= [HW,ACPI]
2007 Specify global default ACPI thermal zone polling rate 2007 Specify global default ACPI thermal zone polling rate
2008 <deci-seconds>: poll all this frequency 2008 <deci-seconds>: poll all this frequency
2009 0: no polling (default) 2009 0: no polling (default)
2010 2010
2011 tipar.timeout= [HW,PPT] 2011 tipar.timeout= [HW,PPT]
2012 Set communications timeout in tenths of a second 2012 Set communications timeout in tenths of a second
2013 (default 15). 2013 (default 15).
2014 2014
2015 tipar.delay= [HW,PPT] 2015 tipar.delay= [HW,PPT]
2016 Set inter-bit delay in microseconds (default 10). 2016 Set inter-bit delay in microseconds (default 10).
2017 2017
2018 tmscsim= [HW,SCSI] 2018 tmscsim= [HW,SCSI]
2019 See comment before function dc390_setup() in 2019 See comment before function dc390_setup() in
2020 drivers/scsi/tmscsim.c. 2020 drivers/scsi/tmscsim.c.
2021 2021
2022 tp720= [HW,PS2] 2022 tp720= [HW,PS2]
2023 2023
2024 trix= [HW,OSS] MediaTrix AudioTrix Pro 2024 trix= [HW,OSS] MediaTrix AudioTrix Pro
2025 Format: 2025 Format:
2026 <io>,<irq>,<dma>,<dma2>,<sb_io>,<sb_irq>,<sb_dma>,<mpu_io>,<mpu_irq> 2026 <io>,<irq>,<dma>,<dma2>,<sb_io>,<sb_irq>,<sb_dma>,<mpu_io>,<mpu_irq>
2027 2027
2028 turbografx.map[2|3]= [HW,JOY] 2028 turbografx.map[2|3]= [HW,JOY]
2029 TurboGraFX parallel port interface 2029 TurboGraFX parallel port interface
2030 Format: 2030 Format:
2031 <port#>,<js1>,<js2>,<js3>,<js4>,<js5>,<js6>,<js7> 2031 <port#>,<js1>,<js2>,<js3>,<js4>,<js5>,<js6>,<js7>
2032 See also Documentation/input/joystick-parport.txt 2032 See also Documentation/input/joystick-parport.txt
2033 2033
2034 u14-34f= [HW,SCSI] UltraStor 14F/34F SCSI host adapter 2034 u14-34f= [HW,SCSI] UltraStor 14F/34F SCSI host adapter
2035 See header of drivers/scsi/u14-34f.c. 2035 See header of drivers/scsi/u14-34f.c.
2036 2036
2037 uart401= [HW,OSS] 2037 uart401= [HW,OSS]
2038 Format: <io>,<irq> 2038 Format: <io>,<irq>
2039 2039
2040 uart6850= [HW,OSS] 2040 uart6850= [HW,OSS]
2041 Format: <io>,<irq> 2041 Format: <io>,<irq>
2042 2042
2043 uhci-hcd.ignore_oc= 2043 uhci-hcd.ignore_oc=
2044 [USB] Ignore overcurrent events (default N). 2044 [USB] Ignore overcurrent events (default N).
2045 Some badly-designed motherboards generate lots of 2045 Some badly-designed motherboards generate lots of
2046 bogus events, for ports that aren't wired to 2046 bogus events, for ports that aren't wired to
2047 anything. Set this parameter to avoid log spamming. 2047 anything. Set this parameter to avoid log spamming.
2048 Note that genuine overcurrent events won't be 2048 Note that genuine overcurrent events won't be
2049 reported either. 2049 reported either.
2050 2050
2051 usbcore.autosuspend= 2051 usbcore.autosuspend=
2052 [USB] The autosuspend time delay (in seconds) used 2052 [USB] The autosuspend time delay (in seconds) used
2053 for newly-detected USB devices (default 2). This 2053 for newly-detected USB devices (default 2). This
2054 is the time required before an idle device will be 2054 is the time required before an idle device will be
2055 autosuspended. Devices for which the delay is set 2055 autosuspended. Devices for which the delay is set
2056 to a negative value won't be autosuspended at all. 2056 to a negative value won't be autosuspended at all.
2057 2057
2058 usbhid.mousepoll= 2058 usbhid.mousepoll=
2059 [USBHID] The interval which mice are to be polled at. 2059 [USBHID] The interval which mice are to be polled at.
2060 2060
2061 vdso= [X86-32,SH,x86-64] 2061 vdso= [X86-32,SH,x86-64]
2062 vdso=2: enable compat VDSO (default with COMPAT_VDSO) 2062 vdso=2: enable compat VDSO (default with COMPAT_VDSO)
2063 vdso=1: enable VDSO (default) 2063 vdso=1: enable VDSO (default)
2064 vdso=0: disable VDSO mapping 2064 vdso=0: disable VDSO mapping
2065 2065
2066 vdso32= [X86-32,X86-64] 2066 vdso32= [X86-32,X86-64]
2067 vdso32=2: enable compat VDSO (default with COMPAT_VDSO) 2067 vdso32=2: enable compat VDSO (default with COMPAT_VDSO)
2068 vdso32=1: enable 32-bit VDSO (default) 2068 vdso32=1: enable 32-bit VDSO (default)
2069 vdso32=0: disable 32-bit VDSO mapping 2069 vdso32=0: disable 32-bit VDSO mapping
2070 2070
2071 vector= [IA-64,SMP] 2071 vector= [IA-64,SMP]
2072 vector=percpu: enable percpu vector domain 2072 vector=percpu: enable percpu vector domain
2073 2073
2074 video= [FB] Frame buffer configuration 2074 video= [FB] Frame buffer configuration
2075 See Documentation/fb/modedb.txt. 2075 See Documentation/fb/modedb.txt.
2076 2076
2077 vga= [BOOT,X86-32] Select a particular video mode 2077 vga= [BOOT,X86-32] Select a particular video mode
2078 See Documentation/i386/boot.txt and 2078 See Documentation/i386/boot.txt and
2079 Documentation/svga.txt. 2079 Documentation/svga.txt.
2080 Use vga=ask for menu. 2080 Use vga=ask for menu.
2081 This is actually a boot loader parameter; the value is 2081 This is actually a boot loader parameter; the value is
2082 passed to the kernel using a special protocol. 2082 passed to the kernel using a special protocol.
2083 2083
2084 vmalloc=nn[KMG] [KNL,BOOT] Forces the vmalloc area to have an exact 2084 vmalloc=nn[KMG] [KNL,BOOT] Forces the vmalloc area to have an exact
2085 size of <nn>. This can be used to increase the 2085 size of <nn>. This can be used to increase the
2086 minimum size (128MB on x86). It can also be used to 2086 minimum size (128MB on x86). It can also be used to
2087 decrease the size and leave more room for directly 2087 decrease the size and leave more room for directly
2088 mapped kernel RAM. 2088 mapped kernel RAM.
2089 2089
2090 vmhalt= [KNL,S390] Perform z/VM CP command after system halt. 2090 vmhalt= [KNL,S390] Perform z/VM CP command after system halt.
2091 Format: <command> 2091 Format: <command>
2092 2092
2093 vmpanic= [KNL,S390] Perform z/VM CP command after kernel panic. 2093 vmpanic= [KNL,S390] Perform z/VM CP command after kernel panic.
2094 Format: <command> 2094 Format: <command>
2095 2095
2096 vmpoff= [KNL,S390] Perform z/VM CP command after power off. 2096 vmpoff= [KNL,S390] Perform z/VM CP command after power off.
2097 Format: <command> 2097 Format: <command>
2098 2098
2099 waveartist= [HW,OSS] 2099 waveartist= [HW,OSS]
2100 Format: <io>,<irq>,<dma>,<dma2> 2100 Format: <io>,<irq>,<dma>,<dma2>
2101 2101
2102 wd33c93= [HW,SCSI] 2102 wd33c93= [HW,SCSI]
2103 See header of drivers/scsi/wd33c93.c. 2103 See header of drivers/scsi/wd33c93.c.
2104 2104
2105 wd7000= [HW,SCSI] 2105 wd7000= [HW,SCSI]
2106 See header of drivers/scsi/wd7000.c. 2106 See header of drivers/scsi/wd7000.c.
2107 2107
2108 wdt= [WDT] Watchdog 2108 wdt= [WDT] Watchdog
2109 See Documentation/watchdog/wdt.txt. 2109 See Documentation/watchdog/wdt.txt.
2110 2110
2111 xd= [HW,XT] Original XT pre-IDE (RLL encoded) disks. 2111 xd= [HW,XT] Original XT pre-IDE (RLL encoded) disks.
2112 xd_geo= See header of drivers/block/xd.c. 2112 xd_geo= See header of drivers/block/xd.c.
2113 2113
2114 xirc2ps_cs= [NET,PCMCIA] 2114 xirc2ps_cs= [NET,PCMCIA]
2115 Format: 2115 Format:
2116 <irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]] 2116 <irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]]
2117 2117
2118 norandmaps Don't use address space randomization 2118 norandmaps Don't use address space randomization
2119 Equivalent to echo 0 > /proc/sys/kernel/randomize_va_space 2119 Equivalent to echo 0 > /proc/sys/kernel/randomize_va_space
2120 2120
2121 ______________________________________________________________________ 2121 ______________________________________________________________________
2122 2122
2123 TODO: 2123 TODO:
2124 2124
2125 Add documentation for ALSA options. 2125 Add documentation for ALSA options.
2126 Add more DRM drivers. 2126 Add more DRM drivers.
2127 2127
Documentation/nfsroot.txt
1 Mounting the root filesystem via NFS (nfsroot) File was deleted
2 ===============================================
3
4 Written 1996 by Gero Kuhlmann <gero@gkminix.han.de>
5 Updated 1997 by Martin Mares <mj@atrey.karlin.mff.cuni.cz>
6 Updated 2006 by Nico Schottelius <nico-kernel-nfsroot@schottelius.org>
7 Updated 2006 by Horms <horms@verge.net.au>
8
9
10
11 In order to use a diskless system, such as an X-terminal or printer server
12 for example, it is necessary for the root filesystem to be present on a
13 non-disk device. This may be an initramfs (see Documentation/filesystems/
14 ramfs-rootfs-initramfs.txt), a ramdisk (see Documentation/initrd.txt) or a
15 filesystem mounted via NFS. The following text describes on how to use NFS
16 for the root filesystem. For the rest of this text 'client' means the
17 diskless system, and 'server' means the NFS server.
18
19
20
21
22 1.) Enabling nfsroot capabilities
23 -----------------------------
24
25 In order to use nfsroot, NFS client support needs to be selected as
26 built-in during configuration. Once this has been selected, the nfsroot
27 option will become available, which should also be selected.
28
29 In the networking options, kernel level autoconfiguration can be selected,
30 along with the types of autoconfiguration to support. Selecting all of
31 DHCP, BOOTP and RARP is safe.
32
33
34
35
36 2.) Kernel command line
37 -------------------
38
39 When the kernel has been loaded by a boot loader (see below) it needs to be
40 told what root fs device to use. And in the case of nfsroot, where to find
41 both the server and the name of the directory on the server to mount as root.
42 This can be established using the following kernel command line parameters:
43
44
45 root=/dev/nfs
46
47 This is necessary to enable the pseudo-NFS-device. Note that it's not a
48 real device but just a synonym to tell the kernel to use NFS instead of
49 a real device.
50
51
52 nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
53
54 If the `nfsroot' parameter is NOT given on the command line,
55 the default "/tftpboot/%s" will be used.
56
57 <server-ip> Specifies the IP address of the NFS server.
58 The default address is determined by the `ip' parameter
59 (see below). This parameter allows the use of different
60 servers for IP autoconfiguration and NFS.
61
62 <root-dir> Name of the directory on the server to mount as root.
63 If there is a "%s" token in the string, it will be
64 replaced by the ASCII-representation of the client's
65 IP address.
66
67 <nfs-options> Standard NFS options. All options are separated by commas.
68 The following defaults are used:
69 port = as given by server portmap daemon
70 rsize = 4096
71 wsize = 4096
72 timeo = 7
73 retrans = 3
74 acregmin = 3
75 acregmax = 60
76 acdirmin = 30
77 acdirmax = 60
78 flags = hard, nointr, noposix, cto, ac
79
80
81 ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>
82
83 This parameter tells the kernel how to configure IP addresses of devices
84 and also how to set up the IP routing table. It was originally called
85 `nfsaddrs', but now the boot-time IP configuration works independently of
86 NFS, so it was renamed to `ip' and the old name remained as an alias for
87 compatibility reasons.
88
89 If this parameter is missing from the kernel command line, all fields are
90 assumed to be empty, and the defaults mentioned below apply. In general
91 this means that the kernel tries to configure everything using
92 autoconfiguration.
93
94 The <autoconf> parameter can appear alone as the value to the `ip'
95 parameter (without all the ':' characters before). If the value is
96 "ip=off" or "ip=none", no autoconfiguration will take place, otherwise
97 autoconfiguration will take place. The most common way to use this
98 is "ip=dhcp".
99
100 <client-ip> IP address of the client.
101
102 Default: Determined using autoconfiguration.
103
104 <server-ip> IP address of the NFS server. If RARP is used to determine
105 the client address and this parameter is NOT empty only
106 replies from the specified server are accepted.
107
108 Only required for for NFS root. That is autoconfiguration
109 will not be triggered if it is missing and NFS root is not
110 in operation.
111
112 Default: Determined using autoconfiguration.
113 The address of the autoconfiguration server is used.
114
115 <gw-ip> IP address of a gateway if the server is on a different subnet.
116
117 Default: Determined using autoconfiguration.
118
119 <netmask> Netmask for local network interface. If unspecified
120 the netmask is derived from the client IP address assuming
121 classful addressing.
122
123 Default: Determined using autoconfiguration.
124
125 <hostname> Name of the client. May be supplied by autoconfiguration,
126 but its absence will not trigger autoconfiguration.
127
128 Default: Client IP address is used in ASCII notation.
129
130 <device> Name of network device to use.
131
132 Default: If the host only has one device, it is used.
133 Otherwise the device is determined using
134 autoconfiguration. This is done by sending
135 autoconfiguration requests out of all devices,
136 and using the device that received the first reply.
137
138 <autoconf> Method to use for autoconfiguration. In the case of options
139 which specify multiple autoconfiguration protocols,
140 requests are sent using all protocols, and the first one
141 to reply is used.
142
143 Only autoconfiguration protocols that have been compiled
144 into the kernel will be used, regardless of the value of
145 this option.
146
147 off or none: don't use autoconfiguration
148 (do static IP assignment instead)
149 on or any: use any protocol available in the kernel
150 (default)
151 dhcp: use DHCP
152 bootp: use BOOTP
153 rarp: use RARP
154 both: use both BOOTP and RARP but not DHCP
155 (old option kept for backwards compatibility)
156
157 Default: any
158
159
160
161
162 3.) Boot Loader
163 ----------
164
165 To get the kernel into memory different approaches can be used.
166 They depend on various facilities being available:
167
168
169 3.1) Booting from a floppy using syslinux
170
171 When building kernels, an easy way to create a boot floppy that uses
172 syslinux is to use the zdisk or bzdisk make targets which use
173 and bzimage images respectively. Both targets accept the
174 FDARGS parameter which can be used to set the kernel command line.
175
176 e.g.
177 make bzdisk FDARGS="root=/dev/nfs"
178
179 Note that the user running this command will need to have
180 access to the floppy drive device, /dev/fd0
181
182 For more information on syslinux, including how to create bootdisks
183 for prebuilt kernels, see http://syslinux.zytor.com/
184
185 N.B: Previously it was possible to write a kernel directly to
186 a floppy using dd, configure the boot device using rdev, and
187 boot using the resulting floppy. Linux no longer supports this
188 method of booting.
189
190 3.2) Booting from a cdrom using isolinux
191
192 When building kernels, an easy way to create a bootable cdrom that
193 uses isolinux is to use the isoimage target which uses a bzimage
194 image. Like zdisk and bzdisk, this target accepts the FDARGS
195 parameter which can be used to set the kernel command line.
196
197 e.g.
198 make isoimage FDARGS="root=/dev/nfs"
199
200 The resulting iso image will be arch/<ARCH>/boot/image.iso
201 This can be written to a cdrom using a variety of tools including
202 cdrecord.
203
204 e.g.
205 cdrecord dev=ATAPI:1,0,0 arch/i386/boot/image.iso
206
207 For more information on isolinux, including how to create bootdisks
208 for prebuilt kernels, see http://syslinux.zytor.com/
209
210 3.2) Using LILO
211 When using LILO all the necessary command line parameters may be
212 specified using the 'append=' directive in the LILO configuration
213 file.
214
215 However, to use the 'root=' directive you also need to create
216 a dummy root device, which may be removed after LILO is run.
217
218 mknod /dev/boot255 c 0 255
219
220 For information on configuring LILO, please refer to its documentation.
221
222 3.3) Using GRUB
223 When using GRUB, kernel parameter are simply appended after the kernel
224 specification: kernel <kernel> <parameters>
225
226 3.4) Using loadlin
227 loadlin may be used to boot Linux from a DOS command prompt without
228 requiring a local hard disk to mount as root. This has not been
229 thoroughly tested by the authors of this document, but in general
230 it should be possible configure the kernel command line similarly
231 to the configuration of LILO.
232
233 Please refer to the loadlin documentation for further information.
234
235 3.5) Using a boot ROM
236 This is probably the most elegant way of booting a diskless client.
237 With a boot ROM the kernel is loaded using the TFTP protocol. The
238 authors of this document are not aware of any no commercial boot
239 ROMs that support booting Linux over the network. However, there
240 are two free implementations of a boot ROM, netboot-nfs and
241 etherboot, both of which are available on sunsite.unc.edu, and both
242 of which contain everything you need to boot a diskless Linux client.
243
244 3.6) Using pxelinux
245 Pxelinux may be used to boot linux using the PXE boot loader
246 which is present on many modern network cards.
247
248 When using pxelinux, the kernel image is specified using
249 "kernel <relative-path-below /tftpboot>". The nfsroot parameters
250 are passed to the kernel by adding them to the "append" line.
251 It is common to use serial console in conjunction with pxeliunx,
252 see Documentation/serial-console.txt for more information.
253
254 For more information on isolinux, including how to create bootdisks
255 for prebuilt kernels, see http://syslinux.zytor.com/
256
257
258
259
260 4.) Credits
261 -------
262
263 The nfsroot code in the kernel and the RARP support have been written
264 by Gero Kuhlmann <gero@gkminix.han.de>.
265
266 The rest of the IP layer autoconfiguration code has been written
267 by Martin Mares <mj@atrey.karlin.mff.cuni.cz>.
268
269 In order to write the initial version of nfsroot I would like to thank
270 Jens-Uwe Mager <jum@anubis.han.de> for his help.
271 1 Mounting the root filesystem via NFS (nfsroot)
Documentation/rpc-cache.txt
1 This document gives a brief introduction to the caching File was deleted
2 mechanisms in the sunrpc layer that is used, in particular,
3 for NFS authentication.
4
5 CACHES
6 ======
7 The caching replaces the old exports table and allows for
8 a wide variety of values to be caches.
9
10 There are a number of caches that are similar in structure though
11 quite possibly very different in content and use. There is a corpus
12 of common code for managing these caches.
13
14 Examples of caches that are likely to be needed are:
15 - mapping from IP address to client name
16 - mapping from client name and filesystem to export options
17 - mapping from UID to list of GIDs, to work around NFS's limitation
18 of 16 gids.
19 - mappings between local UID/GID and remote UID/GID for sites that
20 do not have uniform uid assignment
21 - mapping from network identify to public key for crypto authentication.
22
23 The common code handles such things as:
24 - general cache lookup with correct locking
25 - supporting 'NEGATIVE' as well as positive entries
26 - allowing an EXPIRED time on cache items, and removing
27 items after they expire, and are no longer in-use.
28 - making requests to user-space to fill in cache entries
29 - allowing user-space to directly set entries in the cache
30 - delaying RPC requests that depend on as-yet incomplete
31 cache entries, and replaying those requests when the cache entry
32 is complete.
33 - clean out old entries as they expire.
34
35 Creating a Cache
36 ----------------
37
38 1/ A cache needs a datum to store. This is in the form of a
39 structure definition that must contain a
40 struct cache_head
41 as an element, usually the first.
42 It will also contain a key and some content.
43 Each cache element is reference counted and contains
44 expiry and update times for use in cache management.
45 2/ A cache needs a "cache_detail" structure that
46 describes the cache. This stores the hash table, some
47 parameters for cache management, and some operations detailing how
48 to work with particular cache items.
49 The operations requires are:
50 struct cache_head *alloc(void)
51 This simply allocates appropriate memory and returns
52 a pointer to the cache_detail embedded within the
53 structure
54 void cache_put(struct kref *)
55 This is called when the last reference to an item is
56 dropped. The pointer passed is to the 'ref' field
57 in the cache_head. cache_put should release any
58 references create by 'cache_init' and, if CACHE_VALID
59 is set, any references created by cache_update.
60 It should then release the memory allocated by
61 'alloc'.
62 int match(struct cache_head *orig, struct cache_head *new)
63 test if the keys in the two structures match. Return
64 1 if they do, 0 if they don't.
65 void init(struct cache_head *orig, struct cache_head *new)
66 Set the 'key' fields in 'new' from 'orig'. This may
67 include taking references to shared objects.
68 void update(struct cache_head *orig, struct cache_head *new)
69 Set the 'content' fileds in 'new' from 'orig'.
70 int cache_show(struct seq_file *m, struct cache_detail *cd,
71 struct cache_head *h)
72 Optional. Used to provide a /proc file that lists the
73 contents of a cache. This should show one item,
74 usually on just one line.
75 int cache_request(struct cache_detail *cd, struct cache_head *h,
76 char **bpp, int *blen)
77 Format a request to be send to user-space for an item
78 to be instantiated. *bpp is a buffer of size *blen.
79 bpp should be moved forward over the encoded message,
80 and *blen should be reduced to show how much free
81 space remains. Return 0 on success or <0 if not
82 enough room or other problem.
83 int cache_parse(struct cache_detail *cd, char *buf, int len)
84 A message from user space has arrived to fill out a
85 cache entry. It is in 'buf' of length 'len'.
86 cache_parse should parse this, find the item in the
87 cache with sunrpc_cache_lookup, and update the item
88 with sunrpc_cache_update.
89
90
91 3/ A cache needs to be registered using cache_register(). This
92 includes it on a list of caches that will be regularly
93 cleaned to discard old data.
94
95 Using a cache
96 -------------
97
98 To find a value in a cache, call sunrpc_cache_lookup passing a pointer
99 to the cache_head in a sample item with the 'key' fields filled in.
100 This will be passed to ->match to identify the target entry. If no
101 entry is found, a new entry will be create, added to the cache, and
102 marked as not containing valid data.
103
104 The item returned is typically passed to cache_check which will check
105 if the data is valid, and may initiate an up-call to get fresh data.
106 cache_check will return -ENOENT in the entry is negative or if an up
107 call is needed but not possible, -EAGAIN if an upcall is pending,
108 or 0 if the data is valid;
109
110 cache_check can be passed a "struct cache_req *". This structure is
111 typically embedded in the actual request and can be used to create a
112 deferred copy of the request (struct cache_deferred_req). This is
113 done when the found cache item is not uptodate, but the is reason to
114 believe that userspace might provide information soon. When the cache
115 item does become valid, the deferred copy of the request will be
116 revisited (->revisit). It is expected that this method will
117 reschedule the request for processing.
118
119 The value returned by sunrpc_cache_lookup can also be passed to
120 sunrpc_cache_update to set the content for the item. A second item is
121 passed which should hold the content. If the item found by _lookup
122 has valid data, then it is discarded and a new item is created. This
123 saves any user of an item from worrying about content changing while
124 it is being inspected. If the item found by _lookup does not contain
125 valid data, then the content is copied across and CACHE_VALID is set.
126
127 Populating a cache
128 ------------------
129
130 Each cache has a name, and when the cache is registered, a directory
131 with that name is created in /proc/net/rpc
132
133 This directory contains a file called 'channel' which is a channel
134 for communicating between kernel and user for populating the cache.
135 This directory may later contain other files of interacting
136 with the cache.
137
138 The 'channel' works a bit like a datagram socket. Each 'write' is
139 passed as a whole to the cache for parsing and interpretation.
140 Each cache can treat the write requests differently, but it is
141 expected that a message written will contain:
142 - a key
143 - an expiry time
144 - a content.
145 with the intention that an item in the cache with the give key
146 should be create or updated to have the given content, and the
147 expiry time should be set on that item.
148
149 Reading from a channel is a bit more interesting. When a cache
150 lookup fails, or when it succeeds but finds an entry that may soon
151 expire, a request is lodged for that cache item to be updated by
152 user-space. These requests appear in the channel file.
153
154 Successive reads will return successive requests.
155 If there are no more requests to return, read will return EOF, but a
156 select or poll for read will block waiting for another request to be
157 added.
158
159 Thus a user-space helper is likely to:
160 open the channel.
161 select for readable
162 read a request
163 write a response
164 loop.
165
166 If it dies and needs to be restarted, any requests that have not been
167 answered will still appear in the file and will be read by the new
168 instance of the helper.
169
170 Each cache should define a "cache_parse" method which takes a message
171 written from user-space and processes it. It should return an error
172 (which propagates back to the write syscall) or 0.
173
174 Each cache should also define a "cache_request" method which
175 takes a cache item and encodes a request into the buffer
176 provided.
177
178 Note: If a cache has no active readers on the channel, and has had not
179 active readers for more than 60 seconds, further requests will not be
180 added to the channel but instead all lookups that do not find a valid
181 entry will fail. This is partly for backward compatibility: The
182 previous nfs exports table was deemed to be authoritative and a
183 failed lookup meant a definite 'no'.
184
185 request/response format
186 -----------------------
187
188 While each cache is free to use it's own format for requests
189 and responses over channel, the following is recommended as
190 appropriate and support routines are available to help:
191 Each request or response record should be printable ASCII
192 with precisely one newline character which should be at the end.
193 Fields within the record should be separated by spaces, normally one.
194 If spaces, newlines, or nul characters are needed in a field they
195 much be quoted. two mechanisms are available:
196 1/ If a field begins '\x' then it must contain an even number of
197 hex digits, and pairs of these digits provide the bytes in the
198 field.
199 2/ otherwise a \ in the field must be followed by 3 octal digits
200 which give the code for a byte. Other characters are treated
201 as them selves. At the very least, space, newline, nul, and
202 '\' must be quoted in this way.
203 1 This document gives a brief introduction to the caching
Documentation/sched-rt-group.txt
1 File was deleted
2
3 Real-Time group scheduling.
4
5 The problem space:
6
7 In order to schedule multiple groups of realtime tasks each group must
8 be assigned a fixed portion of the CPU time available. Without a minimum
9 guarantee a realtime group can obviously fall short. A fuzzy upper limit
10 is of no use since it cannot be relied upon. Which leaves us with just
11 the single fixed portion.
12
13 CPU time is divided by means of specifying how much time can be spent
14 running in a given period. Say a frame fixed realtime renderer must
15 deliver 25 frames a second, which yields a period of 0.04s. Now say
16 it will also have to play some music and respond to input, leaving it
17 with around 80% for the graphics. We can then give this group a runtime
18 of 0.8 * 0.04s = 0.032s.
19
20 This way the graphics group will have a 0.04s period with a 0.032s runtime
21 limit.
22
23 Now if the audio thread needs to refill the DMA buffer every 0.005s, but
24 needs only about 3% CPU time to do so, it can do with a 0.03 * 0.005s
25 = 0.00015s.
26
27
28 The Interface:
29
30 system wide:
31
32 /proc/sys/kernel/sched_rt_period_ms
33 /proc/sys/kernel/sched_rt_runtime_us
34
35 CONFIG_FAIR_USER_SCHED
36
37 /sys/kernel/uids/<uid>/cpu_rt_runtime_us
38
39 or
40
41 CONFIG_FAIR_CGROUP_SCHED
42
43 /cgroup/<cgroup>/cpu.rt_runtime_us
44
45 [ time is specified in us because the interface is s32; this gives an
46 operating range of ~35m to 1us ]
47
48 The period takes values in [ 1, INT_MAX ], runtime in [ -1, INT_MAX - 1 ].
49
50 A runtime of -1 specifies runtime == period, ie. no limit.
51
52 New groups get the period from /proc/sys/kernel/sched_rt_period_us and
53 a runtime of 0.
54
55 Settings are constrained to:
56
57 \Sum_{i} runtime_{i} / global_period <= global_runtime / global_period
58
59 in order to keep the configuration schedulable.
60 1
Documentation/scheduler/00-INDEX
1 00-INDEX 1 00-INDEX
2 - this file. 2 - this file.
3 sched-arch.txt 3 sched-arch.txt
4 - CPU Scheduler implementation hints for architecture specific code. 4 - CPU Scheduler implementation hints for architecture specific code.
5 sched-coding.txt 5 sched-coding.txt
6 - reference for various scheduler-related methods in the O(1) scheduler. 6 - reference for various scheduler-related methods in the O(1) scheduler.
7 sched-design.txt 7 sched-design.txt
8 - goals, design and implementation of the Linux O(1) scheduler. 8 - goals, design and implementation of the Linux O(1) scheduler.
9 sched-design-CFS.txt 9 sched-design-CFS.txt
10 - goals, design and implementation of the Complete Fair Scheduler. 10 - goals, design and implementation of the Complete Fair Scheduler.
11 sched-domains.txt 11 sched-domains.txt
12 - information on scheduling domains. 12 - information on scheduling domains.
13 sched-nice-design.txt 13 sched-nice-design.txt
14 - How and why the scheduler's nice levels are implemented. 14 - How and why the scheduler's nice levels are implemented.
15 sched-rt-group.txt
16 - real-time group scheduling.
15 sched-stats.txt 17 sched-stats.txt
16 - information on schedstats (Linux Scheduler Statistics). 18 - information on schedstats (Linux Scheduler Statistics).
17 19
Documentation/scheduler/sched-rt-group.txt
File was created 1
2
3 Real-Time group scheduling.
4
5 The problem space:
6
7 In order to schedule multiple groups of realtime tasks each group must
8 be assigned a fixed portion of the CPU time available. Without a minimum
9 guarantee a realtime group can obviously fall short. A fuzzy upper limit
10 is of no use since it cannot be relied upon. Which leaves us with just
11 the single fixed portion.
12
13 CPU time is divided by means of specifying how much time can be spent
14 running in a given period. Say a frame fixed realtime renderer must
15 deliver 25 frames a second, which yields a period of 0.04s. Now say
16 it will also have to play some music and respond to input, leaving it
17 with around 80% for the graphics. We can then give this group a runtime
18 of 0.8 * 0.04s = 0.032s.
19
20 This way the graphics group will have a 0.04s period with a 0.032s runtime
21 limit.
22
23 Now if the audio thread needs to refill the DMA buffer every 0.005s, but
24 needs only about 3% CPU time to do so, it can do with a 0.03 * 0.005s
25 = 0.00015s.
26
27
28 The Interface:
29
30 system wide:
31
32 /proc/sys/kernel/sched_rt_period_ms
33 /proc/sys/kernel/sched_rt_runtime_us
34
35 CONFIG_FAIR_USER_SCHED
36
37 /sys/kernel/uids/<uid>/cpu_rt_runtime_us
38
39 or
40
41 CONFIG_FAIR_CGROUP_SCHED
42
43 /cgroup/<cgroup>/cpu.rt_runtime_us
44
45 [ time is specified in us because the interface is s32; this gives an
46 operating range of ~35m to 1us ]
47
48 The period takes values in [ 1, INT_MAX ], runtime in [ -1, INT_MAX - 1 ].
49
50 A runtime of -1 specifies runtime == period, ie. no limit.
51
52 New groups get the period from /proc/sys/kernel/sched_rt_period_us and
53 a runtime of 0.
54
55 Settings are constrained to:
56
57 \Sum_{i} runtime_{i} / global_period <= global_runtime / global_period
58
59 in order to keep the configuration schedulable.
60
Documentation/spinlocks.txt
1 SPIN_LOCK_UNLOCKED and RW_LOCK_UNLOCKED defeat lockdep state tracking and 1 SPIN_LOCK_UNLOCKED and RW_LOCK_UNLOCKED defeat lockdep state tracking and
2 are hence deprecated. 2 are hence deprecated.
3 3
4 Please use DEFINE_SPINLOCK()/DEFINE_RWLOCK() or 4 Please use DEFINE_SPINLOCK()/DEFINE_RWLOCK() or
5 __SPIN_LOCK_UNLOCKED()/__RW_LOCK_UNLOCKED() as appropriate for static 5 __SPIN_LOCK_UNLOCKED()/__RW_LOCK_UNLOCKED() as appropriate for static
6 initialization. 6 initialization.
7 7
8 Most of the time, you can simply turn:
9
10 static spinlock_t xxx_lock = SPIN_LOCK_UNLOCKED;
11
12 into:
13
14 static DEFINE_SPINLOCK(xxx_lock);
15
16 Static structure member variables go from:
17
18 struct foo bar {
19 .lock = SPIN_LOCK_UNLOCKED;
20 };
21
22 to:
23
24 struct foo bar {
25 .lock = __SPIN_LOCK_UNLOCKED(bar.lock);
26 };
27
28 Declaration of static rw_locks undergo a similar transformation.
29
8 Dynamic initialization, when necessary, may be performed as 30 Dynamic initialization, when necessary, may be performed as
9 demonstrated below. 31 demonstrated below.
10 32
11 spinlock_t xxx_lock; 33 spinlock_t xxx_lock;
12 rwlock_t xxx_rw_lock; 34 rwlock_t xxx_rw_lock;
13 35
14 static int __init xxx_init(void) 36 static int __init xxx_init(void)
15 { 37 {
16 spin_lock_init(&xxx_lock); 38 spin_lock_init(&xxx_lock);
17 rwlock_init(&xxx_rw_lock); 39 rwlock_init(&xxx_rw_lock);
18 ... 40 ...
19 } 41 }
20 42
21 module_init(xxx_init); 43 module_init(xxx_init);
22 44
23 The following discussion is still valid, however, with the dynamic 45 The following discussion is still valid, however, with the dynamic
24 initialization of spinlocks or with DEFINE_SPINLOCK, etc., used 46 initialization of spinlocks or with DEFINE_SPINLOCK, etc., used
25 instead of SPIN_LOCK_UNLOCKED. 47 instead of SPIN_LOCK_UNLOCKED.
26 48
27 ----------------------- 49 -----------------------
28 50
29 On Fri, 2 Jan 1998, Doug Ledford wrote: 51 On Fri, 2 Jan 1998, Doug Ledford wrote:
30 > 52 >
31 > I'm working on making the aic7xxx driver more SMP friendly (as well as 53 > I'm working on making the aic7xxx driver more SMP friendly (as well as
32 > importing the latest FreeBSD sequencer code to have 7895 support) and wanted 54 > importing the latest FreeBSD sequencer code to have 7895 support) and wanted
33 > to get some info from you. The goal here is to make the various routines 55 > to get some info from you. The goal here is to make the various routines
34 > SMP safe as well as UP safe during interrupts and other manipulating 56 > SMP safe as well as UP safe during interrupts and other manipulating
35 > routines. So far, I've added a spin_lock variable to things like my queue 57 > routines. So far, I've added a spin_lock variable to things like my queue
36 > structs. Now, from what I recall, there are some spin lock functions I can 58 > structs. Now, from what I recall, there are some spin lock functions I can
37 > use to lock these spin locks from other use as opposed to a (nasty) 59 > use to lock these spin locks from other use as opposed to a (nasty)
38 > save_flags(); cli(); stuff; restore_flags(); construct. Where do I find 60 > save_flags(); cli(); stuff; restore_flags(); construct. Where do I find
39 > these routines and go about making use of them? Do they only lock on a 61 > these routines and go about making use of them? Do they only lock on a
40 > per-processor basis or can they also lock say an interrupt routine from 62 > per-processor basis or can they also lock say an interrupt routine from
41 > mucking with a queue if the queue routine was manipulating it when the 63 > mucking with a queue if the queue routine was manipulating it when the
42 > interrupt occurred, or should I still use a cli(); based construct on that 64 > interrupt occurred, or should I still use a cli(); based construct on that
43 > one? 65 > one?
44 66
45 See <asm/spinlock.h>. The basic version is: 67 See <asm/spinlock.h>. The basic version is:
46 68
47 spinlock_t xxx_lock = SPIN_LOCK_UNLOCKED; 69 spinlock_t xxx_lock = SPIN_LOCK_UNLOCKED;
48 70
49 71
50 unsigned long flags; 72 unsigned long flags;
51 73
52 spin_lock_irqsave(&xxx_lock, flags); 74 spin_lock_irqsave(&xxx_lock, flags);
53 ... critical section here .. 75 ... critical section here ..
54 spin_unlock_irqrestore(&xxx_lock, flags); 76 spin_unlock_irqrestore(&xxx_lock, flags);
55 77
56 and the above is always safe. It will disable interrupts _locally_, but the 78 and the above is always safe. It will disable interrupts _locally_, but the
57 spinlock itself will guarantee the global lock, so it will guarantee that 79 spinlock itself will guarantee the global lock, so it will guarantee that
58 there is only one thread-of-control within the region(s) protected by that 80 there is only one thread-of-control within the region(s) protected by that
59 lock. 81 lock.
60 82
61 Note that it works well even under UP - the above sequence under UP 83 Note that it works well even under UP - the above sequence under UP
62 essentially is just the same as doing a 84 essentially is just the same as doing a
63 85
64 unsigned long flags; 86 unsigned long flags;
65 87
66 save_flags(flags); cli(); 88 save_flags(flags); cli();
67 ... critical section ... 89 ... critical section ...
68 restore_flags(flags); 90 restore_flags(flags);
69 91
70 so the code does _not_ need to worry about UP vs SMP issues: the spinlocks 92 so the code does _not_ need to worry about UP vs SMP issues: the spinlocks
71 work correctly under both (and spinlocks are actually more efficient on 93 work correctly under both (and spinlocks are actually more efficient on
72 architectures that allow doing the "save_flags + cli" in one go because I 94 architectures that allow doing the "save_flags + cli" in one go because I
73 don't export that interface normally). 95 don't export that interface normally).
74 96
75 NOTE NOTE NOTE! The reason the spinlock is so much faster than a global 97 NOTE NOTE NOTE! The reason the spinlock is so much faster than a global
76 interrupt lock under SMP is exactly because it disables interrupts only on 98 interrupt lock under SMP is exactly because it disables interrupts only on
77 the local CPU. The spin-lock is safe only when you _also_ use the lock 99 the local CPU. The spin-lock is safe only when you _also_ use the lock
78 itself to do locking across CPU's, which implies that EVERYTHING that 100 itself to do locking across CPU's, which implies that EVERYTHING that
79 touches a shared variable has to agree about the spinlock they want to 101 touches a shared variable has to agree about the spinlock they want to
80 use. 102 use.
81 103
82 The above is usually pretty simple (you usually need and want only one 104 The above is usually pretty simple (you usually need and want only one
83 spinlock for most things - using more than one spinlock can make things a 105 spinlock for most things - using more than one spinlock can make things a
84 lot more complex and even slower and is usually worth it only for 106 lot more complex and even slower and is usually worth it only for
85 sequences that you _know_ need to be split up: avoid it at all cost if you 107 sequences that you _know_ need to be split up: avoid it at all cost if you
86 aren't sure). HOWEVER, it _does_ mean that if you have some code that does 108 aren't sure). HOWEVER, it _does_ mean that if you have some code that does
87 109
88 cli(); 110 cli();
89 .. critical section .. 111 .. critical section ..
90 sti(); 112 sti();
91 113
92 and another sequence that does 114 and another sequence that does
93 115
94 spin_lock_irqsave(flags); 116 spin_lock_irqsave(flags);
95 .. critical section .. 117 .. critical section ..
96 spin_unlock_irqrestore(flags); 118 spin_unlock_irqrestore(flags);
97 119
98 then they are NOT mutually exclusive, and the critical regions can happen 120 then they are NOT mutually exclusive, and the critical regions can happen
99 at the same time on two different CPU's. That's fine per se, but the 121 at the same time on two different CPU's. That's fine per se, but the
100 critical regions had better be critical for different things (ie they 122 critical regions had better be critical for different things (ie they
101 can't stomp on each other). 123 can't stomp on each other).
102 124
103 The above is a problem mainly if you end up mixing code - for example the 125 The above is a problem mainly if you end up mixing code - for example the
104 routines in ll_rw_block() tend to use cli/sti to protect the atomicity of 126 routines in ll_rw_block() tend to use cli/sti to protect the atomicity of
105 their actions, and if a driver uses spinlocks instead then you should 127 their actions, and if a driver uses spinlocks instead then you should
106 think about issues like the above.. 128 think about issues like the above..
107 129
108 This is really the only really hard part about spinlocks: once you start 130 This is really the only really hard part about spinlocks: once you start
109 using spinlocks they tend to expand to areas you might not have noticed 131 using spinlocks they tend to expand to areas you might not have noticed
110 before, because you have to make sure the spinlocks correctly protect the 132 before, because you have to make sure the spinlocks correctly protect the
111 shared data structures _everywhere_ they are used. The spinlocks are most 133 shared data structures _everywhere_ they are used. The spinlocks are most
112 easily added to places that are completely independent of other code (ie 134 easily added to places that are completely independent of other code (ie
113 internal driver data structures that nobody else ever touches, for 135 internal driver data structures that nobody else ever touches, for
114 example). 136 example).
115 137
116 ---- 138 ----
117 139
118 Lesson 2: reader-writer spinlocks. 140 Lesson 2: reader-writer spinlocks.
119 141
120 If your data accesses have a very natural pattern where you usually tend 142 If your data accesses have a very natural pattern where you usually tend
121 to mostly read from the shared variables, the reader-writer locks 143 to mostly read from the shared variables, the reader-writer locks
122 (rw_lock) versions of the spinlocks are often nicer. They allow multiple 144 (rw_lock) versions of the spinlocks are often nicer. They allow multiple
123 readers to be in the same critical region at once, but if somebody wants 145 readers to be in the same critical region at once, but if somebody wants
124 to change the variables it has to get an exclusive write lock. The 146 to change the variables it has to get an exclusive write lock. The
125 routines look the same as above: 147 routines look the same as above:
126 148
127 rwlock_t xxx_lock = RW_LOCK_UNLOCKED; 149 rwlock_t xxx_lock = RW_LOCK_UNLOCKED;
128 150
129 151
130 unsigned long flags; 152 unsigned long flags;
131 153
132 read_lock_irqsave(&xxx_lock, flags); 154 read_lock_irqsave(&xxx_lock, flags);
133 .. critical section that only reads the info ... 155 .. critical section that only reads the info ...
134 read_unlock_irqrestore(&xxx_lock, flags); 156 read_unlock_irqrestore(&xxx_lock, flags);
135 157
136 write_lock_irqsave(&xxx_lock, flags); 158 write_lock_irqsave(&xxx_lock, flags);
137 .. read and write exclusive access to the info ... 159 .. read and write exclusive access to the info ...
138 write_unlock_irqrestore(&xxx_lock, flags); 160 write_unlock_irqrestore(&xxx_lock, flags);
139 161
140 The above kind of lock is useful for complex data structures like linked 162 The above kind of lock is useful for complex data structures like linked
141 lists etc, especially when you know that most of the work is to just 163 lists etc, especially when you know that most of the work is to just
142 traverse the list searching for entries without changing the list itself, 164 traverse the list searching for entries without changing the list itself,
143 for example. Then you can use the read lock for that kind of list 165 for example. Then you can use the read lock for that kind of list
144 traversal, which allows many concurrent readers. Anything that _changes_ 166 traversal, which allows many concurrent readers. Anything that _changes_
145 the list will have to get the write lock. 167 the list will have to get the write lock.
146 168
147 Note: you cannot "upgrade" a read-lock to a write-lock, so if you at _any_ 169 Note: you cannot "upgrade" a read-lock to a write-lock, so if you at _any_
148 time need to do any changes (even if you don't do it every time), you have 170 time need to do any changes (even if you don't do it every time), you have
149 to get the write-lock at the very beginning. I could fairly easily add a 171 to get the write-lock at the very beginning. I could fairly easily add a
150 primitive to create a "upgradeable" read-lock, but it hasn't been an issue 172 primitive to create a "upgradeable" read-lock, but it hasn't been an issue
151 yet. Tell me if you'd want one. 173 yet. Tell me if you'd want one.
152 174
153 ---- 175 ----
154 176
155 Lesson 3: spinlocks revisited. 177 Lesson 3: spinlocks revisited.
156 178
157 The single spin-lock primitives above are by no means the only ones. They 179 The single spin-lock primitives above are by no means the only ones. They
158 are the most safe ones, and the ones that work under all circumstances, 180 are the most safe ones, and the ones that work under all circumstances,
159 but partly _because_ they are safe they are also fairly slow. They are 181 but partly _because_ they are safe they are also fairly slow. They are
160 much faster than a generic global cli/sti pair, but slower than they'd 182 much faster than a generic global cli/sti pair, but slower than they'd
161 need to be, because they do have to disable interrupts (which is just a 183 need to be, because they do have to disable interrupts (which is just a
162 single instruction on a x86, but it's an expensive one - and on other 184 single instruction on a x86, but it's an expensive one - and on other
163 architectures it can be worse). 185 architectures it can be worse).
164 186
165 If you have a case where you have to protect a data structure across 187 If you have a case where you have to protect a data structure across
166 several CPU's and you want to use spinlocks you can potentially use 188 several CPU's and you want to use spinlocks you can potentially use
167 cheaper versions of the spinlocks. IFF you know that the spinlocks are 189 cheaper versions of the spinlocks. IFF you know that the spinlocks are
168 never used in interrupt handlers, you can use the non-irq versions: 190 never used in interrupt handlers, you can use the non-irq versions:
169 191
170 spin_lock(&lock); 192 spin_lock(&lock);
171 ... 193 ...
172 spin_unlock(&lock); 194 spin_unlock(&lock);
173 195
174 (and the equivalent read-write versions too, of course). The spinlock will 196 (and the equivalent read-write versions too, of course). The spinlock will
175 guarantee the same kind of exclusive access, and it will be much faster. 197 guarantee the same kind of exclusive access, and it will be much faster.
176 This is useful if you know that the data in question is only ever 198 This is useful if you know that the data in question is only ever
177 manipulated from a "process context", ie no interrupts involved. 199 manipulated from a "process context", ie no interrupts involved.
178 200
179 The reasons you mustn't use these versions if you have interrupts that 201 The reasons you mustn't use these versions if you have interrupts that
180 play with the spinlock is that you can get deadlocks: 202 play with the spinlock is that you can get deadlocks:
181 203
182 spin_lock(&lock); 204 spin_lock(&lock);
183 ... 205 ...
184 <- interrupt comes in: 206 <- interrupt comes in:
185 spin_lock(&lock); 207 spin_lock(&lock);
186 208
187 where an interrupt tries to lock an already locked variable. This is ok if 209 where an interrupt tries to lock an already locked variable. This is ok if
188 the other interrupt happens on another CPU, but it is _not_ ok if the 210 the other interrupt happens on another CPU, but it is _not_ ok if the
189 interrupt happens on the same CPU that already holds the lock, because the 211 interrupt happens on the same CPU that already holds the lock, because the
190 lock will obviously never be released (because the interrupt is waiting 212 lock will obviously never be released (because the interrupt is waiting
191 for the lock, and the lock-holder is interrupted by the interrupt and will 213 for the lock, and the lock-holder is interrupted by the interrupt and will
192 not continue until the interrupt has been processed). 214 not continue until the interrupt has been processed).
193 215
194 (This is also the reason why the irq-versions of the spinlocks only need 216 (This is also the reason why the irq-versions of the spinlocks only need
195 to disable the _local_ interrupts - it's ok to use spinlocks in interrupts 217 to disable the _local_ interrupts - it's ok to use spinlocks in interrupts
196 on other CPU's, because an interrupt on another CPU doesn't interrupt the 218 on other CPU's, because an interrupt on another CPU doesn't interrupt the
197 CPU that holds the lock, so the lock-holder can continue and eventually 219 CPU that holds the lock, so the lock-holder can continue and eventually
198 releases the lock). 220 releases the lock).
199 221
200 Note that you can be clever with read-write locks and interrupts. For 222 Note that you can be clever with read-write locks and interrupts. For
201 example, if you know that the interrupt only ever gets a read-lock, then 223 example, if you know that the interrupt only ever gets a read-lock, then
202 you can use a non-irq version of read locks everywhere - because they 224 you can use a non-irq version of read locks everywhere - because they
203 don't block on each other (and thus there is no dead-lock wrt interrupts. 225 don't block on each other (and thus there is no dead-lock wrt interrupts.
204 But when you do the write-lock, you have to use the irq-safe version. 226 But when you do the write-lock, you have to use the irq-safe version.
205 227
206 For an example of being clever with rw-locks, see the "waitqueue_lock" 228 For an example of being clever with rw-locks, see the "waitqueue_lock"
207 handling in kernel/sched.c - nothing ever _changes_ a wait-queue from 229 handling in kernel/sched.c - nothing ever _changes_ a wait-queue from
208 within an interrupt, they only read the queue in order to know whom to 230 within an interrupt, they only read the queue in order to know whom to
209 wake up. So read-locks are safe (which is good: they are very common 231 wake up. So read-locks are safe (which is good: they are very common
210 indeed), while write-locks need to protect themselves against interrupts. 232 indeed), while write-locks need to protect themselves against interrupts.
211 233
212 Linus 234 Linus
213 235
214 236
215 237
1 # 1 #
2 # File system configuration 2 # File system configuration
3 # 3 #
4 4
5 menu "File systems" 5 menu "File systems"
6 6
7 if BLOCK 7 if BLOCK
8 8
9 config EXT2_FS 9 config EXT2_FS
10 tristate "Second extended fs support" 10 tristate "Second extended fs support"
11 help 11 help
12 Ext2 is a standard Linux file system for hard disks. 12 Ext2 is a standard Linux file system for hard disks.
13 13
14 To compile this file system support as a module, choose M here: the 14 To compile this file system support as a module, choose M here: the
15 module will be called ext2. 15 module will be called ext2.
16 16
17 If unsure, say Y. 17 If unsure, say Y.
18 18
19 config EXT2_FS_XATTR 19 config EXT2_FS_XATTR
20 bool "Ext2 extended attributes" 20 bool "Ext2 extended attributes"
21 depends on EXT2_FS 21 depends on EXT2_FS
22 help 22 help
23 Extended attributes are name:value pairs associated with inodes by 23 Extended attributes are name:value pairs associated with inodes by
24 the kernel or by users (see the attr(5) manual page, or visit 24 the kernel or by users (see the attr(5) manual page, or visit
25 <http://acl.bestbits.at/> for details). 25 <http://acl.bestbits.at/> for details).
26 26
27 If unsure, say N. 27 If unsure, say N.
28 28
29 config EXT2_FS_POSIX_ACL 29 config EXT2_FS_POSIX_ACL
30 bool "Ext2 POSIX Access Control Lists" 30 bool "Ext2 POSIX Access Control Lists"
31 depends on EXT2_FS_XATTR 31 depends on EXT2_FS_XATTR
32 select FS_POSIX_ACL 32 select FS_POSIX_ACL
33 help 33 help
34 Posix Access Control Lists (ACLs) support permissions for users and 34 Posix Access Control Lists (ACLs) support permissions for users and
35 groups beyond the owner/group/world scheme. 35 groups beyond the owner/group/world scheme.
36 36
37 To learn more about Access Control Lists, visit the Posix ACLs for 37 To learn more about Access Control Lists, visit the Posix ACLs for
38 Linux website <http://acl.bestbits.at/>. 38 Linux website <http://acl.bestbits.at/>.
39 39
40 If you don't know what Access Control Lists are, say N 40 If you don't know what Access Control Lists are, say N
41 41
42 config EXT2_FS_SECURITY 42 config EXT2_FS_SECURITY
43 bool "Ext2 Security Labels" 43 bool "Ext2 Security Labels"
44 depends on EXT2_FS_XATTR 44 depends on EXT2_FS_XATTR
45 help 45 help
46 Security labels support alternative access control models 46 Security labels support alternative access control models
47 implemented by security modules like SELinux. This option 47 implemented by security modules like SELinux. This option
48 enables an extended attribute handler for file security 48 enables an extended attribute handler for file security
49 labels in the ext2 filesystem. 49 labels in the ext2 filesystem.
50 50
51 If you are not using a security module that requires using 51 If you are not using a security module that requires using
52 extended attributes for file security labels, say N. 52 extended attributes for file security labels, say N.
53 53
54 config EXT2_FS_XIP 54 config EXT2_FS_XIP
55 bool "Ext2 execute in place support" 55 bool "Ext2 execute in place support"
56 depends on EXT2_FS && MMU 56 depends on EXT2_FS && MMU
57 help 57 help
58 Execute in place can be used on memory-backed block devices. If you 58 Execute in place can be used on memory-backed block devices. If you
59 enable this option, you can select to mount block devices which are 59 enable this option, you can select to mount block devices which are
60 capable of this feature without using the page cache. 60 capable of this feature without using the page cache.
61 61
62 If you do not use a block device that is capable of using this, 62 If you do not use a block device that is capable of using this,
63 or if unsure, say N. 63 or if unsure, say N.
64 64
65 config FS_XIP 65 config FS_XIP
66 # execute in place 66 # execute in place
67 bool 67 bool
68 depends on EXT2_FS_XIP 68 depends on EXT2_FS_XIP
69 default y 69 default y
70 70
71 config EXT3_FS 71 config EXT3_FS
72 tristate "Ext3 journalling file system support" 72 tristate "Ext3 journalling file system support"
73 select JBD 73 select JBD
74 help 74 help
75 This is the journalling version of the Second extended file system 75 This is the journalling version of the Second extended file system
76 (often called ext3), the de facto standard Linux file system 76 (often called ext3), the de facto standard Linux file system
77 (method to organize files on a storage device) for hard disks. 77 (method to organize files on a storage device) for hard disks.
78 78
79 The journalling code included in this driver means you do not have 79 The journalling code included in this driver means you do not have
80 to run e2fsck (file system checker) on your file systems after a 80 to run e2fsck (file system checker) on your file systems after a
81 crash. The journal keeps track of any changes that were being made 81 crash. The journal keeps track of any changes that were being made
82 at the time the system crashed, and can ensure that your file system 82 at the time the system crashed, and can ensure that your file system
83 is consistent without the need for a lengthy check. 83 is consistent without the need for a lengthy check.
84 84
85 Other than adding the journal to the file system, the on-disk format 85 Other than adding the journal to the file system, the on-disk format
86 of ext3 is identical to ext2. It is possible to freely switch 86 of ext3 is identical to ext2. It is possible to freely switch
87 between using the ext3 driver and the ext2 driver, as long as the 87 between using the ext3 driver and the ext2 driver, as long as the
88 file system has been cleanly unmounted, or e2fsck is run on the file 88 file system has been cleanly unmounted, or e2fsck is run on the file
89 system. 89 system.
90 90
91 To add a journal on an existing ext2 file system or change the 91 To add a journal on an existing ext2 file system or change the
92 behavior of ext3 file systems, you can use the tune2fs utility ("man 92 behavior of ext3 file systems, you can use the tune2fs utility ("man
93 tune2fs"). To modify attributes of files and directories on ext3 93 tune2fs"). To modify attributes of files and directories on ext3
94 file systems, use chattr ("man chattr"). You need to be using 94 file systems, use chattr ("man chattr"). You need to be using
95 e2fsprogs version 1.20 or later in order to create ext3 journals 95 e2fsprogs version 1.20 or later in order to create ext3 journals
96 (available at <http://sourceforge.net/projects/e2fsprogs/>). 96 (available at <http://sourceforge.net/projects/e2fsprogs/>).
97 97
98 To compile this file system support as a module, choose M here: the 98 To compile this file system support as a module, choose M here: the
99 module will be called ext3. 99 module will be called ext3.
100 100
101 config EXT3_FS_XATTR 101 config EXT3_FS_XATTR
102 bool "Ext3 extended attributes" 102 bool "Ext3 extended attributes"
103 depends on EXT3_FS 103 depends on EXT3_FS
104 default y 104 default y
105 help 105 help
106 Extended attributes are name:value pairs associated with inodes by 106 Extended attributes are name:value pairs associated with inodes by
107 the kernel or by users (see the attr(5) manual page, or visit 107 the kernel or by users (see the attr(5) manual page, or visit
108 <http://acl.bestbits.at/> for details). 108 <http://acl.bestbits.at/> for details).
109 109
110 If unsure, say N. 110 If unsure, say N.
111 111
112 You need this for POSIX ACL support on ext3. 112 You need this for POSIX ACL support on ext3.
113 113
114 config EXT3_FS_POSIX_ACL 114 config EXT3_FS_POSIX_ACL
115 bool "Ext3 POSIX Access Control Lists" 115 bool "Ext3 POSIX Access Control Lists"
116 depends on EXT3_FS_XATTR 116 depends on EXT3_FS_XATTR
117 select FS_POSIX_ACL 117 select FS_POSIX_ACL
118 help 118 help
119 Posix Access Control Lists (ACLs) support permissions for users and 119 Posix Access Control Lists (ACLs) support permissions for users and
120 groups beyond the owner/group/world scheme. 120 groups beyond the owner/group/world scheme.
121 121
122 To learn more about Access Control Lists, visit the Posix ACLs for 122 To learn more about Access Control Lists, visit the Posix ACLs for
123 Linux website <http://acl.bestbits.at/>. 123 Linux website <http://acl.bestbits.at/>.
124 124
125 If you don't know what Access Control Lists are, say N 125 If you don't know what Access Control Lists are, say N
126 126
127 config EXT3_FS_SECURITY 127 config EXT3_FS_SECURITY
128 bool "Ext3 Security Labels" 128 bool "Ext3 Security Labels"
129 depends on EXT3_FS_XATTR 129 depends on EXT3_FS_XATTR
130 help 130 help
131 Security labels support alternative access control models 131 Security labels support alternative access control models
132 implemented by security modules like SELinux. This option 132 implemented by security modules like SELinux. This option
133 enables an extended attribute handler for file security 133 enables an extended attribute handler for file security
134 labels in the ext3 filesystem. 134 labels in the ext3 filesystem.
135 135
136 If you are not using a security module that requires using 136 If you are not using a security module that requires using
137 extended attributes for file security labels, say N. 137 extended attributes for file security labels, say N.
138 138
139 config EXT4DEV_FS 139 config EXT4DEV_FS
140 tristate "Ext4dev/ext4 extended fs support development (EXPERIMENTAL)" 140 tristate "Ext4dev/ext4 extended fs support development (EXPERIMENTAL)"
141 depends on EXPERIMENTAL 141 depends on EXPERIMENTAL
142 select JBD2 142 select JBD2
143 select CRC16 143 select CRC16
144 help 144 help
145 Ext4dev is a predecessor filesystem of the next generation 145 Ext4dev is a predecessor filesystem of the next generation
146 extended fs ext4, based on ext3 filesystem code. It will be 146 extended fs ext4, based on ext3 filesystem code. It will be
147 renamed ext4 fs later, once ext4dev is mature and stabilized. 147 renamed ext4 fs later, once ext4dev is mature and stabilized.
148 148
149 Unlike the change from ext2 filesystem to ext3 filesystem, 149 Unlike the change from ext2 filesystem to ext3 filesystem,
150 the on-disk format of ext4dev is not the same as ext3 any more: 150 the on-disk format of ext4dev is not the same as ext3 any more:
151 it is based on extent maps and it supports 48-bit physical block 151 it is based on extent maps and it supports 48-bit physical block
152 numbers. These combined on-disk format changes will allow 152 numbers. These combined on-disk format changes will allow
153 ext4dev/ext4 to handle more than 16 TB filesystem volumes -- 153 ext4dev/ext4 to handle more than 16 TB filesystem volumes --
154 a hard limit that ext3 cannot overcome without changing the 154 a hard limit that ext3 cannot overcome without changing the
155 on-disk format. 155 on-disk format.
156 156
157 Other than extent maps and 48-bit block numbers, ext4dev also is 157 Other than extent maps and 48-bit block numbers, ext4dev also is
158 likely to have other new features such as persistent preallocation, 158 likely to have other new features such as persistent preallocation,
159 high resolution time stamps, and larger file support etc. These 159 high resolution time stamps, and larger file support etc. These
160 features will be added to ext4dev gradually. 160 features will be added to ext4dev gradually.
161 161
162 To compile this file system support as a module, choose M here. The 162 To compile this file system support as a module, choose M here. The
163 module will be called ext4dev. 163 module will be called ext4dev.
164 164
165 If unsure, say N. 165 If unsure, say N.
166 166
167 config EXT4DEV_FS_XATTR 167 config EXT4DEV_FS_XATTR
168 bool "Ext4dev extended attributes" 168 bool "Ext4dev extended attributes"
169 depends on EXT4DEV_FS 169 depends on EXT4DEV_FS
170 default y 170 default y
171 help 171 help
172 Extended attributes are name:value pairs associated with inodes by 172 Extended attributes are name:value pairs associated with inodes by
173 the kernel or by users (see the attr(5) manual page, or visit 173 the kernel or by users (see the attr(5) manual page, or visit
174 <http://acl.bestbits.at/> for details). 174 <http://acl.bestbits.at/> for details).
175 175
176 If unsure, say N. 176 If unsure, say N.
177 177
178 You need this for POSIX ACL support on ext4dev/ext4. 178 You need this for POSIX ACL support on ext4dev/ext4.
179 179
180 config EXT4DEV_FS_POSIX_ACL 180 config EXT4DEV_FS_POSIX_ACL
181 bool "Ext4dev POSIX Access Control Lists" 181 bool "Ext4dev POSIX Access Control Lists"
182 depends on EXT4DEV_FS_XATTR 182 depends on EXT4DEV_FS_XATTR
183 select FS_POSIX_ACL 183 select FS_POSIX_ACL
184 help 184 help
185 POSIX Access Control Lists (ACLs) support permissions for users and 185 POSIX Access Control Lists (ACLs) support permissions for users and
186 groups beyond the owner/group/world scheme. 186 groups beyond the owner/group/world scheme.
187 187
188 To learn more about Access Control Lists, visit the POSIX ACLs for 188 To learn more about Access Control Lists, visit the POSIX ACLs for
189 Linux website <http://acl.bestbits.at/>. 189 Linux website <http://acl.bestbits.at/>.
190 190
191 If you don't know what Access Control Lists are, say N 191 If you don't know what Access Control Lists are, say N
192 192
193 config EXT4DEV_FS_SECURITY 193 config EXT4DEV_FS_SECURITY
194 bool "Ext4dev Security Labels" 194 bool "Ext4dev Security Labels"
195 depends on EXT4DEV_FS_XATTR 195 depends on EXT4DEV_FS_XATTR
196 help 196 help
197 Security labels support alternative access control models 197 Security labels support alternative access control models
198 implemented by security modules like SELinux. This option 198 implemented by security modules like SELinux. This option
199 enables an extended attribute handler for file security 199 enables an extended attribute handler for file security
200 labels in the ext4dev/ext4 filesystem. 200 labels in the ext4dev/ext4 filesystem.
201 201
202 If you are not using a security module that requires using 202 If you are not using a security module that requires using
203 extended attributes for file security labels, say N. 203 extended attributes for file security labels, say N.
204 204
205 config JBD 205 config JBD
206 tristate 206 tristate
207 help 207 help
208 This is a generic journalling layer for block devices. It is 208 This is a generic journalling layer for block devices. It is
209 currently used by the ext3 and OCFS2 file systems, but it could 209 currently used by the ext3 and OCFS2 file systems, but it could
210 also be used to add journal support to other file systems or block 210 also be used to add journal support to other file systems or block
211 devices such as RAID or LVM. 211 devices such as RAID or LVM.
212 212
213 If you are using the ext3 or OCFS2 file systems, you need to 213 If you are using the ext3 or OCFS2 file systems, you need to
214 say Y here. If you are not using ext3 OCFS2 then you will probably 214 say Y here. If you are not using ext3 OCFS2 then you will probably
215 want to say N. 215 want to say N.
216 216
217 To compile this device as a module, choose M here: the module will be 217 To compile this device as a module, choose M here: the module will be
218 called jbd. If you are compiling ext3 or OCFS2 into the kernel, 218 called jbd. If you are compiling ext3 or OCFS2 into the kernel,
219 you cannot compile this code as a module. 219 you cannot compile this code as a module.
220 220
221 config JBD_DEBUG 221 config JBD_DEBUG
222 bool "JBD (ext3) debugging support" 222 bool "JBD (ext3) debugging support"
223 depends on JBD && DEBUG_FS 223 depends on JBD && DEBUG_FS
224 help 224 help
225 If you are using the ext3 journaled file system (or potentially any 225 If you are using the ext3 journaled file system (or potentially any
226 other file system/device using JBD), this option allows you to 226 other file system/device using JBD), this option allows you to
227 enable debugging output while the system is running, in order to 227 enable debugging output while the system is running, in order to
228 help track down any problems you are having. By default the 228 help track down any problems you are having. By default the
229 debugging output will be turned off. 229 debugging output will be turned off.
230 230
231 If you select Y here, then you will be able to turn on debugging 231 If you select Y here, then you will be able to turn on debugging
232 with "echo N > /sys/kernel/debug/jbd/jbd-debug", where N is a 232 with "echo N > /sys/kernel/debug/jbd/jbd-debug", where N is a
233 number between 1 and 5, the higher the number, the more debugging 233 number between 1 and 5, the higher the number, the more debugging
234 output is generated. To turn debugging off again, do 234 output is generated. To turn debugging off again, do
235 "echo 0 > /sys/kernel/debug/jbd/jbd-debug". 235 "echo 0 > /sys/kernel/debug/jbd/jbd-debug".
236 236
237 config JBD2 237 config JBD2
238 tristate 238 tristate
239 select CRC32 239 select CRC32
240 help 240 help
241 This is a generic journaling layer for block devices that support 241 This is a generic journaling layer for block devices that support
242 both 32-bit and 64-bit block numbers. It is currently used by 242 both 32-bit and 64-bit block numbers. It is currently used by
243 the ext4dev/ext4 filesystem, but it could also be used to add 243 the ext4dev/ext4 filesystem, but it could also be used to add
244 journal support to other file systems or block devices such 244 journal support to other file systems or block devices such
245 as RAID or LVM. 245 as RAID or LVM.
246 246
247 If you are using ext4dev/ext4, you need to say Y here. If you are not 247 If you are using ext4dev/ext4, you need to say Y here. If you are not
248 using ext4dev/ext4 then you will probably want to say N. 248 using ext4dev/ext4 then you will probably want to say N.
249 249
250 To compile this device as a module, choose M here. The module will be 250 To compile this device as a module, choose M here. The module will be
251 called jbd2. If you are compiling ext4dev/ext4 into the kernel, 251 called jbd2. If you are compiling ext4dev/ext4 into the kernel,
252 you cannot compile this code as a module. 252 you cannot compile this code as a module.
253 253
254 config JBD2_DEBUG 254 config JBD2_DEBUG
255 bool "JBD2 (ext4dev/ext4) debugging support" 255 bool "JBD2 (ext4dev/ext4) debugging support"
256 depends on JBD2 && DEBUG_FS 256 depends on JBD2 && DEBUG_FS
257 help 257 help
258 If you are using the ext4dev/ext4 journaled file system (or 258 If you are using the ext4dev/ext4 journaled file system (or
259 potentially any other filesystem/device using JBD2), this option 259 potentially any other filesystem/device using JBD2), this option
260 allows you to enable debugging output while the system is running, 260 allows you to enable debugging output while the system is running,
261 in order to help track down any problems you are having. 261 in order to help track down any problems you are having.
262 By default, the debugging output will be turned off. 262 By default, the debugging output will be turned off.
263 263
264 If you select Y here, then you will be able to turn on debugging 264 If you select Y here, then you will be able to turn on debugging
265 with "echo N > /sys/kernel/debug/jbd2/jbd2-debug", where N is a 265 with "echo N > /sys/kernel/debug/jbd2/jbd2-debug", where N is a
266 number between 1 and 5. The higher the number, the more debugging 266 number between 1 and 5. The higher the number, the more debugging
267 output is generated. To turn debugging off again, do 267 output is generated. To turn debugging off again, do
268 "echo 0 > /sys/kernel/debug/jbd2/jbd2-debug". 268 "echo 0 > /sys/kernel/debug/jbd2/jbd2-debug".
269 269
270 config FS_MBCACHE 270 config FS_MBCACHE
271 # Meta block cache for Extended Attributes (ext2/ext3/ext4) 271 # Meta block cache for Extended Attributes (ext2/ext3/ext4)
272 tristate 272 tristate
273 depends on EXT2_FS_XATTR || EXT3_FS_XATTR || EXT4DEV_FS_XATTR 273 depends on EXT2_FS_XATTR || EXT3_FS_XATTR || EXT4DEV_FS_XATTR
274 default y if EXT2_FS=y || EXT3_FS=y || EXT4DEV_FS=y 274 default y if EXT2_FS=y || EXT3_FS=y || EXT4DEV_FS=y
275 default m if EXT2_FS=m || EXT3_FS=m || EXT4DEV_FS=m 275 default m if EXT2_FS=m || EXT3_FS=m || EXT4DEV_FS=m
276 276
277 config REISERFS_FS 277 config REISERFS_FS
278 tristate "Reiserfs support" 278 tristate "Reiserfs support"
279 help 279 help
280 Stores not just filenames but the files themselves in a balanced 280 Stores not just filenames but the files themselves in a balanced
281 tree. Uses journalling. 281 tree. Uses journalling.
282 282
283 Balanced trees are more efficient than traditional file system 283 Balanced trees are more efficient than traditional file system
284 architectural foundations. 284 architectural foundations.
285 285
286 In general, ReiserFS is as fast as ext2, but is very efficient with 286 In general, ReiserFS is as fast as ext2, but is very efficient with
287 large directories and small files. Additional patches are needed 287 large directories and small files. Additional patches are needed
288 for NFS and quotas, please see <http://www.namesys.com/> for links. 288 for NFS and quotas, please see <http://www.namesys.com/> for links.
289 289
290 It is more easily extended to have features currently found in 290 It is more easily extended to have features currently found in
291 database and keyword search systems than block allocation based file 291 database and keyword search systems than block allocation based file
292 systems are. The next version will be so extended, and will support 292 systems are. The next version will be so extended, and will support
293 plugins consistent with our motto ``It takes more than a license to 293 plugins consistent with our motto ``It takes more than a license to
294 make source code open.'' 294 make source code open.''
295 295
296 Read <http://www.namesys.com/> to learn more about reiserfs. 296 Read <http://www.namesys.com/> to learn more about reiserfs.
297 297
298 Sponsored by Threshold Networks, Emusic.com, and Bigstorage.com. 298 Sponsored by Threshold Networks, Emusic.com, and Bigstorage.com.
299 299
300 If you like it, you can pay us to add new features to it that you 300 If you like it, you can pay us to add new features to it that you
301 need, buy a support contract, or pay us to port it to another OS. 301 need, buy a support contract, or pay us to port it to another OS.
302 302
303 config REISERFS_CHECK 303 config REISERFS_CHECK
304 bool "Enable reiserfs debug mode" 304 bool "Enable reiserfs debug mode"
305 depends on REISERFS_FS 305 depends on REISERFS_FS
306 help 306 help
307 If you set this to Y, then ReiserFS will perform every check it can 307 If you set this to Y, then ReiserFS will perform every check it can
308 possibly imagine of its internal consistency throughout its 308 possibly imagine of its internal consistency throughout its
309 operation. It will also go substantially slower. More than once we 309 operation. It will also go substantially slower. More than once we
310 have forgotten that this was on, and then gone despondent over the 310 have forgotten that this was on, and then gone despondent over the
311 latest benchmarks.:-) Use of this option allows our team to go all 311 latest benchmarks.:-) Use of this option allows our team to go all
312 out in checking for consistency when debugging without fear of its 312 out in checking for consistency when debugging without fear of its
313 effect on end users. If you are on the verge of sending in a bug 313 effect on end users. If you are on the verge of sending in a bug
314 report, say Y and you might get a useful error message. Almost 314 report, say Y and you might get a useful error message. Almost
315 everyone should say N. 315 everyone should say N.
316 316
317 config REISERFS_PROC_INFO 317 config REISERFS_PROC_INFO
318 bool "Stats in /proc/fs/reiserfs" 318 bool "Stats in /proc/fs/reiserfs"
319 depends on REISERFS_FS && PROC_FS 319 depends on REISERFS_FS && PROC_FS
320 help 320 help
321 Create under /proc/fs/reiserfs a hierarchy of files, displaying 321 Create under /proc/fs/reiserfs a hierarchy of files, displaying
322 various ReiserFS statistics and internal data at the expense of 322 various ReiserFS statistics and internal data at the expense of
323 making your kernel or module slightly larger (+8 KB). This also 323 making your kernel or module slightly larger (+8 KB). This also
324 increases the amount of kernel memory required for each mount. 324 increases the amount of kernel memory required for each mount.
325 Almost everyone but ReiserFS developers and people fine-tuning 325 Almost everyone but ReiserFS developers and people fine-tuning
326 reiserfs or tracing problems should say N. 326 reiserfs or tracing problems should say N.
327 327
328 config REISERFS_FS_XATTR 328 config REISERFS_FS_XATTR
329 bool "ReiserFS extended attributes" 329 bool "ReiserFS extended attributes"
330 depends on REISERFS_FS 330 depends on REISERFS_FS
331 help 331 help
332 Extended attributes are name:value pairs associated with inodes by 332 Extended attributes are name:value pairs associated with inodes by
333 the kernel or by users (see the attr(5) manual page, or visit 333 the kernel or by users (see the attr(5) manual page, or visit
334 <http://acl.bestbits.at/> for details). 334 <http://acl.bestbits.at/> for details).
335 335
336 If unsure, say N. 336 If unsure, say N.
337 337
338 config REISERFS_FS_POSIX_ACL 338 config REISERFS_FS_POSIX_ACL
339 bool "ReiserFS POSIX Access Control Lists" 339 bool "ReiserFS POSIX Access Control Lists"
340 depends on REISERFS_FS_XATTR 340 depends on REISERFS_FS_XATTR
341 select FS_POSIX_ACL 341 select FS_POSIX_ACL
342 help 342 help
343 Posix Access Control Lists (ACLs) support permissions for users and 343 Posix Access Control Lists (ACLs) support permissions for users and
344 groups beyond the owner/group/world scheme. 344 groups beyond the owner/group/world scheme.
345 345
346 To learn more about Access Control Lists, visit the Posix ACLs for 346 To learn more about Access Control Lists, visit the Posix ACLs for
347 Linux website <http://acl.bestbits.at/>. 347 Linux website <http://acl.bestbits.at/>.
348 348
349 If you don't know what Access Control Lists are, say N 349 If you don't know what Access Control Lists are, say N
350 350
351 config REISERFS_FS_SECURITY 351 config REISERFS_FS_SECURITY
352 bool "ReiserFS Security Labels" 352 bool "ReiserFS Security Labels"
353 depends on REISERFS_FS_XATTR 353 depends on REISERFS_FS_XATTR
354 help 354 help
355 Security labels support alternative access control models 355 Security labels support alternative access control models
356 implemented by security modules like SELinux. This option 356 implemented by security modules like SELinux. This option
357 enables an extended attribute handler for file security 357 enables an extended attribute handler for file security
358 labels in the ReiserFS filesystem. 358 labels in the ReiserFS filesystem.
359 359
360 If you are not using a security module that requires using 360 If you are not using a security module that requires using
361 extended attributes for file security labels, say N. 361 extended attributes for file security labels, say N.
362 362
363 config JFS_FS 363 config JFS_FS
364 tristate "JFS filesystem support" 364 tristate "JFS filesystem support"
365 select NLS 365 select NLS
366 help 366 help
367 This is a port of IBM's Journaled Filesystem . More information is 367 This is a port of IBM's Journaled Filesystem . More information is
368 available in the file <file:Documentation/filesystems/jfs.txt>. 368 available in the file <file:Documentation/filesystems/jfs.txt>.
369 369
370 If you do not intend to use the JFS filesystem, say N. 370 If you do not intend to use the JFS filesystem, say N.
371 371
372 config JFS_POSIX_ACL 372 config JFS_POSIX_ACL
373 bool "JFS POSIX Access Control Lists" 373 bool "JFS POSIX Access Control Lists"
374 depends on JFS_FS 374 depends on JFS_FS
375 select FS_POSIX_ACL 375 select FS_POSIX_ACL
376 help 376 help
377 Posix Access Control Lists (ACLs) support permissions for users and 377 Posix Access Control Lists (ACLs) support permissions for users and
378 groups beyond the owner/group/world scheme. 378 groups beyond the owner/group/world scheme.
379 379
380 To learn more about Access Control Lists, visit the Posix ACLs for 380 To learn more about Access Control Lists, visit the Posix ACLs for
381 Linux website <http://acl.bestbits.at/>. 381 Linux website <http://acl.bestbits.at/>.
382 382
383 If you don't know what Access Control Lists are, say N 383 If you don't know what Access Control Lists are, say N
384 384
385 config JFS_SECURITY 385 config JFS_SECURITY
386 bool "JFS Security Labels" 386 bool "JFS Security Labels"
387 depends on JFS_FS 387 depends on JFS_FS
388 help 388 help
389 Security labels support alternative access control models 389 Security labels support alternative access control models
390 implemented by security modules like SELinux. This option 390 implemented by security modules like SELinux. This option
391 enables an extended attribute handler for file security 391 enables an extended attribute handler for file security
392 labels in the jfs filesystem. 392 labels in the jfs filesystem.
393 393
394 If you are not using a security module that requires using 394 If you are not using a security module that requires using
395 extended attributes for file security labels, say N. 395 extended attributes for file security labels, say N.
396 396
397 config JFS_DEBUG 397 config JFS_DEBUG
398 bool "JFS debugging" 398 bool "JFS debugging"
399 depends on JFS_FS 399 depends on JFS_FS
400 help 400 help
401 If you are experiencing any problems with the JFS filesystem, say 401 If you are experiencing any problems with the JFS filesystem, say
402 Y here. This will result in additional debugging messages to be 402 Y here. This will result in additional debugging messages to be
403 written to the system log. Under normal circumstances, this 403 written to the system log. Under normal circumstances, this
404 results in very little overhead. 404 results in very little overhead.
405 405
406 config JFS_STATISTICS 406 config JFS_STATISTICS
407 bool "JFS statistics" 407 bool "JFS statistics"
408 depends on JFS_FS 408 depends on JFS_FS
409 help 409 help
410 Enabling this option will cause statistics from the JFS file system 410 Enabling this option will cause statistics from the JFS file system
411 to be made available to the user in the /proc/fs/jfs/ directory. 411 to be made available to the user in the /proc/fs/jfs/ directory.
412 412
413 config FS_POSIX_ACL 413 config FS_POSIX_ACL
414 # Posix ACL utility routines (for now, only ext2/ext3/jfs/reiserfs) 414 # Posix ACL utility routines (for now, only ext2/ext3/jfs/reiserfs)
415 # 415 #
416 # NOTE: you can implement Posix ACLs without these helpers (XFS does). 416 # NOTE: you can implement Posix ACLs without these helpers (XFS does).
417 # Never use this symbol for ifdefs. 417 # Never use this symbol for ifdefs.
418 # 418 #
419 bool 419 bool
420 default n 420 default n
421 421
422 source "fs/xfs/Kconfig" 422 source "fs/xfs/Kconfig"
423 source "fs/gfs2/Kconfig" 423 source "fs/gfs2/Kconfig"
424 424
425 config OCFS2_FS 425 config OCFS2_FS
426 tristate "OCFS2 file system support" 426 tristate "OCFS2 file system support"
427 depends on NET && SYSFS 427 depends on NET && SYSFS
428 select CONFIGFS_FS 428 select CONFIGFS_FS
429 select JBD 429 select JBD
430 select CRC32 430 select CRC32
431 help 431 help
432 OCFS2 is a general purpose extent based shared disk cluster file 432 OCFS2 is a general purpose extent based shared disk cluster file
433 system with many similarities to ext3. It supports 64 bit inode 433 system with many similarities to ext3. It supports 64 bit inode
434 numbers, and has automatically extending metadata groups which may 434 numbers, and has automatically extending metadata groups which may
435 also make it attractive for non-clustered use. 435 also make it attractive for non-clustered use.
436 436
437 You'll want to install the ocfs2-tools package in order to at least 437 You'll want to install the ocfs2-tools package in order to at least
438 get "mount.ocfs2". 438 get "mount.ocfs2".
439 439
440 Project web page: http://oss.oracle.com/projects/ocfs2 440 Project web page: http://oss.oracle.com/projects/ocfs2
441 Tools web page: http://oss.oracle.com/projects/ocfs2-tools 441 Tools web page: http://oss.oracle.com/projects/ocfs2-tools
442 OCFS2 mailing lists: http://oss.oracle.com/projects/ocfs2/mailman/ 442 OCFS2 mailing lists: http://oss.oracle.com/projects/ocfs2/mailman/
443 443
444 For more information on OCFS2, see the file 444 For more information on OCFS2, see the file
445 <file:Documentation/filesystems/ocfs2.txt>. 445 <file:Documentation/filesystems/ocfs2.txt>.
446 446
447 config OCFS2_DEBUG_MASKLOG 447 config OCFS2_DEBUG_MASKLOG
448 bool "OCFS2 logging support" 448 bool "OCFS2 logging support"
449 depends on OCFS2_FS 449 depends on OCFS2_FS
450 default y 450 default y
451 help 451 help
452 The ocfs2 filesystem has an extensive logging system. The system 452 The ocfs2 filesystem has an extensive logging system. The system
453 allows selection of events to log via files in /sys/o2cb/logmask/. 453 allows selection of events to log via files in /sys/o2cb/logmask/.
454 This option will enlarge your kernel, but it allows debugging of 454 This option will enlarge your kernel, but it allows debugging of
455 ocfs2 filesystem issues. 455 ocfs2 filesystem issues.
456 456
457 config OCFS2_DEBUG_FS 457 config OCFS2_DEBUG_FS
458 bool "OCFS2 expensive checks" 458 bool "OCFS2 expensive checks"
459 depends on OCFS2_FS 459 depends on OCFS2_FS
460 default n 460 default n
461 help 461 help
462 This option will enable expensive consistency checks. Enable 462 This option will enable expensive consistency checks. Enable
463 this option for debugging only as it is likely to decrease 463 this option for debugging only as it is likely to decrease
464 performance of the filesystem. 464 performance of the filesystem.
465 465
466 endif # BLOCK 466 endif # BLOCK
467 467
468 config DNOTIFY 468 config DNOTIFY
469 bool "Dnotify support" 469 bool "Dnotify support"
470 default y 470 default y
471 help 471 help
472 Dnotify is a directory-based per-fd file change notification system 472 Dnotify is a directory-based per-fd file change notification system
473 that uses signals to communicate events to user-space. There exist 473 that uses signals to communicate events to user-space. There exist
474 superior alternatives, but some applications may still rely on 474 superior alternatives, but some applications may still rely on
475 dnotify. 475 dnotify.
476 476
477 If unsure, say Y. 477 If unsure, say Y.
478 478
479 config INOTIFY 479 config INOTIFY
480 bool "Inotify file change notification support" 480 bool "Inotify file change notification support"
481 default y 481 default y
482 ---help--- 482 ---help---
483 Say Y here to enable inotify support. Inotify is a file change 483 Say Y here to enable inotify support. Inotify is a file change
484 notification system and a replacement for dnotify. Inotify fixes 484 notification system and a replacement for dnotify. Inotify fixes
485 numerous shortcomings in dnotify and introduces several new features 485 numerous shortcomings in dnotify and introduces several new features
486 including multiple file events, one-shot support, and unmount 486 including multiple file events, one-shot support, and unmount
487 notification. 487 notification.
488 488
489 For more information, see <file:Documentation/filesystems/inotify.txt> 489 For more information, see <file:Documentation/filesystems/inotify.txt>
490 490
491 If unsure, say Y. 491 If unsure, say Y.
492 492
493 config INOTIFY_USER 493 config INOTIFY_USER
494 bool "Inotify support for userspace" 494 bool "Inotify support for userspace"
495 depends on INOTIFY 495 depends on INOTIFY
496 default y 496 default y
497 ---help--- 497 ---help---
498 Say Y here to enable inotify support for userspace, including the 498 Say Y here to enable inotify support for userspace, including the
499 associated system calls. Inotify allows monitoring of both files and 499 associated system calls. Inotify allows monitoring of both files and
500 directories via a single open fd. Events are read from the file 500 directories via a single open fd. Events are read from the file
501 descriptor, which is also select()- and poll()-able. 501 descriptor, which is also select()- and poll()-able.
502 502
503 For more information, see <file:Documentation/filesystems/inotify.txt> 503 For more information, see <file:Documentation/filesystems/inotify.txt>
504 504
505 If unsure, say Y. 505 If unsure, say Y.
506 506
507 config QUOTA 507 config QUOTA
508 bool "Quota support" 508 bool "Quota support"
509 help 509 help
510 If you say Y here, you will be able to set per user limits for disk 510 If you say Y here, you will be able to set per user limits for disk
511 usage (also called disk quotas). Currently, it works for the 511 usage (also called disk quotas). Currently, it works for the
512 ext2, ext3, and reiserfs file system. ext3 also supports journalled 512 ext2, ext3, and reiserfs file system. ext3 also supports journalled
513 quotas for which you don't need to run quotacheck(8) after an unclean 513 quotas for which you don't need to run quotacheck(8) after an unclean
514 shutdown. 514 shutdown.
515 For further details, read the Quota mini-HOWTO, available from 515 For further details, read the Quota mini-HOWTO, available from
516 <http://www.tldp.org/docs.html#howto>, or the documentation provided 516 <http://www.tldp.org/docs.html#howto>, or the documentation provided
517 with the quota tools. Probably the quota support is only useful for 517 with the quota tools. Probably the quota support is only useful for
518 multi user systems. If unsure, say N. 518 multi user systems. If unsure, say N.
519 519
520 config QUOTA_NETLINK_INTERFACE 520 config QUOTA_NETLINK_INTERFACE
521 bool "Report quota messages through netlink interface" 521 bool "Report quota messages through netlink interface"
522 depends on QUOTA && NET 522 depends on QUOTA && NET
523 help 523 help
524 If you say Y here, quota warnings (about exceeding softlimit, reaching 524 If you say Y here, quota warnings (about exceeding softlimit, reaching
525 hardlimit, etc.) will be reported through netlink interface. If unsure, 525 hardlimit, etc.) will be reported through netlink interface. If unsure,
526 say Y. 526 say Y.
527 527
528 config PRINT_QUOTA_WARNING 528 config PRINT_QUOTA_WARNING
529 bool "Print quota warnings to console (OBSOLETE)" 529 bool "Print quota warnings to console (OBSOLETE)"
530 depends on QUOTA 530 depends on QUOTA
531 default y 531 default y
532 help 532 help
533 If you say Y here, quota warnings (about exceeding softlimit, reaching 533 If you say Y here, quota warnings (about exceeding softlimit, reaching
534 hardlimit, etc.) will be printed to the process' controlling terminal. 534 hardlimit, etc.) will be printed to the process' controlling terminal.
535 Note that this behavior is currently deprecated and may go away in 535 Note that this behavior is currently deprecated and may go away in
536 future. Please use notification via netlink socket instead. 536 future. Please use notification via netlink socket instead.
537 537
538 config QFMT_V1 538 config QFMT_V1
539 tristate "Old quota format support" 539 tristate "Old quota format support"
540 depends on QUOTA 540 depends on QUOTA
541 help 541 help
542 This quota format was (is) used by kernels earlier than 2.4.22. If 542 This quota format was (is) used by kernels earlier than 2.4.22. If
543 you have quota working and you don't want to convert to new quota 543 you have quota working and you don't want to convert to new quota
544 format say Y here. 544 format say Y here.
545 545
546 config QFMT_V2 546 config QFMT_V2
547 tristate "Quota format v2 support" 547 tristate "Quota format v2 support"
548 depends on QUOTA 548 depends on QUOTA
549 help 549 help
550 This quota format allows using quotas with 32-bit UIDs/GIDs. If you 550 This quota format allows using quotas with 32-bit UIDs/GIDs. If you
551 need this functionality say Y here. 551 need this functionality say Y here.
552 552
553 config QUOTACTL 553 config QUOTACTL
554 bool 554 bool
555 depends on XFS_QUOTA || QUOTA 555 depends on XFS_QUOTA || QUOTA
556 default y 556 default y
557 557
558 config AUTOFS_FS 558 config AUTOFS_FS
559 tristate "Kernel automounter support" 559 tristate "Kernel automounter support"
560 help 560 help
561 The automounter is a tool to automatically mount remote file systems 561 The automounter is a tool to automatically mount remote file systems
562 on demand. This implementation is partially kernel-based to reduce 562 on demand. This implementation is partially kernel-based to reduce
563 overhead in the already-mounted case; this is unlike the BSD 563 overhead in the already-mounted case; this is unlike the BSD
564 automounter (amd), which is a pure user space daemon. 564 automounter (amd), which is a pure user space daemon.
565 565
566 To use the automounter you need the user-space tools from the autofs 566 To use the automounter you need the user-space tools from the autofs
567 package; you can find the location in <file:Documentation/Changes>. 567 package; you can find the location in <file:Documentation/Changes>.
568 You also want to answer Y to "NFS file system support", below. 568 You also want to answer Y to "NFS file system support", below.
569 569
570 If you want to use the newer version of the automounter with more 570 If you want to use the newer version of the automounter with more
571 features, say N here and say Y to "Kernel automounter v4 support", 571 features, say N here and say Y to "Kernel automounter v4 support",
572 below. 572 below.
573 573
574 To compile this support as a module, choose M here: the module will be 574 To compile this support as a module, choose M here: the module will be
575 called autofs. 575 called autofs.
576 576
577 If you are not a part of a fairly large, distributed network, you 577 If you are not a part of a fairly large, distributed network, you
578 probably do not need an automounter, and can say N here. 578 probably do not need an automounter, and can say N here.
579 579
580 config AUTOFS4_FS 580 config AUTOFS4_FS
581 tristate "Kernel automounter version 4 support (also supports v3)" 581 tristate "Kernel automounter version 4 support (also supports v3)"
582 help 582 help
583 The automounter is a tool to automatically mount remote file systems 583 The automounter is a tool to automatically mount remote file systems
584 on demand. This implementation is partially kernel-based to reduce 584 on demand. This implementation is partially kernel-based to reduce
585 overhead in the already-mounted case; this is unlike the BSD 585 overhead in the already-mounted case; this is unlike the BSD
586 automounter (amd), which is a pure user space daemon. 586 automounter (amd), which is a pure user space daemon.
587 587
588 To use the automounter you need the user-space tools from 588 To use the automounter you need the user-space tools from
589 <ftp://ftp.kernel.org/pub/linux/daemons/autofs/v4/>; you also 589 <ftp://ftp.kernel.org/pub/linux/daemons/autofs/v4/>; you also
590 want to answer Y to "NFS file system support", below. 590 want to answer Y to "NFS file system support", below.
591 591
592 To compile this support as a module, choose M here: the module will be 592 To compile this support as a module, choose M here: the module will be
593 called autofs4. You will need to add "alias autofs autofs4" to your 593 called autofs4. You will need to add "alias autofs autofs4" to your
594 modules configuration file. 594 modules configuration file.
595 595
596 If you are not a part of a fairly large, distributed network or 596 If you are not a part of a fairly large, distributed network or
597 don't have a laptop which needs to dynamically reconfigure to the 597 don't have a laptop which needs to dynamically reconfigure to the
598 local network, you probably do not need an automounter, and can say 598 local network, you probably do not need an automounter, and can say
599 N here. 599 N here.
600 600
601 config FUSE_FS 601 config FUSE_FS
602 tristate "Filesystem in Userspace support" 602 tristate "Filesystem in Userspace support"
603 help 603 help
604 With FUSE it is possible to implement a fully functional filesystem 604 With FUSE it is possible to implement a fully functional filesystem
605 in a userspace program. 605 in a userspace program.
606 606
607 There's also companion library: libfuse. This library along with 607 There's also companion library: libfuse. This library along with
608 utilities is available from the FUSE homepage: 608 utilities is available from the FUSE homepage:
609 <http://fuse.sourceforge.net/> 609 <http://fuse.sourceforge.net/>
610 610
611 See <file:Documentation/filesystems/fuse.txt> for more information. 611 See <file:Documentation/filesystems/fuse.txt> for more information.
612 See <file:Documentation/Changes> for needed library/utility version. 612 See <file:Documentation/Changes> for needed library/utility version.
613 613
614 If you want to develop a userspace FS, or if you want to use 614 If you want to develop a userspace FS, or if you want to use
615 a filesystem based on FUSE, answer Y or M. 615 a filesystem based on FUSE, answer Y or M.
616 616
617 config GENERIC_ACL 617 config GENERIC_ACL
618 bool 618 bool
619 select FS_POSIX_ACL 619 select FS_POSIX_ACL
620 620
621 if BLOCK 621 if BLOCK
622 menu "CD-ROM/DVD Filesystems" 622 menu "CD-ROM/DVD Filesystems"
623 623
624 config ISO9660_FS 624 config ISO9660_FS
625 tristate "ISO 9660 CDROM file system support" 625 tristate "ISO 9660 CDROM file system support"
626 help 626 help
627 This is the standard file system used on CD-ROMs. It was previously 627 This is the standard file system used on CD-ROMs. It was previously
628 known as "High Sierra File System" and is called "hsfs" on other 628 known as "High Sierra File System" and is called "hsfs" on other
629 Unix systems. The so-called Rock-Ridge extensions which allow for 629 Unix systems. The so-called Rock-Ridge extensions which allow for
630 long Unix filenames and symbolic links are also supported by this 630 long Unix filenames and symbolic links are also supported by this
631 driver. If you have a CD-ROM drive and want to do more with it than 631 driver. If you have a CD-ROM drive and want to do more with it than
632 just listen to audio CDs and watch its LEDs, say Y (and read 632 just listen to audio CDs and watch its LEDs, say Y (and read
633 <file:Documentation/filesystems/isofs.txt> and the CD-ROM-HOWTO, 633 <file:Documentation/filesystems/isofs.txt> and the CD-ROM-HOWTO,
634 available from <http://www.tldp.org/docs.html#howto>), thereby 634 available from <http://www.tldp.org/docs.html#howto>), thereby
635 enlarging your kernel by about 27 KB; otherwise say N. 635 enlarging your kernel by about 27 KB; otherwise say N.
636 636
637 To compile this file system support as a module, choose M here: the 637 To compile this file system support as a module, choose M here: the
638 module will be called isofs. 638 module will be called isofs.
639 639
640 config JOLIET 640 config JOLIET
641 bool "Microsoft Joliet CDROM extensions" 641 bool "Microsoft Joliet CDROM extensions"
642 depends on ISO9660_FS 642 depends on ISO9660_FS
643 select NLS 643 select NLS
644 help 644 help
645 Joliet is a Microsoft extension for the ISO 9660 CD-ROM file system 645 Joliet is a Microsoft extension for the ISO 9660 CD-ROM file system
646 which allows for long filenames in unicode format (unicode is the 646 which allows for long filenames in unicode format (unicode is the
647 new 16 bit character code, successor to ASCII, which encodes the 647 new 16 bit character code, successor to ASCII, which encodes the
648 characters of almost all languages of the world; see 648 characters of almost all languages of the world; see
649 <http://www.unicode.org/> for more information). Say Y here if you 649 <http://www.unicode.org/> for more information). Say Y here if you
650 want to be able to read Joliet CD-ROMs under Linux. 650 want to be able to read Joliet CD-ROMs under Linux.
651 651
652 config ZISOFS 652 config ZISOFS
653 bool "Transparent decompression extension" 653 bool "Transparent decompression extension"
654 depends on ISO9660_FS 654 depends on ISO9660_FS
655 select ZLIB_INFLATE 655 select ZLIB_INFLATE
656 help 656 help
657 This is a Linux-specific extension to RockRidge which lets you store 657 This is a Linux-specific extension to RockRidge which lets you store
658 data in compressed form on a CD-ROM and have it transparently 658 data in compressed form on a CD-ROM and have it transparently
659 decompressed when the CD-ROM is accessed. See 659 decompressed when the CD-ROM is accessed. See
660 <http://www.kernel.org/pub/linux/utils/fs/zisofs/> for the tools 660 <http://www.kernel.org/pub/linux/utils/fs/zisofs/> for the tools
661 necessary to create such a filesystem. Say Y here if you want to be 661 necessary to create such a filesystem. Say Y here if you want to be
662 able to read such compressed CD-ROMs. 662 able to read such compressed CD-ROMs.
663 663
664 config UDF_FS 664 config UDF_FS
665 tristate "UDF file system support" 665 tristate "UDF file system support"
666 help 666 help
667 This is the new file system used on some CD-ROMs and DVDs. Say Y if 667 This is the new file system used on some CD-ROMs and DVDs. Say Y if
668 you intend to mount DVD discs or CDRW's written in packet mode, or 668 you intend to mount DVD discs or CDRW's written in packet mode, or
669 if written to by other UDF utilities, such as DirectCD. 669 if written to by other UDF utilities, such as DirectCD.
670 Please read <file:Documentation/filesystems/udf.txt>. 670 Please read <file:Documentation/filesystems/udf.txt>.
671 671
672 To compile this file system support as a module, choose M here: the 672 To compile this file system support as a module, choose M here: the
673 module will be called udf. 673 module will be called udf.
674 674
675 If unsure, say N. 675 If unsure, say N.
676 676
677 config UDF_NLS 677 config UDF_NLS
678 bool 678 bool
679 default y 679 default y
680 depends on (UDF_FS=m && NLS) || (UDF_FS=y && NLS=y) 680 depends on (UDF_FS=m && NLS) || (UDF_FS=y && NLS=y)
681 681
682 endmenu 682 endmenu
683 endif # BLOCK 683 endif # BLOCK
684 684
685 if BLOCK 685 if BLOCK
686 menu "DOS/FAT/NT Filesystems" 686 menu "DOS/FAT/NT Filesystems"
687 687
688 config FAT_FS 688 config FAT_FS
689 tristate 689 tristate
690 select NLS 690 select NLS
691 help 691 help
692 If you want to use one of the FAT-based file systems (the MS-DOS and 692 If you want to use one of the FAT-based file systems (the MS-DOS and
693 VFAT (Windows 95) file systems), then you must say Y or M here 693 VFAT (Windows 95) file systems), then you must say Y or M here
694 to include FAT support. You will then be able to mount partitions or 694 to include FAT support. You will then be able to mount partitions or
695 diskettes with FAT-based file systems and transparently access the 695 diskettes with FAT-based file systems and transparently access the
696 files on them, i.e. MSDOS files will look and behave just like all 696 files on them, i.e. MSDOS files will look and behave just like all
697 other Unix files. 697 other Unix files.
698 698
699 This FAT support is not a file system in itself, it only provides 699 This FAT support is not a file system in itself, it only provides
700 the foundation for the other file systems. You will have to say Y or 700 the foundation for the other file systems. You will have to say Y or
701 M to at least one of "MSDOS fs support" or "VFAT fs support" in 701 M to at least one of "MSDOS fs support" or "VFAT fs support" in
702 order to make use of it. 702 order to make use of it.
703 703
704 Another way to read and write MSDOS floppies and hard drive 704 Another way to read and write MSDOS floppies and hard drive
705 partitions from within Linux (but not transparently) is with the 705 partitions from within Linux (but not transparently) is with the
706 mtools ("man mtools") program suite. You don't need to say Y here in 706 mtools ("man mtools") program suite. You don't need to say Y here in
707 order to do that. 707 order to do that.
708 708
709 If you need to move large files on floppies between a DOS and a 709 If you need to move large files on floppies between a DOS and a
710 Linux box, say Y here, mount the floppy under Linux with an MSDOS 710 Linux box, say Y here, mount the floppy under Linux with an MSDOS
711 file system and use GNU tar's M option. GNU tar is a program 711 file system and use GNU tar's M option. GNU tar is a program
712 available for Unix and DOS ("man tar" or "info tar"). 712 available for Unix and DOS ("man tar" or "info tar").
713 713
714 The FAT support will enlarge your kernel by about 37 KB. If unsure, 714 The FAT support will enlarge your kernel by about 37 KB. If unsure,
715 say Y. 715 say Y.
716 716
717 To compile this as a module, choose M here: the module will be called 717 To compile this as a module, choose M here: the module will be called
718 fat. Note that if you compile the FAT support as a module, you 718 fat. Note that if you compile the FAT support as a module, you
719 cannot compile any of the FAT-based file systems into the kernel 719 cannot compile any of the FAT-based file systems into the kernel
720 -- they will have to be modules as well. 720 -- they will have to be modules as well.
721 721
722 config MSDOS_FS 722 config MSDOS_FS
723 tristate "MSDOS fs support" 723 tristate "MSDOS fs support"
724 select FAT_FS 724 select FAT_FS
725 help 725 help
726 This allows you to mount MSDOS partitions of your hard drive (unless 726 This allows you to mount MSDOS partitions of your hard drive (unless
727 they are compressed; to access compressed MSDOS partitions under 727 they are compressed; to access compressed MSDOS partitions under
728 Linux, you can either use the DOS emulator DOSEMU, described in the 728 Linux, you can either use the DOS emulator DOSEMU, described in the
729 DOSEMU-HOWTO, available from 729 DOSEMU-HOWTO, available from
730 <http://www.tldp.org/docs.html#howto>, or try dmsdosfs in 730 <http://www.tldp.org/docs.html#howto>, or try dmsdosfs in
731 <ftp://ibiblio.org/pub/Linux/system/filesystems/dosfs/>. If you 731 <ftp://ibiblio.org/pub/Linux/system/filesystems/dosfs/>. If you
732 intend to use dosemu with a non-compressed MSDOS partition, say Y 732 intend to use dosemu with a non-compressed MSDOS partition, say Y
733 here) and MSDOS floppies. This means that file access becomes 733 here) and MSDOS floppies. This means that file access becomes
734 transparent, i.e. the MSDOS files look and behave just like all 734 transparent, i.e. the MSDOS files look and behave just like all
735 other Unix files. 735 other Unix files.
736 736
737 If you have Windows 95 or Windows NT installed on your MSDOS 737 If you have Windows 95 or Windows NT installed on your MSDOS
738 partitions, you should use the VFAT file system (say Y to "VFAT fs 738 partitions, you should use the VFAT file system (say Y to "VFAT fs
739 support" below), or you will not be able to see the long filenames 739 support" below), or you will not be able to see the long filenames
740 generated by Windows 95 / Windows NT. 740 generated by Windows 95 / Windows NT.
741 741
742 This option will enlarge your kernel by about 7 KB. If unsure, 742 This option will enlarge your kernel by about 7 KB. If unsure,
743 answer Y. This will only work if you said Y to "DOS FAT fs support" 743 answer Y. This will only work if you said Y to "DOS FAT fs support"
744 as well. To compile this as a module, choose M here: the module will 744 as well. To compile this as a module, choose M here: the module will
745 be called msdos. 745 be called msdos.
746 746
747 config VFAT_FS 747 config VFAT_FS
748 tristate "VFAT (Windows-95) fs support" 748 tristate "VFAT (Windows-95) fs support"
749 select FAT_FS 749 select FAT_FS
750 help 750 help
751 This option provides support for normal Windows file systems with 751 This option provides support for normal Windows file systems with
752 long filenames. That includes non-compressed FAT-based file systems 752 long filenames. That includes non-compressed FAT-based file systems
753 used by Windows 95, Windows 98, Windows NT 4.0, and the Unix 753 used by Windows 95, Windows 98, Windows NT 4.0, and the Unix
754 programs from the mtools package. 754 programs from the mtools package.
755 755
756 The VFAT support enlarges your kernel by about 10 KB and it only 756 The VFAT support enlarges your kernel by about 10 KB and it only
757 works if you said Y to the "DOS FAT fs support" above. Please read 757 works if you said Y to the "DOS FAT fs support" above. Please read
758 the file <file:Documentation/filesystems/vfat.txt> for details. If 758 the file <file:Documentation/filesystems/vfat.txt> for details. If
759 unsure, say Y. 759 unsure, say Y.
760 760
761 To compile this as a module, choose M here: the module will be called 761 To compile this as a module, choose M here: the module will be called
762 vfat. 762 vfat.
763 763
764 config FAT_DEFAULT_CODEPAGE 764 config FAT_DEFAULT_CODEPAGE
765 int "Default codepage for FAT" 765 int "Default codepage for FAT"
766 depends on MSDOS_FS || VFAT_FS 766 depends on MSDOS_FS || VFAT_FS
767 default 437 767 default 437
768 help 768 help
769 This option should be set to the codepage of your FAT filesystems. 769 This option should be set to the codepage of your FAT filesystems.
770 It can be overridden with the "codepage" mount option. 770 It can be overridden with the "codepage" mount option.
771 See <file:Documentation/filesystems/vfat.txt> for more information. 771 See <file:Documentation/filesystems/vfat.txt> for more information.
772 772
773 config FAT_DEFAULT_IOCHARSET 773 config FAT_DEFAULT_IOCHARSET
774 string "Default iocharset for FAT" 774 string "Default iocharset for FAT"
775 depends on VFAT_FS 775 depends on VFAT_FS
776 default "iso8859-1" 776 default "iso8859-1"
777 help 777 help
778 Set this to the default input/output character set you'd 778 Set this to the default input/output character set you'd
779 like FAT to use. It should probably match the character set 779 like FAT to use. It should probably match the character set
780 that most of your FAT filesystems use, and can be overridden 780 that most of your FAT filesystems use, and can be overridden
781 with the "iocharset" mount option for FAT filesystems. 781 with the "iocharset" mount option for FAT filesystems.
782 Note that "utf8" is not recommended for FAT filesystems. 782 Note that "utf8" is not recommended for FAT filesystems.
783 If unsure, you shouldn't set "utf8" here. 783 If unsure, you shouldn't set "utf8" here.
784 See <file:Documentation/filesystems/vfat.txt> for more information. 784 See <file:Documentation/filesystems/vfat.txt> for more information.
785 785
786 config NTFS_FS 786 config NTFS_FS
787 tristate "NTFS file system support" 787 tristate "NTFS file system support"
788 select NLS 788 select NLS
789 help 789 help
790 NTFS is the file system of Microsoft Windows NT, 2000, XP and 2003. 790 NTFS is the file system of Microsoft Windows NT, 2000, XP and 2003.
791 791
792 Saying Y or M here enables read support. There is partial, but 792 Saying Y or M here enables read support. There is partial, but
793 safe, write support available. For write support you must also 793 safe, write support available. For write support you must also
794 say Y to "NTFS write support" below. 794 say Y to "NTFS write support" below.
795 795
796 There are also a number of user-space tools available, called 796 There are also a number of user-space tools available, called
797 ntfsprogs. These include ntfsundelete and ntfsresize, that work 797 ntfsprogs. These include ntfsundelete and ntfsresize, that work
798 without NTFS support enabled in the kernel. 798 without NTFS support enabled in the kernel.
799 799
800 This is a rewrite from scratch of Linux NTFS support and replaced 800 This is a rewrite from scratch of Linux NTFS support and replaced
801 the old NTFS code starting with Linux 2.5.11. A backport to 801 the old NTFS code starting with Linux 2.5.11. A backport to
802 the Linux 2.4 kernel series is separately available as a patch 802 the Linux 2.4 kernel series is separately available as a patch
803 from the project web site. 803 from the project web site.
804 804
805 For more information see <file:Documentation/filesystems/ntfs.txt> 805 For more information see <file:Documentation/filesystems/ntfs.txt>
806 and <http://linux-ntfs.sourceforge.net/>. 806 and <http://linux-ntfs.sourceforge.net/>.
807 807
808 To compile this file system support as a module, choose M here: the 808 To compile this file system support as a module, choose M here: the
809 module will be called ntfs. 809 module will be called ntfs.
810 810
811 If you are not using Windows NT, 2000, XP or 2003 in addition to 811 If you are not using Windows NT, 2000, XP or 2003 in addition to
812 Linux on your computer it is safe to say N. 812 Linux on your computer it is safe to say N.
813 813
814 config NTFS_DEBUG 814 config NTFS_DEBUG
815 bool "NTFS debugging support" 815 bool "NTFS debugging support"
816 depends on NTFS_FS 816 depends on NTFS_FS
817 help 817 help
818 If you are experiencing any problems with the NTFS file system, say 818 If you are experiencing any problems with the NTFS file system, say
819 Y here. This will result in additional consistency checks to be 819 Y here. This will result in additional consistency checks to be
820 performed by the driver as well as additional debugging messages to 820 performed by the driver as well as additional debugging messages to
821 be written to the system log. Note that debugging messages are 821 be written to the system log. Note that debugging messages are
822 disabled by default. To enable them, supply the option debug_msgs=1 822 disabled by default. To enable them, supply the option debug_msgs=1
823 at the kernel command line when booting the kernel or as an option 823 at the kernel command line when booting the kernel or as an option
824 to insmod when loading the ntfs module. Once the driver is active, 824 to insmod when loading the ntfs module. Once the driver is active,
825 you can enable debugging messages by doing (as root): 825 you can enable debugging messages by doing (as root):
826 echo 1 > /proc/sys/fs/ntfs-debug 826 echo 1 > /proc/sys/fs/ntfs-debug
827 Replacing the "1" with "0" would disable debug messages. 827 Replacing the "1" with "0" would disable debug messages.
828 828
829 If you leave debugging messages disabled, this results in little 829 If you leave debugging messages disabled, this results in little
830 overhead, but enabling debug messages results in very significant 830 overhead, but enabling debug messages results in very significant
831 slowdown of the system. 831 slowdown of the system.
832 832
833 When reporting bugs, please try to have available a full dump of 833 When reporting bugs, please try to have available a full dump of
834 debugging messages while the misbehaviour was occurring. 834 debugging messages while the misbehaviour was occurring.
835 835
836 config NTFS_RW 836 config NTFS_RW
837 bool "NTFS write support" 837 bool "NTFS write support"
838 depends on NTFS_FS 838 depends on NTFS_FS
839 help 839 help
840 This enables the partial, but safe, write support in the NTFS driver. 840 This enables the partial, but safe, write support in the NTFS driver.
841 841
842 The only supported operation is overwriting existing files, without 842 The only supported operation is overwriting existing files, without
843 changing the file length. No file or directory creation, deletion or 843 changing the file length. No file or directory creation, deletion or
844 renaming is possible. Note only non-resident files can be written to 844 renaming is possible. Note only non-resident files can be written to
845 so you may find that some very small files (<500 bytes or so) cannot 845 so you may find that some very small files (<500 bytes or so) cannot
846 be written to. 846 be written to.
847 847
848 While we cannot guarantee that it will not damage any data, we have 848 While we cannot guarantee that it will not damage any data, we have
849 so far not received a single report where the driver would have 849 so far not received a single report where the driver would have
850 damaged someones data so we assume it is perfectly safe to use. 850 damaged someones data so we assume it is perfectly safe to use.
851 851
852 Note: While write support is safe in this version (a rewrite from 852 Note: While write support is safe in this version (a rewrite from
853 scratch of the NTFS support), it should be noted that the old NTFS 853 scratch of the NTFS support), it should be noted that the old NTFS
854 write support, included in Linux 2.5.10 and before (since 1997), 854 write support, included in Linux 2.5.10 and before (since 1997),
855 is not safe. 855 is not safe.
856 856
857 This is currently useful with TopologiLinux. TopologiLinux is run 857 This is currently useful with TopologiLinux. TopologiLinux is run
858 on top of any DOS/Microsoft Windows system without partitioning your 858 on top of any DOS/Microsoft Windows system without partitioning your
859 hard disk. Unlike other Linux distributions TopologiLinux does not 859 hard disk. Unlike other Linux distributions TopologiLinux does not
860 need its own partition. For more information see 860 need its own partition. For more information see
861 <http://topologi-linux.sourceforge.net/> 861 <http://topologi-linux.sourceforge.net/>
862 862
863 It is perfectly safe to say N here. 863 It is perfectly safe to say N here.
864 864
865 endmenu 865 endmenu
866 endif # BLOCK 866 endif # BLOCK
867 867
868 menu "Pseudo filesystems" 868 menu "Pseudo filesystems"
869 869
870 config PROC_FS 870 config PROC_FS
871 bool "/proc file system support" if EMBEDDED 871 bool "/proc file system support" if EMBEDDED
872 default y 872 default y
873 help 873 help
874 This is a virtual file system providing information about the status 874 This is a virtual file system providing information about the status
875 of the system. "Virtual" means that it doesn't take up any space on 875 of the system. "Virtual" means that it doesn't take up any space on
876 your hard disk: the files are created on the fly by the kernel when 876 your hard disk: the files are created on the fly by the kernel when
877 you try to access them. Also, you cannot read the files with older 877 you try to access them. Also, you cannot read the files with older
878 version of the program less: you need to use more or cat. 878 version of the program less: you need to use more or cat.
879 879
880 It's totally cool; for example, "cat /proc/interrupts" gives 880 It's totally cool; for example, "cat /proc/interrupts" gives
881 information about what the different IRQs are used for at the moment 881 information about what the different IRQs are used for at the moment
882 (there is a small number of Interrupt ReQuest lines in your computer 882 (there is a small number of Interrupt ReQuest lines in your computer
883 that are used by the attached devices to gain the CPU's attention -- 883 that are used by the attached devices to gain the CPU's attention --
884 often a source of trouble if two devices are mistakenly configured 884 often a source of trouble if two devices are mistakenly configured
885 to use the same IRQ). The program procinfo to display some 885 to use the same IRQ). The program procinfo to display some
886 information about your system gathered from the /proc file system. 886 information about your system gathered from the /proc file system.
887 887
888 Before you can use the /proc file system, it has to be mounted, 888 Before you can use the /proc file system, it has to be mounted,
889 meaning it has to be given a location in the directory hierarchy. 889 meaning it has to be given a location in the directory hierarchy.
890 That location should be /proc. A command such as "mount -t proc proc 890 That location should be /proc. A command such as "mount -t proc proc
891 /proc" or the equivalent line in /etc/fstab does the job. 891 /proc" or the equivalent line in /etc/fstab does the job.
892 892
893 The /proc file system is explained in the file 893 The /proc file system is explained in the file
894 <file:Documentation/filesystems/proc.txt> and on the proc(5) manpage 894 <file:Documentation/filesystems/proc.txt> and on the proc(5) manpage
895 ("man 5 proc"). 895 ("man 5 proc").
896 896
897 This option will enlarge your kernel by about 67 KB. Several 897 This option will enlarge your kernel by about 67 KB. Several
898 programs depend on this, so everyone should say Y here. 898 programs depend on this, so everyone should say Y here.
899 899
900 config PROC_KCORE 900 config PROC_KCORE
901 bool "/proc/kcore support" if !ARM 901 bool "/proc/kcore support" if !ARM
902 depends on PROC_FS && MMU 902 depends on PROC_FS && MMU
903 903
904 config PROC_VMCORE 904 config PROC_VMCORE
905 bool "/proc/vmcore support (EXPERIMENTAL)" 905 bool "/proc/vmcore support (EXPERIMENTAL)"
906 depends on PROC_FS && EXPERIMENTAL && CRASH_DUMP 906 depends on PROC_FS && EXPERIMENTAL && CRASH_DUMP
907 default y 907 default y
908 help 908 help
909 Exports the dump image of crashed kernel in ELF format. 909 Exports the dump image of crashed kernel in ELF format.
910 910
911 config PROC_SYSCTL 911 config PROC_SYSCTL
912 bool "Sysctl support (/proc/sys)" if EMBEDDED 912 bool "Sysctl support (/proc/sys)" if EMBEDDED
913 depends on PROC_FS 913 depends on PROC_FS
914 select SYSCTL 914 select SYSCTL
915 default y 915 default y
916 ---help--- 916 ---help---
917 The sysctl interface provides a means of dynamically changing 917 The sysctl interface provides a means of dynamically changing
918 certain kernel parameters and variables on the fly without requiring 918 certain kernel parameters and variables on the fly without requiring
919 a recompile of the kernel or reboot of the system. The primary 919 a recompile of the kernel or reboot of the system. The primary
920 interface is through /proc/sys. If you say Y here a tree of 920 interface is through /proc/sys. If you say Y here a tree of
921 modifiable sysctl entries will be generated beneath the 921 modifiable sysctl entries will be generated beneath the
922 /proc/sys directory. They are explained in the files 922 /proc/sys directory. They are explained in the files
923 in <file:Documentation/sysctl/>. Note that enabling this 923 in <file:Documentation/sysctl/>. Note that enabling this
924 option will enlarge the kernel by at least 8 KB. 924 option will enlarge the kernel by at least 8 KB.
925 925
926 As it is generally a good thing, you should say Y here unless 926 As it is generally a good thing, you should say Y here unless
927 building a kernel for install/rescue disks or your system is very 927 building a kernel for install/rescue disks or your system is very
928 limited in memory. 928 limited in memory.
929 929
930 config SYSFS 930 config SYSFS
931 bool "sysfs file system support" if EMBEDDED 931 bool "sysfs file system support" if EMBEDDED
932 default y 932 default y
933 help 933 help
934 The sysfs filesystem is a virtual filesystem that the kernel uses to 934 The sysfs filesystem is a virtual filesystem that the kernel uses to
935 export internal kernel objects, their attributes, and their 935 export internal kernel objects, their attributes, and their
936 relationships to one another. 936 relationships to one another.
937 937
938 Users can use sysfs to ascertain useful information about the running 938 Users can use sysfs to ascertain useful information about the running
939 kernel, such as the devices the kernel has discovered on each bus and 939 kernel, such as the devices the kernel has discovered on each bus and
940 which driver each is bound to. sysfs can also be used to tune devices 940 which driver each is bound to. sysfs can also be used to tune devices
941 and other kernel subsystems. 941 and other kernel subsystems.
942 942
943 Some system agents rely on the information in sysfs to operate. 943 Some system agents rely on the information in sysfs to operate.
944 /sbin/hotplug uses device and object attributes in sysfs to assist in 944 /sbin/hotplug uses device and object attributes in sysfs to assist in
945 delegating policy decisions, like persistently naming devices. 945 delegating policy decisions, like persistently naming devices.
946 946
947 sysfs is currently used by the block subsystem to mount the root 947 sysfs is currently used by the block subsystem to mount the root
948 partition. If sysfs is disabled you must specify the boot device on 948 partition. If sysfs is disabled you must specify the boot device on
949 the kernel boot command line via its major and minor numbers. For 949 the kernel boot command line via its major and minor numbers. For
950 example, "root=03:01" for /dev/hda1. 950 example, "root=03:01" for /dev/hda1.
951 951
952 Designers of embedded systems may wish to say N here to conserve space. 952 Designers of embedded systems may wish to say N here to conserve space.
953 953
954 config TMPFS 954 config TMPFS
955 bool "Virtual memory file system support (former shm fs)" 955 bool "Virtual memory file system support (former shm fs)"
956 help 956 help
957 Tmpfs is a file system which keeps all files in virtual memory. 957 Tmpfs is a file system which keeps all files in virtual memory.
958 958
959 Everything in tmpfs is temporary in the sense that no files will be 959 Everything in tmpfs is temporary in the sense that no files will be
960 created on your hard drive. The files live in memory and swap 960 created on your hard drive. The files live in memory and swap
961 space. If you unmount a tmpfs instance, everything stored therein is 961 space. If you unmount a tmpfs instance, everything stored therein is
962 lost. 962 lost.
963 963
964 See <file:Documentation/filesystems/tmpfs.txt> for details. 964 See <file:Documentation/filesystems/tmpfs.txt> for details.
965 965
966 config TMPFS_POSIX_ACL 966 config TMPFS_POSIX_ACL
967 bool "Tmpfs POSIX Access Control Lists" 967 bool "Tmpfs POSIX Access Control Lists"
968 depends on TMPFS 968 depends on TMPFS
969 select GENERIC_ACL 969 select GENERIC_ACL
970 help 970 help
971 POSIX Access Control Lists (ACLs) support permissions for users and 971 POSIX Access Control Lists (ACLs) support permissions for users and
972 groups beyond the owner/group/world scheme. 972 groups beyond the owner/group/world scheme.
973 973
974 To learn more about Access Control Lists, visit the POSIX ACLs for 974 To learn more about Access Control Lists, visit the POSIX ACLs for
975 Linux website <http://acl.bestbits.at/>. 975 Linux website <http://acl.bestbits.at/>.
976 976
977 If you don't know what Access Control Lists are, say N. 977 If you don't know what Access Control Lists are, say N.
978 978
979 config HUGETLBFS 979 config HUGETLBFS
980 bool "HugeTLB file system support" 980 bool "HugeTLB file system support"
981 depends on X86 || IA64 || PPC64 || SPARC64 || (SUPERH && MMU) || BROKEN 981 depends on X86 || IA64 || PPC64 || SPARC64 || (SUPERH && MMU) || BROKEN
982 help 982 help
983 hugetlbfs is a filesystem backing for HugeTLB pages, based on 983 hugetlbfs is a filesystem backing for HugeTLB pages, based on
984 ramfs. For architectures that support it, say Y here and read 984 ramfs. For architectures that support it, say Y here and read
985 <file:Documentation/vm/hugetlbpage.txt> for details. 985 <file:Documentation/vm/hugetlbpage.txt> for details.
986 986
987 If unsure, say N. 987 If unsure, say N.
988 988
989 config HUGETLB_PAGE 989 config HUGETLB_PAGE
990 def_bool HUGETLBFS 990 def_bool HUGETLBFS
991 991
992 config CONFIGFS_FS 992 config CONFIGFS_FS
993 tristate "Userspace-driven configuration filesystem" 993 tristate "Userspace-driven configuration filesystem"
994 depends on SYSFS 994 depends on SYSFS
995 help 995 help
996 configfs is a ram-based filesystem that provides the converse 996 configfs is a ram-based filesystem that provides the converse
997 of sysfs's functionality. Where sysfs is a filesystem-based 997 of sysfs's functionality. Where sysfs is a filesystem-based
998 view of kernel objects, configfs is a filesystem-based manager 998 view of kernel objects, configfs is a filesystem-based manager
999 of kernel objects, or config_items. 999 of kernel objects, or config_items.
1000 1000
1001 Both sysfs and configfs can and should exist together on the 1001 Both sysfs and configfs can and should exist together on the
1002 same system. One is not a replacement for the other. 1002 same system. One is not a replacement for the other.
1003 1003
1004 endmenu 1004 endmenu
1005 1005
1006 menu "Miscellaneous filesystems" 1006 menu "Miscellaneous filesystems"
1007 1007
1008 config ADFS_FS 1008 config ADFS_FS
1009 tristate "ADFS file system support (EXPERIMENTAL)" 1009 tristate "ADFS file system support (EXPERIMENTAL)"
1010 depends on BLOCK && EXPERIMENTAL 1010 depends on BLOCK && EXPERIMENTAL
1011 help 1011 help
1012 The Acorn Disc Filing System is the standard file system of the 1012 The Acorn Disc Filing System is the standard file system of the
1013 RiscOS operating system which runs on Acorn's ARM-based Risc PC 1013 RiscOS operating system which runs on Acorn's ARM-based Risc PC
1014 systems and the Acorn Archimedes range of machines. If you say Y 1014 systems and the Acorn Archimedes range of machines. If you say Y
1015 here, Linux will be able to read from ADFS partitions on hard drives 1015 here, Linux will be able to read from ADFS partitions on hard drives
1016 and from ADFS-formatted floppy discs. If you also want to be able to 1016 and from ADFS-formatted floppy discs. If you also want to be able to
1017 write to those devices, say Y to "ADFS write support" below. 1017 write to those devices, say Y to "ADFS write support" below.
1018 1018
1019 The ADFS partition should be the first partition (i.e., 1019 The ADFS partition should be the first partition (i.e.,
1020 /dev/[hs]d?1) on each of your drives. Please read the file 1020 /dev/[hs]d?1) on each of your drives. Please read the file
1021 <file:Documentation/filesystems/adfs.txt> for further details. 1021 <file:Documentation/filesystems/adfs.txt> for further details.
1022 1022
1023 To compile this code as a module, choose M here: the module will be 1023 To compile this code as a module, choose M here: the module will be
1024 called adfs. 1024 called adfs.
1025 1025
1026 If unsure, say N. 1026 If unsure, say N.
1027 1027
1028 config ADFS_FS_RW 1028 config ADFS_FS_RW
1029 bool "ADFS write support (DANGEROUS)" 1029 bool "ADFS write support (DANGEROUS)"
1030 depends on ADFS_FS 1030 depends on ADFS_FS
1031 help 1031 help
1032 If you say Y here, you will be able to write to ADFS partitions on 1032 If you say Y here, you will be able to write to ADFS partitions on
1033 hard drives and ADFS-formatted floppy disks. This is experimental 1033 hard drives and ADFS-formatted floppy disks. This is experimental
1034 codes, so if you're unsure, say N. 1034 codes, so if you're unsure, say N.
1035 1035
1036 config AFFS_FS 1036 config AFFS_FS
1037 tristate "Amiga FFS file system support (EXPERIMENTAL)" 1037 tristate "Amiga FFS file system support (EXPERIMENTAL)"
1038 depends on BLOCK && EXPERIMENTAL 1038 depends on BLOCK && EXPERIMENTAL
1039 help 1039 help
1040 The Fast File System (FFS) is the common file system used on hard 1040 The Fast File System (FFS) is the common file system used on hard
1041 disks by Amiga(tm) systems since AmigaOS Version 1.3 (34.20). Say Y 1041 disks by Amiga(tm) systems since AmigaOS Version 1.3 (34.20). Say Y
1042 if you want to be able to read and write files from and to an Amiga 1042 if you want to be able to read and write files from and to an Amiga
1043 FFS partition on your hard drive. Amiga floppies however cannot be 1043 FFS partition on your hard drive. Amiga floppies however cannot be
1044 read with this driver due to an incompatibility of the floppy 1044 read with this driver due to an incompatibility of the floppy
1045 controller used in an Amiga and the standard floppy controller in 1045 controller used in an Amiga and the standard floppy controller in
1046 PCs and workstations. Read <file:Documentation/filesystems/affs.txt> 1046 PCs and workstations. Read <file:Documentation/filesystems/affs.txt>
1047 and <file:fs/affs/Changes>. 1047 and <file:fs/affs/Changes>.
1048 1048
1049 With this driver you can also mount disk files used by Bernd 1049 With this driver you can also mount disk files used by Bernd
1050 Schmidt's Un*X Amiga Emulator 1050 Schmidt's Un*X Amiga Emulator
1051 (<http://www.freiburg.linux.de/~uae/>). 1051 (<http://www.freiburg.linux.de/~uae/>).
1052 If you want to do this, you will also need to say Y or M to "Loop 1052 If you want to do this, you will also need to say Y or M to "Loop
1053 device support", above. 1053 device support", above.
1054 1054
1055 To compile this file system support as a module, choose M here: the 1055 To compile this file system support as a module, choose M here: the
1056 module will be called affs. If unsure, say N. 1056 module will be called affs. If unsure, say N.
1057 1057
1058 config ECRYPT_FS 1058 config ECRYPT_FS
1059 tristate "eCrypt filesystem layer support (EXPERIMENTAL)" 1059 tristate "eCrypt filesystem layer support (EXPERIMENTAL)"
1060 depends on EXPERIMENTAL && KEYS && CRYPTO && NET 1060 depends on EXPERIMENTAL && KEYS && CRYPTO && NET
1061 help 1061 help
1062 Encrypted filesystem that operates on the VFS layer. See 1062 Encrypted filesystem that operates on the VFS layer. See
1063 <file:Documentation/filesystems/ecryptfs.txt> to learn more about 1063 <file:Documentation/filesystems/ecryptfs.txt> to learn more about
1064 eCryptfs. Userspace components are required and can be 1064 eCryptfs. Userspace components are required and can be
1065 obtained from <http://ecryptfs.sf.net>. 1065 obtained from <http://ecryptfs.sf.net>.
1066 1066
1067 To compile this file system support as a module, choose M here: the 1067 To compile this file system support as a module, choose M here: the
1068 module will be called ecryptfs. 1068 module will be called ecryptfs.
1069 1069
1070 config HFS_FS 1070 config HFS_FS
1071 tristate "Apple Macintosh file system support (EXPERIMENTAL)" 1071 tristate "Apple Macintosh file system support (EXPERIMENTAL)"
1072 depends on BLOCK && EXPERIMENTAL 1072 depends on BLOCK && EXPERIMENTAL
1073 select NLS 1073 select NLS
1074 help 1074 help
1075 If you say Y here, you will be able to mount Macintosh-formatted 1075 If you say Y here, you will be able to mount Macintosh-formatted
1076 floppy disks and hard drive partitions with full read-write access. 1076 floppy disks and hard drive partitions with full read-write access.
1077 Please read <file:Documentation/filesystems/hfs.txt> to learn about 1077 Please read <file:Documentation/filesystems/hfs.txt> to learn about
1078 the available mount options. 1078 the available mount options.
1079 1079
1080 To compile this file system support as a module, choose M here: the 1080 To compile this file system support as a module, choose M here: the
1081 module will be called hfs. 1081 module will be called hfs.
1082 1082
1083 config HFSPLUS_FS 1083 config HFSPLUS_FS
1084 tristate "Apple Extended HFS file system support" 1084 tristate "Apple Extended HFS file system support"
1085 depends on BLOCK 1085 depends on BLOCK
1086 select NLS 1086 select NLS
1087 select NLS_UTF8 1087 select NLS_UTF8
1088 help 1088 help
1089 If you say Y here, you will be able to mount extended format 1089 If you say Y here, you will be able to mount extended format
1090 Macintosh-formatted hard drive partitions with full read-write access. 1090 Macintosh-formatted hard drive partitions with full read-write access.
1091 1091
1092 This file system is often called HFS+ and was introduced with 1092 This file system is often called HFS+ and was introduced with
1093 MacOS 8. It includes all Mac specific filesystem data such as 1093 MacOS 8. It includes all Mac specific filesystem data such as
1094 data forks and creator codes, but it also has several UNIX 1094 data forks and creator codes, but it also has several UNIX
1095 style features such as file ownership and permissions. 1095 style features such as file ownership and permissions.
1096 1096
1097 config BEFS_FS 1097 config BEFS_FS
1098 tristate "BeOS file system (BeFS) support (read only) (EXPERIMENTAL)" 1098 tristate "BeOS file system (BeFS) support (read only) (EXPERIMENTAL)"
1099 depends on BLOCK && EXPERIMENTAL 1099 depends on BLOCK && EXPERIMENTAL
1100 select NLS 1100 select NLS
1101 help 1101 help
1102 The BeOS File System (BeFS) is the native file system of Be, Inc's 1102 The BeOS File System (BeFS) is the native file system of Be, Inc's
1103 BeOS. Notable features include support for arbitrary attributes 1103 BeOS. Notable features include support for arbitrary attributes
1104 on files and directories, and database-like indices on selected 1104 on files and directories, and database-like indices on selected
1105 attributes. (Also note that this driver doesn't make those features 1105 attributes. (Also note that this driver doesn't make those features
1106 available at this time). It is a 64 bit filesystem, so it supports 1106 available at this time). It is a 64 bit filesystem, so it supports
1107 extremely large volumes and files. 1107 extremely large volumes and files.
1108 1108
1109 If you use this filesystem, you should also say Y to at least one 1109 If you use this filesystem, you should also say Y to at least one
1110 of the NLS (native language support) options below. 1110 of the NLS (native language support) options below.
1111 1111
1112 If you don't know what this is about, say N. 1112 If you don't know what this is about, say N.
1113 1113
1114 To compile this as a module, choose M here: the module will be 1114 To compile this as a module, choose M here: the module will be
1115 called befs. 1115 called befs.
1116 1116
1117 config BEFS_DEBUG 1117 config BEFS_DEBUG
1118 bool "Debug BeFS" 1118 bool "Debug BeFS"
1119 depends on BEFS_FS 1119 depends on BEFS_FS
1120 help 1120 help
1121 If you say Y here, you can use the 'debug' mount option to enable 1121 If you say Y here, you can use the 'debug' mount option to enable
1122 debugging output from the driver. 1122 debugging output from the driver.
1123 1123
1124 config BFS_FS 1124 config BFS_FS
1125 tristate "BFS file system support (EXPERIMENTAL)" 1125 tristate "BFS file system support (EXPERIMENTAL)"
1126 depends on BLOCK && EXPERIMENTAL 1126 depends on BLOCK && EXPERIMENTAL
1127 help 1127 help
1128 Boot File System (BFS) is a file system used under SCO UnixWare to 1128 Boot File System (BFS) is a file system used under SCO UnixWare to
1129 allow the bootloader access to the kernel image and other important 1129 allow the bootloader access to the kernel image and other important
1130 files during the boot process. It is usually mounted under /stand 1130 files during the boot process. It is usually mounted under /stand
1131 and corresponds to the slice marked as "STAND" in the UnixWare 1131 and corresponds to the slice marked as "STAND" in the UnixWare
1132 partition. You should say Y if you want to read or write the files 1132 partition. You should say Y if you want to read or write the files
1133 on your /stand slice from within Linux. You then also need to say Y 1133 on your /stand slice from within Linux. You then also need to say Y
1134 to "UnixWare slices support", below. More information about the BFS 1134 to "UnixWare slices support", below. More information about the BFS
1135 file system is contained in the file 1135 file system is contained in the file
1136 <file:Documentation/filesystems/bfs.txt>. 1136 <file:Documentation/filesystems/bfs.txt>.
1137 1137
1138 If you don't know what this is about, say N. 1138 If you don't know what this is about, say N.
1139 1139
1140 To compile this as a module, choose M here: the module will be called 1140 To compile this as a module, choose M here: the module will be called
1141 bfs. Note that the file system of your root partition (the one 1141 bfs. Note that the file system of your root partition (the one
1142 containing the directory /) cannot be compiled as a module. 1142 containing the directory /) cannot be compiled as a module.
1143 1143
1144 1144
1145 1145
1146 config EFS_FS 1146 config EFS_FS
1147 tristate "EFS file system support (read only) (EXPERIMENTAL)" 1147 tristate "EFS file system support (read only) (EXPERIMENTAL)"
1148 depends on BLOCK && EXPERIMENTAL 1148 depends on BLOCK && EXPERIMENTAL
1149 help 1149 help
1150 EFS is an older file system used for non-ISO9660 CD-ROMs and hard 1150 EFS is an older file system used for non-ISO9660 CD-ROMs and hard
1151 disk partitions by SGI's IRIX operating system (IRIX 6.0 and newer 1151 disk partitions by SGI's IRIX operating system (IRIX 6.0 and newer
1152 uses the XFS file system for hard disk partitions however). 1152 uses the XFS file system for hard disk partitions however).
1153 1153
1154 This implementation only offers read-only access. If you don't know 1154 This implementation only offers read-only access. If you don't know
1155 what all this is about, it's safe to say N. For more information 1155 what all this is about, it's safe to say N. For more information
1156 about EFS see its home page at <http://aeschi.ch.eu.org/efs/>. 1156 about EFS see its home page at <http://aeschi.ch.eu.org/efs/>.
1157 1157
1158 To compile the EFS file system support as a module, choose M here: the 1158 To compile the EFS file system support as a module, choose M here: the
1159 module will be called efs. 1159 module will be called efs.
1160 1160
1161 config JFFS2_FS 1161 config JFFS2_FS
1162 tristate "Journalling Flash File System v2 (JFFS2) support" 1162 tristate "Journalling Flash File System v2 (JFFS2) support"
1163 select CRC32 1163 select CRC32
1164 depends on MTD 1164 depends on MTD
1165 help 1165 help
1166 JFFS2 is the second generation of the Journalling Flash File System 1166 JFFS2 is the second generation of the Journalling Flash File System
1167 for use on diskless embedded devices. It provides improved wear 1167 for use on diskless embedded devices. It provides improved wear
1168 levelling, compression and support for hard links. You cannot use 1168 levelling, compression and support for hard links. You cannot use
1169 this on normal block devices, only on 'MTD' devices. 1169 this on normal block devices, only on 'MTD' devices.
1170 1170
1171 Further information on the design and implementation of JFFS2 is 1171 Further information on the design and implementation of JFFS2 is
1172 available at <http://sources.redhat.com/jffs2/>. 1172 available at <http://sources.redhat.com/jffs2/>.
1173 1173
1174 config JFFS2_FS_DEBUG 1174 config JFFS2_FS_DEBUG
1175 int "JFFS2 debugging verbosity (0 = quiet, 2 = noisy)" 1175 int "JFFS2 debugging verbosity (0 = quiet, 2 = noisy)"
1176 depends on JFFS2_FS 1176 depends on JFFS2_FS
1177 default "0" 1177 default "0"
1178 help 1178 help
1179 This controls the amount of debugging messages produced by the JFFS2 1179 This controls the amount of debugging messages produced by the JFFS2
1180 code. Set it to zero for use in production systems. For evaluation, 1180 code. Set it to zero for use in production systems. For evaluation,
1181 testing and debugging, it's advisable to set it to one. This will 1181 testing and debugging, it's advisable to set it to one. This will
1182 enable a few assertions and will print debugging messages at the 1182 enable a few assertions and will print debugging messages at the
1183 KERN_DEBUG loglevel, where they won't normally be visible. Level 2 1183 KERN_DEBUG loglevel, where they won't normally be visible. Level 2
1184 is unlikely to be useful - it enables extra debugging in certain 1184 is unlikely to be useful - it enables extra debugging in certain
1185 areas which at one point needed debugging, but when the bugs were 1185 areas which at one point needed debugging, but when the bugs were
1186 located and fixed, the detailed messages were relegated to level 2. 1186 located and fixed, the detailed messages were relegated to level 2.
1187 1187
1188 If reporting bugs, please try to have available a full dump of the 1188 If reporting bugs, please try to have available a full dump of the
1189 messages at debug level 1 while the misbehaviour was occurring. 1189 messages at debug level 1 while the misbehaviour was occurring.
1190 1190
1191 config JFFS2_FS_WRITEBUFFER 1191 config JFFS2_FS_WRITEBUFFER
1192 bool "JFFS2 write-buffering support" 1192 bool "JFFS2 write-buffering support"
1193 depends on JFFS2_FS 1193 depends on JFFS2_FS
1194 default y 1194 default y
1195 help 1195 help
1196 This enables the write-buffering support in JFFS2. 1196 This enables the write-buffering support in JFFS2.
1197 1197
1198 This functionality is required to support JFFS2 on the following 1198 This functionality is required to support JFFS2 on the following
1199 types of flash devices: 1199 types of flash devices:
1200 - NAND flash 1200 - NAND flash
1201 - NOR flash with transparent ECC 1201 - NOR flash with transparent ECC
1202 - DataFlash 1202 - DataFlash
1203 1203
1204 config JFFS2_FS_WBUF_VERIFY 1204 config JFFS2_FS_WBUF_VERIFY
1205 bool "Verify JFFS2 write-buffer reads" 1205 bool "Verify JFFS2 write-buffer reads"
1206 depends on JFFS2_FS_WRITEBUFFER 1206 depends on JFFS2_FS_WRITEBUFFER
1207 default n 1207 default n
1208 help 1208 help
1209 This causes JFFS2 to read back every page written through the 1209 This causes JFFS2 to read back every page written through the
1210 write-buffer, and check for errors. 1210 write-buffer, and check for errors.
1211 1211
1212 config JFFS2_SUMMARY 1212 config JFFS2_SUMMARY
1213 bool "JFFS2 summary support (EXPERIMENTAL)" 1213 bool "JFFS2 summary support (EXPERIMENTAL)"
1214 depends on JFFS2_FS && EXPERIMENTAL 1214 depends on JFFS2_FS && EXPERIMENTAL
1215 default n 1215 default n
1216 help 1216 help
1217 This feature makes it possible to use summary information 1217 This feature makes it possible to use summary information
1218 for faster filesystem mount. 1218 for faster filesystem mount.
1219 1219
1220 The summary information can be inserted into a filesystem image 1220 The summary information can be inserted into a filesystem image
1221 by the utility 'sumtool'. 1221 by the utility 'sumtool'.
1222 1222
1223 If unsure, say 'N'. 1223 If unsure, say 'N'.
1224 1224
1225 config JFFS2_FS_XATTR 1225 config JFFS2_FS_XATTR
1226 bool "JFFS2 XATTR support (EXPERIMENTAL)" 1226 bool "JFFS2 XATTR support (EXPERIMENTAL)"
1227 depends on JFFS2_FS && EXPERIMENTAL 1227 depends on JFFS2_FS && EXPERIMENTAL
1228 default n 1228 default n
1229 help 1229 help
1230 Extended attributes are name:value pairs associated with inodes by 1230 Extended attributes are name:value pairs associated with inodes by
1231 the kernel or by users (see the attr(5) manual page, or visit 1231 the kernel or by users (see the attr(5) manual page, or visit
1232 <http://acl.bestbits.at/> for details). 1232 <http://acl.bestbits.at/> for details).
1233 1233
1234 If unsure, say N. 1234 If unsure, say N.
1235 1235
1236 config JFFS2_FS_POSIX_ACL 1236 config JFFS2_FS_POSIX_ACL
1237 bool "JFFS2 POSIX Access Control Lists" 1237 bool "JFFS2 POSIX Access Control Lists"
1238 depends on JFFS2_FS_XATTR 1238 depends on JFFS2_FS_XATTR
1239 default y 1239 default y
1240 select FS_POSIX_ACL 1240 select FS_POSIX_ACL
1241 help 1241 help
1242 Posix Access Control Lists (ACLs) support permissions for users and 1242 Posix Access Control Lists (ACLs) support permissions for users and
1243 groups beyond the owner/group/world scheme. 1243 groups beyond the owner/group/world scheme.
1244 1244
1245 To learn more about Access Control Lists, visit the Posix ACLs for 1245 To learn more about Access Control Lists, visit the Posix ACLs for
1246 Linux website <http://acl.bestbits.at/>. 1246 Linux website <http://acl.bestbits.at/>.
1247 1247
1248 If you don't know what Access Control Lists are, say N 1248 If you don't know what Access Control Lists are, say N
1249 1249
1250 config JFFS2_FS_SECURITY 1250 config JFFS2_FS_SECURITY
1251 bool "JFFS2 Security Labels" 1251 bool "JFFS2 Security Labels"
1252 depends on JFFS2_FS_XATTR 1252 depends on JFFS2_FS_XATTR
1253 default y 1253 default y
1254 help 1254 help
1255 Security labels support alternative access control models 1255 Security labels support alternative access control models
1256 implemented by security modules like SELinux. This option 1256 implemented by security modules like SELinux. This option
1257 enables an extended attribute handler for file security 1257 enables an extended attribute handler for file security
1258 labels in the jffs2 filesystem. 1258 labels in the jffs2 filesystem.
1259 1259
1260 If you are not using a security module that requires using 1260 If you are not using a security module that requires using
1261 extended attributes for file security labels, say N. 1261 extended attributes for file security labels, say N.
1262 1262
1263 config JFFS2_COMPRESSION_OPTIONS 1263 config JFFS2_COMPRESSION_OPTIONS
1264 bool "Advanced compression options for JFFS2" 1264 bool "Advanced compression options for JFFS2"
1265 depends on JFFS2_FS 1265 depends on JFFS2_FS
1266 default n 1266 default n
1267 help 1267 help
1268 Enabling this option allows you to explicitly choose which 1268 Enabling this option allows you to explicitly choose which
1269 compression modules, if any, are enabled in JFFS2. Removing 1269 compression modules, if any, are enabled in JFFS2. Removing
1270 compressors can mean you cannot read existing file systems, 1270 compressors can mean you cannot read existing file systems,
1271 and enabling experimental compressors can mean that you 1271 and enabling experimental compressors can mean that you
1272 write a file system which cannot be read by a standard kernel. 1272 write a file system which cannot be read by a standard kernel.
1273 1273
1274 If unsure, you should _definitely_ say 'N'. 1274 If unsure, you should _definitely_ say 'N'.
1275 1275
1276 config JFFS2_ZLIB 1276 config JFFS2_ZLIB
1277 bool "JFFS2 ZLIB compression support" if JFFS2_COMPRESSION_OPTIONS 1277 bool "JFFS2 ZLIB compression support" if JFFS2_COMPRESSION_OPTIONS
1278 select ZLIB_INFLATE 1278 select ZLIB_INFLATE
1279 select ZLIB_DEFLATE 1279 select ZLIB_DEFLATE
1280 depends on JFFS2_FS 1280 depends on JFFS2_FS
1281 default y 1281 default y
1282 help 1282 help
1283 Zlib is designed to be a free, general-purpose, legally unencumbered, 1283 Zlib is designed to be a free, general-purpose, legally unencumbered,
1284 lossless data-compression library for use on virtually any computer 1284 lossless data-compression library for use on virtually any computer
1285 hardware and operating system. See <http://www.gzip.org/zlib/> for 1285 hardware and operating system. See <http://www.gzip.org/zlib/> for
1286 further information. 1286 further information.
1287 1287
1288 Say 'Y' if unsure. 1288 Say 'Y' if unsure.
1289 1289
1290 config JFFS2_LZO 1290 config JFFS2_LZO
1291 bool "JFFS2 LZO compression support" if JFFS2_COMPRESSION_OPTIONS 1291 bool "JFFS2 LZO compression support" if JFFS2_COMPRESSION_OPTIONS
1292 select LZO_COMPRESS 1292 select LZO_COMPRESS
1293 select LZO_DECOMPRESS 1293 select LZO_DECOMPRESS
1294 depends on JFFS2_FS 1294 depends on JFFS2_FS
1295 default n 1295 default n
1296 help 1296 help
1297 minilzo-based compression. Generally works better than Zlib. 1297 minilzo-based compression. Generally works better than Zlib.
1298 1298
1299 This feature was added in July, 2007. Say 'N' if you need 1299 This feature was added in July, 2007. Say 'N' if you need
1300 compatibility with older bootloaders or kernels. 1300 compatibility with older bootloaders or kernels.
1301 1301
1302 config JFFS2_RTIME 1302 config JFFS2_RTIME
1303 bool "JFFS2 RTIME compression support" if JFFS2_COMPRESSION_OPTIONS 1303 bool "JFFS2 RTIME compression support" if JFFS2_COMPRESSION_OPTIONS
1304 depends on JFFS2_FS 1304 depends on JFFS2_FS
1305 default y 1305 default y
1306 help 1306 help
1307 Rtime does manage to recompress already-compressed data. Say 'Y' if unsure. 1307 Rtime does manage to recompress already-compressed data. Say 'Y' if unsure.
1308 1308
1309 config JFFS2_RUBIN 1309 config JFFS2_RUBIN
1310 bool "JFFS2 RUBIN compression support" if JFFS2_COMPRESSION_OPTIONS 1310 bool "JFFS2 RUBIN compression support" if JFFS2_COMPRESSION_OPTIONS
1311 depends on JFFS2_FS 1311 depends on JFFS2_FS
1312 default n 1312 default n
1313 help 1313 help
1314 RUBINMIPS and DYNRUBIN compressors. Say 'N' if unsure. 1314 RUBINMIPS and DYNRUBIN compressors. Say 'N' if unsure.
1315 1315
1316 choice 1316 choice
1317 prompt "JFFS2 default compression mode" if JFFS2_COMPRESSION_OPTIONS 1317 prompt "JFFS2 default compression mode" if JFFS2_COMPRESSION_OPTIONS
1318 default JFFS2_CMODE_PRIORITY 1318 default JFFS2_CMODE_PRIORITY
1319 depends on JFFS2_FS 1319 depends on JFFS2_FS
1320 help 1320 help
1321 You can set here the default compression mode of JFFS2 from 1321 You can set here the default compression mode of JFFS2 from
1322 the available compression modes. Don't touch if unsure. 1322 the available compression modes. Don't touch if unsure.
1323 1323
1324 config JFFS2_CMODE_NONE 1324 config JFFS2_CMODE_NONE
1325 bool "no compression" 1325 bool "no compression"
1326 help 1326 help
1327 Uses no compression. 1327 Uses no compression.
1328 1328
1329 config JFFS2_CMODE_PRIORITY 1329 config JFFS2_CMODE_PRIORITY
1330 bool "priority" 1330 bool "priority"
1331 help 1331 help
1332 Tries the compressors in a predefined order and chooses the first 1332 Tries the compressors in a predefined order and chooses the first
1333 successful one. 1333 successful one.
1334 1334
1335 config JFFS2_CMODE_SIZE 1335 config JFFS2_CMODE_SIZE
1336 bool "size (EXPERIMENTAL)" 1336 bool "size (EXPERIMENTAL)"
1337 help 1337 help
1338 Tries all compressors and chooses the one which has the smallest 1338 Tries all compressors and chooses the one which has the smallest
1339 result. 1339 result.
1340 1340
1341 config JFFS2_CMODE_FAVOURLZO 1341 config JFFS2_CMODE_FAVOURLZO
1342 bool "Favour LZO" 1342 bool "Favour LZO"
1343 help 1343 help
1344 Tries all compressors and chooses the one which has the smallest 1344 Tries all compressors and chooses the one which has the smallest
1345 result but gives some preference to LZO (which has faster 1345 result but gives some preference to LZO (which has faster
1346 decompression) at the expense of size. 1346 decompression) at the expense of size.
1347 1347
1348 endchoice 1348 endchoice
1349 1349
1350 config CRAMFS 1350 config CRAMFS
1351 tristate "Compressed ROM file system support (cramfs)" 1351 tristate "Compressed ROM file system support (cramfs)"
1352 depends on BLOCK 1352 depends on BLOCK
1353 select ZLIB_INFLATE 1353 select ZLIB_INFLATE
1354 help 1354 help
1355 Saying Y here includes support for CramFs (Compressed ROM File 1355 Saying Y here includes support for CramFs (Compressed ROM File
1356 System). CramFs is designed to be a simple, small, and compressed 1356 System). CramFs is designed to be a simple, small, and compressed
1357 file system for ROM based embedded systems. CramFs is read-only, 1357 file system for ROM based embedded systems. CramFs is read-only,
1358 limited to 256MB file systems (with 16MB files), and doesn't support 1358 limited to 256MB file systems (with 16MB files), and doesn't support
1359 16/32 bits uid/gid, hard links and timestamps. 1359 16/32 bits uid/gid, hard links and timestamps.
1360 1360
1361 See <file:Documentation/filesystems/cramfs.txt> and 1361 See <file:Documentation/filesystems/cramfs.txt> and
1362 <file:fs/cramfs/README> for further information. 1362 <file:fs/cramfs/README> for further information.
1363 1363
1364 To compile this as a module, choose M here: the module will be called 1364 To compile this as a module, choose M here: the module will be called
1365 cramfs. Note that the root file system (the one containing the 1365 cramfs. Note that the root file system (the one containing the
1366 directory /) cannot be compiled as a module. 1366 directory /) cannot be compiled as a module.
1367 1367
1368 If unsure, say N. 1368 If unsure, say N.
1369 1369
1370 config VXFS_FS 1370 config VXFS_FS
1371 tristate "FreeVxFS file system support (VERITAS VxFS(TM) compatible)" 1371 tristate "FreeVxFS file system support (VERITAS VxFS(TM) compatible)"
1372 depends on BLOCK 1372 depends on BLOCK
1373 help 1373 help
1374 FreeVxFS is a file system driver that support the VERITAS VxFS(TM) 1374 FreeVxFS is a file system driver that support the VERITAS VxFS(TM)
1375 file system format. VERITAS VxFS(TM) is the standard file system 1375 file system format. VERITAS VxFS(TM) is the standard file system
1376 of SCO UnixWare (and possibly others) and optionally available 1376 of SCO UnixWare (and possibly others) and optionally available
1377 for Sunsoft Solaris, HP-UX and many other operating systems. 1377 for Sunsoft Solaris, HP-UX and many other operating systems.
1378 Currently only readonly access is supported. 1378 Currently only readonly access is supported.
1379 1379
1380 NOTE: the file system type as used by mount(1), mount(2) and 1380 NOTE: the file system type as used by mount(1), mount(2) and
1381 fstab(5) is 'vxfs' as it describes the file system format, not 1381 fstab(5) is 'vxfs' as it describes the file system format, not
1382 the actual driver. 1382 the actual driver.
1383 1383
1384 To compile this as a module, choose M here: the module will be 1384 To compile this as a module, choose M here: the module will be
1385 called freevxfs. If unsure, say N. 1385 called freevxfs. If unsure, say N.
1386 1386
1387 config MINIX_FS 1387 config MINIX_FS
1388 tristate "Minix file system support" 1388 tristate "Minix file system support"
1389 depends on BLOCK 1389 depends on BLOCK
1390 help 1390 help
1391 Minix is a simple operating system used in many classes about OS's. 1391 Minix is a simple operating system used in many classes about OS's.
1392 The minix file system (method to organize files on a hard disk 1392 The minix file system (method to organize files on a hard disk
1393 partition or a floppy disk) was the original file system for Linux, 1393 partition or a floppy disk) was the original file system for Linux,
1394 but has been superseded by the second extended file system ext2fs. 1394 but has been superseded by the second extended file system ext2fs.
1395 You don't want to use the minix file system on your hard disk 1395 You don't want to use the minix file system on your hard disk
1396 because of certain built-in restrictions, but it is sometimes found 1396 because of certain built-in restrictions, but it is sometimes found
1397 on older Linux floppy disks. This option will enlarge your kernel 1397 on older Linux floppy disks. This option will enlarge your kernel
1398 by about 28 KB. If unsure, say N. 1398 by about 28 KB. If unsure, say N.
1399 1399
1400 To compile this file system support as a module, choose M here: the 1400 To compile this file system support as a module, choose M here: the
1401 module will be called minix. Note that the file system of your root 1401 module will be called minix. Note that the file system of your root
1402 partition (the one containing the directory /) cannot be compiled as 1402 partition (the one containing the directory /) cannot be compiled as
1403 a module. 1403 a module.
1404 1404
1405 1405
1406 config HPFS_FS 1406 config HPFS_FS
1407 tristate "OS/2 HPFS file system support" 1407 tristate "OS/2 HPFS file system support"
1408 depends on BLOCK 1408 depends on BLOCK
1409 help 1409 help
1410 OS/2 is IBM's operating system for PC's, the same as Warp, and HPFS 1410 OS/2 is IBM's operating system for PC's, the same as Warp, and HPFS
1411 is the file system used for organizing files on OS/2 hard disk 1411 is the file system used for organizing files on OS/2 hard disk
1412 partitions. Say Y if you want to be able to read files from and 1412 partitions. Say Y if you want to be able to read files from and
1413 write files to an OS/2 HPFS partition on your hard drive. OS/2 1413 write files to an OS/2 HPFS partition on your hard drive. OS/2
1414 floppies however are in regular MSDOS format, so you don't need this 1414 floppies however are in regular MSDOS format, so you don't need this
1415 option in order to be able to read them. Read 1415 option in order to be able to read them. Read
1416 <file:Documentation/filesystems/hpfs.txt>. 1416 <file:Documentation/filesystems/hpfs.txt>.
1417 1417
1418 To compile this file system support as a module, choose M here: the 1418 To compile this file system support as a module, choose M here: the
1419 module will be called hpfs. If unsure, say N. 1419 module will be called hpfs. If unsure, say N.
1420 1420
1421 1421
1422 config QNX4FS_FS 1422 config QNX4FS_FS
1423 tristate "QNX4 file system support (read only)" 1423 tristate "QNX4 file system support (read only)"
1424 depends on BLOCK 1424 depends on BLOCK
1425 help 1425 help
1426 This is the file system used by the real-time operating systems 1426 This is the file system used by the real-time operating systems
1427 QNX 4 and QNX 6 (the latter is also called QNX RTP). 1427 QNX 4 and QNX 6 (the latter is also called QNX RTP).
1428 Further information is available at <http://www.qnx.com/>. 1428 Further information is available at <http://www.qnx.com/>.
1429 Say Y if you intend to mount QNX hard disks or floppies. 1429 Say Y if you intend to mount QNX hard disks or floppies.
1430 Unless you say Y to "QNX4FS read-write support" below, you will 1430 Unless you say Y to "QNX4FS read-write support" below, you will
1431 only be able to read these file systems. 1431 only be able to read these file systems.
1432 1432
1433 To compile this file system support as a module, choose M here: the 1433 To compile this file system support as a module, choose M here: the
1434 module will be called qnx4. 1434 module will be called qnx4.
1435 1435
1436 If you don't know whether you need it, then you don't need it: 1436 If you don't know whether you need it, then you don't need it:
1437 answer N. 1437 answer N.
1438 1438
1439 config QNX4FS_RW 1439 config QNX4FS_RW
1440 bool "QNX4FS write support (DANGEROUS)" 1440 bool "QNX4FS write support (DANGEROUS)"
1441 depends on QNX4FS_FS && EXPERIMENTAL && BROKEN 1441 depends on QNX4FS_FS && EXPERIMENTAL && BROKEN
1442 help 1442 help
1443 Say Y if you want to test write support for QNX4 file systems. 1443 Say Y if you want to test write support for QNX4 file systems.
1444 1444
1445 It's currently broken, so for now: 1445 It's currently broken, so for now:
1446 answer N. 1446 answer N.
1447 1447
1448 config ROMFS_FS 1448 config ROMFS_FS
1449 tristate "ROM file system support" 1449 tristate "ROM file system support"
1450 depends on BLOCK 1450 depends on BLOCK
1451 ---help--- 1451 ---help---
1452 This is a very small read-only file system mainly intended for 1452 This is a very small read-only file system mainly intended for
1453 initial ram disks of installation disks, but it could be used for 1453 initial ram disks of installation disks, but it could be used for
1454 other read-only media as well. Read 1454 other read-only media as well. Read
1455 <file:Documentation/filesystems/romfs.txt> for details. 1455 <file:Documentation/filesystems/romfs.txt> for details.
1456 1456
1457 To compile this file system support as a module, choose M here: the 1457 To compile this file system support as a module, choose M here: the
1458 module will be called romfs. Note that the file system of your 1458 module will be called romfs. Note that the file system of your
1459 root partition (the one containing the directory /) cannot be a 1459 root partition (the one containing the directory /) cannot be a
1460 module. 1460 module.
1461 1461
1462 If you don't know whether you need it, then you don't need it: 1462 If you don't know whether you need it, then you don't need it:
1463 answer N. 1463 answer N.
1464 1464
1465 1465
1466 config SYSV_FS 1466 config SYSV_FS
1467 tristate "System V/Xenix/V7/Coherent file system support" 1467 tristate "System V/Xenix/V7/Coherent file system support"
1468 depends on BLOCK 1468 depends on BLOCK
1469 help 1469 help
1470 SCO, Xenix and Coherent are commercial Unix systems for Intel 1470 SCO, Xenix and Coherent are commercial Unix systems for Intel
1471 machines, and Version 7 was used on the DEC PDP-11. Saying Y 1471 machines, and Version 7 was used on the DEC PDP-11. Saying Y
1472 here would allow you to read from their floppies and hard disk 1472 here would allow you to read from their floppies and hard disk
1473 partitions. 1473 partitions.
1474 1474
1475 If you have floppies or hard disk partitions like that, it is likely 1475 If you have floppies or hard disk partitions like that, it is likely
1476 that they contain binaries from those other Unix systems; in order 1476 that they contain binaries from those other Unix systems; in order
1477 to run these binaries, you will want to install linux-abi which is 1477 to run these binaries, you will want to install linux-abi which is
1478 a set of kernel modules that lets you run SCO, Xenix, Wyse, 1478 a set of kernel modules that lets you run SCO, Xenix, Wyse,
1479 UnixWare, Dell Unix and System V programs under Linux. It is 1479 UnixWare, Dell Unix and System V programs under Linux. It is
1480 available via FTP (user: ftp) from 1480 available via FTP (user: ftp) from
1481 <ftp://ftp.openlinux.org/pub/people/hch/linux-abi/>). 1481 <ftp://ftp.openlinux.org/pub/people/hch/linux-abi/>).
1482 NOTE: that will work only for binaries from Intel-based systems; 1482 NOTE: that will work only for binaries from Intel-based systems;
1483 PDP ones will have to wait until somebody ports Linux to -11 ;-) 1483 PDP ones will have to wait until somebody ports Linux to -11 ;-)
1484 1484
1485 If you only intend to mount files from some other Unix over the 1485 If you only intend to mount files from some other Unix over the
1486 network using NFS, you don't need the System V file system support 1486 network using NFS, you don't need the System V file system support
1487 (but you need NFS file system support obviously). 1487 (but you need NFS file system support obviously).
1488 1488
1489 Note that this option is generally not needed for floppies, since a 1489 Note that this option is generally not needed for floppies, since a
1490 good portable way to transport files and directories between unixes 1490 good portable way to transport files and directories between unixes
1491 (and even other operating systems) is given by the tar program ("man 1491 (and even other operating systems) is given by the tar program ("man
1492 tar" or preferably "info tar"). Note also that this option has 1492 tar" or preferably "info tar"). Note also that this option has
1493 nothing whatsoever to do with the option "System V IPC". Read about 1493 nothing whatsoever to do with the option "System V IPC". Read about
1494 the System V file system in 1494 the System V file system in
1495 <file:Documentation/filesystems/sysv-fs.txt>. 1495 <file:Documentation/filesystems/sysv-fs.txt>.
1496 Saying Y here will enlarge your kernel by about 27 KB. 1496 Saying Y here will enlarge your kernel by about 27 KB.
1497 1497
1498 To compile this as a module, choose M here: the module will be called 1498 To compile this as a module, choose M here: the module will be called
1499 sysv. 1499 sysv.
1500 1500
1501 If you haven't heard about all of this before, it's safe to say N. 1501 If you haven't heard about all of this before, it's safe to say N.
1502 1502
1503 1503
1504 config UFS_FS 1504 config UFS_FS
1505 tristate "UFS file system support (read only)" 1505 tristate "UFS file system support (read only)"
1506 depends on BLOCK 1506 depends on BLOCK
1507 help 1507 help
1508 BSD and derivate versions of Unix (such as SunOS, FreeBSD, NetBSD, 1508 BSD and derivate versions of Unix (such as SunOS, FreeBSD, NetBSD,
1509 OpenBSD and NeXTstep) use a file system called UFS. Some System V 1509 OpenBSD and NeXTstep) use a file system called UFS. Some System V
1510 Unixes can create and mount hard disk partitions and diskettes using 1510 Unixes can create and mount hard disk partitions and diskettes using
1511 this file system as well. Saying Y here will allow you to read from 1511 this file system as well. Saying Y here will allow you to read from
1512 these partitions; if you also want to write to them, say Y to the 1512 these partitions; if you also want to write to them, say Y to the
1513 experimental "UFS file system write support", below. Please read the 1513 experimental "UFS file system write support", below. Please read the
1514 file <file:Documentation/filesystems/ufs.txt> for more information. 1514 file <file:Documentation/filesystems/ufs.txt> for more information.
1515 1515
1516 The recently released UFS2 variant (used in FreeBSD 5.x) is 1516 The recently released UFS2 variant (used in FreeBSD 5.x) is
1517 READ-ONLY supported. 1517 READ-ONLY supported.
1518 1518
1519 If you only intend to mount files from some other Unix over the 1519 If you only intend to mount files from some other Unix over the
1520 network using NFS, you don't need the UFS file system support (but 1520 network using NFS, you don't need the UFS file system support (but
1521 you need NFS file system support obviously). 1521 you need NFS file system support obviously).
1522 1522
1523 Note that this option is generally not needed for floppies, since a 1523 Note that this option is generally not needed for floppies, since a
1524 good portable way to transport files and directories between unixes 1524 good portable way to transport files and directories between unixes
1525 (and even other operating systems) is given by the tar program ("man 1525 (and even other operating systems) is given by the tar program ("man
1526 tar" or preferably "info tar"). 1526 tar" or preferably "info tar").
1527 1527
1528 When accessing NeXTstep files, you may need to convert them from the 1528 When accessing NeXTstep files, you may need to convert them from the
1529 NeXT character set to the Latin1 character set; use the program 1529 NeXT character set to the Latin1 character set; use the program
1530 recode ("info recode") for this purpose. 1530 recode ("info recode") for this purpose.
1531 1531
1532 To compile the UFS file system support as a module, choose M here: the 1532 To compile the UFS file system support as a module, choose M here: the
1533 module will be called ufs. 1533 module will be called ufs.
1534 1534
1535 If you haven't heard about all of this before, it's safe to say N. 1535 If you haven't heard about all of this before, it's safe to say N.
1536 1536
1537 config UFS_FS_WRITE 1537 config UFS_FS_WRITE
1538 bool "UFS file system write support (DANGEROUS)" 1538 bool "UFS file system write support (DANGEROUS)"
1539 depends on UFS_FS && EXPERIMENTAL 1539 depends on UFS_FS && EXPERIMENTAL
1540 help 1540 help
1541 Say Y here if you want to try writing to UFS partitions. This is 1541 Say Y here if you want to try writing to UFS partitions. This is
1542 experimental, so you should back up your UFS partitions beforehand. 1542 experimental, so you should back up your UFS partitions beforehand.
1543 1543
1544 config UFS_DEBUG 1544 config UFS_DEBUG
1545 bool "UFS debugging" 1545 bool "UFS debugging"
1546 depends on UFS_FS 1546 depends on UFS_FS
1547 help 1547 help
1548 If you are experiencing any problems with the UFS filesystem, say 1548 If you are experiencing any problems with the UFS filesystem, say
1549 Y here. This will result in _many_ additional debugging messages to be 1549 Y here. This will result in _many_ additional debugging messages to be
1550 written to the system log. 1550 written to the system log.
1551 1551
1552 endmenu 1552 endmenu
1553 1553
1554 menuconfig NETWORK_FILESYSTEMS 1554 menuconfig NETWORK_FILESYSTEMS
1555 bool "Network File Systems" 1555 bool "Network File Systems"
1556 default y 1556 default y
1557 depends on NET 1557 depends on NET
1558 ---help--- 1558 ---help---
1559 Say Y here to get to see options for network filesystems and 1559 Say Y here to get to see options for network filesystems and
1560 filesystem-related networking code, such as NFS daemon and 1560 filesystem-related networking code, such as NFS daemon and
1561 RPCSEC security modules. 1561 RPCSEC security modules.
1562 This option alone does not add any kernel code. 1562 This option alone does not add any kernel code.
1563 1563
1564 If you say N, all options in this submenu will be skipped and 1564 If you say N, all options in this submenu will be skipped and
1565 disabled; if unsure, say Y here. 1565 disabled; if unsure, say Y here.
1566 1566
1567 if NETWORK_FILESYSTEMS 1567 if NETWORK_FILESYSTEMS
1568 1568
1569 config NFS_FS 1569 config NFS_FS
1570 tristate "NFS file system support" 1570 tristate "NFS file system support"
1571 depends on INET 1571 depends on INET
1572 select LOCKD 1572 select LOCKD
1573 select SUNRPC 1573 select SUNRPC
1574 select NFS_ACL_SUPPORT if NFS_V3_ACL 1574 select NFS_ACL_SUPPORT if NFS_V3_ACL
1575 help 1575 help
1576 If you are connected to some other (usually local) Unix computer 1576 If you are connected to some other (usually local) Unix computer
1577 (using SLIP, PLIP, PPP or Ethernet) and want to mount files residing 1577 (using SLIP, PLIP, PPP or Ethernet) and want to mount files residing
1578 on that computer (the NFS server) using the Network File Sharing 1578 on that computer (the NFS server) using the Network File Sharing
1579 protocol, say Y. "Mounting files" means that the client can access 1579 protocol, say Y. "Mounting files" means that the client can access
1580 the files with usual UNIX commands as if they were sitting on the 1580 the files with usual UNIX commands as if they were sitting on the
1581 client's hard disk. For this to work, the server must run the 1581 client's hard disk. For this to work, the server must run the
1582 programs nfsd and mountd (but does not need to have NFS file system 1582 programs nfsd and mountd (but does not need to have NFS file system
1583 support enabled in its kernel). NFS is explained in the Network 1583 support enabled in its kernel). NFS is explained in the Network
1584 Administrator's Guide, available from 1584 Administrator's Guide, available from
1585 <http://www.tldp.org/docs.html#guide>, on its man page: "man 1585 <http://www.tldp.org/docs.html#guide>, on its man page: "man
1586 nfs", and in the NFS-HOWTO. 1586 nfs", and in the NFS-HOWTO.
1587 1587
1588 A superior but less widely used alternative to NFS is provided by 1588 A superior but less widely used alternative to NFS is provided by
1589 the Coda file system; see "Coda file system support" below. 1589 the Coda file system; see "Coda file system support" below.
1590 1590
1591 If you say Y here, you should have said Y to TCP/IP networking also. 1591 If you say Y here, you should have said Y to TCP/IP networking also.
1592 This option would enlarge your kernel by about 27 KB. 1592 This option would enlarge your kernel by about 27 KB.
1593 1593
1594 To compile this file system support as a module, choose M here: the 1594 To compile this file system support as a module, choose M here: the
1595 module will be called nfs. 1595 module will be called nfs.
1596 1596
1597 If you are configuring a diskless machine which will mount its root 1597 If you are configuring a diskless machine which will mount its root
1598 file system over NFS at boot time, say Y here and to "Kernel 1598 file system over NFS at boot time, say Y here and to "Kernel
1599 level IP autoconfiguration" above and to "Root file system on NFS" 1599 level IP autoconfiguration" above and to "Root file system on NFS"
1600 below. You cannot compile this driver as a module in this case. 1600 below. You cannot compile this driver as a module in this case.
1601 There are two packages designed for booting diskless machines over 1601 There are two packages designed for booting diskless machines over
1602 the net: netboot, available from 1602 the net: netboot, available from
1603 <http://ftp1.sourceforge.net/netboot/>, and Etherboot, 1603 <http://ftp1.sourceforge.net/netboot/>, and Etherboot,
1604 available from <http://ftp1.sourceforge.net/etherboot/>. 1604 available from <http://ftp1.sourceforge.net/etherboot/>.
1605 1605
1606 If you don't know what all this is about, say N. 1606 If you don't know what all this is about, say N.
1607 1607
1608 config NFS_V3 1608 config NFS_V3
1609 bool "Provide NFSv3 client support" 1609 bool "Provide NFSv3 client support"
1610 depends on NFS_FS 1610 depends on NFS_FS
1611 help 1611 help
1612 Say Y here if you want your NFS client to be able to speak version 1612 Say Y here if you want your NFS client to be able to speak version
1613 3 of the NFS protocol. 1613 3 of the NFS protocol.
1614 1614
1615 If unsure, say Y. 1615 If unsure, say Y.
1616 1616
1617 config NFS_V3_ACL 1617 config NFS_V3_ACL
1618 bool "Provide client support for the NFSv3 ACL protocol extension" 1618 bool "Provide client support for the NFSv3 ACL protocol extension"
1619 depends on NFS_V3 1619 depends on NFS_V3
1620 help 1620 help
1621 Implement the NFSv3 ACL protocol extension for manipulating POSIX 1621 Implement the NFSv3 ACL protocol extension for manipulating POSIX
1622 Access Control Lists. The server should also be compiled with 1622 Access Control Lists. The server should also be compiled with
1623 the NFSv3 ACL protocol extension; see the CONFIG_NFSD_V3_ACL option. 1623 the NFSv3 ACL protocol extension; see the CONFIG_NFSD_V3_ACL option.
1624 1624
1625 If unsure, say N. 1625 If unsure, say N.
1626 1626
1627 config NFS_V4 1627 config NFS_V4
1628 bool "Provide NFSv4 client support (EXPERIMENTAL)" 1628 bool "Provide NFSv4 client support (EXPERIMENTAL)"
1629 depends on NFS_FS && EXPERIMENTAL 1629 depends on NFS_FS && EXPERIMENTAL
1630 select RPCSEC_GSS_KRB5 1630 select RPCSEC_GSS_KRB5
1631 help 1631 help
1632 Say Y here if you want your NFS client to be able to speak the newer 1632 Say Y here if you want your NFS client to be able to speak the newer
1633 version 4 of the NFS protocol. 1633 version 4 of the NFS protocol.
1634 1634
1635 Note: Requires auxiliary userspace daemons which may be found on 1635 Note: Requires auxiliary userspace daemons which may be found on
1636 http://www.citi.umich.edu/projects/nfsv4/ 1636 http://www.citi.umich.edu/projects/nfsv4/
1637 1637
1638 If unsure, say N. 1638 If unsure, say N.
1639 1639
1640 config NFS_DIRECTIO 1640 config NFS_DIRECTIO
1641 bool "Allow direct I/O on NFS files" 1641 bool "Allow direct I/O on NFS files"
1642 depends on NFS_FS 1642 depends on NFS_FS
1643 help 1643 help
1644 This option enables applications to perform uncached I/O on files 1644 This option enables applications to perform uncached I/O on files
1645 in NFS file systems using the O_DIRECT open() flag. When O_DIRECT 1645 in NFS file systems using the O_DIRECT open() flag. When O_DIRECT
1646 is set for a file, its data is not cached in the system's page 1646 is set for a file, its data is not cached in the system's page
1647 cache. Data is moved to and from user-level application buffers 1647 cache. Data is moved to and from user-level application buffers
1648 directly. Unlike local disk-based file systems, NFS O_DIRECT has 1648 directly. Unlike local disk-based file systems, NFS O_DIRECT has
1649 no alignment restrictions. 1649 no alignment restrictions.
1650 1650
1651 Unless your program is designed to use O_DIRECT properly, you are 1651 Unless your program is designed to use O_DIRECT properly, you are
1652 much better off allowing the NFS client to manage data caching for 1652 much better off allowing the NFS client to manage data caching for
1653 you. Misusing O_DIRECT can cause poor server performance or network 1653 you. Misusing O_DIRECT can cause poor server performance or network
1654 storms. This kernel build option defaults OFF to avoid exposing 1654 storms. This kernel build option defaults OFF to avoid exposing
1655 system administrators unwittingly to a potentially hazardous 1655 system administrators unwittingly to a potentially hazardous
1656 feature. 1656 feature.
1657 1657
1658 For more details on NFS O_DIRECT, see fs/nfs/direct.c. 1658 For more details on NFS O_DIRECT, see fs/nfs/direct.c.
1659 1659
1660 If unsure, say N. This reduces the size of the NFS client, and 1660 If unsure, say N. This reduces the size of the NFS client, and
1661 causes open() to return EINVAL if a file residing in NFS is 1661 causes open() to return EINVAL if a file residing in NFS is
1662 opened with the O_DIRECT flag. 1662 opened with the O_DIRECT flag.
1663 1663
1664 config NFSD 1664 config NFSD
1665 tristate "NFS server support" 1665 tristate "NFS server support"
1666 depends on INET 1666 depends on INET
1667 select LOCKD 1667 select LOCKD
1668 select SUNRPC 1668 select SUNRPC
1669 select EXPORTFS 1669 select EXPORTFS
1670 select NFSD_V2_ACL if NFSD_V3_ACL 1670 select NFSD_V2_ACL if NFSD_V3_ACL
1671 select NFS_ACL_SUPPORT if NFSD_V2_ACL 1671 select NFS_ACL_SUPPORT if NFSD_V2_ACL
1672 select NFSD_TCP if NFSD_V4 1672 select NFSD_TCP if NFSD_V4
1673 select CRYPTO_MD5 if NFSD_V4 1673 select CRYPTO_MD5 if NFSD_V4
1674 select CRYPTO if NFSD_V4 1674 select CRYPTO if NFSD_V4
1675 select FS_POSIX_ACL if NFSD_V4 1675 select FS_POSIX_ACL if NFSD_V4
1676 select PROC_FS if NFSD_V4 1676 select PROC_FS if NFSD_V4
1677 select PROC_FS if SUNRPC_GSS 1677 select PROC_FS if SUNRPC_GSS
1678 help 1678 help
1679 If you want your Linux box to act as an NFS *server*, so that other 1679 If you want your Linux box to act as an NFS *server*, so that other
1680 computers on your local network which support NFS can access certain 1680 computers on your local network which support NFS can access certain
1681 directories on your box transparently, you have two options: you can 1681 directories on your box transparently, you have two options: you can
1682 use the self-contained user space program nfsd, in which case you 1682 use the self-contained user space program nfsd, in which case you
1683 should say N here, or you can say Y and use the kernel based NFS 1683 should say N here, or you can say Y and use the kernel based NFS
1684 server. The advantage of the kernel based solution is that it is 1684 server. The advantage of the kernel based solution is that it is
1685 faster. 1685 faster.
1686 1686
1687 In either case, you will need support software; the respective 1687 In either case, you will need support software; the respective
1688 locations are given in the file <file:Documentation/Changes> in the 1688 locations are given in the file <file:Documentation/Changes> in the
1689 NFS section. 1689 NFS section.
1690 1690
1691 If you say Y here, you will get support for version 2 of the NFS 1691 If you say Y here, you will get support for version 2 of the NFS
1692 protocol (NFSv2). If you also want NFSv3, say Y to the next question 1692 protocol (NFSv2). If you also want NFSv3, say Y to the next question
1693 as well. 1693 as well.
1694 1694
1695 Please read the NFS-HOWTO, available from 1695 Please read the NFS-HOWTO, available from
1696 <http://www.tldp.org/docs.html#howto>. 1696 <http://www.tldp.org/docs.html#howto>.
1697 1697
1698 To compile the NFS server support as a module, choose M here: the 1698 To compile the NFS server support as a module, choose M here: the
1699 module will be called nfsd. If unsure, say N. 1699 module will be called nfsd. If unsure, say N.
1700 1700
1701 config NFSD_V2_ACL 1701 config NFSD_V2_ACL
1702 bool 1702 bool
1703 depends on NFSD 1703 depends on NFSD
1704 1704
1705 config NFSD_V3 1705 config NFSD_V3
1706 bool "Provide NFSv3 server support" 1706 bool "Provide NFSv3 server support"
1707 depends on NFSD 1707 depends on NFSD
1708 help 1708 help
1709 If you would like to include the NFSv3 server as well as the NFSv2 1709 If you would like to include the NFSv3 server as well as the NFSv2
1710 server, say Y here. If unsure, say Y. 1710 server, say Y here. If unsure, say Y.
1711 1711
1712 config NFSD_V3_ACL 1712 config NFSD_V3_ACL
1713 bool "Provide server support for the NFSv3 ACL protocol extension" 1713 bool "Provide server support for the NFSv3 ACL protocol extension"
1714 depends on NFSD_V3 1714 depends on NFSD_V3
1715 help 1715 help
1716 Implement the NFSv3 ACL protocol extension for manipulating POSIX 1716 Implement the NFSv3 ACL protocol extension for manipulating POSIX
1717 Access Control Lists on exported file systems. NFS clients should 1717 Access Control Lists on exported file systems. NFS clients should
1718 be compiled with the NFSv3 ACL protocol extension; see the 1718 be compiled with the NFSv3 ACL protocol extension; see the
1719 CONFIG_NFS_V3_ACL option. If unsure, say N. 1719 CONFIG_NFS_V3_ACL option. If unsure, say N.
1720 1720
1721 config NFSD_V4 1721 config NFSD_V4
1722 bool "Provide NFSv4 server support (EXPERIMENTAL)" 1722 bool "Provide NFSv4 server support (EXPERIMENTAL)"
1723 depends on NFSD && NFSD_V3 && EXPERIMENTAL 1723 depends on NFSD && NFSD_V3 && EXPERIMENTAL
1724 select RPCSEC_GSS_KRB5 1724 select RPCSEC_GSS_KRB5
1725 help 1725 help
1726 If you would like to include the NFSv4 server as well as the NFSv2 1726 If you would like to include the NFSv4 server as well as the NFSv2
1727 and NFSv3 servers, say Y here. This feature is experimental, and 1727 and NFSv3 servers, say Y here. This feature is experimental, and
1728 should only be used if you are interested in helping to test NFSv4. 1728 should only be used if you are interested in helping to test NFSv4.
1729 If unsure, say N. 1729 If unsure, say N.
1730 1730
1731 config NFSD_TCP 1731 config NFSD_TCP
1732 bool "Provide NFS server over TCP support" 1732 bool "Provide NFS server over TCP support"
1733 depends on NFSD 1733 depends on NFSD
1734 default y 1734 default y
1735 help 1735 help
1736 If you want your NFS server to support TCP connections, say Y here. 1736 If you want your NFS server to support TCP connections, say Y here.
1737 TCP connections usually perform better than the default UDP when 1737 TCP connections usually perform better than the default UDP when
1738 the network is lossy or congested. If unsure, say Y. 1738 the network is lossy or congested. If unsure, say Y.
1739 1739
1740 config ROOT_NFS 1740 config ROOT_NFS
1741 bool "Root file system on NFS" 1741 bool "Root file system on NFS"
1742 depends on NFS_FS=y && IP_PNP 1742 depends on NFS_FS=y && IP_PNP
1743 help 1743 help
1744 If you want your Linux box to mount its whole root file system (the 1744 If you want your Linux box to mount its whole root file system (the
1745 one containing the directory /) from some other computer over the 1745 one containing the directory /) from some other computer over the
1746 net via NFS (presumably because your box doesn't have a hard disk), 1746 net via NFS (presumably because your box doesn't have a hard disk),
1747 say Y. Read <file:Documentation/nfsroot.txt> for details. It is 1747 say Y. Read <file:Documentation/filesystems/nfsroot.txt> for
1748 likely that in this case, you also want to say Y to "Kernel level IP 1748 details. It is likely that in this case, you also want to say Y to
1749 autoconfiguration" so that your box can discover its network address 1749 "Kernel level IP autoconfiguration" so that your box can discover
1750 at boot time. 1750 its network address at boot time.
1751 1751
1752 Most people say N here. 1752 Most people say N here.
1753 1753
1754 config LOCKD 1754 config LOCKD
1755 tristate 1755 tristate
1756 1756
1757 config LOCKD_V4 1757 config LOCKD_V4
1758 bool 1758 bool
1759 depends on NFSD_V3 || NFS_V3 1759 depends on NFSD_V3 || NFS_V3
1760 default y 1760 default y
1761 1761
1762 config EXPORTFS 1762 config EXPORTFS
1763 tristate 1763 tristate
1764 1764
1765 config NFS_ACL_SUPPORT 1765 config NFS_ACL_SUPPORT
1766 tristate 1766 tristate
1767 select FS_POSIX_ACL 1767 select FS_POSIX_ACL
1768 1768
1769 config NFS_COMMON 1769 config NFS_COMMON
1770 bool 1770 bool
1771 depends on NFSD || NFS_FS 1771 depends on NFSD || NFS_FS
1772 default y 1772 default y
1773 1773
1774 config SUNRPC 1774 config SUNRPC
1775 tristate 1775 tristate
1776 1776
1777 config SUNRPC_GSS 1777 config SUNRPC_GSS
1778 tristate 1778 tristate
1779 1779
1780 config SUNRPC_XPRT_RDMA 1780 config SUNRPC_XPRT_RDMA
1781 tristate 1781 tristate
1782 depends on SUNRPC && INFINIBAND && EXPERIMENTAL 1782 depends on SUNRPC && INFINIBAND && EXPERIMENTAL
1783 default SUNRPC && INFINIBAND 1783 default SUNRPC && INFINIBAND
1784 1784
1785 config SUNRPC_BIND34 1785 config SUNRPC_BIND34
1786 bool "Support for rpcbind versions 3 & 4 (EXPERIMENTAL)" 1786 bool "Support for rpcbind versions 3 & 4 (EXPERIMENTAL)"
1787 depends on SUNRPC && EXPERIMENTAL 1787 depends on SUNRPC && EXPERIMENTAL
1788 help 1788 help
1789 Provides kernel support for querying rpcbind servers via versions 3 1789 Provides kernel support for querying rpcbind servers via versions 3
1790 and 4 of the rpcbind protocol. The kernel automatically falls back 1790 and 4 of the rpcbind protocol. The kernel automatically falls back
1791 to version 2 if a remote rpcbind service does not support versions 1791 to version 2 if a remote rpcbind service does not support versions
1792 3 or 4. 1792 3 or 4.
1793 1793
1794 If unsure, say N to get traditional behavior (version 2 rpcbind 1794 If unsure, say N to get traditional behavior (version 2 rpcbind
1795 requests only). 1795 requests only).
1796 1796
1797 config RPCSEC_GSS_KRB5 1797 config RPCSEC_GSS_KRB5
1798 tristate "Secure RPC: Kerberos V mechanism (EXPERIMENTAL)" 1798 tristate "Secure RPC: Kerberos V mechanism (EXPERIMENTAL)"
1799 depends on SUNRPC && EXPERIMENTAL 1799 depends on SUNRPC && EXPERIMENTAL
1800 select SUNRPC_GSS 1800 select SUNRPC_GSS
1801 select CRYPTO 1801 select CRYPTO
1802 select CRYPTO_MD5 1802 select CRYPTO_MD5
1803 select CRYPTO_DES 1803 select CRYPTO_DES
1804 select CRYPTO_CBC 1804 select CRYPTO_CBC
1805 help 1805 help
1806 Provides for secure RPC calls by means of a gss-api 1806 Provides for secure RPC calls by means of a gss-api
1807 mechanism based on Kerberos V5. This is required for 1807 mechanism based on Kerberos V5. This is required for
1808 NFSv4. 1808 NFSv4.
1809 1809
1810 Note: Requires an auxiliary userspace daemon which may be found on 1810 Note: Requires an auxiliary userspace daemon which may be found on
1811 http://www.citi.umich.edu/projects/nfsv4/ 1811 http://www.citi.umich.edu/projects/nfsv4/
1812 1812
1813 If unsure, say N. 1813 If unsure, say N.
1814 1814
1815 config RPCSEC_GSS_SPKM3 1815 config RPCSEC_GSS_SPKM3
1816 tristate "Secure RPC: SPKM3 mechanism (EXPERIMENTAL)" 1816 tristate "Secure RPC: SPKM3 mechanism (EXPERIMENTAL)"
1817 depends on SUNRPC && EXPERIMENTAL 1817 depends on SUNRPC && EXPERIMENTAL
1818 select SUNRPC_GSS 1818 select SUNRPC_GSS
1819 select CRYPTO 1819 select CRYPTO
1820 select CRYPTO_MD5 1820 select CRYPTO_MD5
1821 select CRYPTO_DES 1821 select CRYPTO_DES
1822 select CRYPTO_CAST5 1822 select CRYPTO_CAST5
1823 select CRYPTO_CBC 1823 select CRYPTO_CBC
1824 help 1824 help
1825 Provides for secure RPC calls by means of a gss-api 1825 Provides for secure RPC calls by means of a gss-api
1826 mechanism based on the SPKM3 public-key mechanism. 1826 mechanism based on the SPKM3 public-key mechanism.
1827 1827
1828 Note: Requires an auxiliary userspace daemon which may be found on 1828 Note: Requires an auxiliary userspace daemon which may be found on
1829 http://www.citi.umich.edu/projects/nfsv4/ 1829 http://www.citi.umich.edu/projects/nfsv4/
1830 1830
1831 If unsure, say N. 1831 If unsure, say N.
1832 1832
1833 config SMB_FS 1833 config SMB_FS
1834 tristate "SMB file system support (OBSOLETE, please use CIFS)" 1834 tristate "SMB file system support (OBSOLETE, please use CIFS)"
1835 depends on INET 1835 depends on INET
1836 select NLS 1836 select NLS
1837 help 1837 help
1838 SMB (Server Message Block) is the protocol Windows for Workgroups 1838 SMB (Server Message Block) is the protocol Windows for Workgroups
1839 (WfW), Windows 95/98, Windows NT and OS/2 Lan Manager use to share 1839 (WfW), Windows 95/98, Windows NT and OS/2 Lan Manager use to share
1840 files and printers over local networks. Saying Y here allows you to 1840 files and printers over local networks. Saying Y here allows you to
1841 mount their file systems (often called "shares" in this context) and 1841 mount their file systems (often called "shares" in this context) and
1842 access them just like any other Unix directory. Currently, this 1842 access them just like any other Unix directory. Currently, this
1843 works only if the Windows machines use TCP/IP as the underlying 1843 works only if the Windows machines use TCP/IP as the underlying
1844 transport protocol, and not NetBEUI. For details, read 1844 transport protocol, and not NetBEUI. For details, read
1845 <file:Documentation/filesystems/smbfs.txt> and the SMB-HOWTO, 1845 <file:Documentation/filesystems/smbfs.txt> and the SMB-HOWTO,
1846 available from <http://www.tldp.org/docs.html#howto>. 1846 available from <http://www.tldp.org/docs.html#howto>.
1847 1847
1848 Note: if you just want your box to act as an SMB *server* and make 1848 Note: if you just want your box to act as an SMB *server* and make
1849 files and printing services available to Windows clients (which need 1849 files and printing services available to Windows clients (which need
1850 to have a TCP/IP stack), you don't need to say Y here; you can use 1850 to have a TCP/IP stack), you don't need to say Y here; you can use
1851 the program SAMBA (available from <ftp://ftp.samba.org/pub/samba/>) 1851 the program SAMBA (available from <ftp://ftp.samba.org/pub/samba/>)
1852 for that. 1852 for that.
1853 1853
1854 General information about how to connect Linux, Windows machines and 1854 General information about how to connect Linux, Windows machines and
1855 Macs is on the WWW at <http://www.eats.com/linux_mac_win.html>. 1855 Macs is on the WWW at <http://www.eats.com/linux_mac_win.html>.
1856 1856
1857 To compile the SMB support as a module, choose M here: 1857 To compile the SMB support as a module, choose M here:
1858 the module will be called smbfs. Most people say N, however. 1858 the module will be called smbfs. Most people say N, however.
1859 1859
1860 config SMB_NLS_DEFAULT 1860 config SMB_NLS_DEFAULT
1861 bool "Use a default NLS" 1861 bool "Use a default NLS"
1862 depends on SMB_FS 1862 depends on SMB_FS
1863 help 1863 help
1864 Enabling this will make smbfs use nls translations by default. You 1864 Enabling this will make smbfs use nls translations by default. You
1865 need to specify the local charset (CONFIG_NLS_DEFAULT) in the nls 1865 need to specify the local charset (CONFIG_NLS_DEFAULT) in the nls
1866 settings and you need to give the default nls for the SMB server as 1866 settings and you need to give the default nls for the SMB server as
1867 CONFIG_SMB_NLS_REMOTE. 1867 CONFIG_SMB_NLS_REMOTE.
1868 1868
1869 The nls settings can be changed at mount time, if your smbmount 1869 The nls settings can be changed at mount time, if your smbmount
1870 supports that, using the codepage and iocharset parameters. 1870 supports that, using the codepage and iocharset parameters.
1871 1871
1872 smbmount from samba 2.2.0 or later supports this. 1872 smbmount from samba 2.2.0 or later supports this.
1873 1873
1874 config SMB_NLS_REMOTE 1874 config SMB_NLS_REMOTE
1875 string "Default Remote NLS Option" 1875 string "Default Remote NLS Option"
1876 depends on SMB_NLS_DEFAULT 1876 depends on SMB_NLS_DEFAULT
1877 default "cp437" 1877 default "cp437"
1878 help 1878 help
1879 This setting allows you to specify a default value for which 1879 This setting allows you to specify a default value for which
1880 codepage the server uses. If this field is left blank no 1880 codepage the server uses. If this field is left blank no
1881 translations will be done by default. The local codepage/charset 1881 translations will be done by default. The local codepage/charset
1882 default to CONFIG_NLS_DEFAULT. 1882 default to CONFIG_NLS_DEFAULT.
1883 1883
1884 The nls settings can be changed at mount time, if your smbmount 1884 The nls settings can be changed at mount time, if your smbmount
1885 supports that, using the codepage and iocharset parameters. 1885 supports that, using the codepage and iocharset parameters.
1886 1886
1887 smbmount from samba 2.2.0 or later supports this. 1887 smbmount from samba 2.2.0 or later supports this.
1888 1888
1889 config CIFS 1889 config CIFS
1890 tristate "CIFS support (advanced network filesystem, SMBFS successor)" 1890 tristate "CIFS support (advanced network filesystem, SMBFS successor)"
1891 depends on INET 1891 depends on INET
1892 select NLS 1892 select NLS
1893 help 1893 help
1894 This is the client VFS module for the Common Internet File System 1894 This is the client VFS module for the Common Internet File System
1895 (CIFS) protocol which is the successor to the Server Message Block 1895 (CIFS) protocol which is the successor to the Server Message Block
1896 (SMB) protocol, the native file sharing mechanism for most early 1896 (SMB) protocol, the native file sharing mechanism for most early
1897 PC operating systems. The CIFS protocol is fully supported by 1897 PC operating systems. The CIFS protocol is fully supported by
1898 file servers such as Windows 2000 (including Windows 2003, NT 4 1898 file servers such as Windows 2000 (including Windows 2003, NT 4
1899 and Windows XP) as well by Samba (which provides excellent CIFS 1899 and Windows XP) as well by Samba (which provides excellent CIFS
1900 server support for Linux and many other operating systems). Limited 1900 server support for Linux and many other operating systems). Limited
1901 support for OS/2 and Windows ME and similar servers is provided as 1901 support for OS/2 and Windows ME and similar servers is provided as
1902 well. 1902 well.
1903 1903
1904 The cifs module provides an advanced network file system 1904 The cifs module provides an advanced network file system
1905 client for mounting to CIFS compliant servers. It includes 1905 client for mounting to CIFS compliant servers. It includes
1906 support for DFS (hierarchical name space), secure per-user 1906 support for DFS (hierarchical name space), secure per-user
1907 session establishment via Kerberos or NTLM or NTLMv2, 1907 session establishment via Kerberos or NTLM or NTLMv2,
1908 safe distributed caching (oplock), optional packet 1908 safe distributed caching (oplock), optional packet
1909 signing, Unicode and other internationalization improvements. 1909 signing, Unicode and other internationalization improvements.
1910 If you need to mount to Samba or Windows from this machine, say Y. 1910 If you need to mount to Samba or Windows from this machine, say Y.
1911 1911
1912 config CIFS_STATS 1912 config CIFS_STATS
1913 bool "CIFS statistics" 1913 bool "CIFS statistics"
1914 depends on CIFS 1914 depends on CIFS
1915 help 1915 help
1916 Enabling this option will cause statistics for each server share 1916 Enabling this option will cause statistics for each server share
1917 mounted by the cifs client to be displayed in /proc/fs/cifs/Stats 1917 mounted by the cifs client to be displayed in /proc/fs/cifs/Stats
1918 1918
1919 config CIFS_STATS2 1919 config CIFS_STATS2
1920 bool "Extended statistics" 1920 bool "Extended statistics"
1921 depends on CIFS_STATS 1921 depends on CIFS_STATS
1922 help 1922 help
1923 Enabling this option will allow more detailed statistics on SMB 1923 Enabling this option will allow more detailed statistics on SMB
1924 request timing to be displayed in /proc/fs/cifs/DebugData and also 1924 request timing to be displayed in /proc/fs/cifs/DebugData and also
1925 allow optional logging of slow responses to dmesg (depending on the 1925 allow optional logging of slow responses to dmesg (depending on the
1926 value of /proc/fs/cifs/cifsFYI, see fs/cifs/README for more details). 1926 value of /proc/fs/cifs/cifsFYI, see fs/cifs/README for more details).
1927 These additional statistics may have a minor effect on performance 1927 These additional statistics may have a minor effect on performance
1928 and memory utilization. 1928 and memory utilization.
1929 1929
1930 Unless you are a developer or are doing network performance analysis 1930 Unless you are a developer or are doing network performance analysis
1931 or tuning, say N. 1931 or tuning, say N.
1932 1932
1933 config CIFS_WEAK_PW_HASH 1933 config CIFS_WEAK_PW_HASH
1934 bool "Support legacy servers which use weaker LANMAN security" 1934 bool "Support legacy servers which use weaker LANMAN security"
1935 depends on CIFS 1935 depends on CIFS
1936 help 1936 help
1937 Modern CIFS servers including Samba and most Windows versions 1937 Modern CIFS servers including Samba and most Windows versions
1938 (since 1997) support stronger NTLM (and even NTLMv2 and Kerberos) 1938 (since 1997) support stronger NTLM (and even NTLMv2 and Kerberos)
1939 security mechanisms. These hash the password more securely 1939 security mechanisms. These hash the password more securely
1940 than the mechanisms used in the older LANMAN version of the 1940 than the mechanisms used in the older LANMAN version of the
1941 SMB protocol but LANMAN based authentication is needed to 1941 SMB protocol but LANMAN based authentication is needed to
1942 establish sessions with some old SMB servers. 1942 establish sessions with some old SMB servers.
1943 1943
1944 Enabling this option allows the cifs module to mount to older 1944 Enabling this option allows the cifs module to mount to older
1945 LANMAN based servers such as OS/2 and Windows 95, but such 1945 LANMAN based servers such as OS/2 and Windows 95, but such
1946 mounts may be less secure than mounts using NTLM or more recent 1946 mounts may be less secure than mounts using NTLM or more recent
1947 security mechanisms if you are on a public network. Unless you 1947 security mechanisms if you are on a public network. Unless you
1948 have a need to access old SMB servers (and are on a private 1948 have a need to access old SMB servers (and are on a private
1949 network) you probably want to say N. Even if this support 1949 network) you probably want to say N. Even if this support
1950 is enabled in the kernel build, LANMAN authentication will not be 1950 is enabled in the kernel build, LANMAN authentication will not be
1951 used automatically. At runtime LANMAN mounts are disabled but 1951 used automatically. At runtime LANMAN mounts are disabled but
1952 can be set to required (or optional) either in 1952 can be set to required (or optional) either in
1953 /proc/fs/cifs (see fs/cifs/README for more detail) or via an 1953 /proc/fs/cifs (see fs/cifs/README for more detail) or via an
1954 option on the mount command. This support is disabled by 1954 option on the mount command. This support is disabled by
1955 default in order to reduce the possibility of a downgrade 1955 default in order to reduce the possibility of a downgrade
1956 attack. 1956 attack.
1957 1957
1958 If unsure, say N. 1958 If unsure, say N.
1959 1959
1960 config CIFS_XATTR 1960 config CIFS_XATTR
1961 bool "CIFS extended attributes" 1961 bool "CIFS extended attributes"
1962 depends on CIFS 1962 depends on CIFS
1963 help 1963 help
1964 Extended attributes are name:value pairs associated with inodes by 1964 Extended attributes are name:value pairs associated with inodes by
1965 the kernel or by users (see the attr(5) manual page, or visit 1965 the kernel or by users (see the attr(5) manual page, or visit
1966 <http://acl.bestbits.at/> for details). CIFS maps the name of 1966 <http://acl.bestbits.at/> for details). CIFS maps the name of
1967 extended attributes beginning with the user namespace prefix 1967 extended attributes beginning with the user namespace prefix
1968 to SMB/CIFS EAs. EAs are stored on Windows servers without the 1968 to SMB/CIFS EAs. EAs are stored on Windows servers without the
1969 user namespace prefix, but their names are seen by Linux cifs clients 1969 user namespace prefix, but their names are seen by Linux cifs clients
1970 prefaced by the user namespace prefix. The system namespace 1970 prefaced by the user namespace prefix. The system namespace
1971 (used by some filesystems to store ACLs) is not supported at 1971 (used by some filesystems to store ACLs) is not supported at
1972 this time. 1972 this time.
1973 1973
1974 If unsure, say N. 1974 If unsure, say N.
1975 1975
1976 config CIFS_POSIX 1976 config CIFS_POSIX
1977 bool "CIFS POSIX Extensions" 1977 bool "CIFS POSIX Extensions"
1978 depends on CIFS_XATTR 1978 depends on CIFS_XATTR
1979 help 1979 help
1980 Enabling this option will cause the cifs client to attempt to 1980 Enabling this option will cause the cifs client to attempt to
1981 negotiate a newer dialect with servers, such as Samba 3.0.5 1981 negotiate a newer dialect with servers, such as Samba 3.0.5
1982 or later, that optionally can handle more POSIX like (rather 1982 or later, that optionally can handle more POSIX like (rather
1983 than Windows like) file behavior. It also enables 1983 than Windows like) file behavior. It also enables
1984 support for POSIX ACLs (getfacl and setfacl) to servers 1984 support for POSIX ACLs (getfacl and setfacl) to servers
1985 (such as Samba 3.10 and later) which can negotiate 1985 (such as Samba 3.10 and later) which can negotiate
1986 CIFS POSIX ACL support. If unsure, say N. 1986 CIFS POSIX ACL support. If unsure, say N.
1987 1987
1988 config CIFS_DEBUG2 1988 config CIFS_DEBUG2
1989 bool "Enable additional CIFS debugging routines" 1989 bool "Enable additional CIFS debugging routines"
1990 depends on CIFS 1990 depends on CIFS
1991 help 1991 help
1992 Enabling this option adds a few more debugging routines 1992 Enabling this option adds a few more debugging routines
1993 to the cifs code which slightly increases the size of 1993 to the cifs code which slightly increases the size of
1994 the cifs module and can cause additional logging of debug 1994 the cifs module and can cause additional logging of debug
1995 messages in some error paths, slowing performance. This 1995 messages in some error paths, slowing performance. This
1996 option can be turned off unless you are debugging 1996 option can be turned off unless you are debugging
1997 cifs problems. If unsure, say N. 1997 cifs problems. If unsure, say N.
1998 1998
1999 config CIFS_EXPERIMENTAL 1999 config CIFS_EXPERIMENTAL
2000 bool "CIFS Experimental Features (EXPERIMENTAL)" 2000 bool "CIFS Experimental Features (EXPERIMENTAL)"
2001 depends on CIFS && EXPERIMENTAL 2001 depends on CIFS && EXPERIMENTAL
2002 help 2002 help
2003 Enables cifs features under testing. These features are 2003 Enables cifs features under testing. These features are
2004 experimental and currently include DFS support and directory 2004 experimental and currently include DFS support and directory
2005 change notification ie fcntl(F_DNOTIFY), as well as the upcall 2005 change notification ie fcntl(F_DNOTIFY), as well as the upcall
2006 mechanism which will be used for Kerberos session negotiation 2006 mechanism which will be used for Kerberos session negotiation
2007 and uid remapping. Some of these features also may depend on 2007 and uid remapping. Some of these features also may depend on
2008 setting a value of 1 to the pseudo-file /proc/fs/cifs/Experimental 2008 setting a value of 1 to the pseudo-file /proc/fs/cifs/Experimental
2009 (which is disabled by default). See the file fs/cifs/README 2009 (which is disabled by default). See the file fs/cifs/README
2010 for more details. If unsure, say N. 2010 for more details. If unsure, say N.
2011 2011
2012 config CIFS_UPCALL 2012 config CIFS_UPCALL
2013 bool "Kerberos/SPNEGO advanced session setup (EXPERIMENTAL)" 2013 bool "Kerberos/SPNEGO advanced session setup (EXPERIMENTAL)"
2014 depends on CIFS_EXPERIMENTAL 2014 depends on CIFS_EXPERIMENTAL
2015 depends on KEYS 2015 depends on KEYS
2016 help 2016 help
2017 Enables an upcall mechanism for CIFS which accesses 2017 Enables an upcall mechanism for CIFS which accesses
2018 userspace helper utilities to provide SPNEGO packaged (RFC 4178) 2018 userspace helper utilities to provide SPNEGO packaged (RFC 4178)
2019 Kerberos tickets which are needed to mount to certain secure servers 2019 Kerberos tickets which are needed to mount to certain secure servers
2020 (for which more secure Kerberos authentication is required). If 2020 (for which more secure Kerberos authentication is required). If
2021 unsure, say N. 2021 unsure, say N.
2022 2022
2023 config CIFS_DFS_UPCALL 2023 config CIFS_DFS_UPCALL
2024 bool "DFS feature support (EXPERIMENTAL)" 2024 bool "DFS feature support (EXPERIMENTAL)"
2025 depends on CIFS_EXPERIMENTAL 2025 depends on CIFS_EXPERIMENTAL
2026 depends on KEYS 2026 depends on KEYS
2027 help 2027 help
2028 Enables an upcall mechanism for CIFS which contacts userspace 2028 Enables an upcall mechanism for CIFS which contacts userspace
2029 helper utilities to provide server name resolution (host names to 2029 helper utilities to provide server name resolution (host names to
2030 IP addresses) which is needed for implicit mounts of DFS junction 2030 IP addresses) which is needed for implicit mounts of DFS junction
2031 points. If unsure, say N. 2031 points. If unsure, say N.
2032 2032
2033 config NCP_FS 2033 config NCP_FS
2034 tristate "NCP file system support (to mount NetWare volumes)" 2034 tristate "NCP file system support (to mount NetWare volumes)"
2035 depends on IPX!=n || INET 2035 depends on IPX!=n || INET
2036 help 2036 help
2037 NCP (NetWare Core Protocol) is a protocol that runs over IPX and is 2037 NCP (NetWare Core Protocol) is a protocol that runs over IPX and is
2038 used by Novell NetWare clients to talk to file servers. It is to 2038 used by Novell NetWare clients to talk to file servers. It is to
2039 IPX what NFS is to TCP/IP, if that helps. Saying Y here allows you 2039 IPX what NFS is to TCP/IP, if that helps. Saying Y here allows you
2040 to mount NetWare file server volumes and to access them just like 2040 to mount NetWare file server volumes and to access them just like
2041 any other Unix directory. For details, please read the file 2041 any other Unix directory. For details, please read the file
2042 <file:Documentation/filesystems/ncpfs.txt> in the kernel source and 2042 <file:Documentation/filesystems/ncpfs.txt> in the kernel source and
2043 the IPX-HOWTO from <http://www.tldp.org/docs.html#howto>. 2043 the IPX-HOWTO from <http://www.tldp.org/docs.html#howto>.
2044 2044
2045 You do not have to say Y here if you want your Linux box to act as a 2045 You do not have to say Y here if you want your Linux box to act as a
2046 file *server* for Novell NetWare clients. 2046 file *server* for Novell NetWare clients.
2047 2047
2048 General information about how to connect Linux, Windows machines and 2048 General information about how to connect Linux, Windows machines and
2049 Macs is on the WWW at <http://www.eats.com/linux_mac_win.html>. 2049 Macs is on the WWW at <http://www.eats.com/linux_mac_win.html>.
2050 2050
2051 To compile this as a module, choose M here: the module will be called 2051 To compile this as a module, choose M here: the module will be called
2052 ncpfs. Say N unless you are connected to a Novell network. 2052 ncpfs. Say N unless you are connected to a Novell network.
2053 2053
2054 source "fs/ncpfs/Kconfig" 2054 source "fs/ncpfs/Kconfig"
2055 2055
2056 config CODA_FS 2056 config CODA_FS
2057 tristate "Coda file system support (advanced network fs)" 2057 tristate "Coda file system support (advanced network fs)"
2058 depends on INET 2058 depends on INET
2059 help 2059 help
2060 Coda is an advanced network file system, similar to NFS in that it 2060 Coda is an advanced network file system, similar to NFS in that it
2061 enables you to mount file systems of a remote server and access them 2061 enables you to mount file systems of a remote server and access them
2062 with regular Unix commands as if they were sitting on your hard 2062 with regular Unix commands as if they were sitting on your hard
2063 disk. Coda has several advantages over NFS: support for 2063 disk. Coda has several advantages over NFS: support for
2064 disconnected operation (e.g. for laptops), read/write server 2064 disconnected operation (e.g. for laptops), read/write server
2065 replication, security model for authentication and encryption, 2065 replication, security model for authentication and encryption,
2066 persistent client caches and write back caching. 2066 persistent client caches and write back caching.
2067 2067
2068 If you say Y here, your Linux box will be able to act as a Coda 2068 If you say Y here, your Linux box will be able to act as a Coda
2069 *client*. You will need user level code as well, both for the 2069 *client*. You will need user level code as well, both for the
2070 client and server. Servers are currently user level, i.e. they need 2070 client and server. Servers are currently user level, i.e. they need
2071 no kernel support. Please read 2071 no kernel support. Please read
2072 <file:Documentation/filesystems/coda.txt> and check out the Coda 2072 <file:Documentation/filesystems/coda.txt> and check out the Coda
2073 home page <http://www.coda.cs.cmu.edu/>. 2073 home page <http://www.coda.cs.cmu.edu/>.
2074 2074
2075 To compile the coda client support as a module, choose M here: the 2075 To compile the coda client support as a module, choose M here: the
2076 module will be called coda. 2076 module will be called coda.
2077 2077
2078 config CODA_FS_OLD_API 2078 config CODA_FS_OLD_API
2079 bool "Use 96-bit Coda file identifiers" 2079 bool "Use 96-bit Coda file identifiers"
2080 depends on CODA_FS 2080 depends on CODA_FS
2081 help 2081 help
2082 A new kernel-userspace API had to be introduced for Coda v6.0 2082 A new kernel-userspace API had to be introduced for Coda v6.0
2083 to support larger 128-bit file identifiers as needed by the 2083 to support larger 128-bit file identifiers as needed by the
2084 new realms implementation. 2084 new realms implementation.
2085 2085
2086 However this new API is not backward compatible with older 2086 However this new API is not backward compatible with older
2087 clients. If you really need to run the old Coda userspace 2087 clients. If you really need to run the old Coda userspace
2088 cache manager then say Y. 2088 cache manager then say Y.
2089 2089
2090 For most cases you probably want to say N. 2090 For most cases you probably want to say N.
2091 2091
2092 config AFS_FS 2092 config AFS_FS
2093 tristate "Andrew File System support (AFS) (EXPERIMENTAL)" 2093 tristate "Andrew File System support (AFS) (EXPERIMENTAL)"
2094 depends on INET && EXPERIMENTAL 2094 depends on INET && EXPERIMENTAL
2095 select AF_RXRPC 2095 select AF_RXRPC
2096 help 2096 help
2097 If you say Y here, you will get an experimental Andrew File System 2097 If you say Y here, you will get an experimental Andrew File System
2098 driver. It currently only supports unsecured read-only AFS access. 2098 driver. It currently only supports unsecured read-only AFS access.
2099 2099
2100 See <file:Documentation/filesystems/afs.txt> for more information. 2100 See <file:Documentation/filesystems/afs.txt> for more information.
2101 2101
2102 If unsure, say N. 2102 If unsure, say N.
2103 2103
2104 config AFS_DEBUG 2104 config AFS_DEBUG
2105 bool "AFS dynamic debugging" 2105 bool "AFS dynamic debugging"
2106 depends on AFS_FS 2106 depends on AFS_FS
2107 help 2107 help
2108 Say Y here to make runtime controllable debugging messages appear. 2108 Say Y here to make runtime controllable debugging messages appear.
2109 2109
2110 See <file:Documentation/filesystems/afs.txt> for more information. 2110 See <file:Documentation/filesystems/afs.txt> for more information.
2111 2111
2112 If unsure, say N. 2112 If unsure, say N.
2113 2113
2114 config 9P_FS 2114 config 9P_FS
2115 tristate "Plan 9 Resource Sharing Support (9P2000) (Experimental)" 2115 tristate "Plan 9 Resource Sharing Support (9P2000) (Experimental)"
2116 depends on INET && NET_9P && EXPERIMENTAL 2116 depends on INET && NET_9P && EXPERIMENTAL
2117 help 2117 help
2118 If you say Y here, you will get experimental support for 2118 If you say Y here, you will get experimental support for
2119 Plan 9 resource sharing via the 9P2000 protocol. 2119 Plan 9 resource sharing via the 9P2000 protocol.
2120 2120
2121 See <http://v9fs.sf.net> for more information. 2121 See <http://v9fs.sf.net> for more information.
2122 2122
2123 If unsure, say N. 2123 If unsure, say N.
2124 2124
2125 endif # NETWORK_FILESYSTEMS 2125 endif # NETWORK_FILESYSTEMS
2126 2126
2127 if BLOCK 2127 if BLOCK
2128 menu "Partition Types" 2128 menu "Partition Types"
2129 2129
2130 source "fs/partitions/Kconfig" 2130 source "fs/partitions/Kconfig"
2131 2131
2132 endmenu 2132 endmenu
2133 endif 2133 endif
2134 2134
2135 source "fs/nls/Kconfig" 2135 source "fs/nls/Kconfig"
2136 source "fs/dlm/Kconfig" 2136 source "fs/dlm/Kconfig"
2137 2137
2138 endmenu 2138 endmenu
2139 2139
include/linux/spinlock.h
1 #ifndef __LINUX_SPINLOCK_H 1 #ifndef __LINUX_SPINLOCK_H
2 #define __LINUX_SPINLOCK_H 2 #define __LINUX_SPINLOCK_H
3 3
4 /* 4 /*
5 * include/linux/spinlock.h - generic spinlock/rwlock declarations 5 * include/linux/spinlock.h - generic spinlock/rwlock declarations
6 * 6 *
7 * here's the role of the various spinlock/rwlock related include files: 7 * here's the role of the various spinlock/rwlock related include files:
8 * 8 *
9 * on SMP builds: 9 * on SMP builds:
10 * 10 *
11 * asm/spinlock_types.h: contains the raw_spinlock_t/raw_rwlock_t and the 11 * asm/spinlock_types.h: contains the raw_spinlock_t/raw_rwlock_t and the
12 * initializers 12 * initializers
13 * 13 *
14 * linux/spinlock_types.h: 14 * linux/spinlock_types.h:
15 * defines the generic type and initializers 15 * defines the generic type and initializers
16 * 16 *
17 * asm/spinlock.h: contains the __raw_spin_*()/etc. lowlevel 17 * asm/spinlock.h: contains the __raw_spin_*()/etc. lowlevel
18 * implementations, mostly inline assembly code 18 * implementations, mostly inline assembly code
19 * 19 *
20 * (also included on UP-debug builds:) 20 * (also included on UP-debug builds:)
21 * 21 *
22 * linux/spinlock_api_smp.h: 22 * linux/spinlock_api_smp.h:
23 * contains the prototypes for the _spin_*() APIs. 23 * contains the prototypes for the _spin_*() APIs.
24 * 24 *
25 * linux/spinlock.h: builds the final spin_*() APIs. 25 * linux/spinlock.h: builds the final spin_*() APIs.
26 * 26 *
27 * on UP builds: 27 * on UP builds:
28 * 28 *
29 * linux/spinlock_type_up.h: 29 * linux/spinlock_type_up.h:
30 * contains the generic, simplified UP spinlock type. 30 * contains the generic, simplified UP spinlock type.
31 * (which is an empty structure on non-debug builds) 31 * (which is an empty structure on non-debug builds)
32 * 32 *
33 * linux/spinlock_types.h: 33 * linux/spinlock_types.h:
34 * defines the generic type and initializers 34 * defines the generic type and initializers
35 * 35 *
36 * linux/spinlock_up.h: 36 * linux/spinlock_up.h:
37 * contains the __raw_spin_*()/etc. version of UP 37 * contains the __raw_spin_*()/etc. version of UP
38 * builds. (which are NOPs on non-debug, non-preempt 38 * builds. (which are NOPs on non-debug, non-preempt
39 * builds) 39 * builds)
40 * 40 *
41 * (included on UP-non-debug builds:) 41 * (included on UP-non-debug builds:)
42 * 42 *
43 * linux/spinlock_api_up.h: 43 * linux/spinlock_api_up.h:
44 * builds the _spin_*() APIs. 44 * builds the _spin_*() APIs.
45 * 45 *
46 * linux/spinlock.h: builds the final spin_*() APIs. 46 * linux/spinlock.h: builds the final spin_*() APIs.
47 */ 47 */
48 48
49 #include <linux/preempt.h> 49 #include <linux/preempt.h>
50 #include <linux/linkage.h> 50 #include <linux/linkage.h>
51 #include <linux/compiler.h> 51 #include <linux/compiler.h>
52 #include <linux/thread_info.h> 52 #include <linux/thread_info.h>
53 #include <linux/kernel.h> 53 #include <linux/kernel.h>
54 #include <linux/stringify.h> 54 #include <linux/stringify.h>
55 #include <linux/bottom_half.h> 55 #include <linux/bottom_half.h>
56 56
57 #include <asm/system.h> 57 #include <asm/system.h>
58 58
59 /* 59 /*
60 * Must define these before including other files, inline functions need them 60 * Must define these before including other files, inline functions need them
61 */ 61 */
62 #define LOCK_SECTION_NAME ".text.lock."KBUILD_BASENAME 62 #define LOCK_SECTION_NAME ".text.lock."KBUILD_BASENAME
63 63
64 #define LOCK_SECTION_START(extra) \ 64 #define LOCK_SECTION_START(extra) \
65 ".subsection 1\n\t" \ 65 ".subsection 1\n\t" \
66 extra \ 66 extra \
67 ".ifndef " LOCK_SECTION_NAME "\n\t" \ 67 ".ifndef " LOCK_SECTION_NAME "\n\t" \
68 LOCK_SECTION_NAME ":\n\t" \ 68 LOCK_SECTION_NAME ":\n\t" \
69 ".endif\n" 69 ".endif\n"
70 70
71 #define LOCK_SECTION_END \ 71 #define LOCK_SECTION_END \
72 ".previous\n\t" 72 ".previous\n\t"
73 73
74 #define __lockfunc __attribute__((section(".spinlock.text"))) 74 #define __lockfunc __attribute__((section(".spinlock.text")))
75 75
76 /* 76 /*
77 * Pull the raw_spinlock_t and raw_rwlock_t definitions: 77 * Pull the raw_spinlock_t and raw_rwlock_t definitions:
78 */ 78 */
79 #include <linux/spinlock_types.h> 79 #include <linux/spinlock_types.h>
80 80
81 extern int __lockfunc generic__raw_read_trylock(raw_rwlock_t *lock); 81 extern int __lockfunc generic__raw_read_trylock(raw_rwlock_t *lock);
82 82
83 /* 83 /*
84 * Pull the __raw*() functions/declarations (UP-nondebug doesnt need them): 84 * Pull the __raw*() functions/declarations (UP-nondebug doesnt need them):
85 */ 85 */
86 #ifdef CONFIG_SMP 86 #ifdef CONFIG_SMP
87 # include <asm/spinlock.h> 87 # include <asm/spinlock.h>
88 #else 88 #else
89 # include <linux/spinlock_up.h> 89 # include <linux/spinlock_up.h>
90 #endif 90 #endif
91 91
92 #ifdef CONFIG_DEBUG_SPINLOCK 92 #ifdef CONFIG_DEBUG_SPINLOCK
93 extern void __spin_lock_init(spinlock_t *lock, const char *name, 93 extern void __spin_lock_init(spinlock_t *lock, const char *name,
94 struct lock_class_key *key); 94 struct lock_class_key *key);
95 # define spin_lock_init(lock) \ 95 # define spin_lock_init(lock) \
96 do { \ 96 do { \
97 static struct lock_class_key __key; \ 97 static struct lock_class_key __key; \
98 \ 98 \
99 __spin_lock_init((lock), #lock, &__key); \ 99 __spin_lock_init((lock), #lock, &__key); \
100 } while (0) 100 } while (0)
101 101
102 #else 102 #else
103 # define spin_lock_init(lock) \ 103 # define spin_lock_init(lock) \
104 do { *(lock) = SPIN_LOCK_UNLOCKED; } while (0) 104 do { *(lock) = SPIN_LOCK_UNLOCKED; } while (0)
105 #endif 105 #endif
106 106
107 #ifdef CONFIG_DEBUG_SPINLOCK 107 #ifdef CONFIG_DEBUG_SPINLOCK
108 extern void __rwlock_init(rwlock_t *lock, const char *name, 108 extern void __rwlock_init(rwlock_t *lock, const char *name,
109 struct lock_class_key *key); 109 struct lock_class_key *key);
110 # define rwlock_init(lock) \ 110 # define rwlock_init(lock) \
111 do { \ 111 do { \
112 static struct lock_class_key __key; \ 112 static struct lock_class_key __key; \
113 \ 113 \
114 __rwlock_init((lock), #lock, &__key); \ 114 __rwlock_init((lock), #lock, &__key); \
115 } while (0) 115 } while (0)
116 #else 116 #else
117 # define rwlock_init(lock) \ 117 # define rwlock_init(lock) \
118 do { *(lock) = RW_LOCK_UNLOCKED; } while (0) 118 do { *(lock) = RW_LOCK_UNLOCKED; } while (0)
119 #endif 119 #endif
120 120
121 #define spin_is_locked(lock) __raw_spin_is_locked(&(lock)->raw_lock) 121 #define spin_is_locked(lock) __raw_spin_is_locked(&(lock)->raw_lock)
122 122
123 #ifdef CONFIG_GENERIC_LOCKBREAK 123 #ifdef CONFIG_GENERIC_LOCKBREAK
124 #define spin_is_contended(lock) ((lock)->break_lock) 124 #define spin_is_contended(lock) ((lock)->break_lock)
125 #else 125 #else
126 #define spin_is_contended(lock) __raw_spin_is_contended(&(lock)->raw_lock) 126 #define spin_is_contended(lock) __raw_spin_is_contended(&(lock)->raw_lock)
127 #endif 127 #endif
128 128
129 /** 129 /**
130 * spin_unlock_wait - wait until the spinlock gets unlocked 130 * spin_unlock_wait - wait until the spinlock gets unlocked
131 * @lock: the spinlock in question. 131 * @lock: the spinlock in question.
132 */ 132 */
133 #define spin_unlock_wait(lock) __raw_spin_unlock_wait(&(lock)->raw_lock) 133 #define spin_unlock_wait(lock) __raw_spin_unlock_wait(&(lock)->raw_lock)
134 134
135 /* 135 /*
136 * Pull the _spin_*()/_read_*()/_write_*() functions/declarations: 136 * Pull the _spin_*()/_read_*()/_write_*() functions/declarations:
137 */ 137 */
138 #if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK) 138 #if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK)
139 # include <linux/spinlock_api_smp.h> 139 # include <linux/spinlock_api_smp.h>
140 #else 140 #else
141 # include <linux/spinlock_api_up.h> 141 # include <linux/spinlock_api_up.h>
142 #endif 142 #endif
143 143
144 #ifdef CONFIG_DEBUG_SPINLOCK 144 #ifdef CONFIG_DEBUG_SPINLOCK
145 extern void _raw_spin_lock(spinlock_t *lock); 145 extern void _raw_spin_lock(spinlock_t *lock);
146 #define _raw_spin_lock_flags(lock, flags) _raw_spin_lock(lock) 146 #define _raw_spin_lock_flags(lock, flags) _raw_spin_lock(lock)
147 extern int _raw_spin_trylock(spinlock_t *lock); 147 extern int _raw_spin_trylock(spinlock_t *lock);
148 extern void _raw_spin_unlock(spinlock_t *lock); 148 extern void _raw_spin_unlock(spinlock_t *lock);
149 extern void _raw_read_lock(rwlock_t *lock); 149 extern void _raw_read_lock(rwlock_t *lock);
150 extern int _raw_read_trylock(rwlock_t *lock); 150 extern int _raw_read_trylock(rwlock_t *lock);
151 extern void _raw_read_unlock(rwlock_t *lock); 151 extern void _raw_read_unlock(rwlock_t *lock);
152 extern void _raw_write_lock(rwlock_t *lock); 152 extern void _raw_write_lock(rwlock_t *lock);
153 extern int _raw_write_trylock(rwlock_t *lock); 153 extern int _raw_write_trylock(rwlock_t *lock);
154 extern void _raw_write_unlock(rwlock_t *lock); 154 extern void _raw_write_unlock(rwlock_t *lock);
155 #else 155 #else
156 # define _raw_spin_lock(lock) __raw_spin_lock(&(lock)->raw_lock) 156 # define _raw_spin_lock(lock) __raw_spin_lock(&(lock)->raw_lock)
157 # define _raw_spin_lock_flags(lock, flags) \ 157 # define _raw_spin_lock_flags(lock, flags) \
158 __raw_spin_lock_flags(&(lock)->raw_lock, *(flags)) 158 __raw_spin_lock_flags(&(lock)->raw_lock, *(flags))
159 # define _raw_spin_trylock(lock) __raw_spin_trylock(&(lock)->raw_lock) 159 # define _raw_spin_trylock(lock) __raw_spin_trylock(&(lock)->raw_lock)
160 # define _raw_spin_unlock(lock) __raw_spin_unlock(&(lock)->raw_lock) 160 # define _raw_spin_unlock(lock) __raw_spin_unlock(&(lock)->raw_lock)
161 # define _raw_read_lock(rwlock) __raw_read_lock(&(rwlock)->raw_lock) 161 # define _raw_read_lock(rwlock) __raw_read_lock(&(rwlock)->raw_lock)
162 # define _raw_read_trylock(rwlock) __raw_read_trylock(&(rwlock)->raw_lock) 162 # define _raw_read_trylock(rwlock) __raw_read_trylock(&(rwlock)->raw_lock)
163 # define _raw_read_unlock(rwlock) __raw_read_unlock(&(rwlock)->raw_lock) 163 # define _raw_read_unlock(rwlock) __raw_read_unlock(&(rwlock)->raw_lock)
164 # define _raw_write_lock(rwlock) __raw_write_lock(&(rwlock)->raw_lock) 164 # define _raw_write_lock(rwlock) __raw_write_lock(&(rwlock)->raw_lock)
165 # define _raw_write_trylock(rwlock) __raw_write_trylock(&(rwlock)->raw_lock) 165 # define _raw_write_trylock(rwlock) __raw_write_trylock(&(rwlock)->raw_lock)
166 # define _raw_write_unlock(rwlock) __raw_write_unlock(&(rwlock)->raw_lock) 166 # define _raw_write_unlock(rwlock) __raw_write_unlock(&(rwlock)->raw_lock)
167 #endif 167 #endif
168 168
169 #define read_can_lock(rwlock) __raw_read_can_lock(&(rwlock)->raw_lock) 169 #define read_can_lock(rwlock) __raw_read_can_lock(&(rwlock)->raw_lock)
170 #define write_can_lock(rwlock) __raw_write_can_lock(&(rwlock)->raw_lock) 170 #define write_can_lock(rwlock) __raw_write_can_lock(&(rwlock)->raw_lock)
171 171
172 /* 172 /*
173 * Define the various spin_lock and rw_lock methods. Note we define these 173 * Define the various spin_lock and rw_lock methods. Note we define these
174 * regardless of whether CONFIG_SMP or CONFIG_PREEMPT are set. The various 174 * regardless of whether CONFIG_SMP or CONFIG_PREEMPT are set. The various
175 * methods are defined as nops in the case they are not required. 175 * methods are defined as nops in the case they are not required.
176 */ 176 */
177 #define spin_trylock(lock) __cond_lock(lock, _spin_trylock(lock)) 177 #define spin_trylock(lock) __cond_lock(lock, _spin_trylock(lock))
178 #define read_trylock(lock) __cond_lock(lock, _read_trylock(lock)) 178 #define read_trylock(lock) __cond_lock(lock, _read_trylock(lock))
179 #define write_trylock(lock) __cond_lock(lock, _write_trylock(lock)) 179 #define write_trylock(lock) __cond_lock(lock, _write_trylock(lock))
180 180
181 #define spin_lock(lock) _spin_lock(lock) 181 #define spin_lock(lock) _spin_lock(lock)
182 182
183 #ifdef CONFIG_DEBUG_LOCK_ALLOC 183 #ifdef CONFIG_DEBUG_LOCK_ALLOC
184 # define spin_lock_nested(lock, subclass) _spin_lock_nested(lock, subclass) 184 # define spin_lock_nested(lock, subclass) _spin_lock_nested(lock, subclass)
185 #else 185 #else
186 # define spin_lock_nested(lock, subclass) _spin_lock(lock) 186 # define spin_lock_nested(lock, subclass) _spin_lock(lock)
187 #endif 187 #endif
188 188
189 #define write_lock(lock) _write_lock(lock) 189 #define write_lock(lock) _write_lock(lock)
190 #define read_lock(lock) _read_lock(lock) 190 #define read_lock(lock) _read_lock(lock)
191 191
192 #if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK) 192 #if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK)
193 193
194 #define spin_lock_irqsave(lock, flags) flags = _spin_lock_irqsave(lock) 194 #define spin_lock_irqsave(lock, flags) flags = _spin_lock_irqsave(lock)
195 #define read_lock_irqsave(lock, flags) flags = _read_lock_irqsave(lock) 195 #define read_lock_irqsave(lock, flags) flags = _read_lock_irqsave(lock)
196 #define write_lock_irqsave(lock, flags) flags = _write_lock_irqsave(lock) 196 #define write_lock_irqsave(lock, flags) flags = _write_lock_irqsave(lock)
197 197
198 #ifdef CONFIG_DEBUG_LOCK_ALLOC 198 #ifdef CONFIG_DEBUG_LOCK_ALLOC
199 #define spin_lock_irqsave_nested(lock, flags, subclass) \ 199 #define spin_lock_irqsave_nested(lock, flags, subclass) \
200 flags = _spin_lock_irqsave_nested(lock, subclass) 200 flags = _spin_lock_irqsave_nested(lock, subclass)
201 #else 201 #else
202 #define spin_lock_irqsave_nested(lock, flags, subclass) \ 202 #define spin_lock_irqsave_nested(lock, flags, subclass) \
203 flags = _spin_lock_irqsave(lock) 203 flags = _spin_lock_irqsave(lock)
204 #endif 204 #endif
205 205
206 #else 206 #else
207 207
208 #define spin_lock_irqsave(lock, flags) _spin_lock_irqsave(lock, flags) 208 #define spin_lock_irqsave(lock, flags) _spin_lock_irqsave(lock, flags)
209 #define read_lock_irqsave(lock, flags) _read_lock_irqsave(lock, flags) 209 #define read_lock_irqsave(lock, flags) _read_lock_irqsave(lock, flags)
210 #define write_lock_irqsave(lock, flags) _write_lock_irqsave(lock, flags) 210 #define write_lock_irqsave(lock, flags) _write_lock_irqsave(lock, flags)
211 #define spin_lock_irqsave_nested(lock, flags, subclass) \ 211 #define spin_lock_irqsave_nested(lock, flags, subclass) \
212 spin_lock_irqsave(lock, flags) 212 spin_lock_irqsave(lock, flags)
213 213
214 #endif 214 #endif
215 215
216 #define spin_lock_irq(lock) _spin_lock_irq(lock) 216 #define spin_lock_irq(lock) _spin_lock_irq(lock)
217 #define spin_lock_bh(lock) _spin_lock_bh(lock) 217 #define spin_lock_bh(lock) _spin_lock_bh(lock)
218 218
219 #define read_lock_irq(lock) _read_lock_irq(lock) 219 #define read_lock_irq(lock) _read_lock_irq(lock)
220 #define read_lock_bh(lock) _read_lock_bh(lock) 220 #define read_lock_bh(lock) _read_lock_bh(lock)
221 221
222 #define write_lock_irq(lock) _write_lock_irq(lock) 222 #define write_lock_irq(lock) _write_lock_irq(lock)
223 #define write_lock_bh(lock) _write_lock_bh(lock) 223 #define write_lock_bh(lock) _write_lock_bh(lock)
224 224
225 /* 225 /*
226 * We inline the unlock functions in the nondebug case: 226 * We inline the unlock functions in the nondebug case:
227 */ 227 */
228 #if defined(CONFIG_DEBUG_SPINLOCK) || defined(CONFIG_PREEMPT) || \ 228 #if defined(CONFIG_DEBUG_SPINLOCK) || defined(CONFIG_PREEMPT) || \
229 !defined(CONFIG_SMP) 229 !defined(CONFIG_SMP)
230 # define spin_unlock(lock) _spin_unlock(lock) 230 # define spin_unlock(lock) _spin_unlock(lock)
231 # define read_unlock(lock) _read_unlock(lock) 231 # define read_unlock(lock) _read_unlock(lock)
232 # define write_unlock(lock) _write_unlock(lock) 232 # define write_unlock(lock) _write_unlock(lock)
233 # define spin_unlock_irq(lock) _spin_unlock_irq(lock) 233 # define spin_unlock_irq(lock) _spin_unlock_irq(lock)
234 # define read_unlock_irq(lock) _read_unlock_irq(lock) 234 # define read_unlock_irq(lock) _read_unlock_irq(lock)
235 # define write_unlock_irq(lock) _write_unlock_irq(lock) 235 # define write_unlock_irq(lock) _write_unlock_irq(lock)
236 #else 236 #else
237 # define spin_unlock(lock) \ 237 # define spin_unlock(lock) \
238 do {__raw_spin_unlock(&(lock)->raw_lock); __release(lock); } while (0) 238 do {__raw_spin_unlock(&(lock)->raw_lock); __release(lock); } while (0)
239 # define read_unlock(lock) \ 239 # define read_unlock(lock) \
240 do {__raw_read_unlock(&(lock)->raw_lock); __release(lock); } while (0) 240 do {__raw_read_unlock(&(lock)->raw_lock); __release(lock); } while (0)
241 # define write_unlock(lock) \ 241 # define write_unlock(lock) \
242 do {__raw_write_unlock(&(lock)->raw_lock); __release(lock); } while (0) 242 do {__raw_write_unlock(&(lock)->raw_lock); __release(lock); } while (0)
243 # define spin_unlock_irq(lock) \ 243 # define spin_unlock_irq(lock) \
244 do { \ 244 do { \
245 __raw_spin_unlock(&(lock)->raw_lock); \ 245 __raw_spin_unlock(&(lock)->raw_lock); \
246 __release(lock); \ 246 __release(lock); \
247 local_irq_enable(); \ 247 local_irq_enable(); \
248 } while (0) 248 } while (0)
249 # define read_unlock_irq(lock) \ 249 # define read_unlock_irq(lock) \
250 do { \ 250 do { \
251 __raw_read_unlock(&(lock)->raw_lock); \ 251 __raw_read_unlock(&(lock)->raw_lock); \
252 __release(lock); \ 252 __release(lock); \
253 local_irq_enable(); \ 253 local_irq_enable(); \
254 } while (0) 254 } while (0)
255 # define write_unlock_irq(lock) \ 255 # define write_unlock_irq(lock) \
256 do { \ 256 do { \
257 __raw_write_unlock(&(lock)->raw_lock); \ 257 __raw_write_unlock(&(lock)->raw_lock); \
258 __release(lock); \ 258 __release(lock); \
259 local_irq_enable(); \ 259 local_irq_enable(); \
260 } while (0) 260 } while (0)
261 #endif 261 #endif
262 262
263 #define spin_unlock_irqrestore(lock, flags) \ 263 #define spin_unlock_irqrestore(lock, flags) \
264 _spin_unlock_irqrestore(lock, flags) 264 _spin_unlock_irqrestore(lock, flags)
265 #define spin_unlock_bh(lock) _spin_unlock_bh(lock) 265 #define spin_unlock_bh(lock) _spin_unlock_bh(lock)
266 266
267 #define read_unlock_irqrestore(lock, flags) \ 267 #define read_unlock_irqrestore(lock, flags) \
268 _read_unlock_irqrestore(lock, flags) 268 _read_unlock_irqrestore(lock, flags)
269 #define read_unlock_bh(lock) _read_unlock_bh(lock) 269 #define read_unlock_bh(lock) _read_unlock_bh(lock)
270 270
271 #define write_unlock_irqrestore(lock, flags) \ 271 #define write_unlock_irqrestore(lock, flags) \
272 _write_unlock_irqrestore(lock, flags) 272 _write_unlock_irqrestore(lock, flags)
273 #define write_unlock_bh(lock) _write_unlock_bh(lock) 273 #define write_unlock_bh(lock) _write_unlock_bh(lock)
274 274
275 #define spin_trylock_bh(lock) __cond_lock(lock, _spin_trylock_bh(lock)) 275 #define spin_trylock_bh(lock) __cond_lock(lock, _spin_trylock_bh(lock))
276 276
277 #define spin_trylock_irq(lock) \ 277 #define spin_trylock_irq(lock) \
278 ({ \ 278 ({ \
279 local_irq_disable(); \ 279 local_irq_disable(); \
280 spin_trylock(lock) ? \ 280 spin_trylock(lock) ? \
281 1 : ({ local_irq_enable(); 0; }); \ 281 1 : ({ local_irq_enable(); 0; }); \
282 }) 282 })
283 283
284 #define spin_trylock_irqsave(lock, flags) \ 284 #define spin_trylock_irqsave(lock, flags) \
285 ({ \ 285 ({ \
286 local_irq_save(flags); \ 286 local_irq_save(flags); \
287 spin_trylock(lock) ? \ 287 spin_trylock(lock) ? \
288 1 : ({ local_irq_restore(flags); 0; }); \ 288 1 : ({ local_irq_restore(flags); 0; }); \
289 }) 289 })
290 290
291 #define write_trylock_irqsave(lock, flags) \ 291 #define write_trylock_irqsave(lock, flags) \
292 ({ \ 292 ({ \
293 local_irq_save(flags); \ 293 local_irq_save(flags); \
294 write_trylock(lock) ? \ 294 write_trylock(lock) ? \
295 1 : ({ local_irq_restore(flags); 0; }); \ 295 1 : ({ local_irq_restore(flags); 0; }); \
296 }) 296 })
297 297
298 /* 298 /*
299 * Locks two spinlocks l1 and l2. 299 * Locks two spinlocks l1 and l2.
300 * l1_first indicates if spinlock l1 should be taken first. 300 * l1_first indicates if spinlock l1 should be taken first.
301 */ 301 */
302 static inline void double_spin_lock(spinlock_t *l1, spinlock_t *l2, 302 static inline void double_spin_lock(spinlock_t *l1, spinlock_t *l2,
303 bool l1_first) 303 bool l1_first)
304 __acquires(l1) 304 __acquires(l1)
305 __acquires(l2) 305 __acquires(l2)
306 { 306 {
307 if (l1_first) { 307 if (l1_first) {
308 spin_lock(l1); 308 spin_lock(l1);
309 spin_lock(l2); 309 spin_lock(l2);
310 } else { 310 } else {
311 spin_lock(l2); 311 spin_lock(l2);
312 spin_lock(l1); 312 spin_lock(l1);
313 } 313 }
314 } 314 }
315 315
316 /* 316 /*
317 * Unlocks two spinlocks l1 and l2. 317 * Unlocks two spinlocks l1 and l2.
318 * l1_taken_first indicates if spinlock l1 was taken first and therefore 318 * l1_taken_first indicates if spinlock l1 was taken first and therefore
319 * should be released after spinlock l2. 319 * should be released after spinlock l2.
320 */ 320 */
321 static inline void double_spin_unlock(spinlock_t *l1, spinlock_t *l2, 321 static inline void double_spin_unlock(spinlock_t *l1, spinlock_t *l2,
322 bool l1_taken_first) 322 bool l1_taken_first)
323 __releases(l1) 323 __releases(l1)
324 __releases(l2) 324 __releases(l2)
325 { 325 {
326 if (l1_taken_first) { 326 if (l1_taken_first) {
327 spin_unlock(l2); 327 spin_unlock(l2);
328 spin_unlock(l1); 328 spin_unlock(l1);
329 } else { 329 } else {
330 spin_unlock(l1); 330 spin_unlock(l1);
331 spin_unlock(l2); 331 spin_unlock(l2);
332 } 332 }
333 } 333 }
334 334
335 /* 335 /*
336 * Pull the atomic_t declaration: 336 * Pull the atomic_t declaration:
337 * (asm-mips/atomic.h needs above definitions) 337 * (asm-mips/atomic.h needs above definitions)
338 */ 338 */
339 #include <asm/atomic.h> 339 #include <asm/atomic.h>
340 /** 340 /**
341 * atomic_dec_and_lock - lock on reaching reference count zero 341 * atomic_dec_and_lock - lock on reaching reference count zero
342 * @atomic: the atomic counter 342 * @atomic: the atomic counter
343 * @lock: the spinlock in question 343 * @lock: the spinlock in question
344 *
345 * Decrements @atomic by 1. If the result is 0, returns true and locks
346 * @lock. Returns false for all other cases.
344 */ 347 */
345 extern int _atomic_dec_and_lock(atomic_t *atomic, spinlock_t *lock); 348 extern int _atomic_dec_and_lock(atomic_t *atomic, spinlock_t *lock);
346 #define atomic_dec_and_lock(atomic, lock) \ 349 #define atomic_dec_and_lock(atomic, lock) \
347 __cond_lock(lock, _atomic_dec_and_lock(atomic, lock)) 350 __cond_lock(lock, _atomic_dec_and_lock(atomic, lock))
348 351
349 /** 352 /**
350 * spin_can_lock - would spin_trylock() succeed? 353 * spin_can_lock - would spin_trylock() succeed?
351 * @lock: the spinlock in question. 354 * @lock: the spinlock in question.
352 */ 355 */
353 #define spin_can_lock(lock) (!spin_is_locked(lock)) 356 #define spin_can_lock(lock) (!spin_is_locked(lock))
354 357
355 #endif /* __LINUX_SPINLOCK_H */ 358 #endif /* __LINUX_SPINLOCK_H */
356 359
1 # 1 #
2 # IP configuration 2 # IP configuration
3 # 3 #
4 config IP_MULTICAST 4 config IP_MULTICAST
5 bool "IP: multicasting" 5 bool "IP: multicasting"
6 help 6 help
7 This is code for addressing several networked computers at once, 7 This is code for addressing several networked computers at once,
8 enlarging your kernel by about 2 KB. You need multicasting if you 8 enlarging your kernel by about 2 KB. You need multicasting if you
9 intend to participate in the MBONE, a high bandwidth network on top 9 intend to participate in the MBONE, a high bandwidth network on top
10 of the Internet which carries audio and video broadcasts. More 10 of the Internet which carries audio and video broadcasts. More
11 information about the MBONE is on the WWW at 11 information about the MBONE is on the WWW at
12 <http://www.savetz.com/mbone/>. Information about the multicast 12 <http://www.savetz.com/mbone/>. Information about the multicast
13 capabilities of the various network cards is contained in 13 capabilities of the various network cards is contained in
14 <file:Documentation/networking/multicast.txt>. For most people, it's 14 <file:Documentation/networking/multicast.txt>. For most people, it's
15 safe to say N. 15 safe to say N.
16 16
17 config IP_ADVANCED_ROUTER 17 config IP_ADVANCED_ROUTER
18 bool "IP: advanced router" 18 bool "IP: advanced router"
19 ---help--- 19 ---help---
20 If you intend to run your Linux box mostly as a router, i.e. as a 20 If you intend to run your Linux box mostly as a router, i.e. as a
21 computer that forwards and redistributes network packets, say Y; you 21 computer that forwards and redistributes network packets, say Y; you
22 will then be presented with several options that allow more precise 22 will then be presented with several options that allow more precise
23 control about the routing process. 23 control about the routing process.
24 24
25 The answer to this question won't directly affect the kernel: 25 The answer to this question won't directly affect the kernel:
26 answering N will just cause the configurator to skip all the 26 answering N will just cause the configurator to skip all the
27 questions about advanced routing. 27 questions about advanced routing.
28 28
29 Note that your box can only act as a router if you enable IP 29 Note that your box can only act as a router if you enable IP
30 forwarding in your kernel; you can do that by saying Y to "/proc 30 forwarding in your kernel; you can do that by saying Y to "/proc
31 file system support" and "Sysctl support" below and executing the 31 file system support" and "Sysctl support" below and executing the
32 line 32 line
33 33
34 echo "1" > /proc/sys/net/ipv4/ip_forward 34 echo "1" > /proc/sys/net/ipv4/ip_forward
35 35
36 at boot time after the /proc file system has been mounted. 36 at boot time after the /proc file system has been mounted.
37 37
38 If you turn on IP forwarding, you will also get the rp_filter, which 38 If you turn on IP forwarding, you will also get the rp_filter, which
39 automatically rejects incoming packets if the routing table entry 39 automatically rejects incoming packets if the routing table entry
40 for their source address doesn't match the network interface they're 40 for their source address doesn't match the network interface they're
41 arriving on. This has security advantages because it prevents the 41 arriving on. This has security advantages because it prevents the
42 so-called IP spoofing, however it can pose problems if you use 42 so-called IP spoofing, however it can pose problems if you use
43 asymmetric routing (packets from you to a host take a different path 43 asymmetric routing (packets from you to a host take a different path
44 than packets from that host to you) or if you operate a non-routing 44 than packets from that host to you) or if you operate a non-routing
45 host which has several IP addresses on different interfaces. To turn 45 host which has several IP addresses on different interfaces. To turn
46 rp_filter on use: 46 rp_filter on use:
47 47
48 echo 1 > /proc/sys/net/ipv4/conf/<device>/rp_filter 48 echo 1 > /proc/sys/net/ipv4/conf/<device>/rp_filter
49 or 49 or
50 echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter 50 echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
51 51
52 If unsure, say N here. 52 If unsure, say N here.
53 53
54 choice 54 choice
55 prompt "Choose IP: FIB lookup algorithm (choose FIB_HASH if unsure)" 55 prompt "Choose IP: FIB lookup algorithm (choose FIB_HASH if unsure)"
56 depends on IP_ADVANCED_ROUTER 56 depends on IP_ADVANCED_ROUTER
57 default ASK_IP_FIB_HASH 57 default ASK_IP_FIB_HASH
58 58
59 config ASK_IP_FIB_HASH 59 config ASK_IP_FIB_HASH
60 bool "FIB_HASH" 60 bool "FIB_HASH"
61 ---help--- 61 ---help---
62 Current FIB is very proven and good enough for most users. 62 Current FIB is very proven and good enough for most users.
63 63
64 config IP_FIB_TRIE 64 config IP_FIB_TRIE
65 bool "FIB_TRIE" 65 bool "FIB_TRIE"
66 ---help--- 66 ---help---
67 Use new experimental LC-trie as FIB lookup algorithm. 67 Use new experimental LC-trie as FIB lookup algorithm.
68 This improves lookup performance if you have a large 68 This improves lookup performance if you have a large
69 number of routes. 69 number of routes.
70 70
71 LC-trie is a longest matching prefix lookup algorithm which 71 LC-trie is a longest matching prefix lookup algorithm which
72 performs better than FIB_HASH for large routing tables. 72 performs better than FIB_HASH for large routing tables.
73 But, it consumes more memory and is more complex. 73 But, it consumes more memory and is more complex.
74 74
75 LC-trie is described in: 75 LC-trie is described in:
76 76
77 IP-address lookup using LC-tries. Stefan Nilsson and Gunnar Karlsson 77 IP-address lookup using LC-tries. Stefan Nilsson and Gunnar Karlsson
78 IEEE Journal on Selected Areas in Communications, 17(6):1083-1092, June 1999 78 IEEE Journal on Selected Areas in Communications, 17(6):1083-1092, June 1999
79 An experimental study of compression methods for dynamic tries 79 An experimental study of compression methods for dynamic tries
80 Stefan Nilsson and Matti Tikkanen. Algorithmica, 33(1):19-33, 2002. 80 Stefan Nilsson and Matti Tikkanen. Algorithmica, 33(1):19-33, 2002.
81 http://www.nada.kth.se/~snilsson/public/papers/dyntrie2/ 81 http://www.nada.kth.se/~snilsson/public/papers/dyntrie2/
82 82
83 endchoice 83 endchoice
84 84
85 config IP_FIB_HASH 85 config IP_FIB_HASH
86 def_bool ASK_IP_FIB_HASH || !IP_ADVANCED_ROUTER 86 def_bool ASK_IP_FIB_HASH || !IP_ADVANCED_ROUTER
87 87
88 config IP_FIB_TRIE_STATS 88 config IP_FIB_TRIE_STATS
89 bool "FIB TRIE statistics" 89 bool "FIB TRIE statistics"
90 depends on IP_FIB_TRIE 90 depends on IP_FIB_TRIE
91 ---help--- 91 ---help---
92 Keep track of statistics on structure of FIB TRIE table. 92 Keep track of statistics on structure of FIB TRIE table.
93 Useful for testing and measuring TRIE performance. 93 Useful for testing and measuring TRIE performance.
94 94
95 config IP_MULTIPLE_TABLES 95 config IP_MULTIPLE_TABLES
96 bool "IP: policy routing" 96 bool "IP: policy routing"
97 depends on IP_ADVANCED_ROUTER 97 depends on IP_ADVANCED_ROUTER
98 select FIB_RULES 98 select FIB_RULES
99 ---help--- 99 ---help---
100 Normally, a router decides what to do with a received packet based 100 Normally, a router decides what to do with a received packet based
101 solely on the packet's final destination address. If you say Y here, 101 solely on the packet's final destination address. If you say Y here,
102 the Linux router will also be able to take the packet's source 102 the Linux router will also be able to take the packet's source
103 address into account. Furthermore, the TOS (Type-Of-Service) field 103 address into account. Furthermore, the TOS (Type-Of-Service) field
104 of the packet can be used for routing decisions as well. 104 of the packet can be used for routing decisions as well.
105 105
106 If you are interested in this, please see the preliminary 106 If you are interested in this, please see the preliminary
107 documentation at <http://www.compendium.com.ar/policy-routing.txt> 107 documentation at <http://www.compendium.com.ar/policy-routing.txt>
108 and <ftp://post.tepkom.ru/pub/vol2/Linux/docs/advanced-routing.tex>. 108 and <ftp://post.tepkom.ru/pub/vol2/Linux/docs/advanced-routing.tex>.
109 You will need supporting software from 109 You will need supporting software from
110 <ftp://ftp.tux.org/pub/net/ip-routing/>. 110 <ftp://ftp.tux.org/pub/net/ip-routing/>.
111 111
112 If unsure, say N. 112 If unsure, say N.
113 113
114 config IP_ROUTE_MULTIPATH 114 config IP_ROUTE_MULTIPATH
115 bool "IP: equal cost multipath" 115 bool "IP: equal cost multipath"
116 depends on IP_ADVANCED_ROUTER 116 depends on IP_ADVANCED_ROUTER
117 help 117 help
118 Normally, the routing tables specify a single action to be taken in 118 Normally, the routing tables specify a single action to be taken in
119 a deterministic manner for a given packet. If you say Y here 119 a deterministic manner for a given packet. If you say Y here
120 however, it becomes possible to attach several actions to a packet 120 however, it becomes possible to attach several actions to a packet
121 pattern, in effect specifying several alternative paths to travel 121 pattern, in effect specifying several alternative paths to travel
122 for those packets. The router considers all these paths to be of 122 for those packets. The router considers all these paths to be of
123 equal "cost" and chooses one of them in a non-deterministic fashion 123 equal "cost" and chooses one of them in a non-deterministic fashion
124 if a matching packet arrives. 124 if a matching packet arrives.
125 125
126 config IP_ROUTE_VERBOSE 126 config IP_ROUTE_VERBOSE
127 bool "IP: verbose route monitoring" 127 bool "IP: verbose route monitoring"
128 depends on IP_ADVANCED_ROUTER 128 depends on IP_ADVANCED_ROUTER
129 help 129 help
130 If you say Y here, which is recommended, then the kernel will print 130 If you say Y here, which is recommended, then the kernel will print
131 verbose messages regarding the routing, for example warnings about 131 verbose messages regarding the routing, for example warnings about
132 received packets which look strange and could be evidence of an 132 received packets which look strange and could be evidence of an
133 attack or a misconfigured system somewhere. The information is 133 attack or a misconfigured system somewhere. The information is
134 handled by the klogd daemon which is responsible for kernel messages 134 handled by the klogd daemon which is responsible for kernel messages
135 ("man klogd"). 135 ("man klogd").
136 136
137 config IP_PNP 137 config IP_PNP
138 bool "IP: kernel level autoconfiguration" 138 bool "IP: kernel level autoconfiguration"
139 help 139 help
140 This enables automatic configuration of IP addresses of devices and 140 This enables automatic configuration of IP addresses of devices and
141 of the routing table during kernel boot, based on either information 141 of the routing table during kernel boot, based on either information
142 supplied on the kernel command line or by BOOTP or RARP protocols. 142 supplied on the kernel command line or by BOOTP or RARP protocols.
143 You need to say Y only for diskless machines requiring network 143 You need to say Y only for diskless machines requiring network
144 access to boot (in which case you want to say Y to "Root file system 144 access to boot (in which case you want to say Y to "Root file system
145 on NFS" as well), because all other machines configure the network 145 on NFS" as well), because all other machines configure the network
146 in their startup scripts. 146 in their startup scripts.
147 147
148 config IP_PNP_DHCP 148 config IP_PNP_DHCP
149 bool "IP: DHCP support" 149 bool "IP: DHCP support"
150 depends on IP_PNP 150 depends on IP_PNP
151 ---help--- 151 ---help---
152 If you want your Linux box to mount its whole root file system (the 152 If you want your Linux box to mount its whole root file system (the
153 one containing the directory /) from some other computer over the 153 one containing the directory /) from some other computer over the
154 net via NFS and you want the IP address of your computer to be 154 net via NFS and you want the IP address of your computer to be
155 discovered automatically at boot time using the DHCP protocol (a 155 discovered automatically at boot time using the DHCP protocol (a
156 special protocol designed for doing this job), say Y here. In case 156 special protocol designed for doing this job), say Y here. In case
157 the boot ROM of your network card was designed for booting Linux and 157 the boot ROM of your network card was designed for booting Linux and
158 does DHCP itself, providing all necessary information on the kernel 158 does DHCP itself, providing all necessary information on the kernel
159 command line, you can say N here. 159 command line, you can say N here.
160 160
161 If unsure, say Y. Note that if you want to use DHCP, a DHCP server 161 If unsure, say Y. Note that if you want to use DHCP, a DHCP server
162 must be operating on your network. Read 162 must be operating on your network. Read
163 <file:Documentation/nfsroot.txt> for details. 163 <file:Documentation/filesystems/nfsroot.txt> for details.
164 164
165 config IP_PNP_BOOTP 165 config IP_PNP_BOOTP
166 bool "IP: BOOTP support" 166 bool "IP: BOOTP support"
167 depends on IP_PNP 167 depends on IP_PNP
168 ---help--- 168 ---help---
169 If you want your Linux box to mount its whole root file system (the 169 If you want your Linux box to mount its whole root file system (the
170 one containing the directory /) from some other computer over the 170 one containing the directory /) from some other computer over the
171 net via NFS and you want the IP address of your computer to be 171 net via NFS and you want the IP address of your computer to be
172 discovered automatically at boot time using the BOOTP protocol (a 172 discovered automatically at boot time using the BOOTP protocol (a
173 special protocol designed for doing this job), say Y here. In case 173 special protocol designed for doing this job), say Y here. In case
174 the boot ROM of your network card was designed for booting Linux and 174 the boot ROM of your network card was designed for booting Linux and
175 does BOOTP itself, providing all necessary information on the kernel 175 does BOOTP itself, providing all necessary information on the kernel
176 command line, you can say N here. If unsure, say Y. Note that if you 176 command line, you can say N here. If unsure, say Y. Note that if you
177 want to use BOOTP, a BOOTP server must be operating on your network. 177 want to use BOOTP, a BOOTP server must be operating on your network.
178 Read <file:Documentation/nfsroot.txt> for details. 178 Read <file:Documentation/filesystems/nfsroot.txt> for details.
179 179
180 config IP_PNP_RARP 180 config IP_PNP_RARP
181 bool "IP: RARP support" 181 bool "IP: RARP support"
182 depends on IP_PNP 182 depends on IP_PNP
183 help 183 help
184 If you want your Linux box to mount its whole root file system (the 184 If you want your Linux box to mount its whole root file system (the
185 one containing the directory /) from some other computer over the 185 one containing the directory /) from some other computer over the
186 net via NFS and you want the IP address of your computer to be 186 net via NFS and you want the IP address of your computer to be
187 discovered automatically at boot time using the RARP protocol (an 187 discovered automatically at boot time using the RARP protocol (an
188 older protocol which is being obsoleted by BOOTP and DHCP), say Y 188 older protocol which is being obsoleted by BOOTP and DHCP), say Y
189 here. Note that if you want to use RARP, a RARP server must be 189 here. Note that if you want to use RARP, a RARP server must be
190 operating on your network. Read <file:Documentation/nfsroot.txt> for 190 operating on your network. Read
191 details. 191 <file:Documentation/filesystems/nfsroot.txt> for details.
192 192
193 # not yet ready.. 193 # not yet ready..
194 # bool ' IP: ARP support' CONFIG_IP_PNP_ARP 194 # bool ' IP: ARP support' CONFIG_IP_PNP_ARP
195 config NET_IPIP 195 config NET_IPIP
196 tristate "IP: tunneling" 196 tristate "IP: tunneling"
197 select INET_TUNNEL 197 select INET_TUNNEL
198 ---help--- 198 ---help---
199 Tunneling means encapsulating data of one protocol type within 199 Tunneling means encapsulating data of one protocol type within
200 another protocol and sending it over a channel that understands the 200 another protocol and sending it over a channel that understands the
201 encapsulating protocol. This particular tunneling driver implements 201 encapsulating protocol. This particular tunneling driver implements
202 encapsulation of IP within IP, which sounds kind of pointless, but 202 encapsulation of IP within IP, which sounds kind of pointless, but
203 can be useful if you want to make your (or some other) machine 203 can be useful if you want to make your (or some other) machine
204 appear on a different network than it physically is, or to use 204 appear on a different network than it physically is, or to use
205 mobile-IP facilities (allowing laptops to seamlessly move between 205 mobile-IP facilities (allowing laptops to seamlessly move between
206 networks without changing their IP addresses). 206 networks without changing their IP addresses).
207 207
208 Saying Y to this option will produce two modules ( = code which can 208 Saying Y to this option will produce two modules ( = code which can
209 be inserted in and removed from the running kernel whenever you 209 be inserted in and removed from the running kernel whenever you
210 want). Most people won't need this and can say N. 210 want). Most people won't need this and can say N.
211 211
212 config NET_IPGRE 212 config NET_IPGRE
213 tristate "IP: GRE tunnels over IP" 213 tristate "IP: GRE tunnels over IP"
214 help 214 help
215 Tunneling means encapsulating data of one protocol type within 215 Tunneling means encapsulating data of one protocol type within
216 another protocol and sending it over a channel that understands the 216 another protocol and sending it over a channel that understands the
217 encapsulating protocol. This particular tunneling driver implements 217 encapsulating protocol. This particular tunneling driver implements
218 GRE (Generic Routing Encapsulation) and at this time allows 218 GRE (Generic Routing Encapsulation) and at this time allows
219 encapsulating of IPv4 or IPv6 over existing IPv4 infrastructure. 219 encapsulating of IPv4 or IPv6 over existing IPv4 infrastructure.
220 This driver is useful if the other endpoint is a Cisco router: Cisco 220 This driver is useful if the other endpoint is a Cisco router: Cisco
221 likes GRE much better than the other Linux tunneling driver ("IP 221 likes GRE much better than the other Linux tunneling driver ("IP
222 tunneling" above). In addition, GRE allows multicast redistribution 222 tunneling" above). In addition, GRE allows multicast redistribution
223 through the tunnel. 223 through the tunnel.
224 224
225 config NET_IPGRE_BROADCAST 225 config NET_IPGRE_BROADCAST
226 bool "IP: broadcast GRE over IP" 226 bool "IP: broadcast GRE over IP"
227 depends on IP_MULTICAST && NET_IPGRE 227 depends on IP_MULTICAST && NET_IPGRE
228 help 228 help
229 One application of GRE/IP is to construct a broadcast WAN (Wide Area 229 One application of GRE/IP is to construct a broadcast WAN (Wide Area
230 Network), which looks like a normal Ethernet LAN (Local Area 230 Network), which looks like a normal Ethernet LAN (Local Area
231 Network), but can be distributed all over the Internet. If you want 231 Network), but can be distributed all over the Internet. If you want
232 to do that, say Y here and to "IP multicast routing" below. 232 to do that, say Y here and to "IP multicast routing" below.
233 233
234 config IP_MROUTE 234 config IP_MROUTE
235 bool "IP: multicast routing" 235 bool "IP: multicast routing"
236 depends on IP_MULTICAST 236 depends on IP_MULTICAST
237 help 237 help
238 This is used if you want your machine to act as a router for IP 238 This is used if you want your machine to act as a router for IP
239 packets that have several destination addresses. It is needed on the 239 packets that have several destination addresses. It is needed on the
240 MBONE, a high bandwidth network on top of the Internet which carries 240 MBONE, a high bandwidth network on top of the Internet which carries
241 audio and video broadcasts. In order to do that, you would most 241 audio and video broadcasts. In order to do that, you would most
242 likely run the program mrouted. Information about the multicast 242 likely run the program mrouted. Information about the multicast
243 capabilities of the various network cards is contained in 243 capabilities of the various network cards is contained in
244 <file:Documentation/networking/multicast.txt>. If you haven't heard 244 <file:Documentation/networking/multicast.txt>. If you haven't heard
245 about it, you don't need it. 245 about it, you don't need it.
246 246
247 config IP_PIMSM_V1 247 config IP_PIMSM_V1
248 bool "IP: PIM-SM version 1 support" 248 bool "IP: PIM-SM version 1 support"
249 depends on IP_MROUTE 249 depends on IP_MROUTE
250 help 250 help
251 Kernel side support for Sparse Mode PIM (Protocol Independent 251 Kernel side support for Sparse Mode PIM (Protocol Independent
252 Multicast) version 1. This multicast routing protocol is used widely 252 Multicast) version 1. This multicast routing protocol is used widely
253 because Cisco supports it. You need special software to use it 253 because Cisco supports it. You need special software to use it
254 (pimd-v1). Please see <http://netweb.usc.edu/pim/> for more 254 (pimd-v1). Please see <http://netweb.usc.edu/pim/> for more
255 information about PIM. 255 information about PIM.
256 256
257 Say Y if you want to use PIM-SM v1. Note that you can say N here if 257 Say Y if you want to use PIM-SM v1. Note that you can say N here if
258 you just want to use Dense Mode PIM. 258 you just want to use Dense Mode PIM.
259 259
260 config IP_PIMSM_V2 260 config IP_PIMSM_V2
261 bool "IP: PIM-SM version 2 support" 261 bool "IP: PIM-SM version 2 support"
262 depends on IP_MROUTE 262 depends on IP_MROUTE
263 help 263 help
264 Kernel side support for Sparse Mode PIM version 2. In order to use 264 Kernel side support for Sparse Mode PIM version 2. In order to use
265 this, you need an experimental routing daemon supporting it (pimd or 265 this, you need an experimental routing daemon supporting it (pimd or
266 gated-5). This routing protocol is not used widely, so say N unless 266 gated-5). This routing protocol is not used widely, so say N unless
267 you want to play with it. 267 you want to play with it.
268 268
269 config ARPD 269 config ARPD
270 bool "IP: ARP daemon support (EXPERIMENTAL)" 270 bool "IP: ARP daemon support (EXPERIMENTAL)"
271 depends on EXPERIMENTAL 271 depends on EXPERIMENTAL
272 ---help--- 272 ---help---
273 Normally, the kernel maintains an internal cache which maps IP 273 Normally, the kernel maintains an internal cache which maps IP
274 addresses to hardware addresses on the local network, so that 274 addresses to hardware addresses on the local network, so that
275 Ethernet/Token Ring/ etc. frames are sent to the proper address on 275 Ethernet/Token Ring/ etc. frames are sent to the proper address on
276 the physical networking layer. For small networks having a few 276 the physical networking layer. For small networks having a few
277 hundred directly connected hosts or less, keeping this address 277 hundred directly connected hosts or less, keeping this address
278 resolution (ARP) cache inside the kernel works well. However, 278 resolution (ARP) cache inside the kernel works well. However,
279 maintaining an internal ARP cache does not work well for very large 279 maintaining an internal ARP cache does not work well for very large
280 switched networks, and will use a lot of kernel memory if TCP/IP 280 switched networks, and will use a lot of kernel memory if TCP/IP
281 connections are made to many machines on the network. 281 connections are made to many machines on the network.
282 282
283 If you say Y here, the kernel's internal ARP cache will never grow 283 If you say Y here, the kernel's internal ARP cache will never grow
284 to more than 256 entries (the oldest entries are expired in a LIFO 284 to more than 256 entries (the oldest entries are expired in a LIFO
285 manner) and communication will be attempted with the user space ARP 285 manner) and communication will be attempted with the user space ARP
286 daemon arpd. Arpd then answers the address resolution request either 286 daemon arpd. Arpd then answers the address resolution request either
287 from its own cache or by asking the net. 287 from its own cache or by asking the net.
288 288
289 This code is experimental and also obsolete. If you want to use it, 289 This code is experimental and also obsolete. If you want to use it,
290 you need to find a version of the daemon arpd on the net somewhere, 290 you need to find a version of the daemon arpd on the net somewhere,
291 and you should also say Y to "Kernel/User network link driver", 291 and you should also say Y to "Kernel/User network link driver",
292 below. If unsure, say N. 292 below. If unsure, say N.
293 293
294 config SYN_COOKIES 294 config SYN_COOKIES
295 bool "IP: TCP syncookie support (disabled per default)" 295 bool "IP: TCP syncookie support (disabled per default)"
296 ---help--- 296 ---help---
297 Normal TCP/IP networking is open to an attack known as "SYN 297 Normal TCP/IP networking is open to an attack known as "SYN
298 flooding". This denial-of-service attack prevents legitimate remote 298 flooding". This denial-of-service attack prevents legitimate remote
299 users from being able to connect to your computer during an ongoing 299 users from being able to connect to your computer during an ongoing
300 attack and requires very little work from the attacker, who can 300 attack and requires very little work from the attacker, who can
301 operate from anywhere on the Internet. 301 operate from anywhere on the Internet.
302 302
303 SYN cookies provide protection against this type of attack. If you 303 SYN cookies provide protection against this type of attack. If you
304 say Y here, the TCP/IP stack will use a cryptographic challenge 304 say Y here, the TCP/IP stack will use a cryptographic challenge
305 protocol known as "SYN cookies" to enable legitimate users to 305 protocol known as "SYN cookies" to enable legitimate users to
306 continue to connect, even when your machine is under attack. There 306 continue to connect, even when your machine is under attack. There
307 is no need for the legitimate users to change their TCP/IP software; 307 is no need for the legitimate users to change their TCP/IP software;
308 SYN cookies work transparently to them. For technical information 308 SYN cookies work transparently to them. For technical information
309 about SYN cookies, check out <http://cr.yp.to/syncookies.html>. 309 about SYN cookies, check out <http://cr.yp.to/syncookies.html>.
310 310
311 If you are SYN flooded, the source address reported by the kernel is 311 If you are SYN flooded, the source address reported by the kernel is
312 likely to have been forged by the attacker; it is only reported as 312 likely to have been forged by the attacker; it is only reported as
313 an aid in tracing the packets to their actual source and should not 313 an aid in tracing the packets to their actual source and should not
314 be taken as absolute truth. 314 be taken as absolute truth.
315 315
316 SYN cookies may prevent correct error reporting on clients when the 316 SYN cookies may prevent correct error reporting on clients when the
317 server is really overloaded. If this happens frequently better turn 317 server is really overloaded. If this happens frequently better turn
318 them off. 318 them off.
319 319
320 If you say Y here, note that SYN cookies aren't enabled by default; 320 If you say Y here, note that SYN cookies aren't enabled by default;
321 you can enable them by saying Y to "/proc file system support" and 321 you can enable them by saying Y to "/proc file system support" and
322 "Sysctl support" below and executing the command 322 "Sysctl support" below and executing the command
323 323
324 echo 1 >/proc/sys/net/ipv4/tcp_syncookies 324 echo 1 >/proc/sys/net/ipv4/tcp_syncookies
325 325
326 at boot time after the /proc file system has been mounted. 326 at boot time after the /proc file system has been mounted.
327 327
328 If unsure, say N. 328 If unsure, say N.
329 329
330 config INET_AH 330 config INET_AH
331 tristate "IP: AH transformation" 331 tristate "IP: AH transformation"
332 select XFRM 332 select XFRM
333 select CRYPTO 333 select CRYPTO
334 select CRYPTO_HMAC 334 select CRYPTO_HMAC
335 select CRYPTO_MD5 335 select CRYPTO_MD5
336 select CRYPTO_SHA1 336 select CRYPTO_SHA1
337 ---help--- 337 ---help---
338 Support for IPsec AH. 338 Support for IPsec AH.
339 339
340 If unsure, say Y. 340 If unsure, say Y.
341 341
342 config INET_ESP 342 config INET_ESP
343 tristate "IP: ESP transformation" 343 tristate "IP: ESP transformation"
344 select XFRM 344 select XFRM
345 select CRYPTO 345 select CRYPTO
346 select CRYPTO_AUTHENC 346 select CRYPTO_AUTHENC
347 select CRYPTO_HMAC 347 select CRYPTO_HMAC
348 select CRYPTO_MD5 348 select CRYPTO_MD5
349 select CRYPTO_CBC 349 select CRYPTO_CBC
350 select CRYPTO_SHA1 350 select CRYPTO_SHA1
351 select CRYPTO_DES 351 select CRYPTO_DES
352 ---help--- 352 ---help---
353 Support for IPsec ESP. 353 Support for IPsec ESP.
354 354
355 If unsure, say Y. 355 If unsure, say Y.
356 356
357 config INET_IPCOMP 357 config INET_IPCOMP
358 tristate "IP: IPComp transformation" 358 tristate "IP: IPComp transformation"
359 select XFRM 359 select XFRM
360 select INET_XFRM_TUNNEL 360 select INET_XFRM_TUNNEL
361 select CRYPTO 361 select CRYPTO
362 select CRYPTO_DEFLATE 362 select CRYPTO_DEFLATE
363 ---help--- 363 ---help---
364 Support for IP Payload Compression Protocol (IPComp) (RFC3173), 364 Support for IP Payload Compression Protocol (IPComp) (RFC3173),
365 typically needed for IPsec. 365 typically needed for IPsec.
366 366
367 If unsure, say Y. 367 If unsure, say Y.
368 368
369 config INET_XFRM_TUNNEL 369 config INET_XFRM_TUNNEL
370 tristate 370 tristate
371 select INET_TUNNEL 371 select INET_TUNNEL
372 default n 372 default n
373 373
374 config INET_TUNNEL 374 config INET_TUNNEL
375 tristate 375 tristate
376 default n 376 default n
377 377
378 config INET_XFRM_MODE_TRANSPORT 378 config INET_XFRM_MODE_TRANSPORT
379 tristate "IP: IPsec transport mode" 379 tristate "IP: IPsec transport mode"
380 default y 380 default y
381 select XFRM 381 select XFRM
382 ---help--- 382 ---help---
383 Support for IPsec transport mode. 383 Support for IPsec transport mode.
384 384
385 If unsure, say Y. 385 If unsure, say Y.
386 386
387 config INET_XFRM_MODE_TUNNEL 387 config INET_XFRM_MODE_TUNNEL
388 tristate "IP: IPsec tunnel mode" 388 tristate "IP: IPsec tunnel mode"
389 default y 389 default y
390 select XFRM 390 select XFRM
391 ---help--- 391 ---help---
392 Support for IPsec tunnel mode. 392 Support for IPsec tunnel mode.
393 393
394 If unsure, say Y. 394 If unsure, say Y.
395 395
396 config INET_XFRM_MODE_BEET 396 config INET_XFRM_MODE_BEET
397 tristate "IP: IPsec BEET mode" 397 tristate "IP: IPsec BEET mode"
398 default y 398 default y
399 select XFRM 399 select XFRM
400 ---help--- 400 ---help---
401 Support for IPsec BEET mode. 401 Support for IPsec BEET mode.
402 402
403 If unsure, say Y. 403 If unsure, say Y.
404 404
405 config INET_LRO 405 config INET_LRO
406 tristate "Large Receive Offload (ipv4/tcp)" 406 tristate "Large Receive Offload (ipv4/tcp)"
407 407
408 ---help--- 408 ---help---
409 Support for Large Receive Offload (ipv4/tcp). 409 Support for Large Receive Offload (ipv4/tcp).
410 410
411 If unsure, say Y. 411 If unsure, say Y.
412 412
413 config INET_DIAG 413 config INET_DIAG
414 tristate "INET: socket monitoring interface" 414 tristate "INET: socket monitoring interface"
415 default y 415 default y
416 ---help--- 416 ---help---
417 Support for INET (TCP, DCCP, etc) socket monitoring interface used by 417 Support for INET (TCP, DCCP, etc) socket monitoring interface used by
418 native Linux tools such as ss. ss is included in iproute2, currently 418 native Linux tools such as ss. ss is included in iproute2, currently
419 downloadable at <http://linux-net.osdl.org/index.php/Iproute2>. 419 downloadable at <http://linux-net.osdl.org/index.php/Iproute2>.
420 420
421 If unsure, say Y. 421 If unsure, say Y.
422 422
423 config INET_TCP_DIAG 423 config INET_TCP_DIAG
424 depends on INET_DIAG 424 depends on INET_DIAG
425 def_tristate INET_DIAG 425 def_tristate INET_DIAG
426 426
427 menuconfig TCP_CONG_ADVANCED 427 menuconfig TCP_CONG_ADVANCED
428 bool "TCP: advanced congestion control" 428 bool "TCP: advanced congestion control"
429 ---help--- 429 ---help---
430 Support for selection of various TCP congestion control 430 Support for selection of various TCP congestion control
431 modules. 431 modules.
432 432
433 Nearly all users can safely say no here, and a safe default 433 Nearly all users can safely say no here, and a safe default
434 selection will be made (CUBIC with new Reno as a fallback). 434 selection will be made (CUBIC with new Reno as a fallback).
435 435
436 If unsure, say N. 436 If unsure, say N.
437 437
438 if TCP_CONG_ADVANCED 438 if TCP_CONG_ADVANCED
439 439
440 config TCP_CONG_BIC 440 config TCP_CONG_BIC
441 tristate "Binary Increase Congestion (BIC) control" 441 tristate "Binary Increase Congestion (BIC) control"
442 default m 442 default m
443 ---help--- 443 ---help---
444 BIC-TCP is a sender-side only change that ensures a linear RTT 444 BIC-TCP is a sender-side only change that ensures a linear RTT
445 fairness under large windows while offering both scalability and 445 fairness under large windows while offering both scalability and
446 bounded TCP-friendliness. The protocol combines two schemes 446 bounded TCP-friendliness. The protocol combines two schemes
447 called additive increase and binary search increase. When the 447 called additive increase and binary search increase. When the
448 congestion window is large, additive increase with a large 448 congestion window is large, additive increase with a large
449 increment ensures linear RTT fairness as well as good 449 increment ensures linear RTT fairness as well as good
450 scalability. Under small congestion windows, binary search 450 scalability. Under small congestion windows, binary search
451 increase provides TCP friendliness. 451 increase provides TCP friendliness.
452 See http://www.csc.ncsu.edu/faculty/rhee/export/bitcp/ 452 See http://www.csc.ncsu.edu/faculty/rhee/export/bitcp/
453 453
454 config TCP_CONG_CUBIC 454 config TCP_CONG_CUBIC
455 tristate "CUBIC TCP" 455 tristate "CUBIC TCP"
456 default y 456 default y
457 ---help--- 457 ---help---
458 This is version 2.0 of BIC-TCP which uses a cubic growth function 458 This is version 2.0 of BIC-TCP which uses a cubic growth function
459 among other techniques. 459 among other techniques.
460 See http://www.csc.ncsu.edu/faculty/rhee/export/bitcp/cubic-paper.pdf 460 See http://www.csc.ncsu.edu/faculty/rhee/export/bitcp/cubic-paper.pdf
461 461
462 config TCP_CONG_WESTWOOD 462 config TCP_CONG_WESTWOOD
463 tristate "TCP Westwood+" 463 tristate "TCP Westwood+"
464 default m 464 default m
465 ---help--- 465 ---help---
466 TCP Westwood+ is a sender-side only modification of the TCP Reno 466 TCP Westwood+ is a sender-side only modification of the TCP Reno
467 protocol stack that optimizes the performance of TCP congestion 467 protocol stack that optimizes the performance of TCP congestion
468 control. It is based on end-to-end bandwidth estimation to set 468 control. It is based on end-to-end bandwidth estimation to set
469 congestion window and slow start threshold after a congestion 469 congestion window and slow start threshold after a congestion
470 episode. Using this estimation, TCP Westwood+ adaptively sets a 470 episode. Using this estimation, TCP Westwood+ adaptively sets a
471 slow start threshold and a congestion window which takes into 471 slow start threshold and a congestion window which takes into
472 account the bandwidth used at the time congestion is experienced. 472 account the bandwidth used at the time congestion is experienced.
473 TCP Westwood+ significantly increases fairness wrt TCP Reno in 473 TCP Westwood+ significantly increases fairness wrt TCP Reno in
474 wired networks and throughput over wireless links. 474 wired networks and throughput over wireless links.
475 475
476 config TCP_CONG_HTCP 476 config TCP_CONG_HTCP
477 tristate "H-TCP" 477 tristate "H-TCP"
478 default m 478 default m
479 ---help--- 479 ---help---
480 H-TCP is a send-side only modifications of the TCP Reno 480 H-TCP is a send-side only modifications of the TCP Reno
481 protocol stack that optimizes the performance of TCP 481 protocol stack that optimizes the performance of TCP
482 congestion control for high speed network links. It uses a 482 congestion control for high speed network links. It uses a
483 modeswitch to change the alpha and beta parameters of TCP Reno 483 modeswitch to change the alpha and beta parameters of TCP Reno
484 based on network conditions and in a way so as to be fair with 484 based on network conditions and in a way so as to be fair with
485 other Reno and H-TCP flows. 485 other Reno and H-TCP flows.
486 486
487 config TCP_CONG_HSTCP 487 config TCP_CONG_HSTCP
488 tristate "High Speed TCP" 488 tristate "High Speed TCP"
489 depends on EXPERIMENTAL 489 depends on EXPERIMENTAL
490 default n 490 default n
491 ---help--- 491 ---help---
492 Sally Floyd's High Speed TCP (RFC 3649) congestion control. 492 Sally Floyd's High Speed TCP (RFC 3649) congestion control.
493 A modification to TCP's congestion control mechanism for use 493 A modification to TCP's congestion control mechanism for use
494 with large congestion windows. A table indicates how much to 494 with large congestion windows. A table indicates how much to
495 increase the congestion window by when an ACK is received. 495 increase the congestion window by when an ACK is received.
496 For more detail see http://www.icir.org/floyd/hstcp.html 496 For more detail see http://www.icir.org/floyd/hstcp.html
497 497
498 config TCP_CONG_HYBLA 498 config TCP_CONG_HYBLA
499 tristate "TCP-Hybla congestion control algorithm" 499 tristate "TCP-Hybla congestion control algorithm"
500 depends on EXPERIMENTAL 500 depends on EXPERIMENTAL
501 default n 501 default n
502 ---help--- 502 ---help---
503 TCP-Hybla is a sender-side only change that eliminates penalization of 503 TCP-Hybla is a sender-side only change that eliminates penalization of
504 long-RTT, large-bandwidth connections, like when satellite legs are 504 long-RTT, large-bandwidth connections, like when satellite legs are
505 involved, especially when sharing a common bottleneck with normal 505 involved, especially when sharing a common bottleneck with normal
506 terrestrial connections. 506 terrestrial connections.
507 507
508 config TCP_CONG_VEGAS 508 config TCP_CONG_VEGAS
509 tristate "TCP Vegas" 509 tristate "TCP Vegas"
510 depends on EXPERIMENTAL 510 depends on EXPERIMENTAL
511 default n 511 default n
512 ---help--- 512 ---help---
513 TCP Vegas is a sender-side only change to TCP that anticipates 513 TCP Vegas is a sender-side only change to TCP that anticipates
514 the onset of congestion by estimating the bandwidth. TCP Vegas 514 the onset of congestion by estimating the bandwidth. TCP Vegas
515 adjusts the sending rate by modifying the congestion 515 adjusts the sending rate by modifying the congestion
516 window. TCP Vegas should provide less packet loss, but it is 516 window. TCP Vegas should provide less packet loss, but it is
517 not as aggressive as TCP Reno. 517 not as aggressive as TCP Reno.
518 518
519 config TCP_CONG_SCALABLE 519 config TCP_CONG_SCALABLE
520 tristate "Scalable TCP" 520 tristate "Scalable TCP"
521 depends on EXPERIMENTAL 521 depends on EXPERIMENTAL
522 default n 522 default n
523 ---help--- 523 ---help---
524 Scalable TCP is a sender-side only change to TCP which uses a 524 Scalable TCP is a sender-side only change to TCP which uses a
525 MIMD congestion control algorithm which has some nice scaling 525 MIMD congestion control algorithm which has some nice scaling
526 properties, though is known to have fairness issues. 526 properties, though is known to have fairness issues.
527 See http://www.deneholme.net/tom/scalable/ 527 See http://www.deneholme.net/tom/scalable/
528 528
529 config TCP_CONG_LP 529 config TCP_CONG_LP
530 tristate "TCP Low Priority" 530 tristate "TCP Low Priority"
531 depends on EXPERIMENTAL 531 depends on EXPERIMENTAL
532 default n 532 default n
533 ---help--- 533 ---help---
534 TCP Low Priority (TCP-LP), a distributed algorithm whose goal is 534 TCP Low Priority (TCP-LP), a distributed algorithm whose goal is
535 to utilize only the excess network bandwidth as compared to the 535 to utilize only the excess network bandwidth as compared to the
536 ``fair share`` of bandwidth as targeted by TCP. 536 ``fair share`` of bandwidth as targeted by TCP.
537 See http://www-ece.rice.edu/networks/TCP-LP/ 537 See http://www-ece.rice.edu/networks/TCP-LP/
538 538
539 config TCP_CONG_VENO 539 config TCP_CONG_VENO
540 tristate "TCP Veno" 540 tristate "TCP Veno"
541 depends on EXPERIMENTAL 541 depends on EXPERIMENTAL
542 default n 542 default n
543 ---help--- 543 ---help---
544 TCP Veno is a sender-side only enhancement of TCP to obtain better 544 TCP Veno is a sender-side only enhancement of TCP to obtain better
545 throughput over wireless networks. TCP Veno makes use of state 545 throughput over wireless networks. TCP Veno makes use of state
546 distinguishing to circumvent the difficult judgment of the packet loss 546 distinguishing to circumvent the difficult judgment of the packet loss
547 type. TCP Veno cuts down less congestion window in response to random 547 type. TCP Veno cuts down less congestion window in response to random
548 loss packets. 548 loss packets.
549 See http://www.ntu.edu.sg/home5/ZHOU0022/papers/CPFu03a.pdf 549 See http://www.ntu.edu.sg/home5/ZHOU0022/papers/CPFu03a.pdf
550 550
551 config TCP_CONG_YEAH 551 config TCP_CONG_YEAH
552 tristate "YeAH TCP" 552 tristate "YeAH TCP"
553 depends on EXPERIMENTAL 553 depends on EXPERIMENTAL
554 select TCP_CONG_VEGAS 554 select TCP_CONG_VEGAS
555 default n 555 default n
556 ---help--- 556 ---help---
557 YeAH-TCP is a sender-side high-speed enabled TCP congestion control 557 YeAH-TCP is a sender-side high-speed enabled TCP congestion control
558 algorithm, which uses a mixed loss/delay approach to compute the 558 algorithm, which uses a mixed loss/delay approach to compute the
559 congestion window. It's design goals target high efficiency, 559 congestion window. It's design goals target high efficiency,
560 internal, RTT and Reno fairness, resilience to link loss while 560 internal, RTT and Reno fairness, resilience to link loss while
561 keeping network elements load as low as possible. 561 keeping network elements load as low as possible.
562 562
563 For further details look here: 563 For further details look here:
564 http://wil.cs.caltech.edu/pfldnet2007/paper/YeAH_TCP.pdf 564 http://wil.cs.caltech.edu/pfldnet2007/paper/YeAH_TCP.pdf
565 565
566 config TCP_CONG_ILLINOIS 566 config TCP_CONG_ILLINOIS
567 tristate "TCP Illinois" 567 tristate "TCP Illinois"
568 depends on EXPERIMENTAL 568 depends on EXPERIMENTAL
569 default n 569 default n
570 ---help--- 570 ---help---
571 TCP-Illinois is a sender-side modification of TCP Reno for 571 TCP-Illinois is a sender-side modification of TCP Reno for
572 high speed long delay links. It uses round-trip-time to 572 high speed long delay links. It uses round-trip-time to
573 adjust the alpha and beta parameters to achieve a higher average 573 adjust the alpha and beta parameters to achieve a higher average
574 throughput and maintain fairness. 574 throughput and maintain fairness.
575 575
576 For further details see: 576 For further details see:
577 http://www.ews.uiuc.edu/~shaoliu/tcpillinois/index.html 577 http://www.ews.uiuc.edu/~shaoliu/tcpillinois/index.html
578 578
579 choice 579 choice
580 prompt "Default TCP congestion control" 580 prompt "Default TCP congestion control"
581 default DEFAULT_CUBIC 581 default DEFAULT_CUBIC
582 help 582 help
583 Select the TCP congestion control that will be used by default 583 Select the TCP congestion control that will be used by default
584 for all connections. 584 for all connections.
585 585
586 config DEFAULT_BIC 586 config DEFAULT_BIC
587 bool "Bic" if TCP_CONG_BIC=y 587 bool "Bic" if TCP_CONG_BIC=y
588 588
589 config DEFAULT_CUBIC 589 config DEFAULT_CUBIC
590 bool "Cubic" if TCP_CONG_CUBIC=y 590 bool "Cubic" if TCP_CONG_CUBIC=y
591 591
592 config DEFAULT_HTCP 592 config DEFAULT_HTCP
593 bool "Htcp" if TCP_CONG_HTCP=y 593 bool "Htcp" if TCP_CONG_HTCP=y
594 594
595 config DEFAULT_VEGAS 595 config DEFAULT_VEGAS
596 bool "Vegas" if TCP_CONG_VEGAS=y 596 bool "Vegas" if TCP_CONG_VEGAS=y
597 597
598 config DEFAULT_WESTWOOD 598 config DEFAULT_WESTWOOD
599 bool "Westwood" if TCP_CONG_WESTWOOD=y 599 bool "Westwood" if TCP_CONG_WESTWOOD=y
600 600
601 config DEFAULT_RENO 601 config DEFAULT_RENO
602 bool "Reno" 602 bool "Reno"
603 603
604 endchoice 604 endchoice
605 605
606 endif 606 endif
607 607
608 config TCP_CONG_CUBIC 608 config TCP_CONG_CUBIC
609 tristate 609 tristate
610 depends on !TCP_CONG_ADVANCED 610 depends on !TCP_CONG_ADVANCED
611 default y 611 default y
612 612
613 config DEFAULT_TCP_CONG 613 config DEFAULT_TCP_CONG
614 string 614 string
615 default "bic" if DEFAULT_BIC 615 default "bic" if DEFAULT_BIC
616 default "cubic" if DEFAULT_CUBIC 616 default "cubic" if DEFAULT_CUBIC
617 default "htcp" if DEFAULT_HTCP 617 default "htcp" if DEFAULT_HTCP
618 default "vegas" if DEFAULT_VEGAS 618 default "vegas" if DEFAULT_VEGAS
619 default "westwood" if DEFAULT_WESTWOOD 619 default "westwood" if DEFAULT_WESTWOOD
620 default "reno" if DEFAULT_RENO 620 default "reno" if DEFAULT_RENO
621 default "cubic" 621 default "cubic"
622 622
623 config TCP_MD5SIG 623 config TCP_MD5SIG
624 bool "TCP: MD5 Signature Option support (RFC2385) (EXPERIMENTAL)" 624 bool "TCP: MD5 Signature Option support (RFC2385) (EXPERIMENTAL)"
625 depends on EXPERIMENTAL 625 depends on EXPERIMENTAL
626 select CRYPTO 626 select CRYPTO
627 select CRYPTO_MD5 627 select CRYPTO_MD5
628 ---help--- 628 ---help---
629 RFC2385 specifies a method of giving MD5 protection to TCP sessions. 629 RFC2385 specifies a method of giving MD5 protection to TCP sessions.
630 Its main (only?) use is to protect BGP sessions between core routers 630 Its main (only?) use is to protect BGP sessions between core routers
631 on the Internet. 631 on the Internet.
632 632
633 If unsure, say N. 633 If unsure, say N.
634 634
635 source "net/ipv4/ipvs/Kconfig" 635 source "net/ipv4/ipvs/Kconfig"
636 636
637 637
1 /* 1 /*
2 * $Id: ipconfig.c,v 1.46 2002/02/01 22:01:04 davem Exp $ 2 * $Id: ipconfig.c,v 1.46 2002/02/01 22:01:04 davem Exp $
3 * 3 *
4 * Automatic Configuration of IP -- use DHCP, BOOTP, RARP, or 4 * Automatic Configuration of IP -- use DHCP, BOOTP, RARP, or
5 * user-supplied information to configure own IP address and routes. 5 * user-supplied information to configure own IP address and routes.
6 * 6 *
7 * Copyright (C) 1996-1998 Martin Mares <mj@atrey.karlin.mff.cuni.cz> 7 * Copyright (C) 1996-1998 Martin Mares <mj@atrey.karlin.mff.cuni.cz>
8 * 8 *
9 * Derived from network configuration code in fs/nfs/nfsroot.c, 9 * Derived from network configuration code in fs/nfs/nfsroot.c,
10 * originally Copyright (C) 1995, 1996 Gero Kuhlmann and me. 10 * originally Copyright (C) 1995, 1996 Gero Kuhlmann and me.
11 * 11 *
12 * BOOTP rewritten to construct and analyse packets itself instead 12 * BOOTP rewritten to construct and analyse packets itself instead
13 * of misusing the IP layer. num_bugs_causing_wrong_arp_replies--; 13 * of misusing the IP layer. num_bugs_causing_wrong_arp_replies--;
14 * -- MJ, December 1998 14 * -- MJ, December 1998
15 * 15 *
16 * Fixed ip_auto_config_setup calling at startup in the new "Linker Magic" 16 * Fixed ip_auto_config_setup calling at startup in the new "Linker Magic"
17 * initialization scheme. 17 * initialization scheme.
18 * - Arnaldo Carvalho de Melo <acme@conectiva.com.br>, 08/11/1999 18 * - Arnaldo Carvalho de Melo <acme@conectiva.com.br>, 08/11/1999
19 * 19 *
20 * DHCP support added. To users this looks like a whole separate 20 * DHCP support added. To users this looks like a whole separate
21 * protocol, but we know it's just a bag on the side of BOOTP. 21 * protocol, but we know it's just a bag on the side of BOOTP.
22 * -- Chip Salzenberg <chip@valinux.com>, May 2000 22 * -- Chip Salzenberg <chip@valinux.com>, May 2000
23 * 23 *
24 * Ported DHCP support from 2.2.16 to 2.4.0-test4 24 * Ported DHCP support from 2.2.16 to 2.4.0-test4
25 * -- Eric Biederman <ebiederman@lnxi.com>, 30 Aug 2000 25 * -- Eric Biederman <ebiederman@lnxi.com>, 30 Aug 2000
26 * 26 *
27 * Merged changes from 2.2.19 into 2.4.3 27 * Merged changes from 2.2.19 into 2.4.3
28 * -- Eric Biederman <ebiederman@lnxi.com>, 22 April Aug 2001 28 * -- Eric Biederman <ebiederman@lnxi.com>, 22 April Aug 2001
29 * 29 *
30 * Multiple Nameservers in /proc/net/pnp 30 * Multiple Nameservers in /proc/net/pnp
31 * -- Josef Siemes <jsiemes@web.de>, Aug 2002 31 * -- Josef Siemes <jsiemes@web.de>, Aug 2002
32 */ 32 */
33 33
34 #include <linux/types.h> 34 #include <linux/types.h>
35 #include <linux/string.h> 35 #include <linux/string.h>
36 #include <linux/kernel.h> 36 #include <linux/kernel.h>
37 #include <linux/jiffies.h> 37 #include <linux/jiffies.h>
38 #include <linux/random.h> 38 #include <linux/random.h>
39 #include <linux/init.h> 39 #include <linux/init.h>
40 #include <linux/utsname.h> 40 #include <linux/utsname.h>
41 #include <linux/in.h> 41 #include <linux/in.h>
42 #include <linux/if.h> 42 #include <linux/if.h>
43 #include <linux/inet.h> 43 #include <linux/inet.h>
44 #include <linux/inetdevice.h> 44 #include <linux/inetdevice.h>
45 #include <linux/netdevice.h> 45 #include <linux/netdevice.h>
46 #include <linux/if_arp.h> 46 #include <linux/if_arp.h>
47 #include <linux/skbuff.h> 47 #include <linux/skbuff.h>
48 #include <linux/ip.h> 48 #include <linux/ip.h>
49 #include <linux/socket.h> 49 #include <linux/socket.h>
50 #include <linux/route.h> 50 #include <linux/route.h>
51 #include <linux/udp.h> 51 #include <linux/udp.h>
52 #include <linux/proc_fs.h> 52 #include <linux/proc_fs.h>
53 #include <linux/seq_file.h> 53 #include <linux/seq_file.h>
54 #include <linux/major.h> 54 #include <linux/major.h>
55 #include <linux/root_dev.h> 55 #include <linux/root_dev.h>
56 #include <linux/delay.h> 56 #include <linux/delay.h>
57 #include <linux/nfs_fs.h> 57 #include <linux/nfs_fs.h>
58 #include <net/net_namespace.h> 58 #include <net/net_namespace.h>
59 #include <net/arp.h> 59 #include <net/arp.h>
60 #include <net/ip.h> 60 #include <net/ip.h>
61 #include <net/ipconfig.h> 61 #include <net/ipconfig.h>
62 #include <net/route.h> 62 #include <net/route.h>
63 63
64 #include <asm/uaccess.h> 64 #include <asm/uaccess.h>
65 #include <net/checksum.h> 65 #include <net/checksum.h>
66 #include <asm/processor.h> 66 #include <asm/processor.h>
67 67
68 /* Define this to allow debugging output */ 68 /* Define this to allow debugging output */
69 #undef IPCONFIG_DEBUG 69 #undef IPCONFIG_DEBUG
70 70
71 #ifdef IPCONFIG_DEBUG 71 #ifdef IPCONFIG_DEBUG
72 #define DBG(x) printk x 72 #define DBG(x) printk x
73 #else 73 #else
74 #define DBG(x) do { } while(0) 74 #define DBG(x) do { } while(0)
75 #endif 75 #endif
76 76
77 #if defined(CONFIG_IP_PNP_DHCP) 77 #if defined(CONFIG_IP_PNP_DHCP)
78 #define IPCONFIG_DHCP 78 #define IPCONFIG_DHCP
79 #endif 79 #endif
80 #if defined(CONFIG_IP_PNP_BOOTP) || defined(CONFIG_IP_PNP_DHCP) 80 #if defined(CONFIG_IP_PNP_BOOTP) || defined(CONFIG_IP_PNP_DHCP)
81 #define IPCONFIG_BOOTP 81 #define IPCONFIG_BOOTP
82 #endif 82 #endif
83 #if defined(CONFIG_IP_PNP_RARP) 83 #if defined(CONFIG_IP_PNP_RARP)
84 #define IPCONFIG_RARP 84 #define IPCONFIG_RARP
85 #endif 85 #endif
86 #if defined(IPCONFIG_BOOTP) || defined(IPCONFIG_RARP) 86 #if defined(IPCONFIG_BOOTP) || defined(IPCONFIG_RARP)
87 #define IPCONFIG_DYNAMIC 87 #define IPCONFIG_DYNAMIC
88 #endif 88 #endif
89 89
90 /* Define the friendly delay before and after opening net devices */ 90 /* Define the friendly delay before and after opening net devices */
91 #define CONF_PRE_OPEN 500 /* Before opening: 1/2 second */ 91 #define CONF_PRE_OPEN 500 /* Before opening: 1/2 second */
92 #define CONF_POST_OPEN 1 /* After opening: 1 second */ 92 #define CONF_POST_OPEN 1 /* After opening: 1 second */
93 93
94 /* Define the timeout for waiting for a DHCP/BOOTP/RARP reply */ 94 /* Define the timeout for waiting for a DHCP/BOOTP/RARP reply */
95 #define CONF_OPEN_RETRIES 2 /* (Re)open devices twice */ 95 #define CONF_OPEN_RETRIES 2 /* (Re)open devices twice */
96 #define CONF_SEND_RETRIES 6 /* Send six requests per open */ 96 #define CONF_SEND_RETRIES 6 /* Send six requests per open */
97 #define CONF_INTER_TIMEOUT (HZ/2) /* Inter-device timeout: 1/2 second */ 97 #define CONF_INTER_TIMEOUT (HZ/2) /* Inter-device timeout: 1/2 second */
98 #define CONF_BASE_TIMEOUT (HZ*2) /* Initial timeout: 2 seconds */ 98 #define CONF_BASE_TIMEOUT (HZ*2) /* Initial timeout: 2 seconds */
99 #define CONF_TIMEOUT_RANDOM (HZ) /* Maximum amount of randomization */ 99 #define CONF_TIMEOUT_RANDOM (HZ) /* Maximum amount of randomization */
100 #define CONF_TIMEOUT_MULT *7/4 /* Rate of timeout growth */ 100 #define CONF_TIMEOUT_MULT *7/4 /* Rate of timeout growth */
101 #define CONF_TIMEOUT_MAX (HZ*30) /* Maximum allowed timeout */ 101 #define CONF_TIMEOUT_MAX (HZ*30) /* Maximum allowed timeout */
102 #define CONF_NAMESERVERS_MAX 3 /* Maximum number of nameservers 102 #define CONF_NAMESERVERS_MAX 3 /* Maximum number of nameservers
103 - '3' from resolv.h */ 103 - '3' from resolv.h */
104 104
105 #define NONE __constant_htonl(INADDR_NONE) 105 #define NONE __constant_htonl(INADDR_NONE)
106 #define ANY __constant_htonl(INADDR_ANY) 106 #define ANY __constant_htonl(INADDR_ANY)
107 107
108 /* 108 /*
109 * Public IP configuration 109 * Public IP configuration
110 */ 110 */
111 111
112 /* This is used by platforms which might be able to set the ipconfig 112 /* This is used by platforms which might be able to set the ipconfig
113 * variables using firmware environment vars. If this is set, it will 113 * variables using firmware environment vars. If this is set, it will
114 * ignore such firmware variables. 114 * ignore such firmware variables.
115 */ 115 */
116 int ic_set_manually __initdata = 0; /* IPconfig parameters set manually */ 116 int ic_set_manually __initdata = 0; /* IPconfig parameters set manually */
117 117
118 static int ic_enable __initdata = 0; /* IP config enabled? */ 118 static int ic_enable __initdata = 0; /* IP config enabled? */
119 119
120 /* Protocol choice */ 120 /* Protocol choice */
121 int ic_proto_enabled __initdata = 0 121 int ic_proto_enabled __initdata = 0
122 #ifdef IPCONFIG_BOOTP 122 #ifdef IPCONFIG_BOOTP
123 | IC_BOOTP 123 | IC_BOOTP
124 #endif 124 #endif
125 #ifdef CONFIG_IP_PNP_DHCP 125 #ifdef CONFIG_IP_PNP_DHCP
126 | IC_USE_DHCP 126 | IC_USE_DHCP
127 #endif 127 #endif
128 #ifdef IPCONFIG_RARP 128 #ifdef IPCONFIG_RARP
129 | IC_RARP 129 | IC_RARP
130 #endif 130 #endif
131 ; 131 ;
132 132
133 static int ic_host_name_set __initdata = 0; /* Host name set by us? */ 133 static int ic_host_name_set __initdata = 0; /* Host name set by us? */
134 134
135 __be32 ic_myaddr = NONE; /* My IP address */ 135 __be32 ic_myaddr = NONE; /* My IP address */
136 static __be32 ic_netmask = NONE; /* Netmask for local subnet */ 136 static __be32 ic_netmask = NONE; /* Netmask for local subnet */
137 __be32 ic_gateway = NONE; /* Gateway IP address */ 137 __be32 ic_gateway = NONE; /* Gateway IP address */
138 138
139 __be32 ic_servaddr = NONE; /* Boot server IP address */ 139 __be32 ic_servaddr = NONE; /* Boot server IP address */
140 140
141 __be32 root_server_addr = NONE; /* Address of NFS server */ 141 __be32 root_server_addr = NONE; /* Address of NFS server */
142 u8 root_server_path[256] = { 0, }; /* Path to mount as root */ 142 u8 root_server_path[256] = { 0, }; /* Path to mount as root */
143 143
144 /* vendor class identifier */ 144 /* vendor class identifier */
145 static char vendor_class_identifier[253] __initdata; 145 static char vendor_class_identifier[253] __initdata;
146 146
147 /* Persistent data: */ 147 /* Persistent data: */
148 148
149 static int ic_proto_used; /* Protocol used, if any */ 149 static int ic_proto_used; /* Protocol used, if any */
150 static __be32 ic_nameservers[CONF_NAMESERVERS_MAX]; /* DNS Server IP addresses */ 150 static __be32 ic_nameservers[CONF_NAMESERVERS_MAX]; /* DNS Server IP addresses */
151 static u8 ic_domain[64]; /* DNS (not NIS) domain name */ 151 static u8 ic_domain[64]; /* DNS (not NIS) domain name */
152 152
153 /* 153 /*
154 * Private state. 154 * Private state.
155 */ 155 */
156 156
157 /* Name of user-selected boot device */ 157 /* Name of user-selected boot device */
158 static char user_dev_name[IFNAMSIZ] __initdata = { 0, }; 158 static char user_dev_name[IFNAMSIZ] __initdata = { 0, };
159 159
160 /* Protocols supported by available interfaces */ 160 /* Protocols supported by available interfaces */
161 static int ic_proto_have_if __initdata = 0; 161 static int ic_proto_have_if __initdata = 0;
162 162
163 #ifdef IPCONFIG_DYNAMIC 163 #ifdef IPCONFIG_DYNAMIC
164 static DEFINE_SPINLOCK(ic_recv_lock); 164 static DEFINE_SPINLOCK(ic_recv_lock);
165 static volatile int ic_got_reply __initdata = 0; /* Proto(s) that replied */ 165 static volatile int ic_got_reply __initdata = 0; /* Proto(s) that replied */
166 #endif 166 #endif
167 #ifdef IPCONFIG_DHCP 167 #ifdef IPCONFIG_DHCP
168 static int ic_dhcp_msgtype __initdata = 0; /* DHCP msg type received */ 168 static int ic_dhcp_msgtype __initdata = 0; /* DHCP msg type received */
169 #endif 169 #endif
170 170
171 171
172 /* 172 /*
173 * Network devices 173 * Network devices
174 */ 174 */
175 175
176 struct ic_device { 176 struct ic_device {
177 struct ic_device *next; 177 struct ic_device *next;
178 struct net_device *dev; 178 struct net_device *dev;
179 unsigned short flags; 179 unsigned short flags;
180 short able; 180 short able;
181 __be32 xid; 181 __be32 xid;
182 }; 182 };
183 183
184 static struct ic_device *ic_first_dev __initdata = NULL;/* List of open device */ 184 static struct ic_device *ic_first_dev __initdata = NULL;/* List of open device */
185 static struct net_device *ic_dev __initdata = NULL; /* Selected device */ 185 static struct net_device *ic_dev __initdata = NULL; /* Selected device */
186 186
187 static int __init ic_open_devs(void) 187 static int __init ic_open_devs(void)
188 { 188 {
189 struct ic_device *d, **last; 189 struct ic_device *d, **last;
190 struct net_device *dev; 190 struct net_device *dev;
191 unsigned short oflags; 191 unsigned short oflags;
192 192
193 last = &ic_first_dev; 193 last = &ic_first_dev;
194 rtnl_lock(); 194 rtnl_lock();
195 195
196 /* bring loopback device up first */ 196 /* bring loopback device up first */
197 for_each_netdev(&init_net, dev) { 197 for_each_netdev(&init_net, dev) {
198 if (!(dev->flags & IFF_LOOPBACK)) 198 if (!(dev->flags & IFF_LOOPBACK))
199 continue; 199 continue;
200 if (dev_change_flags(dev, dev->flags | IFF_UP) < 0) 200 if (dev_change_flags(dev, dev->flags | IFF_UP) < 0)
201 printk(KERN_ERR "IP-Config: Failed to open %s\n", dev->name); 201 printk(KERN_ERR "IP-Config: Failed to open %s\n", dev->name);
202 } 202 }
203 203
204 for_each_netdev(&init_net, dev) { 204 for_each_netdev(&init_net, dev) {
205 if (dev->flags & IFF_LOOPBACK) 205 if (dev->flags & IFF_LOOPBACK)
206 continue; 206 continue;
207 if (user_dev_name[0] ? !strcmp(dev->name, user_dev_name) : 207 if (user_dev_name[0] ? !strcmp(dev->name, user_dev_name) :
208 (!(dev->flags & IFF_LOOPBACK) && 208 (!(dev->flags & IFF_LOOPBACK) &&
209 (dev->flags & (IFF_POINTOPOINT|IFF_BROADCAST)) && 209 (dev->flags & (IFF_POINTOPOINT|IFF_BROADCAST)) &&
210 strncmp(dev->name, "dummy", 5))) { 210 strncmp(dev->name, "dummy", 5))) {
211 int able = 0; 211 int able = 0;
212 if (dev->mtu >= 364) 212 if (dev->mtu >= 364)
213 able |= IC_BOOTP; 213 able |= IC_BOOTP;
214 else 214 else
215 printk(KERN_WARNING "DHCP/BOOTP: Ignoring device %s, MTU %d too small", dev->name, dev->mtu); 215 printk(KERN_WARNING "DHCP/BOOTP: Ignoring device %s, MTU %d too small", dev->name, dev->mtu);
216 if (!(dev->flags & IFF_NOARP)) 216 if (!(dev->flags & IFF_NOARP))
217 able |= IC_RARP; 217 able |= IC_RARP;
218 able &= ic_proto_enabled; 218 able &= ic_proto_enabled;
219 if (ic_proto_enabled && !able) 219 if (ic_proto_enabled && !able)
220 continue; 220 continue;
221 oflags = dev->flags; 221 oflags = dev->flags;
222 if (dev_change_flags(dev, oflags | IFF_UP) < 0) { 222 if (dev_change_flags(dev, oflags | IFF_UP) < 0) {
223 printk(KERN_ERR "IP-Config: Failed to open %s\n", dev->name); 223 printk(KERN_ERR "IP-Config: Failed to open %s\n", dev->name);
224 continue; 224 continue;
225 } 225 }
226 if (!(d = kmalloc(sizeof(struct ic_device), GFP_KERNEL))) { 226 if (!(d = kmalloc(sizeof(struct ic_device), GFP_KERNEL))) {
227 rtnl_unlock(); 227 rtnl_unlock();
228 return -1; 228 return -1;
229 } 229 }
230 d->dev = dev; 230 d->dev = dev;
231 *last = d; 231 *last = d;
232 last = &d->next; 232 last = &d->next;
233 d->flags = oflags; 233 d->flags = oflags;
234 d->able = able; 234 d->able = able;
235 if (able & IC_BOOTP) 235 if (able & IC_BOOTP)
236 get_random_bytes(&d->xid, sizeof(__be32)); 236 get_random_bytes(&d->xid, sizeof(__be32));
237 else 237 else
238 d->xid = 0; 238 d->xid = 0;
239 ic_proto_have_if |= able; 239 ic_proto_have_if |= able;
240 DBG(("IP-Config: %s UP (able=%d, xid=%08x)\n", 240 DBG(("IP-Config: %s UP (able=%d, xid=%08x)\n",
241 dev->name, able, d->xid)); 241 dev->name, able, d->xid));
242 } 242 }
243 } 243 }
244 rtnl_unlock(); 244 rtnl_unlock();
245 245
246 *last = NULL; 246 *last = NULL;
247 247
248 if (!ic_first_dev) { 248 if (!ic_first_dev) {
249 if (user_dev_name[0]) 249 if (user_dev_name[0])
250 printk(KERN_ERR "IP-Config: Device `%s' not found.\n", user_dev_name); 250 printk(KERN_ERR "IP-Config: Device `%s' not found.\n", user_dev_name);
251 else 251 else
252 printk(KERN_ERR "IP-Config: No network devices available.\n"); 252 printk(KERN_ERR "IP-Config: No network devices available.\n");
253 return -1; 253 return -1;
254 } 254 }
255 return 0; 255 return 0;
256 } 256 }
257 257
258 static void __init ic_close_devs(void) 258 static void __init ic_close_devs(void)
259 { 259 {
260 struct ic_device *d, *next; 260 struct ic_device *d, *next;
261 struct net_device *dev; 261 struct net_device *dev;
262 262
263 rtnl_lock(); 263 rtnl_lock();
264 next = ic_first_dev; 264 next = ic_first_dev;
265 while ((d = next)) { 265 while ((d = next)) {
266 next = d->next; 266 next = d->next;
267 dev = d->dev; 267 dev = d->dev;
268 if (dev != ic_dev) { 268 if (dev != ic_dev) {
269 DBG(("IP-Config: Downing %s\n", dev->name)); 269 DBG(("IP-Config: Downing %s\n", dev->name));
270 dev_change_flags(dev, d->flags); 270 dev_change_flags(dev, d->flags);
271 } 271 }
272 kfree(d); 272 kfree(d);
273 } 273 }
274 rtnl_unlock(); 274 rtnl_unlock();
275 } 275 }
276 276
277 /* 277 /*
278 * Interface to various network functions. 278 * Interface to various network functions.
279 */ 279 */
280 280
281 static inline void 281 static inline void
282 set_sockaddr(struct sockaddr_in *sin, __be32 addr, __be16 port) 282 set_sockaddr(struct sockaddr_in *sin, __be32 addr, __be16 port)
283 { 283 {
284 sin->sin_family = AF_INET; 284 sin->sin_family = AF_INET;
285 sin->sin_addr.s_addr = addr; 285 sin->sin_addr.s_addr = addr;
286 sin->sin_port = port; 286 sin->sin_port = port;
287 } 287 }
288 288
289 static int __init ic_dev_ioctl(unsigned int cmd, struct ifreq *arg) 289 static int __init ic_dev_ioctl(unsigned int cmd, struct ifreq *arg)
290 { 290 {
291 int res; 291 int res;
292 292
293 mm_segment_t oldfs = get_fs(); 293 mm_segment_t oldfs = get_fs();
294 set_fs(get_ds()); 294 set_fs(get_ds());
295 res = devinet_ioctl(cmd, (struct ifreq __user *) arg); 295 res = devinet_ioctl(cmd, (struct ifreq __user *) arg);
296 set_fs(oldfs); 296 set_fs(oldfs);
297 return res; 297 return res;
298 } 298 }
299 299
300 static int __init ic_route_ioctl(unsigned int cmd, struct rtentry *arg) 300 static int __init ic_route_ioctl(unsigned int cmd, struct rtentry *arg)
301 { 301 {
302 int res; 302 int res;
303 303
304 mm_segment_t oldfs = get_fs(); 304 mm_segment_t oldfs = get_fs();
305 set_fs(get_ds()); 305 set_fs(get_ds());
306 res = ip_rt_ioctl(&init_net, cmd, (void __user *) arg); 306 res = ip_rt_ioctl(&init_net, cmd, (void __user *) arg);
307 set_fs(oldfs); 307 set_fs(oldfs);
308 return res; 308 return res;
309 } 309 }
310 310
311 /* 311 /*
312 * Set up interface addresses and routes. 312 * Set up interface addresses and routes.
313 */ 313 */
314 314
315 static int __init ic_setup_if(void) 315 static int __init ic_setup_if(void)
316 { 316 {
317 struct ifreq ir; 317 struct ifreq ir;
318 struct sockaddr_in *sin = (void *) &ir.ifr_ifru.ifru_addr; 318 struct sockaddr_in *sin = (void *) &ir.ifr_ifru.ifru_addr;
319 int err; 319 int err;
320 320
321 memset(&ir, 0, sizeof(ir)); 321 memset(&ir, 0, sizeof(ir));
322 strcpy(ir.ifr_ifrn.ifrn_name, ic_dev->name); 322 strcpy(ir.ifr_ifrn.ifrn_name, ic_dev->name);
323 set_sockaddr(sin, ic_myaddr, 0); 323 set_sockaddr(sin, ic_myaddr, 0);
324 if ((err = ic_dev_ioctl(SIOCSIFADDR, &ir)) < 0) { 324 if ((err = ic_dev_ioctl(SIOCSIFADDR, &ir)) < 0) {
325 printk(KERN_ERR "IP-Config: Unable to set interface address (%d).\n", err); 325 printk(KERN_ERR "IP-Config: Unable to set interface address (%d).\n", err);
326 return -1; 326 return -1;
327 } 327 }
328 set_sockaddr(sin, ic_netmask, 0); 328 set_sockaddr(sin, ic_netmask, 0);
329 if ((err = ic_dev_ioctl(SIOCSIFNETMASK, &ir)) < 0) { 329 if ((err = ic_dev_ioctl(SIOCSIFNETMASK, &ir)) < 0) {
330 printk(KERN_ERR "IP-Config: Unable to set interface netmask (%d).\n", err); 330 printk(KERN_ERR "IP-Config: Unable to set interface netmask (%d).\n", err);
331 return -1; 331 return -1;
332 } 332 }
333 set_sockaddr(sin, ic_myaddr | ~ic_netmask, 0); 333 set_sockaddr(sin, ic_myaddr | ~ic_netmask, 0);
334 if ((err = ic_dev_ioctl(SIOCSIFBRDADDR, &ir)) < 0) { 334 if ((err = ic_dev_ioctl(SIOCSIFBRDADDR, &ir)) < 0) {
335 printk(KERN_ERR "IP-Config: Unable to set interface broadcast address (%d).\n", err); 335 printk(KERN_ERR "IP-Config: Unable to set interface broadcast address (%d).\n", err);
336 return -1; 336 return -1;
337 } 337 }
338 return 0; 338 return 0;
339 } 339 }
340 340
341 static int __init ic_setup_routes(void) 341 static int __init ic_setup_routes(void)
342 { 342 {
343 /* No need to setup device routes, only the default route... */ 343 /* No need to setup device routes, only the default route... */
344 344
345 if (ic_gateway != NONE) { 345 if (ic_gateway != NONE) {
346 struct rtentry rm; 346 struct rtentry rm;
347 int err; 347 int err;
348 348
349 memset(&rm, 0, sizeof(rm)); 349 memset(&rm, 0, sizeof(rm));
350 if ((ic_gateway ^ ic_myaddr) & ic_netmask) { 350 if ((ic_gateway ^ ic_myaddr) & ic_netmask) {
351 printk(KERN_ERR "IP-Config: Gateway not on directly connected network.\n"); 351 printk(KERN_ERR "IP-Config: Gateway not on directly connected network.\n");
352 return -1; 352 return -1;
353 } 353 }
354 set_sockaddr((struct sockaddr_in *) &rm.rt_dst, 0, 0); 354 set_sockaddr((struct sockaddr_in *) &rm.rt_dst, 0, 0);
355 set_sockaddr((struct sockaddr_in *) &rm.rt_genmask, 0, 0); 355 set_sockaddr((struct sockaddr_in *) &rm.rt_genmask, 0, 0);
356 set_sockaddr((struct sockaddr_in *) &rm.rt_gateway, ic_gateway, 0); 356 set_sockaddr((struct sockaddr_in *) &rm.rt_gateway, ic_gateway, 0);
357 rm.rt_flags = RTF_UP | RTF_GATEWAY; 357 rm.rt_flags = RTF_UP | RTF_GATEWAY;
358 if ((err = ic_route_ioctl(SIOCADDRT, &rm)) < 0) { 358 if ((err = ic_route_ioctl(SIOCADDRT, &rm)) < 0) {
359 printk(KERN_ERR "IP-Config: Cannot add default route (%d).\n", err); 359 printk(KERN_ERR "IP-Config: Cannot add default route (%d).\n", err);
360 return -1; 360 return -1;
361 } 361 }
362 } 362 }
363 363
364 return 0; 364 return 0;
365 } 365 }
366 366
367 /* 367 /*
368 * Fill in default values for all missing parameters. 368 * Fill in default values for all missing parameters.
369 */ 369 */
370 370
371 static int __init ic_defaults(void) 371 static int __init ic_defaults(void)
372 { 372 {
373 /* 373 /*
374 * At this point we have no userspace running so need not 374 * At this point we have no userspace running so need not
375 * claim locks on system_utsname 375 * claim locks on system_utsname
376 */ 376 */
377 377
378 if (!ic_host_name_set) 378 if (!ic_host_name_set)
379 sprintf(init_utsname()->nodename, "%u.%u.%u.%u", NIPQUAD(ic_myaddr)); 379 sprintf(init_utsname()->nodename, "%u.%u.%u.%u", NIPQUAD(ic_myaddr));
380 380
381 if (root_server_addr == NONE) 381 if (root_server_addr == NONE)
382 root_server_addr = ic_servaddr; 382 root_server_addr = ic_servaddr;
383 383
384 if (ic_netmask == NONE) { 384 if (ic_netmask == NONE) {
385 if (IN_CLASSA(ntohl(ic_myaddr))) 385 if (IN_CLASSA(ntohl(ic_myaddr)))
386 ic_netmask = htonl(IN_CLASSA_NET); 386 ic_netmask = htonl(IN_CLASSA_NET);
387 else if (IN_CLASSB(ntohl(ic_myaddr))) 387 else if (IN_CLASSB(ntohl(ic_myaddr)))
388 ic_netmask = htonl(IN_CLASSB_NET); 388 ic_netmask = htonl(IN_CLASSB_NET);
389 else if (IN_CLASSC(ntohl(ic_myaddr))) 389 else if (IN_CLASSC(ntohl(ic_myaddr)))
390 ic_netmask = htonl(IN_CLASSC_NET); 390 ic_netmask = htonl(IN_CLASSC_NET);
391 else { 391 else {
392 printk(KERN_ERR "IP-Config: Unable to guess netmask for address %u.%u.%u.%u\n", 392 printk(KERN_ERR "IP-Config: Unable to guess netmask for address %u.%u.%u.%u\n",
393 NIPQUAD(ic_myaddr)); 393 NIPQUAD(ic_myaddr));
394 return -1; 394 return -1;
395 } 395 }
396 printk("IP-Config: Guessing netmask %u.%u.%u.%u\n", NIPQUAD(ic_netmask)); 396 printk("IP-Config: Guessing netmask %u.%u.%u.%u\n", NIPQUAD(ic_netmask));
397 } 397 }
398 398
399 return 0; 399 return 0;
400 } 400 }
401 401
402 /* 402 /*
403 * RARP support. 403 * RARP support.
404 */ 404 */
405 405
406 #ifdef IPCONFIG_RARP 406 #ifdef IPCONFIG_RARP
407 407
408 static int ic_rarp_recv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt, struct net_device *orig_dev); 408 static int ic_rarp_recv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt, struct net_device *orig_dev);
409 409
410 static struct packet_type rarp_packet_type __initdata = { 410 static struct packet_type rarp_packet_type __initdata = {
411 .type = __constant_htons(ETH_P_RARP), 411 .type = __constant_htons(ETH_P_RARP),
412 .func = ic_rarp_recv, 412 .func = ic_rarp_recv,
413 }; 413 };
414 414
415 static inline void ic_rarp_init(void) 415 static inline void ic_rarp_init(void)
416 { 416 {
417 dev_add_pack(&rarp_packet_type); 417 dev_add_pack(&rarp_packet_type);
418 } 418 }
419 419
420 static inline void ic_rarp_cleanup(void) 420 static inline void ic_rarp_cleanup(void)
421 { 421 {
422 dev_remove_pack(&rarp_packet_type); 422 dev_remove_pack(&rarp_packet_type);
423 } 423 }
424 424
425 /* 425 /*
426 * Process received RARP packet. 426 * Process received RARP packet.
427 */ 427 */
428 static int __init 428 static int __init
429 ic_rarp_recv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt, struct net_device *orig_dev) 429 ic_rarp_recv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt, struct net_device *orig_dev)
430 { 430 {
431 struct arphdr *rarp; 431 struct arphdr *rarp;
432 unsigned char *rarp_ptr; 432 unsigned char *rarp_ptr;
433 __be32 sip, tip; 433 __be32 sip, tip;
434 unsigned char *sha, *tha; /* s for "source", t for "target" */ 434 unsigned char *sha, *tha; /* s for "source", t for "target" */
435 struct ic_device *d; 435 struct ic_device *d;
436 436
437 if (dev->nd_net != &init_net) 437 if (dev->nd_net != &init_net)
438 goto drop; 438 goto drop;
439 439
440 if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL) 440 if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL)
441 return NET_RX_DROP; 441 return NET_RX_DROP;
442 442
443 if (!pskb_may_pull(skb, sizeof(struct arphdr))) 443 if (!pskb_may_pull(skb, sizeof(struct arphdr)))
444 goto drop; 444 goto drop;
445 445
446 /* Basic sanity checks can be done without the lock. */ 446 /* Basic sanity checks can be done without the lock. */
447 rarp = (struct arphdr *)skb_transport_header(skb); 447 rarp = (struct arphdr *)skb_transport_header(skb);
448 448
449 /* If this test doesn't pass, it's not IP, or we should 449 /* If this test doesn't pass, it's not IP, or we should
450 * ignore it anyway. 450 * ignore it anyway.
451 */ 451 */
452 if (rarp->ar_hln != dev->addr_len || dev->type != ntohs(rarp->ar_hrd)) 452 if (rarp->ar_hln != dev->addr_len || dev->type != ntohs(rarp->ar_hrd))
453 goto drop; 453 goto drop;
454 454
455 /* If it's not a RARP reply, delete it. */ 455 /* If it's not a RARP reply, delete it. */
456 if (rarp->ar_op != htons(ARPOP_RREPLY)) 456 if (rarp->ar_op != htons(ARPOP_RREPLY))
457 goto drop; 457 goto drop;
458 458
459 /* If it's not Ethernet, delete it. */ 459 /* If it's not Ethernet, delete it. */
460 if (rarp->ar_pro != htons(ETH_P_IP)) 460 if (rarp->ar_pro != htons(ETH_P_IP))
461 goto drop; 461 goto drop;
462 462
463 if (!pskb_may_pull(skb, 463 if (!pskb_may_pull(skb,
464 sizeof(struct arphdr) + 464 sizeof(struct arphdr) +
465 (2 * dev->addr_len) + 465 (2 * dev->addr_len) +
466 (2 * 4))) 466 (2 * 4)))
467 goto drop; 467 goto drop;
468 468
469 /* OK, it is all there and looks valid, process... */ 469 /* OK, it is all there and looks valid, process... */
470 rarp = (struct arphdr *)skb_transport_header(skb); 470 rarp = (struct arphdr *)skb_transport_header(skb);
471 rarp_ptr = (unsigned char *) (rarp + 1); 471 rarp_ptr = (unsigned char *) (rarp + 1);
472 472
473 /* One reply at a time, please. */ 473 /* One reply at a time, please. */
474 spin_lock(&ic_recv_lock); 474 spin_lock(&ic_recv_lock);
475 475
476 /* If we already have a reply, just drop the packet */ 476 /* If we already have a reply, just drop the packet */
477 if (ic_got_reply) 477 if (ic_got_reply)
478 goto drop_unlock; 478 goto drop_unlock;
479 479
480 /* Find the ic_device that the packet arrived on */ 480 /* Find the ic_device that the packet arrived on */
481 d = ic_first_dev; 481 d = ic_first_dev;
482 while (d && d->dev != dev) 482 while (d && d->dev != dev)
483 d = d->next; 483 d = d->next;
484 if (!d) 484 if (!d)
485 goto drop_unlock; /* should never happen */ 485 goto drop_unlock; /* should never happen */
486 486
487 /* Extract variable-width fields */ 487 /* Extract variable-width fields */
488 sha = rarp_ptr; 488 sha = rarp_ptr;
489 rarp_ptr += dev->addr_len; 489 rarp_ptr += dev->addr_len;
490 memcpy(&sip, rarp_ptr, 4); 490 memcpy(&sip, rarp_ptr, 4);
491 rarp_ptr += 4; 491 rarp_ptr += 4;
492 tha = rarp_ptr; 492 tha = rarp_ptr;
493 rarp_ptr += dev->addr_len; 493 rarp_ptr += dev->addr_len;
494 memcpy(&tip, rarp_ptr, 4); 494 memcpy(&tip, rarp_ptr, 4);
495 495
496 /* Discard packets which are not meant for us. */ 496 /* Discard packets which are not meant for us. */
497 if (memcmp(tha, dev->dev_addr, dev->addr_len)) 497 if (memcmp(tha, dev->dev_addr, dev->addr_len))
498 goto drop_unlock; 498 goto drop_unlock;
499 499
500 /* Discard packets which are not from specified server. */ 500 /* Discard packets which are not from specified server. */
501 if (ic_servaddr != NONE && ic_servaddr != sip) 501 if (ic_servaddr != NONE && ic_servaddr != sip)
502 goto drop_unlock; 502 goto drop_unlock;
503 503
504 /* We have a winner! */ 504 /* We have a winner! */
505 ic_dev = dev; 505 ic_dev = dev;
506 if (ic_myaddr == NONE) 506 if (ic_myaddr == NONE)
507 ic_myaddr = tip; 507 ic_myaddr = tip;
508 ic_servaddr = sip; 508 ic_servaddr = sip;
509 ic_got_reply = IC_RARP; 509 ic_got_reply = IC_RARP;
510 510
511 drop_unlock: 511 drop_unlock:
512 /* Show's over. Nothing to see here. */ 512 /* Show's over. Nothing to see here. */
513 spin_unlock(&ic_recv_lock); 513 spin_unlock(&ic_recv_lock);
514 514
515 drop: 515 drop:
516 /* Throw the packet out. */ 516 /* Throw the packet out. */
517 kfree_skb(skb); 517 kfree_skb(skb);
518 return 0; 518 return 0;
519 } 519 }
520 520
521 521
522 /* 522 /*
523 * Send RARP request packet over a single interface. 523 * Send RARP request packet over a single interface.
524 */ 524 */
525 static void __init ic_rarp_send_if(struct ic_device *d) 525 static void __init ic_rarp_send_if(struct ic_device *d)
526 { 526 {
527 struct net_device *dev = d->dev; 527 struct net_device *dev = d->dev;
528 arp_send(ARPOP_RREQUEST, ETH_P_RARP, 0, dev, 0, NULL, 528 arp_send(ARPOP_RREQUEST, ETH_P_RARP, 0, dev, 0, NULL,
529 dev->dev_addr, dev->dev_addr); 529 dev->dev_addr, dev->dev_addr);
530 } 530 }
531 #endif 531 #endif
532 532
533 /* 533 /*
534 * DHCP/BOOTP support. 534 * DHCP/BOOTP support.
535 */ 535 */
536 536
537 #ifdef IPCONFIG_BOOTP 537 #ifdef IPCONFIG_BOOTP
538 538
539 struct bootp_pkt { /* BOOTP packet format */ 539 struct bootp_pkt { /* BOOTP packet format */
540 struct iphdr iph; /* IP header */ 540 struct iphdr iph; /* IP header */
541 struct udphdr udph; /* UDP header */ 541 struct udphdr udph; /* UDP header */
542 u8 op; /* 1=request, 2=reply */ 542 u8 op; /* 1=request, 2=reply */
543 u8 htype; /* HW address type */ 543 u8 htype; /* HW address type */
544 u8 hlen; /* HW address length */ 544 u8 hlen; /* HW address length */
545 u8 hops; /* Used only by gateways */ 545 u8 hops; /* Used only by gateways */
546 __be32 xid; /* Transaction ID */ 546 __be32 xid; /* Transaction ID */
547 __be16 secs; /* Seconds since we started */ 547 __be16 secs; /* Seconds since we started */
548 __be16 flags; /* Just what it says */ 548 __be16 flags; /* Just what it says */
549 __be32 client_ip; /* Client's IP address if known */ 549 __be32 client_ip; /* Client's IP address if known */
550 __be32 your_ip; /* Assigned IP address */ 550 __be32 your_ip; /* Assigned IP address */
551 __be32 server_ip; /* (Next, e.g. NFS) Server's IP address */ 551 __be32 server_ip; /* (Next, e.g. NFS) Server's IP address */
552 __be32 relay_ip; /* IP address of BOOTP relay */ 552 __be32 relay_ip; /* IP address of BOOTP relay */
553 u8 hw_addr[16]; /* Client's HW address */ 553 u8 hw_addr[16]; /* Client's HW address */
554 u8 serv_name[64]; /* Server host name */ 554 u8 serv_name[64]; /* Server host name */
555 u8 boot_file[128]; /* Name of boot file */ 555 u8 boot_file[128]; /* Name of boot file */
556 u8 exten[312]; /* DHCP options / BOOTP vendor extensions */ 556 u8 exten[312]; /* DHCP options / BOOTP vendor extensions */
557 }; 557 };
558 558
559 /* packet ops */ 559 /* packet ops */
560 #define BOOTP_REQUEST 1 560 #define BOOTP_REQUEST 1
561 #define BOOTP_REPLY 2 561 #define BOOTP_REPLY 2
562 562
563 /* DHCP message types */ 563 /* DHCP message types */
564 #define DHCPDISCOVER 1 564 #define DHCPDISCOVER 1
565 #define DHCPOFFER 2 565 #define DHCPOFFER 2
566 #define DHCPREQUEST 3 566 #define DHCPREQUEST 3
567 #define DHCPDECLINE 4 567 #define DHCPDECLINE 4
568 #define DHCPACK 5 568 #define DHCPACK 5
569 #define DHCPNAK 6 569 #define DHCPNAK 6
570 #define DHCPRELEASE 7 570 #define DHCPRELEASE 7
571 #define DHCPINFORM 8 571 #define DHCPINFORM 8
572 572
573 static int ic_bootp_recv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt, struct net_device *orig_dev); 573 static int ic_bootp_recv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt, struct net_device *orig_dev);
574 574
575 static struct packet_type bootp_packet_type __initdata = { 575 static struct packet_type bootp_packet_type __initdata = {
576 .type = __constant_htons(ETH_P_IP), 576 .type = __constant_htons(ETH_P_IP),
577 .func = ic_bootp_recv, 577 .func = ic_bootp_recv,
578 }; 578 };
579 579
580 580
581 /* 581 /*
582 * Initialize DHCP/BOOTP extension fields in the request. 582 * Initialize DHCP/BOOTP extension fields in the request.
583 */ 583 */
584 584
585 static const u8 ic_bootp_cookie[4] = { 99, 130, 83, 99 }; 585 static const u8 ic_bootp_cookie[4] = { 99, 130, 83, 99 };
586 586
587 #ifdef IPCONFIG_DHCP 587 #ifdef IPCONFIG_DHCP
588 588
589 static void __init 589 static void __init
590 ic_dhcp_init_options(u8 *options) 590 ic_dhcp_init_options(u8 *options)
591 { 591 {
592 u8 mt = ((ic_servaddr == NONE) 592 u8 mt = ((ic_servaddr == NONE)
593 ? DHCPDISCOVER : DHCPREQUEST); 593 ? DHCPDISCOVER : DHCPREQUEST);
594 u8 *e = options; 594 u8 *e = options;
595 int len; 595 int len;
596 596
597 #ifdef IPCONFIG_DEBUG 597 #ifdef IPCONFIG_DEBUG
598 printk("DHCP: Sending message type %d\n", mt); 598 printk("DHCP: Sending message type %d\n", mt);
599 #endif 599 #endif
600 600
601 memcpy(e, ic_bootp_cookie, 4); /* RFC1048 Magic Cookie */ 601 memcpy(e, ic_bootp_cookie, 4); /* RFC1048 Magic Cookie */
602 e += 4; 602 e += 4;
603 603
604 *e++ = 53; /* DHCP message type */ 604 *e++ = 53; /* DHCP message type */
605 *e++ = 1; 605 *e++ = 1;
606 *e++ = mt; 606 *e++ = mt;
607 607
608 if (mt == DHCPREQUEST) { 608 if (mt == DHCPREQUEST) {
609 *e++ = 54; /* Server ID (IP address) */ 609 *e++ = 54; /* Server ID (IP address) */
610 *e++ = 4; 610 *e++ = 4;
611 memcpy(e, &ic_servaddr, 4); 611 memcpy(e, &ic_servaddr, 4);
612 e += 4; 612 e += 4;
613 613
614 *e++ = 50; /* Requested IP address */ 614 *e++ = 50; /* Requested IP address */
615 *e++ = 4; 615 *e++ = 4;
616 memcpy(e, &ic_myaddr, 4); 616 memcpy(e, &ic_myaddr, 4);
617 e += 4; 617 e += 4;
618 } 618 }
619 619
620 /* always? */ 620 /* always? */
621 { 621 {
622 static const u8 ic_req_params[] = { 622 static const u8 ic_req_params[] = {
623 1, /* Subnet mask */ 623 1, /* Subnet mask */
624 3, /* Default gateway */ 624 3, /* Default gateway */
625 6, /* DNS server */ 625 6, /* DNS server */
626 12, /* Host name */ 626 12, /* Host name */
627 15, /* Domain name */ 627 15, /* Domain name */
628 17, /* Boot path */ 628 17, /* Boot path */
629 40, /* NIS domain name */ 629 40, /* NIS domain name */
630 }; 630 };
631 631
632 *e++ = 55; /* Parameter request list */ 632 *e++ = 55; /* Parameter request list */
633 *e++ = sizeof(ic_req_params); 633 *e++ = sizeof(ic_req_params);
634 memcpy(e, ic_req_params, sizeof(ic_req_params)); 634 memcpy(e, ic_req_params, sizeof(ic_req_params));
635 e += sizeof(ic_req_params); 635 e += sizeof(ic_req_params);
636 636
637 if (*vendor_class_identifier) { 637 if (*vendor_class_identifier) {
638 printk(KERN_INFO "DHCP: sending class identifier \"%s\"\n", 638 printk(KERN_INFO "DHCP: sending class identifier \"%s\"\n",
639 vendor_class_identifier); 639 vendor_class_identifier);
640 *e++ = 60; /* Class-identifier */ 640 *e++ = 60; /* Class-identifier */
641 len = strlen(vendor_class_identifier); 641 len = strlen(vendor_class_identifier);
642 *e++ = len; 642 *e++ = len;
643 memcpy(e, vendor_class_identifier, len); 643 memcpy(e, vendor_class_identifier, len);
644 e += len; 644 e += len;
645 } 645 }
646 } 646 }
647 647
648 *e++ = 255; /* End of the list */ 648 *e++ = 255; /* End of the list */
649 } 649 }
650 650
651 #endif /* IPCONFIG_DHCP */ 651 #endif /* IPCONFIG_DHCP */
652 652
653 static void __init ic_bootp_init_ext(u8 *e) 653 static void __init ic_bootp_init_ext(u8 *e)
654 { 654 {
655 memcpy(e, ic_bootp_cookie, 4); /* RFC1048 Magic Cookie */ 655 memcpy(e, ic_bootp_cookie, 4); /* RFC1048 Magic Cookie */
656 e += 4; 656 e += 4;
657 *e++ = 1; /* Subnet mask request */ 657 *e++ = 1; /* Subnet mask request */
658 *e++ = 4; 658 *e++ = 4;
659 e += 4; 659 e += 4;
660 *e++ = 3; /* Default gateway request */ 660 *e++ = 3; /* Default gateway request */
661 *e++ = 4; 661 *e++ = 4;
662 e += 4; 662 e += 4;
663 *e++ = 5; /* Name server request */ 663 *e++ = 5; /* Name server request */
664 *e++ = 8; 664 *e++ = 8;
665 e += 8; 665 e += 8;
666 *e++ = 12; /* Host name request */ 666 *e++ = 12; /* Host name request */
667 *e++ = 32; 667 *e++ = 32;
668 e += 32; 668 e += 32;
669 *e++ = 40; /* NIS Domain name request */ 669 *e++ = 40; /* NIS Domain name request */
670 *e++ = 32; 670 *e++ = 32;
671 e += 32; 671 e += 32;
672 *e++ = 17; /* Boot path */ 672 *e++ = 17; /* Boot path */
673 *e++ = 40; 673 *e++ = 40;
674 e += 40; 674 e += 40;
675 675
676 *e++ = 57; /* set extension buffer size for reply */ 676 *e++ = 57; /* set extension buffer size for reply */
677 *e++ = 2; 677 *e++ = 2;
678 *e++ = 1; /* 128+236+8+20+14, see dhcpd sources */ 678 *e++ = 1; /* 128+236+8+20+14, see dhcpd sources */
679 *e++ = 150; 679 *e++ = 150;
680 680
681 *e++ = 255; /* End of the list */ 681 *e++ = 255; /* End of the list */
682 } 682 }
683 683
684 684
685 /* 685 /*
686 * Initialize the DHCP/BOOTP mechanism. 686 * Initialize the DHCP/BOOTP mechanism.
687 */ 687 */
688 static inline void ic_bootp_init(void) 688 static inline void ic_bootp_init(void)
689 { 689 {
690 int i; 690 int i;
691 691
692 for (i = 0; i < CONF_NAMESERVERS_MAX; i++) 692 for (i = 0; i < CONF_NAMESERVERS_MAX; i++)
693 ic_nameservers[i] = NONE; 693 ic_nameservers[i] = NONE;
694 694
695 dev_add_pack(&bootp_packet_type); 695 dev_add_pack(&bootp_packet_type);
696 } 696 }
697 697
698 698
699 /* 699 /*
700 * DHCP/BOOTP cleanup. 700 * DHCP/BOOTP cleanup.
701 */ 701 */
702 static inline void ic_bootp_cleanup(void) 702 static inline void ic_bootp_cleanup(void)
703 { 703 {
704 dev_remove_pack(&bootp_packet_type); 704 dev_remove_pack(&bootp_packet_type);
705 } 705 }
706 706
707 707
708 /* 708 /*
709 * Send DHCP/BOOTP request to single interface. 709 * Send DHCP/BOOTP request to single interface.
710 */ 710 */
711 static void __init ic_bootp_send_if(struct ic_device *d, unsigned long jiffies_diff) 711 static void __init ic_bootp_send_if(struct ic_device *d, unsigned long jiffies_diff)
712 { 712 {
713 struct net_device *dev = d->dev; 713 struct net_device *dev = d->dev;
714 struct sk_buff *skb; 714 struct sk_buff *skb;
715 struct bootp_pkt *b; 715 struct bootp_pkt *b;
716 int hh_len = LL_RESERVED_SPACE(dev); 716 int hh_len = LL_RESERVED_SPACE(dev);
717 struct iphdr *h; 717 struct iphdr *h;
718 718
719 /* Allocate packet */ 719 /* Allocate packet */
720 skb = alloc_skb(sizeof(struct bootp_pkt) + hh_len + 15, GFP_KERNEL); 720 skb = alloc_skb(sizeof(struct bootp_pkt) + hh_len + 15, GFP_KERNEL);
721 if (!skb) 721 if (!skb)
722 return; 722 return;
723 skb_reserve(skb, hh_len); 723 skb_reserve(skb, hh_len);
724 b = (struct bootp_pkt *) skb_put(skb, sizeof(struct bootp_pkt)); 724 b = (struct bootp_pkt *) skb_put(skb, sizeof(struct bootp_pkt));
725 memset(b, 0, sizeof(struct bootp_pkt)); 725 memset(b, 0, sizeof(struct bootp_pkt));
726 726
727 /* Construct IP header */ 727 /* Construct IP header */
728 skb_reset_network_header(skb); 728 skb_reset_network_header(skb);
729 h = ip_hdr(skb); 729 h = ip_hdr(skb);
730 h->version = 4; 730 h->version = 4;
731 h->ihl = 5; 731 h->ihl = 5;
732 h->tot_len = htons(sizeof(struct bootp_pkt)); 732 h->tot_len = htons(sizeof(struct bootp_pkt));
733 h->frag_off = htons(IP_DF); 733 h->frag_off = htons(IP_DF);
734 h->ttl = 64; 734 h->ttl = 64;
735 h->protocol = IPPROTO_UDP; 735 h->protocol = IPPROTO_UDP;
736 h->daddr = htonl(INADDR_BROADCAST); 736 h->daddr = htonl(INADDR_BROADCAST);
737 h->check = ip_fast_csum((unsigned char *) h, h->ihl); 737 h->check = ip_fast_csum((unsigned char *) h, h->ihl);
738 738
739 /* Construct UDP header */ 739 /* Construct UDP header */
740 b->udph.source = htons(68); 740 b->udph.source = htons(68);
741 b->udph.dest = htons(67); 741 b->udph.dest = htons(67);
742 b->udph.len = htons(sizeof(struct bootp_pkt) - sizeof(struct iphdr)); 742 b->udph.len = htons(sizeof(struct bootp_pkt) - sizeof(struct iphdr));
743 /* UDP checksum not calculated -- explicitly allowed in BOOTP RFC */ 743 /* UDP checksum not calculated -- explicitly allowed in BOOTP RFC */
744 744
745 /* Construct DHCP/BOOTP header */ 745 /* Construct DHCP/BOOTP header */
746 b->op = BOOTP_REQUEST; 746 b->op = BOOTP_REQUEST;
747 if (dev->type < 256) /* check for false types */ 747 if (dev->type < 256) /* check for false types */
748 b->htype = dev->type; 748 b->htype = dev->type;
749 else if (dev->type == ARPHRD_IEEE802_TR) /* fix for token ring */ 749 else if (dev->type == ARPHRD_IEEE802_TR) /* fix for token ring */
750 b->htype = ARPHRD_IEEE802; 750 b->htype = ARPHRD_IEEE802;
751 else if (dev->type == ARPHRD_FDDI) 751 else if (dev->type == ARPHRD_FDDI)
752 b->htype = ARPHRD_ETHER; 752 b->htype = ARPHRD_ETHER;
753 else { 753 else {
754 printk("Unknown ARP type 0x%04x for device %s\n", dev->type, dev->name); 754 printk("Unknown ARP type 0x%04x for device %s\n", dev->type, dev->name);
755 b->htype = dev->type; /* can cause undefined behavior */ 755 b->htype = dev->type; /* can cause undefined behavior */
756 } 756 }
757 757
758 /* server_ip and your_ip address are both already zero per RFC2131 */ 758 /* server_ip and your_ip address are both already zero per RFC2131 */
759 b->hlen = dev->addr_len; 759 b->hlen = dev->addr_len;
760 memcpy(b->hw_addr, dev->dev_addr, dev->addr_len); 760 memcpy(b->hw_addr, dev->dev_addr, dev->addr_len);
761 b->secs = htons(jiffies_diff / HZ); 761 b->secs = htons(jiffies_diff / HZ);
762 b->xid = d->xid; 762 b->xid = d->xid;
763 763
764 /* add DHCP options or BOOTP extensions */ 764 /* add DHCP options or BOOTP extensions */
765 #ifdef IPCONFIG_DHCP 765 #ifdef IPCONFIG_DHCP
766 if (ic_proto_enabled & IC_USE_DHCP) 766 if (ic_proto_enabled & IC_USE_DHCP)
767 ic_dhcp_init_options(b->exten); 767 ic_dhcp_init_options(b->exten);
768 else 768 else
769 #endif 769 #endif
770 ic_bootp_init_ext(b->exten); 770 ic_bootp_init_ext(b->exten);
771 771
772 /* Chain packet down the line... */ 772 /* Chain packet down the line... */
773 skb->dev = dev; 773 skb->dev = dev;
774 skb->protocol = htons(ETH_P_IP); 774 skb->protocol = htons(ETH_P_IP);
775 if (dev_hard_header(skb, dev, ntohs(skb->protocol), 775 if (dev_hard_header(skb, dev, ntohs(skb->protocol),
776 dev->broadcast, dev->dev_addr, skb->len) < 0 || 776 dev->broadcast, dev->dev_addr, skb->len) < 0 ||
777 dev_queue_xmit(skb) < 0) 777 dev_queue_xmit(skb) < 0)
778 printk("E"); 778 printk("E");
779 } 779 }
780 780
781 781
782 /* 782 /*
783 * Copy BOOTP-supplied string if not already set. 783 * Copy BOOTP-supplied string if not already set.
784 */ 784 */
785 static int __init ic_bootp_string(char *dest, char *src, int len, int max) 785 static int __init ic_bootp_string(char *dest, char *src, int len, int max)
786 { 786 {
787 if (!len) 787 if (!len)
788 return 0; 788 return 0;
789 if (len > max-1) 789 if (len > max-1)
790 len = max-1; 790 len = max-1;
791 memcpy(dest, src, len); 791 memcpy(dest, src, len);
792 dest[len] = '\0'; 792 dest[len] = '\0';
793 return 1; 793 return 1;
794 } 794 }
795 795
796 796
797 /* 797 /*
798 * Process BOOTP extensions. 798 * Process BOOTP extensions.
799 */ 799 */
800 static void __init ic_do_bootp_ext(u8 *ext) 800 static void __init ic_do_bootp_ext(u8 *ext)
801 { 801 {
802 u8 servers; 802 u8 servers;
803 int i; 803 int i;
804 804
805 #ifdef IPCONFIG_DEBUG 805 #ifdef IPCONFIG_DEBUG
806 u8 *c; 806 u8 *c;
807 807
808 printk("DHCP/BOOTP: Got extension %d:",*ext); 808 printk("DHCP/BOOTP: Got extension %d:",*ext);
809 for (c=ext+2; c<ext+2+ext[1]; c++) 809 for (c=ext+2; c<ext+2+ext[1]; c++)
810 printk(" %02x", *c); 810 printk(" %02x", *c);
811 printk("\n"); 811 printk("\n");
812 #endif 812 #endif
813 813
814 switch (*ext++) { 814 switch (*ext++) {
815 case 1: /* Subnet mask */ 815 case 1: /* Subnet mask */
816 if (ic_netmask == NONE) 816 if (ic_netmask == NONE)
817 memcpy(&ic_netmask, ext+1, 4); 817 memcpy(&ic_netmask, ext+1, 4);
818 break; 818 break;
819 case 3: /* Default gateway */ 819 case 3: /* Default gateway */
820 if (ic_gateway == NONE) 820 if (ic_gateway == NONE)
821 memcpy(&ic_gateway, ext+1, 4); 821 memcpy(&ic_gateway, ext+1, 4);
822 break; 822 break;
823 case 6: /* DNS server */ 823 case 6: /* DNS server */
824 servers= *ext/4; 824 servers= *ext/4;
825 if (servers > CONF_NAMESERVERS_MAX) 825 if (servers > CONF_NAMESERVERS_MAX)
826 servers = CONF_NAMESERVERS_MAX; 826 servers = CONF_NAMESERVERS_MAX;
827 for (i = 0; i < servers; i++) { 827 for (i = 0; i < servers; i++) {
828 if (ic_nameservers[i] == NONE) 828 if (ic_nameservers[i] == NONE)
829 memcpy(&ic_nameservers[i], ext+1+4*i, 4); 829 memcpy(&ic_nameservers[i], ext+1+4*i, 4);
830 } 830 }
831 break; 831 break;
832 case 12: /* Host name */ 832 case 12: /* Host name */
833 ic_bootp_string(utsname()->nodename, ext+1, *ext, __NEW_UTS_LEN); 833 ic_bootp_string(utsname()->nodename, ext+1, *ext, __NEW_UTS_LEN);
834 ic_host_name_set = 1; 834 ic_host_name_set = 1;
835 break; 835 break;
836 case 15: /* Domain name (DNS) */ 836 case 15: /* Domain name (DNS) */
837 ic_bootp_string(ic_domain, ext+1, *ext, sizeof(ic_domain)); 837 ic_bootp_string(ic_domain, ext+1, *ext, sizeof(ic_domain));
838 break; 838 break;
839 case 17: /* Root path */ 839 case 17: /* Root path */
840 if (!root_server_path[0]) 840 if (!root_server_path[0])
841 ic_bootp_string(root_server_path, ext+1, *ext, sizeof(root_server_path)); 841 ic_bootp_string(root_server_path, ext+1, *ext, sizeof(root_server_path));
842 break; 842 break;
843 case 40: /* NIS Domain name (_not_ DNS) */ 843 case 40: /* NIS Domain name (_not_ DNS) */
844 ic_bootp_string(utsname()->domainname, ext+1, *ext, __NEW_UTS_LEN); 844 ic_bootp_string(utsname()->domainname, ext+1, *ext, __NEW_UTS_LEN);
845 break; 845 break;
846 } 846 }
847 } 847 }
848 848
849 849
850 /* 850 /*
851 * Receive BOOTP reply. 851 * Receive BOOTP reply.
852 */ 852 */
853 static int __init ic_bootp_recv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt, struct net_device *orig_dev) 853 static int __init ic_bootp_recv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt, struct net_device *orig_dev)
854 { 854 {
855 struct bootp_pkt *b; 855 struct bootp_pkt *b;
856 struct iphdr *h; 856 struct iphdr *h;
857 struct ic_device *d; 857 struct ic_device *d;
858 int len, ext_len; 858 int len, ext_len;
859 859
860 if (dev->nd_net != &init_net) 860 if (dev->nd_net != &init_net)
861 goto drop; 861 goto drop;
862 862
863 /* Perform verifications before taking the lock. */ 863 /* Perform verifications before taking the lock. */
864 if (skb->pkt_type == PACKET_OTHERHOST) 864 if (skb->pkt_type == PACKET_OTHERHOST)
865 goto drop; 865 goto drop;
866 866
867 if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL) 867 if ((skb = skb_share_check(skb, GFP_ATOMIC)) == NULL)
868 return NET_RX_DROP; 868 return NET_RX_DROP;
869 869
870 if (!pskb_may_pull(skb, 870 if (!pskb_may_pull(skb,
871 sizeof(struct iphdr) + 871 sizeof(struct iphdr) +
872 sizeof(struct udphdr))) 872 sizeof(struct udphdr)))
873 goto drop; 873 goto drop;
874 874
875 b = (struct bootp_pkt *)skb_network_header(skb); 875 b = (struct bootp_pkt *)skb_network_header(skb);
876 h = &b->iph; 876 h = &b->iph;
877 877
878 if (h->ihl != 5 || h->version != 4 || h->protocol != IPPROTO_UDP) 878 if (h->ihl != 5 || h->version != 4 || h->protocol != IPPROTO_UDP)
879 goto drop; 879 goto drop;
880 880
881 /* Fragments are not supported */ 881 /* Fragments are not supported */
882 if (h->frag_off & htons(IP_OFFSET | IP_MF)) { 882 if (h->frag_off & htons(IP_OFFSET | IP_MF)) {
883 if (net_ratelimit()) 883 if (net_ratelimit())
884 printk(KERN_ERR "DHCP/BOOTP: Ignoring fragmented " 884 printk(KERN_ERR "DHCP/BOOTP: Ignoring fragmented "
885 "reply.\n"); 885 "reply.\n");
886 goto drop; 886 goto drop;
887 } 887 }
888 888
889 if (skb->len < ntohs(h->tot_len)) 889 if (skb->len < ntohs(h->tot_len))
890 goto drop; 890 goto drop;
891 891
892 if (ip_fast_csum((char *) h, h->ihl)) 892 if (ip_fast_csum((char *) h, h->ihl))
893 goto drop; 893 goto drop;
894 894
895 if (b->udph.source != htons(67) || b->udph.dest != htons(68)) 895 if (b->udph.source != htons(67) || b->udph.dest != htons(68))
896 goto drop; 896 goto drop;
897 897
898 if (ntohs(h->tot_len) < ntohs(b->udph.len) + sizeof(struct iphdr)) 898 if (ntohs(h->tot_len) < ntohs(b->udph.len) + sizeof(struct iphdr))
899 goto drop; 899 goto drop;
900 900
901 len = ntohs(b->udph.len) - sizeof(struct udphdr); 901 len = ntohs(b->udph.len) - sizeof(struct udphdr);
902 ext_len = len - (sizeof(*b) - 902 ext_len = len - (sizeof(*b) -
903 sizeof(struct iphdr) - 903 sizeof(struct iphdr) -
904 sizeof(struct udphdr) - 904 sizeof(struct udphdr) -
905 sizeof(b->exten)); 905 sizeof(b->exten));
906 if (ext_len < 0) 906 if (ext_len < 0)
907 goto drop; 907 goto drop;
908 908
909 /* Ok the front looks good, make sure we can get at the rest. */ 909 /* Ok the front looks good, make sure we can get at the rest. */
910 if (!pskb_may_pull(skb, skb->len)) 910 if (!pskb_may_pull(skb, skb->len))
911 goto drop; 911 goto drop;
912 912
913 b = (struct bootp_pkt *)skb_network_header(skb); 913 b = (struct bootp_pkt *)skb_network_header(skb);
914 h = &b->iph; 914 h = &b->iph;
915 915
916 /* One reply at a time, please. */ 916 /* One reply at a time, please. */
917 spin_lock(&ic_recv_lock); 917 spin_lock(&ic_recv_lock);
918 918
919 /* If we already have a reply, just drop the packet */ 919 /* If we already have a reply, just drop the packet */
920 if (ic_got_reply) 920 if (ic_got_reply)
921 goto drop_unlock; 921 goto drop_unlock;
922 922
923 /* Find the ic_device that the packet arrived on */ 923 /* Find the ic_device that the packet arrived on */
924 d = ic_first_dev; 924 d = ic_first_dev;
925 while (d && d->dev != dev) 925 while (d && d->dev != dev)
926 d = d->next; 926 d = d->next;
927 if (!d) 927 if (!d)
928 goto drop_unlock; /* should never happen */ 928 goto drop_unlock; /* should never happen */
929 929
930 /* Is it a reply to our BOOTP request? */ 930 /* Is it a reply to our BOOTP request? */
931 if (b->op != BOOTP_REPLY || 931 if (b->op != BOOTP_REPLY ||
932 b->xid != d->xid) { 932 b->xid != d->xid) {
933 if (net_ratelimit()) 933 if (net_ratelimit())
934 printk(KERN_ERR "DHCP/BOOTP: Reply not for us, " 934 printk(KERN_ERR "DHCP/BOOTP: Reply not for us, "
935 "op[%x] xid[%x]\n", 935 "op[%x] xid[%x]\n",
936 b->op, b->xid); 936 b->op, b->xid);
937 goto drop_unlock; 937 goto drop_unlock;
938 } 938 }
939 939
940 /* Parse extensions */ 940 /* Parse extensions */
941 if (ext_len >= 4 && 941 if (ext_len >= 4 &&
942 !memcmp(b->exten, ic_bootp_cookie, 4)) { /* Check magic cookie */ 942 !memcmp(b->exten, ic_bootp_cookie, 4)) { /* Check magic cookie */
943 u8 *end = (u8 *) b + ntohs(b->iph.tot_len); 943 u8 *end = (u8 *) b + ntohs(b->iph.tot_len);
944 u8 *ext; 944 u8 *ext;
945 945
946 #ifdef IPCONFIG_DHCP 946 #ifdef IPCONFIG_DHCP
947 if (ic_proto_enabled & IC_USE_DHCP) { 947 if (ic_proto_enabled & IC_USE_DHCP) {
948 __be32 server_id = NONE; 948 __be32 server_id = NONE;
949 int mt = 0; 949 int mt = 0;
950 950
951 ext = &b->exten[4]; 951 ext = &b->exten[4];
952 while (ext < end && *ext != 0xff) { 952 while (ext < end && *ext != 0xff) {
953 u8 *opt = ext++; 953 u8 *opt = ext++;
954 if (*opt == 0) /* Padding */ 954 if (*opt == 0) /* Padding */
955 continue; 955 continue;
956 ext += *ext + 1; 956 ext += *ext + 1;
957 if (ext >= end) 957 if (ext >= end)
958 break; 958 break;
959 switch (*opt) { 959 switch (*opt) {
960 case 53: /* Message type */ 960 case 53: /* Message type */
961 if (opt[1]) 961 if (opt[1])
962 mt = opt[2]; 962 mt = opt[2];
963 break; 963 break;
964 case 54: /* Server ID (IP address) */ 964 case 54: /* Server ID (IP address) */
965 if (opt[1] >= 4) 965 if (opt[1] >= 4)
966 memcpy(&server_id, opt + 2, 4); 966 memcpy(&server_id, opt + 2, 4);
967 break; 967 break;
968 } 968 }
969 } 969 }
970 970
971 #ifdef IPCONFIG_DEBUG 971 #ifdef IPCONFIG_DEBUG
972 printk("DHCP: Got message type %d\n", mt); 972 printk("DHCP: Got message type %d\n", mt);
973 #endif 973 #endif
974 974
975 switch (mt) { 975 switch (mt) {
976 case DHCPOFFER: 976 case DHCPOFFER:
977 /* While in the process of accepting one offer, 977 /* While in the process of accepting one offer,
978 * ignore all others. 978 * ignore all others.
979 */ 979 */
980 if (ic_myaddr != NONE) 980 if (ic_myaddr != NONE)
981 goto drop_unlock; 981 goto drop_unlock;
982 982
983 /* Let's accept that offer. */ 983 /* Let's accept that offer. */
984 ic_myaddr = b->your_ip; 984 ic_myaddr = b->your_ip;
985 ic_servaddr = server_id; 985 ic_servaddr = server_id;
986 #ifdef IPCONFIG_DEBUG 986 #ifdef IPCONFIG_DEBUG
987 printk("DHCP: Offered address %u.%u.%u.%u", 987 printk("DHCP: Offered address %u.%u.%u.%u",
988 NIPQUAD(ic_myaddr)); 988 NIPQUAD(ic_myaddr));
989 printk(" by server %u.%u.%u.%u\n", 989 printk(" by server %u.%u.%u.%u\n",
990 NIPQUAD(ic_servaddr)); 990 NIPQUAD(ic_servaddr));
991 #endif 991 #endif
992 /* The DHCP indicated server address takes 992 /* The DHCP indicated server address takes
993 * precedence over the bootp header one if 993 * precedence over the bootp header one if
994 * they are different. 994 * they are different.
995 */ 995 */
996 if ((server_id != NONE) && 996 if ((server_id != NONE) &&
997 (b->server_ip != server_id)) 997 (b->server_ip != server_id))
998 b->server_ip = ic_servaddr; 998 b->server_ip = ic_servaddr;
999 break; 999 break;
1000 1000
1001 case DHCPACK: 1001 case DHCPACK:
1002 if (memcmp(dev->dev_addr, b->hw_addr, dev->addr_len) != 0) 1002 if (memcmp(dev->dev_addr, b->hw_addr, dev->addr_len) != 0)
1003 goto drop_unlock; 1003 goto drop_unlock;
1004 1004
1005 /* Yeah! */ 1005 /* Yeah! */
1006 break; 1006 break;
1007 1007
1008 default: 1008 default:
1009 /* Urque. Forget it*/ 1009 /* Urque. Forget it*/
1010 ic_myaddr = NONE; 1010 ic_myaddr = NONE;
1011 ic_servaddr = NONE; 1011 ic_servaddr = NONE;
1012 goto drop_unlock; 1012 goto drop_unlock;
1013 } 1013 }
1014 1014
1015 ic_dhcp_msgtype = mt; 1015 ic_dhcp_msgtype = mt;
1016 1016
1017 } 1017 }
1018 #endif /* IPCONFIG_DHCP */ 1018 #endif /* IPCONFIG_DHCP */
1019 1019
1020 ext = &b->exten[4]; 1020 ext = &b->exten[4];
1021 while (ext < end && *ext != 0xff) { 1021 while (ext < end && *ext != 0xff) {
1022 u8 *opt = ext++; 1022 u8 *opt = ext++;
1023 if (*opt == 0) /* Padding */ 1023 if (*opt == 0) /* Padding */
1024 continue; 1024 continue;
1025 ext += *ext + 1; 1025 ext += *ext + 1;
1026 if (ext < end) 1026 if (ext < end)
1027 ic_do_bootp_ext(opt); 1027 ic_do_bootp_ext(opt);
1028 } 1028 }
1029 } 1029 }
1030 1030
1031 /* We have a winner! */ 1031 /* We have a winner! */
1032 ic_dev = dev; 1032 ic_dev = dev;
1033 ic_myaddr = b->your_ip; 1033 ic_myaddr = b->your_ip;
1034 ic_servaddr = b->server_ip; 1034 ic_servaddr = b->server_ip;
1035 if (ic_gateway == NONE && b->relay_ip) 1035 if (ic_gateway == NONE && b->relay_ip)
1036 ic_gateway = b->relay_ip; 1036 ic_gateway = b->relay_ip;
1037 if (ic_nameservers[0] == NONE) 1037 if (ic_nameservers[0] == NONE)
1038 ic_nameservers[0] = ic_servaddr; 1038 ic_nameservers[0] = ic_servaddr;
1039 ic_got_reply = IC_BOOTP; 1039 ic_got_reply = IC_BOOTP;
1040 1040
1041 drop_unlock: 1041 drop_unlock:
1042 /* Show's over. Nothing to see here. */ 1042 /* Show's over. Nothing to see here. */
1043 spin_unlock(&ic_recv_lock); 1043 spin_unlock(&ic_recv_lock);
1044 1044
1045 drop: 1045 drop:
1046 /* Throw the packet out. */ 1046 /* Throw the packet out. */
1047 kfree_skb(skb); 1047 kfree_skb(skb);
1048 1048
1049 return 0; 1049 return 0;
1050 } 1050 }
1051 1051
1052 1052
1053 #endif 1053 #endif
1054 1054
1055 1055
1056 /* 1056 /*
1057 * Dynamic IP configuration -- DHCP, BOOTP, RARP. 1057 * Dynamic IP configuration -- DHCP, BOOTP, RARP.
1058 */ 1058 */
1059 1059
1060 #ifdef IPCONFIG_DYNAMIC 1060 #ifdef IPCONFIG_DYNAMIC
1061 1061
1062 static int __init ic_dynamic(void) 1062 static int __init ic_dynamic(void)
1063 { 1063 {
1064 int retries; 1064 int retries;
1065 struct ic_device *d; 1065 struct ic_device *d;
1066 unsigned long start_jiffies, timeout, jiff; 1066 unsigned long start_jiffies, timeout, jiff;
1067 int do_bootp = ic_proto_have_if & IC_BOOTP; 1067 int do_bootp = ic_proto_have_if & IC_BOOTP;
1068 int do_rarp = ic_proto_have_if & IC_RARP; 1068 int do_rarp = ic_proto_have_if & IC_RARP;
1069 1069
1070 /* 1070 /*
1071 * If none of DHCP/BOOTP/RARP was selected, return with an error. 1071 * If none of DHCP/BOOTP/RARP was selected, return with an error.
1072 * This routine gets only called when some pieces of information 1072 * This routine gets only called when some pieces of information
1073 * are missing, and without DHCP/BOOTP/RARP we are unable to get it. 1073 * are missing, and without DHCP/BOOTP/RARP we are unable to get it.
1074 */ 1074 */
1075 if (!ic_proto_enabled) { 1075 if (!ic_proto_enabled) {
1076 printk(KERN_ERR "IP-Config: Incomplete network configuration information.\n"); 1076 printk(KERN_ERR "IP-Config: Incomplete network configuration information.\n");
1077 return -1; 1077 return -1;
1078 } 1078 }
1079 1079
1080 #ifdef IPCONFIG_BOOTP 1080 #ifdef IPCONFIG_BOOTP
1081 if ((ic_proto_enabled ^ ic_proto_have_if) & IC_BOOTP) 1081 if ((ic_proto_enabled ^ ic_proto_have_if) & IC_BOOTP)
1082 printk(KERN_ERR "DHCP/BOOTP: No suitable device found.\n"); 1082 printk(KERN_ERR "DHCP/BOOTP: No suitable device found.\n");
1083 #endif 1083 #endif
1084 #ifdef IPCONFIG_RARP 1084 #ifdef IPCONFIG_RARP
1085 if ((ic_proto_enabled ^ ic_proto_have_if) & IC_RARP) 1085 if ((ic_proto_enabled ^ ic_proto_have_if) & IC_RARP)
1086 printk(KERN_ERR "RARP: No suitable device found.\n"); 1086 printk(KERN_ERR "RARP: No suitable device found.\n");
1087 #endif 1087 #endif
1088 1088
1089 if (!ic_proto_have_if) 1089 if (!ic_proto_have_if)
1090 /* Error message already printed */ 1090 /* Error message already printed */
1091 return -1; 1091 return -1;
1092 1092
1093 /* 1093 /*
1094 * Setup protocols 1094 * Setup protocols
1095 */ 1095 */
1096 #ifdef IPCONFIG_BOOTP 1096 #ifdef IPCONFIG_BOOTP
1097 if (do_bootp) 1097 if (do_bootp)
1098 ic_bootp_init(); 1098 ic_bootp_init();
1099 #endif 1099 #endif
1100 #ifdef IPCONFIG_RARP 1100 #ifdef IPCONFIG_RARP
1101 if (do_rarp) 1101 if (do_rarp)
1102 ic_rarp_init(); 1102 ic_rarp_init();
1103 #endif 1103 #endif
1104 1104
1105 /* 1105 /*
1106 * Send requests and wait, until we get an answer. This loop 1106 * Send requests and wait, until we get an answer. This loop
1107 * seems to be a terrible waste of CPU time, but actually there is 1107 * seems to be a terrible waste of CPU time, but actually there is
1108 * only one process running at all, so we don't need to use any 1108 * only one process running at all, so we don't need to use any
1109 * scheduler functions. 1109 * scheduler functions.
1110 * [Actually we could now, but the nothing else running note still 1110 * [Actually we could now, but the nothing else running note still
1111 * applies.. - AC] 1111 * applies.. - AC]
1112 */ 1112 */
1113 printk(KERN_NOTICE "Sending %s%s%s requests .", 1113 printk(KERN_NOTICE "Sending %s%s%s requests .",
1114 do_bootp 1114 do_bootp
1115 ? ((ic_proto_enabled & IC_USE_DHCP) ? "DHCP" : "BOOTP") : "", 1115 ? ((ic_proto_enabled & IC_USE_DHCP) ? "DHCP" : "BOOTP") : "",
1116 (do_bootp && do_rarp) ? " and " : "", 1116 (do_bootp && do_rarp) ? " and " : "",
1117 do_rarp ? "RARP" : ""); 1117 do_rarp ? "RARP" : "");
1118 1118
1119 start_jiffies = jiffies; 1119 start_jiffies = jiffies;
1120 d = ic_first_dev; 1120 d = ic_first_dev;
1121 retries = CONF_SEND_RETRIES; 1121 retries = CONF_SEND_RETRIES;
1122 get_random_bytes(&timeout, sizeof(timeout)); 1122 get_random_bytes(&timeout, sizeof(timeout));
1123 timeout = CONF_BASE_TIMEOUT + (timeout % (unsigned) CONF_TIMEOUT_RANDOM); 1123 timeout = CONF_BASE_TIMEOUT + (timeout % (unsigned) CONF_TIMEOUT_RANDOM);
1124 for (;;) { 1124 for (;;) {
1125 #ifdef IPCONFIG_BOOTP 1125 #ifdef IPCONFIG_BOOTP
1126 if (do_bootp && (d->able & IC_BOOTP)) 1126 if (do_bootp && (d->able & IC_BOOTP))
1127 ic_bootp_send_if(d, jiffies - start_jiffies); 1127 ic_bootp_send_if(d, jiffies - start_jiffies);
1128 #endif 1128 #endif
1129 #ifdef IPCONFIG_RARP 1129 #ifdef IPCONFIG_RARP
1130 if (do_rarp && (d->able & IC_RARP)) 1130 if (do_rarp && (d->able & IC_RARP))
1131 ic_rarp_send_if(d); 1131 ic_rarp_send_if(d);
1132 #endif 1132 #endif
1133 1133
1134 jiff = jiffies + (d->next ? CONF_INTER_TIMEOUT : timeout); 1134 jiff = jiffies + (d->next ? CONF_INTER_TIMEOUT : timeout);
1135 while (time_before(jiffies, jiff) && !ic_got_reply) 1135 while (time_before(jiffies, jiff) && !ic_got_reply)
1136 schedule_timeout_uninterruptible(1); 1136 schedule_timeout_uninterruptible(1);
1137 #ifdef IPCONFIG_DHCP 1137 #ifdef IPCONFIG_DHCP
1138 /* DHCP isn't done until we get a DHCPACK. */ 1138 /* DHCP isn't done until we get a DHCPACK. */
1139 if ((ic_got_reply & IC_BOOTP) 1139 if ((ic_got_reply & IC_BOOTP)
1140 && (ic_proto_enabled & IC_USE_DHCP) 1140 && (ic_proto_enabled & IC_USE_DHCP)
1141 && ic_dhcp_msgtype != DHCPACK) 1141 && ic_dhcp_msgtype != DHCPACK)
1142 { 1142 {
1143 ic_got_reply = 0; 1143 ic_got_reply = 0;
1144 printk(","); 1144 printk(",");
1145 continue; 1145 continue;
1146 } 1146 }
1147 #endif /* IPCONFIG_DHCP */ 1147 #endif /* IPCONFIG_DHCP */
1148 1148
1149 if (ic_got_reply) { 1149 if (ic_got_reply) {
1150 printk(" OK\n"); 1150 printk(" OK\n");
1151 break; 1151 break;
1152 } 1152 }
1153 1153
1154 if ((d = d->next)) 1154 if ((d = d->next))
1155 continue; 1155 continue;
1156 1156
1157 if (! --retries) { 1157 if (! --retries) {
1158 printk(" timed out!\n"); 1158 printk(" timed out!\n");
1159 break; 1159 break;
1160 } 1160 }
1161 1161
1162 d = ic_first_dev; 1162 d = ic_first_dev;
1163 1163
1164 timeout = timeout CONF_TIMEOUT_MULT; 1164 timeout = timeout CONF_TIMEOUT_MULT;
1165 if (timeout > CONF_TIMEOUT_MAX) 1165 if (timeout > CONF_TIMEOUT_MAX)
1166 timeout = CONF_TIMEOUT_MAX; 1166 timeout = CONF_TIMEOUT_MAX;
1167 1167
1168 printk("."); 1168 printk(".");
1169 } 1169 }
1170 1170
1171 #ifdef IPCONFIG_BOOTP 1171 #ifdef IPCONFIG_BOOTP
1172 if (do_bootp) 1172 if (do_bootp)
1173 ic_bootp_cleanup(); 1173 ic_bootp_cleanup();
1174 #endif 1174 #endif
1175 #ifdef IPCONFIG_RARP 1175 #ifdef IPCONFIG_RARP
1176 if (do_rarp) 1176 if (do_rarp)
1177 ic_rarp_cleanup(); 1177 ic_rarp_cleanup();
1178 #endif 1178 #endif
1179 1179
1180 if (!ic_got_reply) { 1180 if (!ic_got_reply) {
1181 ic_myaddr = NONE; 1181 ic_myaddr = NONE;
1182 return -1; 1182 return -1;
1183 } 1183 }
1184 1184
1185 printk("IP-Config: Got %s answer from %u.%u.%u.%u, ", 1185 printk("IP-Config: Got %s answer from %u.%u.%u.%u, ",
1186 ((ic_got_reply & IC_RARP) ? "RARP" 1186 ((ic_got_reply & IC_RARP) ? "RARP"
1187 : (ic_proto_enabled & IC_USE_DHCP) ? "DHCP" : "BOOTP"), 1187 : (ic_proto_enabled & IC_USE_DHCP) ? "DHCP" : "BOOTP"),
1188 NIPQUAD(ic_servaddr)); 1188 NIPQUAD(ic_servaddr));
1189 printk("my address is %u.%u.%u.%u\n", NIPQUAD(ic_myaddr)); 1189 printk("my address is %u.%u.%u.%u\n", NIPQUAD(ic_myaddr));
1190 1190
1191 return 0; 1191 return 0;
1192 } 1192 }
1193 1193
1194 #endif /* IPCONFIG_DYNAMIC */ 1194 #endif /* IPCONFIG_DYNAMIC */
1195 1195
1196 #ifdef CONFIG_PROC_FS 1196 #ifdef CONFIG_PROC_FS
1197 1197
1198 static int pnp_seq_show(struct seq_file *seq, void *v) 1198 static int pnp_seq_show(struct seq_file *seq, void *v)
1199 { 1199 {
1200 int i; 1200 int i;
1201 1201
1202 if (ic_proto_used & IC_PROTO) 1202 if (ic_proto_used & IC_PROTO)
1203 seq_printf(seq, "#PROTO: %s\n", 1203 seq_printf(seq, "#PROTO: %s\n",
1204 (ic_proto_used & IC_RARP) ? "RARP" 1204 (ic_proto_used & IC_RARP) ? "RARP"
1205 : (ic_proto_used & IC_USE_DHCP) ? "DHCP" : "BOOTP"); 1205 : (ic_proto_used & IC_USE_DHCP) ? "DHCP" : "BOOTP");
1206 else 1206 else
1207 seq_puts(seq, "#MANUAL\n"); 1207 seq_puts(seq, "#MANUAL\n");
1208 1208
1209 if (ic_domain[0]) 1209 if (ic_domain[0])
1210 seq_printf(seq, 1210 seq_printf(seq,
1211 "domain %s\n", ic_domain); 1211 "domain %s\n", ic_domain);
1212 for (i = 0; i < CONF_NAMESERVERS_MAX; i++) { 1212 for (i = 0; i < CONF_NAMESERVERS_MAX; i++) {
1213 if (ic_nameservers[i] != NONE) 1213 if (ic_nameservers[i] != NONE)
1214 seq_printf(seq, 1214 seq_printf(seq,
1215 "nameserver %u.%u.%u.%u\n", 1215 "nameserver %u.%u.%u.%u\n",
1216 NIPQUAD(ic_nameservers[i])); 1216 NIPQUAD(ic_nameservers[i]));
1217 } 1217 }
1218 if (ic_servaddr != NONE) 1218 if (ic_servaddr != NONE)
1219 seq_printf(seq, 1219 seq_printf(seq,
1220 "bootserver %u.%u.%u.%u\n", 1220 "bootserver %u.%u.%u.%u\n",
1221 NIPQUAD(ic_servaddr)); 1221 NIPQUAD(ic_servaddr));
1222 return 0; 1222 return 0;
1223 } 1223 }
1224 1224
1225 static int pnp_seq_open(struct inode *indoe, struct file *file) 1225 static int pnp_seq_open(struct inode *indoe, struct file *file)
1226 { 1226 {
1227 return single_open(file, pnp_seq_show, NULL); 1227 return single_open(file, pnp_seq_show, NULL);
1228 } 1228 }
1229 1229
1230 static const struct file_operations pnp_seq_fops = { 1230 static const struct file_operations pnp_seq_fops = {
1231 .owner = THIS_MODULE, 1231 .owner = THIS_MODULE,
1232 .open = pnp_seq_open, 1232 .open = pnp_seq_open,
1233 .read = seq_read, 1233 .read = seq_read,
1234 .llseek = seq_lseek, 1234 .llseek = seq_lseek,
1235 .release = single_release, 1235 .release = single_release,
1236 }; 1236 };
1237 #endif /* CONFIG_PROC_FS */ 1237 #endif /* CONFIG_PROC_FS */
1238 1238
1239 /* 1239 /*
1240 * Extract IP address from the parameter string if needed. Note that we 1240 * Extract IP address from the parameter string if needed. Note that we
1241 * need to have root_server_addr set _before_ IPConfig gets called as it 1241 * need to have root_server_addr set _before_ IPConfig gets called as it
1242 * can override it. 1242 * can override it.
1243 */ 1243 */
1244 __be32 __init root_nfs_parse_addr(char *name) 1244 __be32 __init root_nfs_parse_addr(char *name)
1245 { 1245 {
1246 __be32 addr; 1246 __be32 addr;
1247 int octets = 0; 1247 int octets = 0;
1248 char *cp, *cq; 1248 char *cp, *cq;
1249 1249
1250 cp = cq = name; 1250 cp = cq = name;
1251 while (octets < 4) { 1251 while (octets < 4) {
1252 while (*cp >= '0' && *cp <= '9') 1252 while (*cp >= '0' && *cp <= '9')
1253 cp++; 1253 cp++;
1254 if (cp == cq || cp - cq > 3) 1254 if (cp == cq || cp - cq > 3)
1255 break; 1255 break;
1256 if (*cp == '.' || octets == 3) 1256 if (*cp == '.' || octets == 3)
1257 octets++; 1257 octets++;
1258 if (octets < 4) 1258 if (octets < 4)
1259 cp++; 1259 cp++;
1260 cq = cp; 1260 cq = cp;
1261 } 1261 }
1262 if (octets == 4 && (*cp == ':' || *cp == '\0')) { 1262 if (octets == 4 && (*cp == ':' || *cp == '\0')) {
1263 if (*cp == ':') 1263 if (*cp == ':')
1264 *cp++ = '\0'; 1264 *cp++ = '\0';
1265 addr = in_aton(name); 1265 addr = in_aton(name);
1266 memmove(name, cp, strlen(cp) + 1); 1266 memmove(name, cp, strlen(cp) + 1);
1267 } else 1267 } else
1268 addr = NONE; 1268 addr = NONE;
1269 1269
1270 return addr; 1270 return addr;
1271 } 1271 }
1272 1272
1273 /* 1273 /*
1274 * IP Autoconfig dispatcher. 1274 * IP Autoconfig dispatcher.
1275 */ 1275 */
1276 1276
1277 static int __init ip_auto_config(void) 1277 static int __init ip_auto_config(void)
1278 { 1278 {
1279 __be32 addr; 1279 __be32 addr;
1280 1280
1281 #ifdef CONFIG_PROC_FS 1281 #ifdef CONFIG_PROC_FS
1282 proc_net_fops_create(&init_net, "pnp", S_IRUGO, &pnp_seq_fops); 1282 proc_net_fops_create(&init_net, "pnp", S_IRUGO, &pnp_seq_fops);
1283 #endif /* CONFIG_PROC_FS */ 1283 #endif /* CONFIG_PROC_FS */
1284 1284
1285 if (!ic_enable) 1285 if (!ic_enable)
1286 return 0; 1286 return 0;
1287 1287
1288 DBG(("IP-Config: Entered.\n")); 1288 DBG(("IP-Config: Entered.\n"));
1289 #ifdef IPCONFIG_DYNAMIC 1289 #ifdef IPCONFIG_DYNAMIC
1290 try_try_again: 1290 try_try_again:
1291 #endif 1291 #endif
1292 /* Give hardware a chance to settle */ 1292 /* Give hardware a chance to settle */
1293 msleep(CONF_PRE_OPEN); 1293 msleep(CONF_PRE_OPEN);
1294 1294
1295 /* Setup all network devices */ 1295 /* Setup all network devices */
1296 if (ic_open_devs() < 0) 1296 if (ic_open_devs() < 0)
1297 return -1; 1297 return -1;
1298 1298
1299 /* Give drivers a chance to settle */ 1299 /* Give drivers a chance to settle */
1300 ssleep(CONF_POST_OPEN); 1300 ssleep(CONF_POST_OPEN);
1301 1301
1302 /* 1302 /*
1303 * If the config information is insufficient (e.g., our IP address or 1303 * If the config information is insufficient (e.g., our IP address or
1304 * IP address of the boot server is missing or we have multiple network 1304 * IP address of the boot server is missing or we have multiple network
1305 * interfaces and no default was set), use BOOTP or RARP to get the 1305 * interfaces and no default was set), use BOOTP or RARP to get the
1306 * missing values. 1306 * missing values.
1307 */ 1307 */
1308 if (ic_myaddr == NONE || 1308 if (ic_myaddr == NONE ||
1309 #ifdef CONFIG_ROOT_NFS 1309 #ifdef CONFIG_ROOT_NFS
1310 (root_server_addr == NONE 1310 (root_server_addr == NONE
1311 && ic_servaddr == NONE 1311 && ic_servaddr == NONE
1312 && ROOT_DEV == Root_NFS) || 1312 && ROOT_DEV == Root_NFS) ||
1313 #endif 1313 #endif
1314 ic_first_dev->next) { 1314 ic_first_dev->next) {
1315 #ifdef IPCONFIG_DYNAMIC 1315 #ifdef IPCONFIG_DYNAMIC
1316 1316
1317 int retries = CONF_OPEN_RETRIES; 1317 int retries = CONF_OPEN_RETRIES;
1318 1318
1319 if (ic_dynamic() < 0) { 1319 if (ic_dynamic() < 0) {
1320 ic_close_devs(); 1320 ic_close_devs();
1321 1321
1322 /* 1322 /*
1323 * I don't know why, but sometimes the 1323 * I don't know why, but sometimes the
1324 * eepro100 driver (at least) gets upset and 1324 * eepro100 driver (at least) gets upset and
1325 * doesn't work the first time it's opened. 1325 * doesn't work the first time it's opened.
1326 * But then if you close it and reopen it, it 1326 * But then if you close it and reopen it, it
1327 * works just fine. So we need to try that at 1327 * works just fine. So we need to try that at
1328 * least once before giving up. 1328 * least once before giving up.
1329 * 1329 *
1330 * Also, if the root will be NFS-mounted, we 1330 * Also, if the root will be NFS-mounted, we
1331 * have nowhere to go if DHCP fails. So we 1331 * have nowhere to go if DHCP fails. So we
1332 * just have to keep trying forever. 1332 * just have to keep trying forever.
1333 * 1333 *
1334 * -- Chip 1334 * -- Chip
1335 */ 1335 */
1336 #ifdef CONFIG_ROOT_NFS 1336 #ifdef CONFIG_ROOT_NFS
1337 if (ROOT_DEV == Root_NFS) { 1337 if (ROOT_DEV == Root_NFS) {
1338 printk(KERN_ERR 1338 printk(KERN_ERR
1339 "IP-Config: Retrying forever (NFS root)...\n"); 1339 "IP-Config: Retrying forever (NFS root)...\n");
1340 goto try_try_again; 1340 goto try_try_again;
1341 } 1341 }
1342 #endif 1342 #endif
1343 1343
1344 if (--retries) { 1344 if (--retries) {
1345 printk(KERN_ERR 1345 printk(KERN_ERR
1346 "IP-Config: Reopening network devices...\n"); 1346 "IP-Config: Reopening network devices...\n");
1347 goto try_try_again; 1347 goto try_try_again;
1348 } 1348 }
1349 1349
1350 /* Oh, well. At least we tried. */ 1350 /* Oh, well. At least we tried. */
1351 printk(KERN_ERR "IP-Config: Auto-configuration of network failed.\n"); 1351 printk(KERN_ERR "IP-Config: Auto-configuration of network failed.\n");
1352 return -1; 1352 return -1;
1353 } 1353 }
1354 #else /* !DYNAMIC */ 1354 #else /* !DYNAMIC */
1355 printk(KERN_ERR "IP-Config: Incomplete network configuration information.\n"); 1355 printk(KERN_ERR "IP-Config: Incomplete network configuration information.\n");
1356 ic_close_devs(); 1356 ic_close_devs();
1357 return -1; 1357 return -1;
1358 #endif /* IPCONFIG_DYNAMIC */ 1358 #endif /* IPCONFIG_DYNAMIC */
1359 } else { 1359 } else {
1360 /* Device selected manually or only one device -> use it */ 1360 /* Device selected manually or only one device -> use it */
1361 ic_dev = ic_first_dev->dev; 1361 ic_dev = ic_first_dev->dev;
1362 } 1362 }
1363 1363
1364 addr = root_nfs_parse_addr(root_server_path); 1364 addr = root_nfs_parse_addr(root_server_path);
1365 if (root_server_addr == NONE) 1365 if (root_server_addr == NONE)
1366 root_server_addr = addr; 1366 root_server_addr = addr;
1367 1367
1368 /* 1368 /*
1369 * Use defaults whereever applicable. 1369 * Use defaults whereever applicable.
1370 */ 1370 */
1371 if (ic_defaults() < 0) 1371 if (ic_defaults() < 0)
1372 return -1; 1372 return -1;
1373 1373
1374 /* 1374 /*
1375 * Close all network devices except the device we've 1375 * Close all network devices except the device we've
1376 * autoconfigured and set up routes. 1376 * autoconfigured and set up routes.
1377 */ 1377 */
1378 ic_close_devs(); 1378 ic_close_devs();
1379 if (ic_setup_if() < 0 || ic_setup_routes() < 0) 1379 if (ic_setup_if() < 0 || ic_setup_routes() < 0)
1380 return -1; 1380 return -1;
1381 1381
1382 /* 1382 /*
1383 * Record which protocol was actually used. 1383 * Record which protocol was actually used.
1384 */ 1384 */
1385 #ifdef IPCONFIG_DYNAMIC 1385 #ifdef IPCONFIG_DYNAMIC
1386 ic_proto_used = ic_got_reply | (ic_proto_enabled & IC_USE_DHCP); 1386 ic_proto_used = ic_got_reply | (ic_proto_enabled & IC_USE_DHCP);
1387 #endif 1387 #endif
1388 1388
1389 #ifndef IPCONFIG_SILENT 1389 #ifndef IPCONFIG_SILENT
1390 /* 1390 /*
1391 * Clue in the operator. 1391 * Clue in the operator.
1392 */ 1392 */
1393 printk("IP-Config: Complete:"); 1393 printk("IP-Config: Complete:");
1394 printk("\n device=%s", ic_dev->name); 1394 printk("\n device=%s", ic_dev->name);
1395 printk(", addr=%u.%u.%u.%u", NIPQUAD(ic_myaddr)); 1395 printk(", addr=%u.%u.%u.%u", NIPQUAD(ic_myaddr));
1396 printk(", mask=%u.%u.%u.%u", NIPQUAD(ic_netmask)); 1396 printk(", mask=%u.%u.%u.%u", NIPQUAD(ic_netmask));
1397 printk(", gw=%u.%u.%u.%u", NIPQUAD(ic_gateway)); 1397 printk(", gw=%u.%u.%u.%u", NIPQUAD(ic_gateway));
1398 printk(",\n host=%s, domain=%s, nis-domain=%s", 1398 printk(",\n host=%s, domain=%s, nis-domain=%s",
1399 utsname()->nodename, ic_domain, utsname()->domainname); 1399 utsname()->nodename, ic_domain, utsname()->domainname);
1400 printk(",\n bootserver=%u.%u.%u.%u", NIPQUAD(ic_servaddr)); 1400 printk(",\n bootserver=%u.%u.%u.%u", NIPQUAD(ic_servaddr));
1401 printk(", rootserver=%u.%u.%u.%u", NIPQUAD(root_server_addr)); 1401 printk(", rootserver=%u.%u.%u.%u", NIPQUAD(root_server_addr));
1402 printk(", rootpath=%s", root_server_path); 1402 printk(", rootpath=%s", root_server_path);
1403 printk("\n"); 1403 printk("\n");
1404 #endif /* !SILENT */ 1404 #endif /* !SILENT */
1405 1405
1406 return 0; 1406 return 0;
1407 } 1407 }
1408 1408
1409 late_initcall(ip_auto_config); 1409 late_initcall(ip_auto_config);
1410 1410
1411 1411
1412 /* 1412 /*
1413 * Decode any IP configuration options in the "ip=" or "nfsaddrs=" kernel 1413 * Decode any IP configuration options in the "ip=" or "nfsaddrs=" kernel
1414 * command line parameter. See Documentation/nfsroot.txt. 1414 * command line parameter. See Documentation/filesystems/nfsroot.txt.
1415 */ 1415 */
1416 static int __init ic_proto_name(char *name) 1416 static int __init ic_proto_name(char *name)
1417 { 1417 {
1418 if (!strcmp(name, "on") || !strcmp(name, "any")) { 1418 if (!strcmp(name, "on") || !strcmp(name, "any")) {
1419 return 1; 1419 return 1;
1420 } 1420 }
1421 if (!strcmp(name, "off") || !strcmp(name, "none")) { 1421 if (!strcmp(name, "off") || !strcmp(name, "none")) {
1422 return 0; 1422 return 0;
1423 } 1423 }
1424 #ifdef CONFIG_IP_PNP_DHCP 1424 #ifdef CONFIG_IP_PNP_DHCP
1425 else if (!strcmp(name, "dhcp")) { 1425 else if (!strcmp(name, "dhcp")) {
1426 ic_proto_enabled &= ~IC_RARP; 1426 ic_proto_enabled &= ~IC_RARP;
1427 return 1; 1427 return 1;
1428 } 1428 }
1429 #endif 1429 #endif
1430 #ifdef CONFIG_IP_PNP_BOOTP 1430 #ifdef CONFIG_IP_PNP_BOOTP
1431 else if (!strcmp(name, "bootp")) { 1431 else if (!strcmp(name, "bootp")) {
1432 ic_proto_enabled &= ~(IC_RARP | IC_USE_DHCP); 1432 ic_proto_enabled &= ~(IC_RARP | IC_USE_DHCP);
1433 return 1; 1433 return 1;
1434 } 1434 }
1435 #endif 1435 #endif
1436 #ifdef CONFIG_IP_PNP_RARP 1436 #ifdef CONFIG_IP_PNP_RARP
1437 else if (!strcmp(name, "rarp")) { 1437 else if (!strcmp(name, "rarp")) {
1438 ic_proto_enabled &= ~(IC_BOOTP | IC_USE_DHCP); 1438 ic_proto_enabled &= ~(IC_BOOTP | IC_USE_DHCP);
1439 return 1; 1439 return 1;
1440 } 1440 }
1441 #endif 1441 #endif
1442 #ifdef IPCONFIG_DYNAMIC 1442 #ifdef IPCONFIG_DYNAMIC
1443 else if (!strcmp(name, "both")) { 1443 else if (!strcmp(name, "both")) {
1444 ic_proto_enabled &= ~IC_USE_DHCP; /* backward compat :-( */ 1444 ic_proto_enabled &= ~IC_USE_DHCP; /* backward compat :-( */
1445 return 1; 1445 return 1;
1446 } 1446 }
1447 #endif 1447 #endif
1448 return 0; 1448 return 0;
1449 } 1449 }
1450 1450
1451 static int __init ip_auto_config_setup(char *addrs) 1451 static int __init ip_auto_config_setup(char *addrs)
1452 { 1452 {
1453 char *cp, *ip, *dp; 1453 char *cp, *ip, *dp;
1454 int num = 0; 1454 int num = 0;
1455 1455
1456 ic_set_manually = 1; 1456 ic_set_manually = 1;
1457 ic_enable = 1; 1457 ic_enable = 1;
1458 1458
1459 /* 1459 /*
1460 * If any dhcp, bootp etc options are set, leave autoconfig on 1460 * If any dhcp, bootp etc options are set, leave autoconfig on
1461 * and skip the below static IP processing. 1461 * and skip the below static IP processing.
1462 */ 1462 */
1463 if (ic_proto_name(addrs)) 1463 if (ic_proto_name(addrs))
1464 return 1; 1464 return 1;
1465 1465
1466 /* If no static IP is given, turn off autoconfig and bail. */ 1466 /* If no static IP is given, turn off autoconfig and bail. */
1467 if (*addrs == 0 || 1467 if (*addrs == 0 ||
1468 strcmp(addrs, "off") == 0 || 1468 strcmp(addrs, "off") == 0 ||
1469 strcmp(addrs, "none") == 0) { 1469 strcmp(addrs, "none") == 0) {
1470 ic_enable = 0; 1470 ic_enable = 0;
1471 return 1; 1471 return 1;
1472 } 1472 }
1473 1473
1474 /* Parse string for static IP assignment. */ 1474 /* Parse string for static IP assignment. */
1475 ip = addrs; 1475 ip = addrs;
1476 while (ip && *ip) { 1476 while (ip && *ip) {
1477 if ((cp = strchr(ip, ':'))) 1477 if ((cp = strchr(ip, ':')))
1478 *cp++ = '\0'; 1478 *cp++ = '\0';
1479 if (strlen(ip) > 0) { 1479 if (strlen(ip) > 0) {
1480 DBG(("IP-Config: Parameter #%d: `%s'\n", num, ip)); 1480 DBG(("IP-Config: Parameter #%d: `%s'\n", num, ip));
1481 switch (num) { 1481 switch (num) {
1482 case 0: 1482 case 0:
1483 if ((ic_myaddr = in_aton(ip)) == ANY) 1483 if ((ic_myaddr = in_aton(ip)) == ANY)
1484 ic_myaddr = NONE; 1484 ic_myaddr = NONE;
1485 break; 1485 break;
1486 case 1: 1486 case 1:
1487 if ((ic_servaddr = in_aton(ip)) == ANY) 1487 if ((ic_servaddr = in_aton(ip)) == ANY)
1488 ic_servaddr = NONE; 1488 ic_servaddr = NONE;
1489 break; 1489 break;
1490 case 2: 1490 case 2:
1491 if ((ic_gateway = in_aton(ip)) == ANY) 1491 if ((ic_gateway = in_aton(ip)) == ANY)
1492 ic_gateway = NONE; 1492 ic_gateway = NONE;
1493 break; 1493 break;
1494 case 3: 1494 case 3:
1495 if ((ic_netmask = in_aton(ip)) == ANY) 1495 if ((ic_netmask = in_aton(ip)) == ANY)
1496 ic_netmask = NONE; 1496 ic_netmask = NONE;
1497 break; 1497 break;
1498 case 4: 1498 case 4:
1499 if ((dp = strchr(ip, '.'))) { 1499 if ((dp = strchr(ip, '.'))) {
1500 *dp++ = '\0'; 1500 *dp++ = '\0';
1501 strlcpy(utsname()->domainname, dp, 1501 strlcpy(utsname()->domainname, dp,
1502 sizeof(utsname()->domainname)); 1502 sizeof(utsname()->domainname));
1503 } 1503 }
1504 strlcpy(utsname()->nodename, ip, 1504 strlcpy(utsname()->nodename, ip,
1505 sizeof(utsname()->nodename)); 1505 sizeof(utsname()->nodename));
1506 ic_host_name_set = 1; 1506 ic_host_name_set = 1;
1507 break; 1507 break;
1508 case 5: 1508 case 5:
1509 strlcpy(user_dev_name, ip, sizeof(user_dev_name)); 1509 strlcpy(user_dev_name, ip, sizeof(user_dev_name));
1510 break; 1510 break;
1511 case 6: 1511 case 6:
1512 if (ic_proto_name(ip) == 0 && 1512 if (ic_proto_name(ip) == 0 &&
1513 ic_myaddr == NONE) { 1513 ic_myaddr == NONE) {
1514 ic_enable = 0; 1514 ic_enable = 0;
1515 } 1515 }
1516 break; 1516 break;
1517 } 1517 }
1518 } 1518 }
1519 ip = cp; 1519 ip = cp;
1520 num++; 1520 num++;
1521 } 1521 }
1522 1522
1523 return 1; 1523 return 1;
1524 } 1524 }
1525 1525
1526 static int __init nfsaddrs_config_setup(char *addrs) 1526 static int __init nfsaddrs_config_setup(char *addrs)
1527 { 1527 {
1528 return ip_auto_config_setup(addrs); 1528 return ip_auto_config_setup(addrs);
1529 } 1529 }
1530 1530
1531 static int __init vendor_class_identifier_setup(char *addrs) 1531 static int __init vendor_class_identifier_setup(char *addrs)
1532 { 1532 {
1533 if (strlcpy(vendor_class_identifier, addrs, 1533 if (strlcpy(vendor_class_identifier, addrs,
1534 sizeof(vendor_class_identifier)) 1534 sizeof(vendor_class_identifier))
1535 >= sizeof(vendor_class_identifier)) 1535 >= sizeof(vendor_class_identifier))
1536 printk(KERN_WARNING "DHCP: vendorclass too long, truncated to \"%s\"", 1536 printk(KERN_WARNING "DHCP: vendorclass too long, truncated to \"%s\"",
1537 vendor_class_identifier); 1537 vendor_class_identifier);
1538 return 1; 1538 return 1;
1539 } 1539 }
1540 1540
1541 __setup("ip=", ip_auto_config_setup); 1541 __setup("ip=", ip_auto_config_setup);
1542 __setup("nfsaddrs=", nfsaddrs_config_setup); 1542 __setup("nfsaddrs=", nfsaddrs_config_setup);
1543 __setup("dhcpclass=", vendor_class_identifier_setup); 1543 __setup("dhcpclass=", vendor_class_identifier_setup);
1544 1544