Commit 14897e35fdc045fff9baabf0354570da22386706
Exists in
master
and in
7 other branches
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
- Documentation/SubmittingPatches
- Documentation/filesystems/00-INDEX
- Documentation/filesystems/nfsroot.txt
- Documentation/filesystems/rpc-cache.txt
- Documentation/filesystems/seq_file.txt
- Documentation/hrtimers/highres.txt
- Documentation/kernel-parameters.txt
- Documentation/nfsroot.txt
- Documentation/rpc-cache.txt
- Documentation/sched-rt-group.txt
- Documentation/scheduler/00-INDEX
- Documentation/scheduler/sched-rt-group.txt
- Documentation/spinlocks.txt
- fs/Kconfig
- include/linux/spinlock.h
- net/ipv4/Kconfig
- net/ipv4/ipconfig.c
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 |
fs/Kconfig
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 |
net/ipv4/Kconfig
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 |
net/ipv4/ipconfig.c
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 |