diff options
author | Ingo Molnar <mingo@elte.hu> | 2009-01-10 21:43:52 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-01-10 21:43:52 -0500 |
commit | 99cd7074891f87c49660e3b2880564324a4733ac (patch) | |
tree | 903d2665bcb445f1f265d1adf7a99f265bcefc15 /Documentation | |
parent | e8a9cbf6ae620d9e5ba9cb42001c033287a284a3 (diff) | |
parent | c59765042f53a79a7a65585042ff463b69cb248c (diff) |
Merge commit 'v2.6.29-rc1' into tracing/urgent
Diffstat (limited to 'Documentation')
71 files changed, 3048 insertions, 362 deletions
diff --git a/Documentation/ABI/testing/sysfs-class-regulator b/Documentation/ABI/testing/sysfs-class-regulator index 3731f6f29bcb..873ef1fc1569 100644 --- a/Documentation/ABI/testing/sysfs-class-regulator +++ b/Documentation/ABI/testing/sysfs-class-regulator | |||
@@ -3,8 +3,9 @@ Date: April 2008 | |||
3 | KernelVersion: 2.6.26 | 3 | KernelVersion: 2.6.26 |
4 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> | 4 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> |
5 | Description: | 5 | Description: |
6 | Each regulator directory will contain a field called | 6 | Some regulator directories will contain a field called |
7 | state. This holds the regulator output state. | 7 | state. This reports the regulator enable status, for |
8 | regulators which can report that value. | ||
8 | 9 | ||
9 | This will be one of the following strings: | 10 | This will be one of the following strings: |
10 | 11 | ||
@@ -18,7 +19,8 @@ Description: | |||
18 | 'disabled' means the regulator output is OFF and is not | 19 | 'disabled' means the regulator output is OFF and is not |
19 | supplying power to the system.. | 20 | supplying power to the system.. |
20 | 21 | ||
21 | 'unknown' means software cannot determine the state. | 22 | 'unknown' means software cannot determine the state, or |
23 | the reported state is invalid. | ||
22 | 24 | ||
23 | NOTE: this field can be used in conjunction with microvolts | 25 | NOTE: this field can be used in conjunction with microvolts |
24 | and microamps to determine regulator output levels. | 26 | and microamps to determine regulator output levels. |
@@ -53,9 +55,10 @@ Date: April 2008 | |||
53 | KernelVersion: 2.6.26 | 55 | KernelVersion: 2.6.26 |
54 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> | 56 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> |
55 | Description: | 57 | Description: |
56 | Each regulator directory will contain a field called | 58 | Some regulator directories will contain a field called |
57 | microvolts. This holds the regulator output voltage setting | 59 | microvolts. This holds the regulator output voltage setting |
58 | measured in microvolts (i.e. E-6 Volts). | 60 | measured in microvolts (i.e. E-6 Volts), for regulators |
61 | which can report that voltage. | ||
59 | 62 | ||
60 | NOTE: This value should not be used to determine the regulator | 63 | NOTE: This value should not be used to determine the regulator |
61 | output voltage level as this value is the same regardless of | 64 | output voltage level as this value is the same regardless of |
@@ -67,9 +70,10 @@ Date: April 2008 | |||
67 | KernelVersion: 2.6.26 | 70 | KernelVersion: 2.6.26 |
68 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> | 71 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> |
69 | Description: | 72 | Description: |
70 | Each regulator directory will contain a field called | 73 | Some regulator directories will contain a field called |
71 | microamps. This holds the regulator output current limit | 74 | microamps. This holds the regulator output current limit |
72 | setting measured in microamps (i.e. E-6 Amps). | 75 | setting measured in microamps (i.e. E-6 Amps), for regulators |
76 | which can report that current. | ||
73 | 77 | ||
74 | NOTE: This value should not be used to determine the regulator | 78 | NOTE: This value should not be used to determine the regulator |
75 | output current level as this value is the same regardless of | 79 | output current level as this value is the same regardless of |
@@ -81,8 +85,9 @@ Date: April 2008 | |||
81 | KernelVersion: 2.6.26 | 85 | KernelVersion: 2.6.26 |
82 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> | 86 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> |
83 | Description: | 87 | Description: |
84 | Each regulator directory will contain a field called | 88 | Some regulator directories will contain a field called |
85 | opmode. This holds the regulator operating mode setting. | 89 | opmode. This holds the current regulator operating mode, |
90 | for regulators which can report it. | ||
86 | 91 | ||
87 | The opmode value can be one of the following strings: | 92 | The opmode value can be one of the following strings: |
88 | 93 | ||
@@ -92,7 +97,7 @@ Description: | |||
92 | 'standby' | 97 | 'standby' |
93 | 'unknown' | 98 | 'unknown' |
94 | 99 | ||
95 | The modes are described in include/linux/regulator/regulator.h | 100 | The modes are described in include/linux/regulator/consumer.h |
96 | 101 | ||
97 | NOTE: This value should not be used to determine the regulator | 102 | NOTE: This value should not be used to determine the regulator |
98 | output operating mode as this value is the same regardless of | 103 | output operating mode as this value is the same regardless of |
@@ -104,9 +109,10 @@ Date: April 2008 | |||
104 | KernelVersion: 2.6.26 | 109 | KernelVersion: 2.6.26 |
105 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> | 110 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> |
106 | Description: | 111 | Description: |
107 | Each regulator directory will contain a field called | 112 | Some regulator directories will contain a field called |
108 | min_microvolts. This holds the minimum safe working regulator | 113 | min_microvolts. This holds the minimum safe working regulator |
109 | output voltage setting for this domain measured in microvolts. | 114 | output voltage setting for this domain measured in microvolts, |
115 | for regulators which support voltage constraints. | ||
110 | 116 | ||
111 | NOTE: this will return the string 'constraint not defined' if | 117 | NOTE: this will return the string 'constraint not defined' if |
112 | the power domain has no min microvolts constraint defined by | 118 | the power domain has no min microvolts constraint defined by |
@@ -118,9 +124,10 @@ Date: April 2008 | |||
118 | KernelVersion: 2.6.26 | 124 | KernelVersion: 2.6.26 |
119 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> | 125 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> |
120 | Description: | 126 | Description: |
121 | Each regulator directory will contain a field called | 127 | Some regulator directories will contain a field called |
122 | max_microvolts. This holds the maximum safe working regulator | 128 | max_microvolts. This holds the maximum safe working regulator |
123 | output voltage setting for this domain measured in microvolts. | 129 | output voltage setting for this domain measured in microvolts, |
130 | for regulators which support voltage constraints. | ||
124 | 131 | ||
125 | NOTE: this will return the string 'constraint not defined' if | 132 | NOTE: this will return the string 'constraint not defined' if |
126 | the power domain has no max microvolts constraint defined by | 133 | the power domain has no max microvolts constraint defined by |
@@ -132,10 +139,10 @@ Date: April 2008 | |||
132 | KernelVersion: 2.6.26 | 139 | KernelVersion: 2.6.26 |
133 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> | 140 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> |
134 | Description: | 141 | Description: |
135 | Each regulator directory will contain a field called | 142 | Some regulator directories will contain a field called |
136 | min_microamps. This holds the minimum safe working regulator | 143 | min_microamps. This holds the minimum safe working regulator |
137 | output current limit setting for this domain measured in | 144 | output current limit setting for this domain measured in |
138 | microamps. | 145 | microamps, for regulators which support current constraints. |
139 | 146 | ||
140 | NOTE: this will return the string 'constraint not defined' if | 147 | NOTE: this will return the string 'constraint not defined' if |
141 | the power domain has no min microamps constraint defined by | 148 | the power domain has no min microamps constraint defined by |
@@ -147,10 +154,10 @@ Date: April 2008 | |||
147 | KernelVersion: 2.6.26 | 154 | KernelVersion: 2.6.26 |
148 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> | 155 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> |
149 | Description: | 156 | Description: |
150 | Each regulator directory will contain a field called | 157 | Some regulator directories will contain a field called |
151 | max_microamps. This holds the maximum safe working regulator | 158 | max_microamps. This holds the maximum safe working regulator |
152 | output current limit setting for this domain measured in | 159 | output current limit setting for this domain measured in |
153 | microamps. | 160 | microamps, for regulators which support current constraints. |
154 | 161 | ||
155 | NOTE: this will return the string 'constraint not defined' if | 162 | NOTE: this will return the string 'constraint not defined' if |
156 | the power domain has no max microamps constraint defined by | 163 | the power domain has no max microamps constraint defined by |
@@ -185,7 +192,7 @@ Date: April 2008 | |||
185 | KernelVersion: 2.6.26 | 192 | KernelVersion: 2.6.26 |
186 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> | 193 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> |
187 | Description: | 194 | Description: |
188 | Each regulator directory will contain a field called | 195 | Some regulator directories will contain a field called |
189 | requested_microamps. This holds the total requested load | 196 | requested_microamps. This holds the total requested load |
190 | current in microamps for this regulator from all its consumer | 197 | current in microamps for this regulator from all its consumer |
191 | devices. | 198 | devices. |
@@ -204,125 +211,102 @@ Date: May 2008 | |||
204 | KernelVersion: 2.6.26 | 211 | KernelVersion: 2.6.26 |
205 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> | 212 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> |
206 | Description: | 213 | Description: |
207 | Each regulator directory will contain a field called | 214 | Some regulator directories will contain a field called |
208 | suspend_mem_microvolts. This holds the regulator output | 215 | suspend_mem_microvolts. This holds the regulator output |
209 | voltage setting for this domain measured in microvolts when | 216 | voltage setting for this domain measured in microvolts when |
210 | the system is suspended to memory. | 217 | the system is suspended to memory, for voltage regulators |
211 | 218 | implementing suspend voltage configuration constraints. | |
212 | NOTE: this will return the string 'not defined' if | ||
213 | the power domain has no suspend to memory voltage defined by | ||
214 | platform code. | ||
215 | 219 | ||
216 | What: /sys/class/regulator/.../suspend_disk_microvolts | 220 | What: /sys/class/regulator/.../suspend_disk_microvolts |
217 | Date: May 2008 | 221 | Date: May 2008 |
218 | KernelVersion: 2.6.26 | 222 | KernelVersion: 2.6.26 |
219 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> | 223 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> |
220 | Description: | 224 | Description: |
221 | Each regulator directory will contain a field called | 225 | Some regulator directories will contain a field called |
222 | suspend_disk_microvolts. This holds the regulator output | 226 | suspend_disk_microvolts. This holds the regulator output |
223 | voltage setting for this domain measured in microvolts when | 227 | voltage setting for this domain measured in microvolts when |
224 | the system is suspended to disk. | 228 | the system is suspended to disk, for voltage regulators |
225 | 229 | implementing suspend voltage configuration constraints. | |
226 | NOTE: this will return the string 'not defined' if | ||
227 | the power domain has no suspend to disk voltage defined by | ||
228 | platform code. | ||
229 | 230 | ||
230 | What: /sys/class/regulator/.../suspend_standby_microvolts | 231 | What: /sys/class/regulator/.../suspend_standby_microvolts |
231 | Date: May 2008 | 232 | Date: May 2008 |
232 | KernelVersion: 2.6.26 | 233 | KernelVersion: 2.6.26 |
233 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> | 234 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> |
234 | Description: | 235 | Description: |
235 | Each regulator directory will contain a field called | 236 | Some regulator directories will contain a field called |
236 | suspend_standby_microvolts. This holds the regulator output | 237 | suspend_standby_microvolts. This holds the regulator output |
237 | voltage setting for this domain measured in microvolts when | 238 | voltage setting for this domain measured in microvolts when |
238 | the system is suspended to standby. | 239 | the system is suspended to standby, for voltage regulators |
239 | 240 | implementing suspend voltage configuration constraints. | |
240 | NOTE: this will return the string 'not defined' if | ||
241 | the power domain has no suspend to standby voltage defined by | ||
242 | platform code. | ||
243 | 241 | ||
244 | What: /sys/class/regulator/.../suspend_mem_mode | 242 | What: /sys/class/regulator/.../suspend_mem_mode |
245 | Date: May 2008 | 243 | Date: May 2008 |
246 | KernelVersion: 2.6.26 | 244 | KernelVersion: 2.6.26 |
247 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> | 245 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> |
248 | Description: | 246 | Description: |
249 | Each regulator directory will contain a field called | 247 | Some regulator directories will contain a field called |
250 | suspend_mem_mode. This holds the regulator operating mode | 248 | suspend_mem_mode. This holds the regulator operating mode |
251 | setting for this domain when the system is suspended to | 249 | setting for this domain when the system is suspended to |
252 | memory. | 250 | memory, for regulators implementing suspend mode |
253 | 251 | configuration constraints. | |
254 | NOTE: this will return the string 'not defined' if | ||
255 | the power domain has no suspend to memory mode defined by | ||
256 | platform code. | ||
257 | 252 | ||
258 | What: /sys/class/regulator/.../suspend_disk_mode | 253 | What: /sys/class/regulator/.../suspend_disk_mode |
259 | Date: May 2008 | 254 | Date: May 2008 |
260 | KernelVersion: 2.6.26 | 255 | KernelVersion: 2.6.26 |
261 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> | 256 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> |
262 | Description: | 257 | Description: |
263 | Each regulator directory will contain a field called | 258 | Some regulator directories will contain a field called |
264 | suspend_disk_mode. This holds the regulator operating mode | 259 | suspend_disk_mode. This holds the regulator operating mode |
265 | setting for this domain when the system is suspended to disk. | 260 | setting for this domain when the system is suspended to disk, |
266 | 261 | for regulators implementing suspend mode configuration | |
267 | NOTE: this will return the string 'not defined' if | 262 | constraints. |
268 | the power domain has no suspend to disk mode defined by | ||
269 | platform code. | ||
270 | 263 | ||
271 | What: /sys/class/regulator/.../suspend_standby_mode | 264 | What: /sys/class/regulator/.../suspend_standby_mode |
272 | Date: May 2008 | 265 | Date: May 2008 |
273 | KernelVersion: 2.6.26 | 266 | KernelVersion: 2.6.26 |
274 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> | 267 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> |
275 | Description: | 268 | Description: |
276 | Each regulator directory will contain a field called | 269 | Some regulator directories will contain a field called |
277 | suspend_standby_mode. This holds the regulator operating mode | 270 | suspend_standby_mode. This holds the regulator operating mode |
278 | setting for this domain when the system is suspended to | 271 | setting for this domain when the system is suspended to |
279 | standby. | 272 | standby, for regulators implementing suspend mode |
280 | 273 | configuration constraints. | |
281 | NOTE: this will return the string 'not defined' if | ||
282 | the power domain has no suspend to standby mode defined by | ||
283 | platform code. | ||
284 | 274 | ||
285 | What: /sys/class/regulator/.../suspend_mem_state | 275 | What: /sys/class/regulator/.../suspend_mem_state |
286 | Date: May 2008 | 276 | Date: May 2008 |
287 | KernelVersion: 2.6.26 | 277 | KernelVersion: 2.6.26 |
288 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> | 278 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> |
289 | Description: | 279 | Description: |
290 | Each regulator directory will contain a field called | 280 | Some regulator directories will contain a field called |
291 | suspend_mem_state. This holds the regulator operating state | 281 | suspend_mem_state. This holds the regulator operating state |
292 | when suspended to memory. | 282 | when suspended to memory, for regulators implementing suspend |
293 | 283 | configuration constraints. | |
294 | This will be one of the following strings: | ||
295 | 284 | ||
296 | 'enabled' | 285 | This will be one of the same strings reported by |
297 | 'disabled' | 286 | the "state" attribute. |
298 | 'not defined' | ||
299 | 287 | ||
300 | What: /sys/class/regulator/.../suspend_disk_state | 288 | What: /sys/class/regulator/.../suspend_disk_state |
301 | Date: May 2008 | 289 | Date: May 2008 |
302 | KernelVersion: 2.6.26 | 290 | KernelVersion: 2.6.26 |
303 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> | 291 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> |
304 | Description: | 292 | Description: |
305 | Each regulator directory will contain a field called | 293 | Some regulator directories will contain a field called |
306 | suspend_disk_state. This holds the regulator operating state | 294 | suspend_disk_state. This holds the regulator operating state |
307 | when suspended to disk. | 295 | when suspended to disk, for regulators implementing |
308 | 296 | suspend configuration constraints. | |
309 | This will be one of the following strings: | ||
310 | 297 | ||
311 | 'enabled' | 298 | This will be one of the same strings reported by |
312 | 'disabled' | 299 | the "state" attribute. |
313 | 'not defined' | ||
314 | 300 | ||
315 | What: /sys/class/regulator/.../suspend_standby_state | 301 | What: /sys/class/regulator/.../suspend_standby_state |
316 | Date: May 2008 | 302 | Date: May 2008 |
317 | KernelVersion: 2.6.26 | 303 | KernelVersion: 2.6.26 |
318 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> | 304 | Contact: Liam Girdwood <lrg@slimlogic.co.uk> |
319 | Description: | 305 | Description: |
320 | Each regulator directory will contain a field called | 306 | Some regulator directories will contain a field called |
321 | suspend_standby_state. This holds the regulator operating | 307 | suspend_standby_state. This holds the regulator operating |
322 | state when suspended to standby. | 308 | state when suspended to standby, for regulators implementing |
323 | 309 | suspend configuration constraints. | |
324 | This will be one of the following strings: | ||
325 | 310 | ||
326 | 'enabled' | 311 | This will be one of the same strings reported by |
327 | 'disabled' | 312 | the "state" attribute. |
328 | 'not defined' | ||
diff --git a/Documentation/ABI/testing/sysfs-devices-memory b/Documentation/ABI/testing/sysfs-devices-memory index 7a16fe1e2270..9fe91c02ee40 100644 --- a/Documentation/ABI/testing/sysfs-devices-memory +++ b/Documentation/ABI/testing/sysfs-devices-memory | |||
@@ -6,7 +6,6 @@ Description: | |||
6 | internal state of the kernel memory blocks. Files could be | 6 | internal state of the kernel memory blocks. Files could be |
7 | added or removed dynamically to represent hot-add/remove | 7 | added or removed dynamically to represent hot-add/remove |
8 | operations. | 8 | operations. |
9 | |||
10 | Users: hotplug memory add/remove tools | 9 | Users: hotplug memory add/remove tools |
11 | https://w3.opensource.ibm.com/projects/powerpc-utils/ | 10 | https://w3.opensource.ibm.com/projects/powerpc-utils/ |
12 | 11 | ||
@@ -19,6 +18,56 @@ Description: | |||
19 | This is useful for a user-level agent to determine | 18 | This is useful for a user-level agent to determine |
20 | identify removable sections of the memory before attempting | 19 | identify removable sections of the memory before attempting |
21 | potentially expensive hot-remove memory operation | 20 | potentially expensive hot-remove memory operation |
21 | Users: hotplug memory remove tools | ||
22 | https://w3.opensource.ibm.com/projects/powerpc-utils/ | ||
23 | |||
24 | What: /sys/devices/system/memory/memoryX/phys_device | ||
25 | Date: September 2008 | ||
26 | Contact: Badari Pulavarty <pbadari@us.ibm.com> | ||
27 | Description: | ||
28 | The file /sys/devices/system/memory/memoryX/phys_device | ||
29 | is read-only and is designed to show the name of physical | ||
30 | memory device. Implementation is currently incomplete. | ||
22 | 31 | ||
32 | What: /sys/devices/system/memory/memoryX/phys_index | ||
33 | Date: September 2008 | ||
34 | Contact: Badari Pulavarty <pbadari@us.ibm.com> | ||
35 | Description: | ||
36 | The file /sys/devices/system/memory/memoryX/phys_index | ||
37 | is read-only and contains the section ID in hexadecimal | ||
38 | which is equivalent to decimal X contained in the | ||
39 | memory section directory name. | ||
40 | |||
41 | What: /sys/devices/system/memory/memoryX/state | ||
42 | Date: September 2008 | ||
43 | Contact: Badari Pulavarty <pbadari@us.ibm.com> | ||
44 | Description: | ||
45 | The file /sys/devices/system/memory/memoryX/state | ||
46 | is read-write. When read, it's contents show the | ||
47 | online/offline state of the memory section. When written, | ||
48 | root can toggle the the online/offline state of a removable | ||
49 | memory section (see removable file description above) | ||
50 | using the following commands. | ||
51 | # echo online > /sys/devices/system/memory/memoryX/state | ||
52 | # echo offline > /sys/devices/system/memory/memoryX/state | ||
53 | |||
54 | For example, if /sys/devices/system/memory/memory22/removable | ||
55 | contains a value of 1 and | ||
56 | /sys/devices/system/memory/memory22/state contains the | ||
57 | string "online" the following command can be executed by | ||
58 | by root to offline that section. | ||
59 | # echo offline > /sys/devices/system/memory/memory22/state | ||
23 | Users: hotplug memory remove tools | 60 | Users: hotplug memory remove tools |
24 | https://w3.opensource.ibm.com/projects/powerpc-utils/ | 61 | https://w3.opensource.ibm.com/projects/powerpc-utils/ |
62 | |||
63 | What: /sys/devices/system/node/nodeX/memoryY | ||
64 | Date: September 2008 | ||
65 | Contact: Gary Hade <garyhade@us.ibm.com> | ||
66 | Description: | ||
67 | When CONFIG_NUMA is enabled | ||
68 | /sys/devices/system/node/nodeX/memoryY is a symbolic link that | ||
69 | points to the corresponding /sys/devices/system/memory/memoryY | ||
70 | memory section directory. For example, the following symbolic | ||
71 | link is created for memory section 9 on node0. | ||
72 | /sys/devices/system/node/node0/memory9 -> ../../memory/memory9 | ||
73 | |||
diff --git a/Documentation/DMA-mapping.txt b/Documentation/DMA-mapping.txt index c74fec8c2351..b2a4d6d244d9 100644 --- a/Documentation/DMA-mapping.txt +++ b/Documentation/DMA-mapping.txt | |||
@@ -26,7 +26,7 @@ mapped only for the time they are actually used and unmapped after the DMA | |||
26 | transfer. | 26 | transfer. |
27 | 27 | ||
28 | The following API will work of course even on platforms where no such | 28 | The following API will work of course even on platforms where no such |
29 | hardware exists, see e.g. include/asm-i386/pci.h for how it is implemented on | 29 | hardware exists, see e.g. arch/x86/include/asm/pci.h for how it is implemented on |
30 | top of the virt_to_bus interface. | 30 | top of the virt_to_bus interface. |
31 | 31 | ||
32 | First of all, you should make sure | 32 | First of all, you should make sure |
diff --git a/Documentation/DocBook/Makefile b/Documentation/DocBook/Makefile index 0a08126d3094..dc3154e49279 100644 --- a/Documentation/DocBook/Makefile +++ b/Documentation/DocBook/Makefile | |||
@@ -12,7 +12,7 @@ DOCBOOKS := z8530book.xml mcabook.xml \ | |||
12 | kernel-api.xml filesystems.xml lsm.xml usb.xml kgdb.xml \ | 12 | kernel-api.xml filesystems.xml lsm.xml usb.xml kgdb.xml \ |
13 | gadget.xml libata.xml mtdnand.xml librs.xml rapidio.xml \ | 13 | gadget.xml libata.xml mtdnand.xml librs.xml rapidio.xml \ |
14 | genericirq.xml s390-drivers.xml uio-howto.xml scsi.xml \ | 14 | genericirq.xml s390-drivers.xml uio-howto.xml scsi.xml \ |
15 | mac80211.xml debugobjects.xml sh.xml | 15 | mac80211.xml debugobjects.xml sh.xml regulator.xml |
16 | 16 | ||
17 | ### | 17 | ### |
18 | # The build process is as follows (targets): | 18 | # The build process is as follows (targets): |
diff --git a/Documentation/DocBook/networking.tmpl b/Documentation/DocBook/networking.tmpl index 627707a3cb9d..59ad69a9d777 100644 --- a/Documentation/DocBook/networking.tmpl +++ b/Documentation/DocBook/networking.tmpl | |||
@@ -74,6 +74,14 @@ | |||
74 | !Enet/sunrpc/rpcb_clnt.c | 74 | !Enet/sunrpc/rpcb_clnt.c |
75 | !Enet/sunrpc/clnt.c | 75 | !Enet/sunrpc/clnt.c |
76 | </sect1> | 76 | </sect1> |
77 | <sect1><title>WiMAX</title> | ||
78 | !Enet/wimax/op-msg.c | ||
79 | !Enet/wimax/op-reset.c | ||
80 | !Enet/wimax/op-rfkill.c | ||
81 | !Enet/wimax/stack.c | ||
82 | !Iinclude/net/wimax.h | ||
83 | !Iinclude/linux/wimax.h | ||
84 | </sect1> | ||
77 | </chapter> | 85 | </chapter> |
78 | 86 | ||
79 | <chapter id="netdev"> | 87 | <chapter id="netdev"> |
diff --git a/Documentation/DocBook/regulator.tmpl b/Documentation/DocBook/regulator.tmpl new file mode 100644 index 000000000000..53f4f8d3b810 --- /dev/null +++ b/Documentation/DocBook/regulator.tmpl | |||
@@ -0,0 +1,304 @@ | |||
1 | <?xml version="1.0" encoding="UTF-8"?> | ||
2 | <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" | ||
3 | "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" []> | ||
4 | |||
5 | <book id="regulator-api"> | ||
6 | <bookinfo> | ||
7 | <title>Voltage and current regulator API</title> | ||
8 | |||
9 | <authorgroup> | ||
10 | <author> | ||
11 | <firstname>Liam</firstname> | ||
12 | <surname>Girdwood</surname> | ||
13 | <affiliation> | ||
14 | <address> | ||
15 | <email>lrg@slimlogic.co.uk</email> | ||
16 | </address> | ||
17 | </affiliation> | ||
18 | </author> | ||
19 | <author> | ||
20 | <firstname>Mark</firstname> | ||
21 | <surname>Brown</surname> | ||
22 | <affiliation> | ||
23 | <orgname>Wolfson Microelectronics</orgname> | ||
24 | <address> | ||
25 | <email>broonie@opensource.wolfsonmicro.com</email> | ||
26 | </address> | ||
27 | </affiliation> | ||
28 | </author> | ||
29 | </authorgroup> | ||
30 | |||
31 | <copyright> | ||
32 | <year>2007-2008</year> | ||
33 | <holder>Wolfson Microelectronics</holder> | ||
34 | </copyright> | ||
35 | <copyright> | ||
36 | <year>2008</year> | ||
37 | <holder>Liam Girdwood</holder> | ||
38 | </copyright> | ||
39 | |||
40 | <legalnotice> | ||
41 | <para> | ||
42 | This documentation is free software; you can redistribute | ||
43 | it and/or modify it under the terms of the GNU General Public | ||
44 | License version 2 as published by the Free Software Foundation. | ||
45 | </para> | ||
46 | |||
47 | <para> | ||
48 | This program is distributed in the hope that it will be | ||
49 | useful, but WITHOUT ANY WARRANTY; without even the implied | ||
50 | warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||
51 | See the GNU General Public License for more details. | ||
52 | </para> | ||
53 | |||
54 | <para> | ||
55 | You should have received a copy of the GNU General Public | ||
56 | License along with this program; if not, write to the Free | ||
57 | Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, | ||
58 | MA 02111-1307 USA | ||
59 | </para> | ||
60 | |||
61 | <para> | ||
62 | For more details see the file COPYING in the source | ||
63 | distribution of Linux. | ||
64 | </para> | ||
65 | </legalnotice> | ||
66 | </bookinfo> | ||
67 | |||
68 | <toc></toc> | ||
69 | |||
70 | <chapter id="intro"> | ||
71 | <title>Introduction</title> | ||
72 | <para> | ||
73 | This framework is designed to provide a standard kernel | ||
74 | interface to control voltage and current regulators. | ||
75 | </para> | ||
76 | <para> | ||
77 | The intention is to allow systems to dynamically control | ||
78 | regulator power output in order to save power and prolong | ||
79 | battery life. This applies to both voltage regulators (where | ||
80 | voltage output is controllable) and current sinks (where current | ||
81 | limit is controllable). | ||
82 | </para> | ||
83 | <para> | ||
84 | Note that additional (and currently more complete) documentation | ||
85 | is available in the Linux kernel source under | ||
86 | <filename>Documentation/power/regulator</filename>. | ||
87 | </para> | ||
88 | |||
89 | <sect1 id="glossary"> | ||
90 | <title>Glossary</title> | ||
91 | <para> | ||
92 | The regulator API uses a number of terms which may not be | ||
93 | familiar: | ||
94 | </para> | ||
95 | <glossary> | ||
96 | |||
97 | <glossentry> | ||
98 | <glossterm>Regulator</glossterm> | ||
99 | <glossdef> | ||
100 | <para> | ||
101 | Electronic device that supplies power to other devices. Most | ||
102 | regulators can enable and disable their output and some can also | ||
103 | control their output voltage or current. | ||
104 | </para> | ||
105 | </glossdef> | ||
106 | </glossentry> | ||
107 | |||
108 | <glossentry> | ||
109 | <glossterm>Consumer</glossterm> | ||
110 | <glossdef> | ||
111 | <para> | ||
112 | Electronic device which consumes power provided by a regulator. | ||
113 | These may either be static, requiring only a fixed supply, or | ||
114 | dynamic, requiring active management of the regulator at | ||
115 | runtime. | ||
116 | </para> | ||
117 | </glossdef> | ||
118 | </glossentry> | ||
119 | |||
120 | <glossentry> | ||
121 | <glossterm>Power Domain</glossterm> | ||
122 | <glossdef> | ||
123 | <para> | ||
124 | The electronic circuit supplied by a given regulator, including | ||
125 | the regulator and all consumer devices. The configuration of | ||
126 | the regulator is shared between all the components in the | ||
127 | circuit. | ||
128 | </para> | ||
129 | </glossdef> | ||
130 | </glossentry> | ||
131 | |||
132 | <glossentry> | ||
133 | <glossterm>Power Management Integrated Circuit</glossterm> | ||
134 | <acronym>PMIC</acronym> | ||
135 | <glossdef> | ||
136 | <para> | ||
137 | An IC which contains numerous regulators and often also other | ||
138 | subsystems. In an embedded system the primary PMIC is often | ||
139 | equivalent to a combination of the PSU and southbridge in a | ||
140 | desktop system. | ||
141 | </para> | ||
142 | </glossdef> | ||
143 | </glossentry> | ||
144 | </glossary> | ||
145 | </sect1> | ||
146 | </chapter> | ||
147 | |||
148 | <chapter id="consumer"> | ||
149 | <title>Consumer driver interface</title> | ||
150 | <para> | ||
151 | This offers a similar API to the kernel clock framework. | ||
152 | Consumer drivers use <link | ||
153 | linkend='API-regulator-get'>get</link> and <link | ||
154 | linkend='API-regulator-put'>put</link> operations to acquire and | ||
155 | release regulators. Functions are | ||
156 | provided to <link linkend='API-regulator-enable'>enable</link> | ||
157 | and <link linkend='API-regulator-disable'>disable</link> the | ||
158 | reguator and to get and set the runtime parameters of the | ||
159 | regulator. | ||
160 | </para> | ||
161 | <para> | ||
162 | When requesting regulators consumers use symbolic names for their | ||
163 | supplies, such as "Vcc", which are mapped into actual regulator | ||
164 | devices by the machine interface. | ||
165 | </para> | ||
166 | <para> | ||
167 | A stub version of this API is provided when the regulator | ||
168 | framework is not in use in order to minimise the need to use | ||
169 | ifdefs. | ||
170 | </para> | ||
171 | |||
172 | <sect1 id="consumer-enable"> | ||
173 | <title>Enabling and disabling</title> | ||
174 | <para> | ||
175 | The regulator API provides reference counted enabling and | ||
176 | disabling of regulators. Consumer devices use the <function><link | ||
177 | linkend='API-regulator-enable'>regulator_enable</link></function> | ||
178 | and <function><link | ||
179 | linkend='API-regulator-disable'>regulator_disable</link> | ||
180 | </function> functions to enable and disable regulators. Calls | ||
181 | to the two functions must be balanced. | ||
182 | </para> | ||
183 | <para> | ||
184 | Note that since multiple consumers may be using a regulator and | ||
185 | machine constraints may not allow the regulator to be disabled | ||
186 | there is no guarantee that calling | ||
187 | <function>regulator_disable</function> will actually cause the | ||
188 | supply provided by the regulator to be disabled. Consumer | ||
189 | drivers should assume that the regulator may be enabled at all | ||
190 | times. | ||
191 | </para> | ||
192 | </sect1> | ||
193 | |||
194 | <sect1 id="consumer-config"> | ||
195 | <title>Configuration</title> | ||
196 | <para> | ||
197 | Some consumer devices may need to be able to dynamically | ||
198 | configure their supplies. For example, MMC drivers may need to | ||
199 | select the correct operating voltage for their cards. This may | ||
200 | be done while the regulator is enabled or disabled. | ||
201 | </para> | ||
202 | <para> | ||
203 | The <function><link | ||
204 | linkend='API-regulator-set-voltage'>regulator_set_voltage</link> | ||
205 | </function> and <function><link | ||
206 | linkend='API-regulator-set-current-limit' | ||
207 | >regulator_set_current_limit</link> | ||
208 | </function> functions provide the primary interface for this. | ||
209 | Both take ranges of voltages and currents, supporting drivers | ||
210 | that do not require a specific value (eg, CPU frequency scaling | ||
211 | normally permits the CPU to use a wider range of supply | ||
212 | voltages at lower frequencies but does not require that the | ||
213 | supply voltage be lowered). Where an exact value is required | ||
214 | both minimum and maximum values should be identical. | ||
215 | </para> | ||
216 | </sect1> | ||
217 | |||
218 | <sect1 id="consumer-callback"> | ||
219 | <title>Callbacks</title> | ||
220 | <para> | ||
221 | Callbacks may also be <link | ||
222 | linkend='API-regulator-register-notifier'>registered</link> | ||
223 | for events such as regulation failures. | ||
224 | </para> | ||
225 | </sect1> | ||
226 | </chapter> | ||
227 | |||
228 | <chapter id="driver"> | ||
229 | <title>Regulator driver interface</title> | ||
230 | <para> | ||
231 | Drivers for regulator chips <link | ||
232 | linkend='API-regulator-register'>register</link> the regulators | ||
233 | with the regulator core, providing operations structures to the | ||
234 | core. A <link | ||
235 | linkend='API-regulator-notifier-call-chain'>notifier</link> interface | ||
236 | allows error conditions to be reported to the core. | ||
237 | </para> | ||
238 | <para> | ||
239 | Registration should be triggered by explicit setup done by the | ||
240 | platform, supplying a <link | ||
241 | linkend='API-struct-regulator-init-data'>struct | ||
242 | regulator_init_data</link> for the regulator containing | ||
243 | <link linkend='machine-constraint'>constraint</link> and | ||
244 | <link linkend='machine-supply'>supply</link> information. | ||
245 | </para> | ||
246 | </chapter> | ||
247 | |||
248 | <chapter id="machine"> | ||
249 | <title>Machine interface</title> | ||
250 | <para> | ||
251 | This interface provides a way to define how regulators are | ||
252 | connected to consumers on a given system and what the valid | ||
253 | operating parameters are for the system. | ||
254 | </para> | ||
255 | |||
256 | <sect1 id="machine-supply"> | ||
257 | <title>Supplies</title> | ||
258 | <para> | ||
259 | Regulator supplies are specified using <link | ||
260 | linkend='API-struct-regulator-consumer-supply'>struct | ||
261 | regulator_consumer_supply</link>. This is done at | ||
262 | <link linkend='driver'>driver registration | ||
263 | time</link> as part of the machine constraints. | ||
264 | </para> | ||
265 | </sect1> | ||
266 | |||
267 | <sect1 id="machine-constraint"> | ||
268 | <title>Constraints</title> | ||
269 | <para> | ||
270 | As well as definining the connections the machine interface | ||
271 | also provides constraints definining the operations that | ||
272 | clients are allowed to perform and the parameters that may be | ||
273 | set. This is required since generally regulator devices will | ||
274 | offer more flexibility than it is safe to use on a given | ||
275 | system, for example supporting higher supply voltages than the | ||
276 | consumers are rated for. | ||
277 | </para> | ||
278 | <para> | ||
279 | This is done at <link linkend='driver'>driver | ||
280 | registration time</link> by providing a <link | ||
281 | linkend='API-struct-regulation-constraints'>struct | ||
282 | regulation_constraints</link>. | ||
283 | </para> | ||
284 | <para> | ||
285 | The constraints may also specify an initial configuration for the | ||
286 | regulator in the constraints, which is particularly useful for | ||
287 | use with static consumers. | ||
288 | </para> | ||
289 | </sect1> | ||
290 | </chapter> | ||
291 | |||
292 | <chapter id="api"> | ||
293 | <title>API reference</title> | ||
294 | <para> | ||
295 | Due to limitations of the kernel documentation framework and the | ||
296 | existing layout of the source code the entire regulator API is | ||
297 | documented here. | ||
298 | </para> | ||
299 | !Iinclude/linux/regulator/consumer.h | ||
300 | !Iinclude/linux/regulator/machine.h | ||
301 | !Iinclude/linux/regulator/driver.h | ||
302 | !Edrivers/regulator/core.c | ||
303 | </chapter> | ||
304 | </book> | ||
diff --git a/Documentation/DocBook/uio-howto.tmpl b/Documentation/DocBook/uio-howto.tmpl index df87d1b93605..b787e4721c90 100644 --- a/Documentation/DocBook/uio-howto.tmpl +++ b/Documentation/DocBook/uio-howto.tmpl | |||
@@ -42,6 +42,12 @@ GPL version 2. | |||
42 | 42 | ||
43 | <revhistory> | 43 | <revhistory> |
44 | <revision> | 44 | <revision> |
45 | <revnumber>0.6</revnumber> | ||
46 | <date>2008-12-05</date> | ||
47 | <authorinitials>hjk</authorinitials> | ||
48 | <revremark>Added description of portio sysfs attributes.</revremark> | ||
49 | </revision> | ||
50 | <revision> | ||
45 | <revnumber>0.5</revnumber> | 51 | <revnumber>0.5</revnumber> |
46 | <date>2008-05-22</date> | 52 | <date>2008-05-22</date> |
47 | <authorinitials>hjk</authorinitials> | 53 | <authorinitials>hjk</authorinitials> |
@@ -318,6 +324,54 @@ interested in translating it, please email me | |||
318 | offset = N * getpagesize(); | 324 | offset = N * getpagesize(); |
319 | </programlisting> | 325 | </programlisting> |
320 | 326 | ||
327 | <para> | ||
328 | Sometimes there is hardware with memory-like regions that can not be | ||
329 | mapped with the technique described here, but there are still ways to | ||
330 | access them from userspace. The most common example are x86 ioports. | ||
331 | On x86 systems, userspace can access these ioports using | ||
332 | <function>ioperm()</function>, <function>iopl()</function>, | ||
333 | <function>inb()</function>, <function>outb()</function>, and similar | ||
334 | functions. | ||
335 | </para> | ||
336 | <para> | ||
337 | Since these ioport regions can not be mapped, they will not appear under | ||
338 | <filename>/sys/class/uio/uioX/maps/</filename> like the normal memory | ||
339 | described above. Without information about the port regions a hardware | ||
340 | has to offer, it becomes difficult for the userspace part of the | ||
341 | driver to find out which ports belong to which UIO device. | ||
342 | </para> | ||
343 | <para> | ||
344 | To address this situation, the new directory | ||
345 | <filename>/sys/class/uio/uioX/portio/</filename> was added. It only | ||
346 | exists if the driver wants to pass information about one or more port | ||
347 | regions to userspace. If that is the case, subdirectories named | ||
348 | <filename>port0</filename>, <filename>port1</filename>, and so on, | ||
349 | will appear underneath | ||
350 | <filename>/sys/class/uio/uioX/portio/</filename>. | ||
351 | </para> | ||
352 | <para> | ||
353 | Each <filename>portX/</filename> directory contains three read-only | ||
354 | files that show start, size, and type of the port region: | ||
355 | </para> | ||
356 | <itemizedlist> | ||
357 | <listitem> | ||
358 | <para> | ||
359 | <filename>start</filename>: The first port of this region. | ||
360 | </para> | ||
361 | </listitem> | ||
362 | <listitem> | ||
363 | <para> | ||
364 | <filename>size</filename>: The number of ports in this region. | ||
365 | </para> | ||
366 | </listitem> | ||
367 | <listitem> | ||
368 | <para> | ||
369 | <filename>porttype</filename>: A string describing the type of port. | ||
370 | </para> | ||
371 | </listitem> | ||
372 | </itemizedlist> | ||
373 | |||
374 | |||
321 | </sect1> | 375 | </sect1> |
322 | </chapter> | 376 | </chapter> |
323 | 377 | ||
@@ -339,12 +393,12 @@ offset = N * getpagesize(); | |||
339 | 393 | ||
340 | <itemizedlist> | 394 | <itemizedlist> |
341 | <listitem><para> | 395 | <listitem><para> |
342 | <varname>char *name</varname>: Required. The name of your driver as | 396 | <varname>const char *name</varname>: Required. The name of your driver as |
343 | it will appear in sysfs. I recommend using the name of your module for this. | 397 | it will appear in sysfs. I recommend using the name of your module for this. |
344 | </para></listitem> | 398 | </para></listitem> |
345 | 399 | ||
346 | <listitem><para> | 400 | <listitem><para> |
347 | <varname>char *version</varname>: Required. This string appears in | 401 | <varname>const char *version</varname>: Required. This string appears in |
348 | <filename>/sys/class/uio/uioX/version</filename>. | 402 | <filename>/sys/class/uio/uioX/version</filename>. |
349 | </para></listitem> | 403 | </para></listitem> |
350 | 404 | ||
@@ -356,6 +410,13 @@ See the description below for details. | |||
356 | </para></listitem> | 410 | </para></listitem> |
357 | 411 | ||
358 | <listitem><para> | 412 | <listitem><para> |
413 | <varname>struct uio_port port[ MAX_UIO_PORTS_REGIONS ]</varname>: Required | ||
414 | if you want to pass information about ioports to userspace. For each port | ||
415 | region you need to fill one of the <varname>uio_port</varname> structures. | ||
416 | See the description below for details. | ||
417 | </para></listitem> | ||
418 | |||
419 | <listitem><para> | ||
359 | <varname>long irq</varname>: Required. If your hardware generates an | 420 | <varname>long irq</varname>: Required. If your hardware generates an |
360 | interrupt, it's your modules task to determine the irq number during | 421 | interrupt, it's your modules task to determine the irq number during |
361 | initialization. If you don't have a hardware generated interrupt but | 422 | initialization. If you don't have a hardware generated interrupt but |
@@ -448,6 +509,42 @@ Please do not touch the <varname>kobj</varname> element of | |||
448 | <varname>struct uio_mem</varname>! It is used by the UIO framework | 509 | <varname>struct uio_mem</varname>! It is used by the UIO framework |
449 | to set up sysfs files for this mapping. Simply leave it alone. | 510 | to set up sysfs files for this mapping. Simply leave it alone. |
450 | </para> | 511 | </para> |
512 | |||
513 | <para> | ||
514 | Sometimes, your device can have one or more port regions which can not be | ||
515 | mapped to userspace. But if there are other possibilities for userspace to | ||
516 | access these ports, it makes sense to make information about the ports | ||
517 | available in sysfs. For each region, you have to set up a | ||
518 | <varname>struct uio_port</varname> in the <varname>port[]</varname> array. | ||
519 | Here's a description of the fields of <varname>struct uio_port</varname>: | ||
520 | </para> | ||
521 | |||
522 | <itemizedlist> | ||
523 | <listitem><para> | ||
524 | <varname>char *porttype</varname>: Required. Set this to one of the predefined | ||
525 | constants. Use <varname>UIO_PORT_X86</varname> for the ioports found in x86 | ||
526 | architectures. | ||
527 | </para></listitem> | ||
528 | |||
529 | <listitem><para> | ||
530 | <varname>unsigned long start</varname>: Required if the port region is used. | ||
531 | Fill in the number of the first port of this region. | ||
532 | </para></listitem> | ||
533 | |||
534 | <listitem><para> | ||
535 | <varname>unsigned long size</varname>: Fill in the number of ports in this | ||
536 | region. If <varname>size</varname> is zero, the region is considered unused. | ||
537 | Note that you <emphasis>must</emphasis> initialize <varname>size</varname> | ||
538 | with zero for all unused regions. | ||
539 | </para></listitem> | ||
540 | </itemizedlist> | ||
541 | |||
542 | <para> | ||
543 | Please do not touch the <varname>portio</varname> element of | ||
544 | <varname>struct uio_port</varname>! It is used internally by the UIO | ||
545 | framework to set up sysfs files for this region. Simply leave it alone. | ||
546 | </para> | ||
547 | |||
451 | </sect1> | 548 | </sect1> |
452 | 549 | ||
453 | <sect1 id="adding_irq_handler"> | 550 | <sect1 id="adding_irq_handler"> |
diff --git a/Documentation/PCI/pci.txt b/Documentation/PCI/pci.txt index fd4907a2968c..7f6de6ea5b47 100644 --- a/Documentation/PCI/pci.txt +++ b/Documentation/PCI/pci.txt | |||
@@ -294,7 +294,8 @@ NOTE: pci_enable_device() can fail! Check the return value. | |||
294 | 294 | ||
295 | pci_set_master() will enable DMA by setting the bus master bit | 295 | pci_set_master() will enable DMA by setting the bus master bit |
296 | in the PCI_COMMAND register. It also fixes the latency timer value if | 296 | in the PCI_COMMAND register. It also fixes the latency timer value if |
297 | it's set to something bogus by the BIOS. | 297 | it's set to something bogus by the BIOS. pci_clear_master() will |
298 | disable DMA by clearing the bus master bit. | ||
298 | 299 | ||
299 | If the PCI device can use the PCI Memory-Write-Invalidate transaction, | 300 | If the PCI device can use the PCI Memory-Write-Invalidate transaction, |
300 | call pci_set_mwi(). This enables the PCI_COMMAND bit for Mem-Wr-Inval | 301 | call pci_set_mwi(). This enables the PCI_COMMAND bit for Mem-Wr-Inval |
diff --git a/Documentation/RCU/00-INDEX b/Documentation/RCU/00-INDEX index 7dc0695a8f90..9bb62f7b89c3 100644 --- a/Documentation/RCU/00-INDEX +++ b/Documentation/RCU/00-INDEX | |||
@@ -12,6 +12,8 @@ rcuref.txt | |||
12 | - Reference-count design for elements of lists/arrays protected by RCU | 12 | - Reference-count design for elements of lists/arrays protected by RCU |
13 | rcu.txt | 13 | rcu.txt |
14 | - RCU Concepts | 14 | - RCU Concepts |
15 | rcubarrier.txt | ||
16 | - Unloading modules that use RCU callbacks | ||
15 | RTFP.txt | 17 | RTFP.txt |
16 | - List of RCU papers (bibliography) going back to 1980. | 18 | - List of RCU papers (bibliography) going back to 1980. |
17 | torture.txt | 19 | torture.txt |
diff --git a/Documentation/RCU/rcubarrier.txt b/Documentation/RCU/rcubarrier.txt new file mode 100644 index 000000000000..909602d409bb --- /dev/null +++ b/Documentation/RCU/rcubarrier.txt | |||
@@ -0,0 +1,304 @@ | |||
1 | RCU and Unloadable Modules | ||
2 | |||
3 | [Originally published in LWN Jan. 14, 2007: http://lwn.net/Articles/217484/] | ||
4 | |||
5 | RCU (read-copy update) is a synchronization mechanism that can be thought | ||
6 | of as a replacement for read-writer locking (among other things), but with | ||
7 | very low-overhead readers that are immune to deadlock, priority inversion, | ||
8 | and unbounded latency. RCU read-side critical sections are delimited | ||
9 | by rcu_read_lock() and rcu_read_unlock(), which, in non-CONFIG_PREEMPT | ||
10 | kernels, generate no code whatsoever. | ||
11 | |||
12 | This means that RCU writers are unaware of the presence of concurrent | ||
13 | readers, so that RCU updates to shared data must be undertaken quite | ||
14 | carefully, leaving an old version of the data structure in place until all | ||
15 | pre-existing readers have finished. These old versions are needed because | ||
16 | such readers might hold a reference to them. RCU updates can therefore be | ||
17 | rather expensive, and RCU is thus best suited for read-mostly situations. | ||
18 | |||
19 | How can an RCU writer possibly determine when all readers are finished, | ||
20 | given that readers might well leave absolutely no trace of their | ||
21 | presence? There is a synchronize_rcu() primitive that blocks until all | ||
22 | pre-existing readers have completed. An updater wishing to delete an | ||
23 | element p from a linked list might do the following, while holding an | ||
24 | appropriate lock, of course: | ||
25 | |||
26 | list_del_rcu(p); | ||
27 | synchronize_rcu(); | ||
28 | kfree(p); | ||
29 | |||
30 | But the above code cannot be used in IRQ context -- the call_rcu() | ||
31 | primitive must be used instead. This primitive takes a pointer to an | ||
32 | rcu_head struct placed within the RCU-protected data structure and | ||
33 | another pointer to a function that may be invoked later to free that | ||
34 | structure. Code to delete an element p from the linked list from IRQ | ||
35 | context might then be as follows: | ||
36 | |||
37 | list_del_rcu(p); | ||
38 | call_rcu(&p->rcu, p_callback); | ||
39 | |||
40 | Since call_rcu() never blocks, this code can safely be used from within | ||
41 | IRQ context. The function p_callback() might be defined as follows: | ||
42 | |||
43 | static void p_callback(struct rcu_head *rp) | ||
44 | { | ||
45 | struct pstruct *p = container_of(rp, struct pstruct, rcu); | ||
46 | |||
47 | kfree(p); | ||
48 | } | ||
49 | |||
50 | |||
51 | Unloading Modules That Use call_rcu() | ||
52 | |||
53 | But what if p_callback is defined in an unloadable module? | ||
54 | |||
55 | If we unload the module while some RCU callbacks are pending, | ||
56 | the CPUs executing these callbacks are going to be severely | ||
57 | disappointed when they are later invoked, as fancifully depicted at | ||
58 | http://lwn.net/images/ns/kernel/rcu-drop.jpg. | ||
59 | |||
60 | We could try placing a synchronize_rcu() in the module-exit code path, | ||
61 | but this is not sufficient. Although synchronize_rcu() does wait for a | ||
62 | grace period to elapse, it does not wait for the callbacks to complete. | ||
63 | |||
64 | One might be tempted to try several back-to-back synchronize_rcu() | ||
65 | calls, but this is still not guaranteed to work. If there is a very | ||
66 | heavy RCU-callback load, then some of the callbacks might be deferred | ||
67 | in order to allow other processing to proceed. Such deferral is required | ||
68 | in realtime kernels in order to avoid excessive scheduling latencies. | ||
69 | |||
70 | |||
71 | rcu_barrier() | ||
72 | |||
73 | We instead need the rcu_barrier() primitive. This primitive is similar | ||
74 | to synchronize_rcu(), but instead of waiting solely for a grace | ||
75 | period to elapse, it also waits for all outstanding RCU callbacks to | ||
76 | complete. Pseudo-code using rcu_barrier() is as follows: | ||
77 | |||
78 | 1. Prevent any new RCU callbacks from being posted. | ||
79 | 2. Execute rcu_barrier(). | ||
80 | 3. Allow the module to be unloaded. | ||
81 | |||
82 | Quick Quiz #1: Why is there no srcu_barrier()? | ||
83 | |||
84 | The rcutorture module makes use of rcu_barrier in its exit function | ||
85 | as follows: | ||
86 | |||
87 | 1 static void | ||
88 | 2 rcu_torture_cleanup(void) | ||
89 | 3 { | ||
90 | 4 int i; | ||
91 | 5 | ||
92 | 6 fullstop = 1; | ||
93 | 7 if (shuffler_task != NULL) { | ||
94 | 8 VERBOSE_PRINTK_STRING("Stopping rcu_torture_shuffle task"); | ||
95 | 9 kthread_stop(shuffler_task); | ||
96 | 10 } | ||
97 | 11 shuffler_task = NULL; | ||
98 | 12 | ||
99 | 13 if (writer_task != NULL) { | ||
100 | 14 VERBOSE_PRINTK_STRING("Stopping rcu_torture_writer task"); | ||
101 | 15 kthread_stop(writer_task); | ||
102 | 16 } | ||
103 | 17 writer_task = NULL; | ||
104 | 18 | ||
105 | 19 if (reader_tasks != NULL) { | ||
106 | 20 for (i = 0; i < nrealreaders; i++) { | ||
107 | 21 if (reader_tasks[i] != NULL) { | ||
108 | 22 VERBOSE_PRINTK_STRING( | ||
109 | 23 "Stopping rcu_torture_reader task"); | ||
110 | 24 kthread_stop(reader_tasks[i]); | ||
111 | 25 } | ||
112 | 26 reader_tasks[i] = NULL; | ||
113 | 27 } | ||
114 | 28 kfree(reader_tasks); | ||
115 | 29 reader_tasks = NULL; | ||
116 | 30 } | ||
117 | 31 rcu_torture_current = NULL; | ||
118 | 32 | ||
119 | 33 if (fakewriter_tasks != NULL) { | ||
120 | 34 for (i = 0; i < nfakewriters; i++) { | ||
121 | 35 if (fakewriter_tasks[i] != NULL) { | ||
122 | 36 VERBOSE_PRINTK_STRING( | ||
123 | 37 "Stopping rcu_torture_fakewriter task"); | ||
124 | 38 kthread_stop(fakewriter_tasks[i]); | ||
125 | 39 } | ||
126 | 40 fakewriter_tasks[i] = NULL; | ||
127 | 41 } | ||
128 | 42 kfree(fakewriter_tasks); | ||
129 | 43 fakewriter_tasks = NULL; | ||
130 | 44 } | ||
131 | 45 | ||
132 | 46 if (stats_task != NULL) { | ||
133 | 47 VERBOSE_PRINTK_STRING("Stopping rcu_torture_stats task"); | ||
134 | 48 kthread_stop(stats_task); | ||
135 | 49 } | ||
136 | 50 stats_task = NULL; | ||
137 | 51 | ||
138 | 52 /* Wait for all RCU callbacks to fire. */ | ||
139 | 53 rcu_barrier(); | ||
140 | 54 | ||
141 | 55 rcu_torture_stats_print(); /* -After- the stats thread is stopped! */ | ||
142 | 56 | ||
143 | 57 if (cur_ops->cleanup != NULL) | ||
144 | 58 cur_ops->cleanup(); | ||
145 | 59 if (atomic_read(&n_rcu_torture_error)) | ||
146 | 60 rcu_torture_print_module_parms("End of test: FAILURE"); | ||
147 | 61 else | ||
148 | 62 rcu_torture_print_module_parms("End of test: SUCCESS"); | ||
149 | 63 } | ||
150 | |||
151 | Line 6 sets a global variable that prevents any RCU callbacks from | ||
152 | re-posting themselves. This will not be necessary in most cases, since | ||
153 | RCU callbacks rarely include calls to call_rcu(). However, the rcutorture | ||
154 | module is an exception to this rule, and therefore needs to set this | ||
155 | global variable. | ||
156 | |||
157 | Lines 7-50 stop all the kernel tasks associated with the rcutorture | ||
158 | module. Therefore, once execution reaches line 53, no more rcutorture | ||
159 | RCU callbacks will be posted. The rcu_barrier() call on line 53 waits | ||
160 | for any pre-existing callbacks to complete. | ||
161 | |||
162 | Then lines 55-62 print status and do operation-specific cleanup, and | ||
163 | then return, permitting the module-unload operation to be completed. | ||
164 | |||
165 | Quick Quiz #2: Is there any other situation where rcu_barrier() might | ||
166 | be required? | ||
167 | |||
168 | Your module might have additional complications. For example, if your | ||
169 | module invokes call_rcu() from timers, you will need to first cancel all | ||
170 | the timers, and only then invoke rcu_barrier() to wait for any remaining | ||
171 | RCU callbacks to complete. | ||
172 | |||
173 | |||
174 | Implementing rcu_barrier() | ||
175 | |||
176 | Dipankar Sarma's implementation of rcu_barrier() makes use of the fact | ||
177 | that RCU callbacks are never reordered once queued on one of the per-CPU | ||
178 | queues. His implementation queues an RCU callback on each of the per-CPU | ||
179 | callback queues, and then waits until they have all started executing, at | ||
180 | which point, all earlier RCU callbacks are guaranteed to have completed. | ||
181 | |||
182 | The original code for rcu_barrier() was as follows: | ||
183 | |||
184 | 1 void rcu_barrier(void) | ||
185 | 2 { | ||
186 | 3 BUG_ON(in_interrupt()); | ||
187 | 4 /* Take cpucontrol mutex to protect against CPU hotplug */ | ||
188 | 5 mutex_lock(&rcu_barrier_mutex); | ||
189 | 6 init_completion(&rcu_barrier_completion); | ||
190 | 7 atomic_set(&rcu_barrier_cpu_count, 0); | ||
191 | 8 on_each_cpu(rcu_barrier_func, NULL, 0, 1); | ||
192 | 9 wait_for_completion(&rcu_barrier_completion); | ||
193 | 10 mutex_unlock(&rcu_barrier_mutex); | ||
194 | 11 } | ||
195 | |||
196 | Line 3 verifies that the caller is in process context, and lines 5 and 10 | ||
197 | use rcu_barrier_mutex to ensure that only one rcu_barrier() is using the | ||
198 | global completion and counters at a time, which are initialized on lines | ||
199 | 6 and 7. Line 8 causes each CPU to invoke rcu_barrier_func(), which is | ||
200 | shown below. Note that the final "1" in on_each_cpu()'s argument list | ||
201 | ensures that all the calls to rcu_barrier_func() will have completed | ||
202 | before on_each_cpu() returns. Line 9 then waits for the completion. | ||
203 | |||
204 | This code was rewritten in 2008 to support rcu_barrier_bh() and | ||
205 | rcu_barrier_sched() in addition to the original rcu_barrier(). | ||
206 | |||
207 | The rcu_barrier_func() runs on each CPU, where it invokes call_rcu() | ||
208 | to post an RCU callback, as follows: | ||
209 | |||
210 | 1 static void rcu_barrier_func(void *notused) | ||
211 | 2 { | ||
212 | 3 int cpu = smp_processor_id(); | ||
213 | 4 struct rcu_data *rdp = &per_cpu(rcu_data, cpu); | ||
214 | 5 struct rcu_head *head; | ||
215 | 6 | ||
216 | 7 head = &rdp->barrier; | ||
217 | 8 atomic_inc(&rcu_barrier_cpu_count); | ||
218 | 9 call_rcu(head, rcu_barrier_callback); | ||
219 | 10 } | ||
220 | |||
221 | Lines 3 and 4 locate RCU's internal per-CPU rcu_data structure, | ||
222 | which contains the struct rcu_head that needed for the later call to | ||
223 | call_rcu(). Line 7 picks up a pointer to this struct rcu_head, and line | ||
224 | 8 increments a global counter. This counter will later be decremented | ||
225 | by the callback. Line 9 then registers the rcu_barrier_callback() on | ||
226 | the current CPU's queue. | ||
227 | |||
228 | The rcu_barrier_callback() function simply atomically decrements the | ||
229 | rcu_barrier_cpu_count variable and finalizes the completion when it | ||
230 | reaches zero, as follows: | ||
231 | |||
232 | 1 static void rcu_barrier_callback(struct rcu_head *notused) | ||
233 | 2 { | ||
234 | 3 if (atomic_dec_and_test(&rcu_barrier_cpu_count)) | ||
235 | 4 complete(&rcu_barrier_completion); | ||
236 | 5 } | ||
237 | |||
238 | Quick Quiz #3: What happens if CPU 0's rcu_barrier_func() executes | ||
239 | immediately (thus incrementing rcu_barrier_cpu_count to the | ||
240 | value one), but the other CPU's rcu_barrier_func() invocations | ||
241 | are delayed for a full grace period? Couldn't this result in | ||
242 | rcu_barrier() returning prematurely? | ||
243 | |||
244 | |||
245 | rcu_barrier() Summary | ||
246 | |||
247 | The rcu_barrier() primitive has seen relatively little use, since most | ||
248 | code using RCU is in the core kernel rather than in modules. However, if | ||
249 | you are using RCU from an unloadable module, you need to use rcu_barrier() | ||
250 | so that your module may be safely unloaded. | ||
251 | |||
252 | |||
253 | Answers to Quick Quizzes | ||
254 | |||
255 | Quick Quiz #1: Why is there no srcu_barrier()? | ||
256 | |||
257 | Answer: Since there is no call_srcu(), there can be no outstanding SRCU | ||
258 | callbacks. Therefore, there is no need to wait for them. | ||
259 | |||
260 | Quick Quiz #2: Is there any other situation where rcu_barrier() might | ||
261 | be required? | ||
262 | |||
263 | Answer: Interestingly enough, rcu_barrier() was not originally | ||
264 | implemented for module unloading. Nikita Danilov was using | ||
265 | RCU in a filesystem, which resulted in a similar situation at | ||
266 | filesystem-unmount time. Dipankar Sarma coded up rcu_barrier() | ||
267 | in response, so that Nikita could invoke it during the | ||
268 | filesystem-unmount process. | ||
269 | |||
270 | Much later, yours truly hit the RCU module-unload problem when | ||
271 | implementing rcutorture, and found that rcu_barrier() solves | ||
272 | this problem as well. | ||
273 | |||
274 | Quick Quiz #3: What happens if CPU 0's rcu_barrier_func() executes | ||
275 | immediately (thus incrementing rcu_barrier_cpu_count to the | ||
276 | value one), but the other CPU's rcu_barrier_func() invocations | ||
277 | are delayed for a full grace period? Couldn't this result in | ||
278 | rcu_barrier() returning prematurely? | ||
279 | |||
280 | Answer: This cannot happen. The reason is that on_each_cpu() has its last | ||
281 | argument, the wait flag, set to "1". This flag is passed through | ||
282 | to smp_call_function() and further to smp_call_function_on_cpu(), | ||
283 | causing this latter to spin until the cross-CPU invocation of | ||
284 | rcu_barrier_func() has completed. This by itself would prevent | ||
285 | a grace period from completing on non-CONFIG_PREEMPT kernels, | ||
286 | since each CPU must undergo a context switch (or other quiescent | ||
287 | state) before the grace period can complete. However, this is | ||
288 | of no use in CONFIG_PREEMPT kernels. | ||
289 | |||
290 | Therefore, on_each_cpu() disables preemption across its call | ||
291 | to smp_call_function() and also across the local call to | ||
292 | rcu_barrier_func(). This prevents the local CPU from context | ||
293 | switching, again preventing grace periods from completing. This | ||
294 | means that all CPUs have executed rcu_barrier_func() before | ||
295 | the first rcu_barrier_callback() can possibly execute, in turn | ||
296 | preventing rcu_barrier_cpu_count from prematurely reaching zero. | ||
297 | |||
298 | Currently, -rt implementations of RCU keep but a single global | ||
299 | queue for RCU callbacks, and thus do not suffer from this | ||
300 | problem. However, when the -rt RCU eventually does have per-CPU | ||
301 | callback queues, things will have to change. One simple change | ||
302 | is to add an rcu_read_lock() before line 8 of rcu_barrier() | ||
303 | and an rcu_read_unlock() after line 8 of this same function. If | ||
304 | you can think of a better change, please let me know! | ||
diff --git a/Documentation/bad_memory.txt b/Documentation/bad_memory.txt new file mode 100644 index 000000000000..df8416213202 --- /dev/null +++ b/Documentation/bad_memory.txt | |||
@@ -0,0 +1,45 @@ | |||
1 | March 2008 | ||
2 | Jan-Simon Moeller, dl9pf@gmx.de | ||
3 | |||
4 | |||
5 | How to deal with bad memory e.g. reported by memtest86+ ? | ||
6 | ######################################################### | ||
7 | |||
8 | There are three possibilities I know of: | ||
9 | |||
10 | 1) Reinsert/swap the memory modules | ||
11 | |||
12 | 2) Buy new modules (best!) or try to exchange the memory | ||
13 | if you have spare-parts | ||
14 | |||
15 | 3) Use BadRAM or memmap | ||
16 | |||
17 | This Howto is about number 3) . | ||
18 | |||
19 | |||
20 | BadRAM | ||
21 | ###### | ||
22 | BadRAM is the actively developed and available as kernel-patch | ||
23 | here: http://rick.vanrein.org/linux/badram/ | ||
24 | |||
25 | For more details see the BadRAM documentation. | ||
26 | |||
27 | memmap | ||
28 | ###### | ||
29 | |||
30 | memmap is already in the kernel and usable as kernel-parameter at | ||
31 | boot-time. Its syntax is slightly strange and you may need to | ||
32 | calculate the values by yourself! | ||
33 | |||
34 | Syntax to exclude a memory area (see kernel-parameters.txt for details): | ||
35 | memmap=<size>$<address> | ||
36 | |||
37 | Example: memtest86+ reported here errors at address 0x18691458, 0x18698424 and | ||
38 | some others. All had 0x1869xxxx in common, so I chose a pattern of | ||
39 | 0x18690000,0xffff0000. | ||
40 | |||
41 | With the numbers of the example above: | ||
42 | memmap=64K$0x18690000 | ||
43 | or | ||
44 | memmap=0x10000$0x18690000 | ||
45 | |||
diff --git a/Documentation/blackfin/00-INDEX b/Documentation/blackfin/00-INDEX index 7cb3b356b249..d6840a91e1e1 100644 --- a/Documentation/blackfin/00-INDEX +++ b/Documentation/blackfin/00-INDEX | |||
@@ -9,3 +9,6 @@ cachefeatures.txt | |||
9 | 9 | ||
10 | Filesystems | 10 | Filesystems |
11 | - Requirements for mounting the root file system. | 11 | - Requirements for mounting the root file system. |
12 | |||
13 | bfin-gpio-note.txt | ||
14 | - Notes in developing/using bfin-gpio driver. | ||
diff --git a/Documentation/blackfin/bfin-gpio-notes.txt b/Documentation/blackfin/bfin-gpio-notes.txt new file mode 100644 index 000000000000..9898c7ded7d3 --- /dev/null +++ b/Documentation/blackfin/bfin-gpio-notes.txt | |||
@@ -0,0 +1,71 @@ | |||
1 | /* | ||
2 | * File: Documentation/blackfin/bfin-gpio-note.txt | ||
3 | * Based on: | ||
4 | * Author: | ||
5 | * | ||
6 | * Created: $Id: bfin-gpio-note.txt 2008-11-24 16:42 grafyang $ | ||
7 | * Description: This file contains the notes in developing/using bfin-gpio. | ||
8 | * | ||
9 | * | ||
10 | * Rev: | ||
11 | * | ||
12 | * Modified: | ||
13 | * Copyright 2004-2008 Analog Devices Inc. | ||
14 | * | ||
15 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ | ||
16 | * | ||
17 | */ | ||
18 | |||
19 | |||
20 | 1. Blackfin GPIO introduction | ||
21 | |||
22 | There are many GPIO pins on Blackfin. Most of these pins are muxed to | ||
23 | multi-functions. They can be configured as peripheral, or just as GPIO, | ||
24 | configured to input with interrupt enabled, or output. | ||
25 | |||
26 | For detailed information, please see "arch/blackfin/kernel/bfin_gpio.c", | ||
27 | or the relevant HRM. | ||
28 | |||
29 | |||
30 | 2. Avoiding resource conflict | ||
31 | |||
32 | Followed function groups are used to avoiding resource conflict, | ||
33 | - Use the pin as peripheral, | ||
34 | int peripheral_request(unsigned short per, const char *label); | ||
35 | int peripheral_request_list(const unsigned short per[], const char *label); | ||
36 | void peripheral_free(unsigned short per); | ||
37 | void peripheral_free_list(const unsigned short per[]); | ||
38 | - Use the pin as GPIO, | ||
39 | int bfin_gpio_request(unsigned gpio, const char *label); | ||
40 | void bfin_gpio_free(unsigned gpio); | ||
41 | - Use the pin as GPIO interrupt, | ||
42 | int bfin_gpio_irq_request(unsigned gpio, const char *label); | ||
43 | void bfin_gpio_irq_free(unsigned gpio); | ||
44 | |||
45 | The request functions will record the function state for a certain pin, | ||
46 | the free functions will clear it's function state. | ||
47 | Once a pin is requested, it can't be requested again before it is freed by | ||
48 | previous caller, otherwise kernel will dump stacks, and the request | ||
49 | function fail. | ||
50 | These functions are wrapped by other functions, most of the users need not | ||
51 | care. | ||
52 | |||
53 | |||
54 | 3. But there are some exceptions | ||
55 | - Kernel permit the identical GPIO be requested both as GPIO and GPIO | ||
56 | interrut. | ||
57 | Some drivers, like gpio-keys, need this behavior. Kernel only print out | ||
58 | warning messages like, | ||
59 | bfin-gpio: GPIO 24 is already reserved by gpio-keys: BTN0, and you are | ||
60 | configuring it as IRQ! | ||
61 | |||
62 | Note: Consider the case that, if there are two drivers need the | ||
63 | identical GPIO, one of them use it as GPIO, the other use it as | ||
64 | GPIO interrupt. This will really cause resource conflict. So if | ||
65 | there is any abnormal driver behavior, please check the bfin-gpio | ||
66 | warning messages. | ||
67 | |||
68 | - Kernel permit the identical GPIO be requested from the same driver twice. | ||
69 | |||
70 | |||
71 | |||
diff --git a/Documentation/cgroups/cgroups.txt b/Documentation/cgroups/cgroups.txt index d9014aa0eb68..e33ee74eee77 100644 --- a/Documentation/cgroups/cgroups.txt +++ b/Documentation/cgroups/cgroups.txt | |||
@@ -227,7 +227,6 @@ Each cgroup is represented by a directory in the cgroup file system | |||
227 | containing the following files describing that cgroup: | 227 | containing the following files describing that cgroup: |
228 | 228 | ||
229 | - tasks: list of tasks (by pid) attached to that cgroup | 229 | - tasks: list of tasks (by pid) attached to that cgroup |
230 | - releasable flag: cgroup currently removeable? | ||
231 | - notify_on_release flag: run the release agent on exit? | 230 | - notify_on_release flag: run the release agent on exit? |
232 | - release_agent: the path to use for release notifications (this file | 231 | - release_agent: the path to use for release notifications (this file |
233 | exists in the top cgroup only) | 232 | exists in the top cgroup only) |
@@ -360,7 +359,7 @@ Now you want to do something with this cgroup. | |||
360 | 359 | ||
361 | In this directory you can find several files: | 360 | In this directory you can find several files: |
362 | # ls | 361 | # ls |
363 | notify_on_release releasable tasks | 362 | notify_on_release tasks |
364 | (plus whatever files added by the attached subsystems) | 363 | (plus whatever files added by the attached subsystems) |
365 | 364 | ||
366 | Now attach your shell to this cgroup: | 365 | Now attach your shell to this cgroup: |
@@ -479,7 +478,6 @@ newly-created cgroup if an error occurs after this subsystem's | |||
479 | create() method has been called for the new cgroup). | 478 | create() method has been called for the new cgroup). |
480 | 479 | ||
481 | void pre_destroy(struct cgroup_subsys *ss, struct cgroup *cgrp); | 480 | void pre_destroy(struct cgroup_subsys *ss, struct cgroup *cgrp); |
482 | (cgroup_mutex held by caller) | ||
483 | 481 | ||
484 | Called before checking the reference count on each subsystem. This may | 482 | Called before checking the reference count on each subsystem. This may |
485 | be useful for subsystems which have some extra references even if | 483 | be useful for subsystems which have some extra references even if |
@@ -498,6 +496,7 @@ remain valid while the caller holds cgroup_mutex. | |||
498 | 496 | ||
499 | void attach(struct cgroup_subsys *ss, struct cgroup *cgrp, | 497 | void attach(struct cgroup_subsys *ss, struct cgroup *cgrp, |
500 | struct cgroup *old_cgrp, struct task_struct *task) | 498 | struct cgroup *old_cgrp, struct task_struct *task) |
499 | (cgroup_mutex held by caller) | ||
501 | 500 | ||
502 | Called after the task has been attached to the cgroup, to allow any | 501 | Called after the task has been attached to the cgroup, to allow any |
503 | post-attachment activity that requires memory allocations or blocking. | 502 | post-attachment activity that requires memory allocations or blocking. |
@@ -511,6 +510,7 @@ void exit(struct cgroup_subsys *ss, struct task_struct *task) | |||
511 | Called during task exit. | 510 | Called during task exit. |
512 | 511 | ||
513 | int populate(struct cgroup_subsys *ss, struct cgroup *cgrp) | 512 | int populate(struct cgroup_subsys *ss, struct cgroup *cgrp) |
513 | (cgroup_mutex held by caller) | ||
514 | 514 | ||
515 | Called after creation of a cgroup to allow a subsystem to populate | 515 | Called after creation of a cgroup to allow a subsystem to populate |
516 | the cgroup directory with file entries. The subsystem should make | 516 | the cgroup directory with file entries. The subsystem should make |
@@ -520,6 +520,7 @@ method can return an error code, the error code is currently not | |||
520 | always handled well. | 520 | always handled well. |
521 | 521 | ||
522 | void post_clone(struct cgroup_subsys *ss, struct cgroup *cgrp) | 522 | void post_clone(struct cgroup_subsys *ss, struct cgroup *cgrp) |
523 | (cgroup_mutex held by caller) | ||
523 | 524 | ||
524 | Called at the end of cgroup_clone() to do any paramater | 525 | Called at the end of cgroup_clone() to do any paramater |
525 | initialization which might be required before a task could attach. For | 526 | initialization which might be required before a task could attach. For |
@@ -527,7 +528,7 @@ example in cpusets, no task may attach before 'cpus' and 'mems' are set | |||
527 | up. | 528 | up. |
528 | 529 | ||
529 | void bind(struct cgroup_subsys *ss, struct cgroup *root) | 530 | void bind(struct cgroup_subsys *ss, struct cgroup *root) |
530 | (cgroup_mutex held by caller) | 531 | (cgroup_mutex and ss->hierarchy_mutex held by caller) |
531 | 532 | ||
532 | Called when a cgroup subsystem is rebound to a different hierarchy | 533 | Called when a cgroup subsystem is rebound to a different hierarchy |
533 | and root cgroup. Currently this will only involve movement between | 534 | and root cgroup. Currently this will only involve movement between |
diff --git a/Documentation/controllers/memcg_test.txt b/Documentation/controllers/memcg_test.txt new file mode 100644 index 000000000000..08d4d3ea0d79 --- /dev/null +++ b/Documentation/controllers/memcg_test.txt | |||
@@ -0,0 +1,342 @@ | |||
1 | Memory Resource Controller(Memcg) Implementation Memo. | ||
2 | Last Updated: 2008/12/15 | ||
3 | Base Kernel Version: based on 2.6.28-rc8-mm. | ||
4 | |||
5 | Because VM is getting complex (one of reasons is memcg...), memcg's behavior | ||
6 | is complex. This is a document for memcg's internal behavior. | ||
7 | Please note that implementation details can be changed. | ||
8 | |||
9 | (*) Topics on API should be in Documentation/controllers/memory.txt) | ||
10 | |||
11 | 0. How to record usage ? | ||
12 | 2 objects are used. | ||
13 | |||
14 | page_cgroup ....an object per page. | ||
15 | Allocated at boot or memory hotplug. Freed at memory hot removal. | ||
16 | |||
17 | swap_cgroup ... an entry per swp_entry. | ||
18 | Allocated at swapon(). Freed at swapoff(). | ||
19 | |||
20 | The page_cgroup has USED bit and double count against a page_cgroup never | ||
21 | occurs. swap_cgroup is used only when a charged page is swapped-out. | ||
22 | |||
23 | 1. Charge | ||
24 | |||
25 | a page/swp_entry may be charged (usage += PAGE_SIZE) at | ||
26 | |||
27 | mem_cgroup_newpage_charge() | ||
28 | Called at new page fault and Copy-On-Write. | ||
29 | |||
30 | mem_cgroup_try_charge_swapin() | ||
31 | Called at do_swap_page() (page fault on swap entry) and swapoff. | ||
32 | Followed by charge-commit-cancel protocol. (With swap accounting) | ||
33 | At commit, a charge recorded in swap_cgroup is removed. | ||
34 | |||
35 | mem_cgroup_cache_charge() | ||
36 | Called at add_to_page_cache() | ||
37 | |||
38 | mem_cgroup_cache_charge_swapin() | ||
39 | Called at shmem's swapin. | ||
40 | |||
41 | mem_cgroup_prepare_migration() | ||
42 | Called before migration. "extra" charge is done and followed by | ||
43 | charge-commit-cancel protocol. | ||
44 | At commit, charge against oldpage or newpage will be committed. | ||
45 | |||
46 | 2. Uncharge | ||
47 | a page/swp_entry may be uncharged (usage -= PAGE_SIZE) by | ||
48 | |||
49 | mem_cgroup_uncharge_page() | ||
50 | Called when an anonymous page is fully unmapped. I.e., mapcount goes | ||
51 | to 0. If the page is SwapCache, uncharge is delayed until | ||
52 | mem_cgroup_uncharge_swapcache(). | ||
53 | |||
54 | mem_cgroup_uncharge_cache_page() | ||
55 | Called when a page-cache is deleted from radix-tree. If the page is | ||
56 | SwapCache, uncharge is delayed until mem_cgroup_uncharge_swapcache(). | ||
57 | |||
58 | mem_cgroup_uncharge_swapcache() | ||
59 | Called when SwapCache is removed from radix-tree. The charge itself | ||
60 | is moved to swap_cgroup. (If mem+swap controller is disabled, no | ||
61 | charge to swap occurs.) | ||
62 | |||
63 | mem_cgroup_uncharge_swap() | ||
64 | Called when swp_entry's refcnt goes down to 0. A charge against swap | ||
65 | disappears. | ||
66 | |||
67 | mem_cgroup_end_migration(old, new) | ||
68 | At success of migration old is uncharged (if necessary), a charge | ||
69 | to new page is committed. At failure, charge to old page is committed. | ||
70 | |||
71 | 3. charge-commit-cancel | ||
72 | In some case, we can't know this "charge" is valid or not at charging | ||
73 | (because of races). | ||
74 | To handle such case, there are charge-commit-cancel functions. | ||
75 | mem_cgroup_try_charge_XXX | ||
76 | mem_cgroup_commit_charge_XXX | ||
77 | mem_cgroup_cancel_charge_XXX | ||
78 | these are used in swap-in and migration. | ||
79 | |||
80 | At try_charge(), there are no flags to say "this page is charged". | ||
81 | at this point, usage += PAGE_SIZE. | ||
82 | |||
83 | At commit(), the function checks the page should be charged or not | ||
84 | and set flags or avoid charging.(usage -= PAGE_SIZE) | ||
85 | |||
86 | At cancel(), simply usage -= PAGE_SIZE. | ||
87 | |||
88 | Under below explanation, we assume CONFIG_MEM_RES_CTRL_SWAP=y. | ||
89 | |||
90 | 4. Anonymous | ||
91 | Anonymous page is newly allocated at | ||
92 | - page fault into MAP_ANONYMOUS mapping. | ||
93 | - Copy-On-Write. | ||
94 | It is charged right after it's allocated before doing any page table | ||
95 | related operations. Of course, it's uncharged when another page is used | ||
96 | for the fault address. | ||
97 | |||
98 | At freeing anonymous page (by exit() or munmap()), zap_pte() is called | ||
99 | and pages for ptes are freed one by one.(see mm/memory.c). Uncharges | ||
100 | are done at page_remove_rmap() when page_mapcount() goes down to 0. | ||
101 | |||
102 | Another page freeing is by page-reclaim (vmscan.c) and anonymous | ||
103 | pages are swapped out. In this case, the page is marked as | ||
104 | PageSwapCache(). uncharge() routine doesn't uncharge the page marked | ||
105 | as SwapCache(). It's delayed until __delete_from_swap_cache(). | ||
106 | |||
107 | 4.1 Swap-in. | ||
108 | At swap-in, the page is taken from swap-cache. There are 2 cases. | ||
109 | |||
110 | (a) If the SwapCache is newly allocated and read, it has no charges. | ||
111 | (b) If the SwapCache has been mapped by processes, it has been | ||
112 | charged already. | ||
113 | |||
114 | This swap-in is one of the most complicated work. In do_swap_page(), | ||
115 | following events occur when pte is unchanged. | ||
116 | |||
117 | (1) the page (SwapCache) is looked up. | ||
118 | (2) lock_page() | ||
119 | (3) try_charge_swapin() | ||
120 | (4) reuse_swap_page() (may call delete_swap_cache()) | ||
121 | (5) commit_charge_swapin() | ||
122 | (6) swap_free(). | ||
123 | |||
124 | Considering following situation for example. | ||
125 | |||
126 | (A) The page has not been charged before (2) and reuse_swap_page() | ||
127 | doesn't call delete_from_swap_cache(). | ||
128 | (B) The page has not been charged before (2) and reuse_swap_page() | ||
129 | calls delete_from_swap_cache(). | ||
130 | (C) The page has been charged before (2) and reuse_swap_page() doesn't | ||
131 | call delete_from_swap_cache(). | ||
132 | (D) The page has been charged before (2) and reuse_swap_page() calls | ||
133 | delete_from_swap_cache(). | ||
134 | |||
135 | memory.usage/memsw.usage changes to this page/swp_entry will be | ||
136 | Case (A) (B) (C) (D) | ||
137 | Event | ||
138 | Before (2) 0/ 1 0/ 1 1/ 1 1/ 1 | ||
139 | =========================================== | ||
140 | (3) +1/+1 +1/+1 +1/+1 +1/+1 | ||
141 | (4) - 0/ 0 - -1/ 0 | ||
142 | (5) 0/-1 0/ 0 -1/-1 0/ 0 | ||
143 | (6) - 0/-1 - 0/-1 | ||
144 | =========================================== | ||
145 | Result 1/ 1 1/ 1 1/ 1 1/ 1 | ||
146 | |||
147 | In any cases, charges to this page should be 1/ 1. | ||
148 | |||
149 | 4.2 Swap-out. | ||
150 | At swap-out, typical state transition is below. | ||
151 | |||
152 | (a) add to swap cache. (marked as SwapCache) | ||
153 | swp_entry's refcnt += 1. | ||
154 | (b) fully unmapped. | ||
155 | swp_entry's refcnt += # of ptes. | ||
156 | (c) write back to swap. | ||
157 | (d) delete from swap cache. (remove from SwapCache) | ||
158 | swp_entry's refcnt -= 1. | ||
159 | |||
160 | |||
161 | At (b), the page is marked as SwapCache and not uncharged. | ||
162 | At (d), the page is removed from SwapCache and a charge in page_cgroup | ||
163 | is moved to swap_cgroup. | ||
164 | |||
165 | Finally, at task exit, | ||
166 | (e) zap_pte() is called and swp_entry's refcnt -=1 -> 0. | ||
167 | Here, a charge in swap_cgroup disappears. | ||
168 | |||
169 | 5. Page Cache | ||
170 | Page Cache is charged at | ||
171 | - add_to_page_cache_locked(). | ||
172 | |||
173 | uncharged at | ||
174 | - __remove_from_page_cache(). | ||
175 | |||
176 | The logic is very clear. (About migration, see below) | ||
177 | Note: __remove_from_page_cache() is called by remove_from_page_cache() | ||
178 | and __remove_mapping(). | ||
179 | |||
180 | 6. Shmem(tmpfs) Page Cache | ||
181 | Memcg's charge/uncharge have special handlers of shmem. The best way | ||
182 | to understand shmem's page state transition is to read mm/shmem.c. | ||
183 | But brief explanation of the behavior of memcg around shmem will be | ||
184 | helpful to understand the logic. | ||
185 | |||
186 | Shmem's page (just leaf page, not direct/indirect block) can be on | ||
187 | - radix-tree of shmem's inode. | ||
188 | - SwapCache. | ||
189 | - Both on radix-tree and SwapCache. This happens at swap-in | ||
190 | and swap-out, | ||
191 | |||
192 | It's charged when... | ||
193 | - A new page is added to shmem's radix-tree. | ||
194 | - A swp page is read. (move a charge from swap_cgroup to page_cgroup) | ||
195 | It's uncharged when | ||
196 | - A page is removed from radix-tree and not SwapCache. | ||
197 | - When SwapCache is removed, a charge is moved to swap_cgroup. | ||
198 | - When swp_entry's refcnt goes down to 0, a charge in swap_cgroup | ||
199 | disappears. | ||
200 | |||
201 | 7. Page Migration | ||
202 | One of the most complicated functions is page-migration-handler. | ||
203 | Memcg has 2 routines. Assume that we are migrating a page's contents | ||
204 | from OLDPAGE to NEWPAGE. | ||
205 | |||
206 | Usual migration logic is.. | ||
207 | (a) remove the page from LRU. | ||
208 | (b) allocate NEWPAGE (migration target) | ||
209 | (c) lock by lock_page(). | ||
210 | (d) unmap all mappings. | ||
211 | (e-1) If necessary, replace entry in radix-tree. | ||
212 | (e-2) move contents of a page. | ||
213 | (f) map all mappings again. | ||
214 | (g) pushback the page to LRU. | ||
215 | (-) OLDPAGE will be freed. | ||
216 | |||
217 | Before (g), memcg should complete all necessary charge/uncharge to | ||
218 | NEWPAGE/OLDPAGE. | ||
219 | |||
220 | The point is.... | ||
221 | - If OLDPAGE is anonymous, all charges will be dropped at (d) because | ||
222 | try_to_unmap() drops all mapcount and the page will not be | ||
223 | SwapCache. | ||
224 | |||
225 | - If OLDPAGE is SwapCache, charges will be kept at (g) because | ||
226 | __delete_from_swap_cache() isn't called at (e-1) | ||
227 | |||
228 | - If OLDPAGE is page-cache, charges will be kept at (g) because | ||
229 | remove_from_swap_cache() isn't called at (e-1) | ||
230 | |||
231 | memcg provides following hooks. | ||
232 | |||
233 | - mem_cgroup_prepare_migration(OLDPAGE) | ||
234 | Called after (b) to account a charge (usage += PAGE_SIZE) against | ||
235 | memcg which OLDPAGE belongs to. | ||
236 | |||
237 | - mem_cgroup_end_migration(OLDPAGE, NEWPAGE) | ||
238 | Called after (f) before (g). | ||
239 | If OLDPAGE is used, commit OLDPAGE again. If OLDPAGE is already | ||
240 | charged, a charge by prepare_migration() is automatically canceled. | ||
241 | If NEWPAGE is used, commit NEWPAGE and uncharge OLDPAGE. | ||
242 | |||
243 | But zap_pte() (by exit or munmap) can be called while migration, | ||
244 | we have to check if OLDPAGE/NEWPAGE is a valid page after commit(). | ||
245 | |||
246 | 8. LRU | ||
247 | Each memcg has its own private LRU. Now, it's handling is under global | ||
248 | VM's control (means that it's handled under global zone->lru_lock). | ||
249 | Almost all routines around memcg's LRU is called by global LRU's | ||
250 | list management functions under zone->lru_lock(). | ||
251 | |||
252 | A special function is mem_cgroup_isolate_pages(). This scans | ||
253 | memcg's private LRU and call __isolate_lru_page() to extract a page | ||
254 | from LRU. | ||
255 | (By __isolate_lru_page(), the page is removed from both of global and | ||
256 | private LRU.) | ||
257 | |||
258 | |||
259 | 9. Typical Tests. | ||
260 | |||
261 | Tests for racy cases. | ||
262 | |||
263 | 9.1 Small limit to memcg. | ||
264 | When you do test to do racy case, it's good test to set memcg's limit | ||
265 | to be very small rather than GB. Many races found in the test under | ||
266 | xKB or xxMB limits. | ||
267 | (Memory behavior under GB and Memory behavior under MB shows very | ||
268 | different situation.) | ||
269 | |||
270 | 9.2 Shmem | ||
271 | Historically, memcg's shmem handling was poor and we saw some amount | ||
272 | of troubles here. This is because shmem is page-cache but can be | ||
273 | SwapCache. Test with shmem/tmpfs is always good test. | ||
274 | |||
275 | 9.3 Migration | ||
276 | For NUMA, migration is an another special case. To do easy test, cpuset | ||
277 | is useful. Following is a sample script to do migration. | ||
278 | |||
279 | mount -t cgroup -o cpuset none /opt/cpuset | ||
280 | |||
281 | mkdir /opt/cpuset/01 | ||
282 | echo 1 > /opt/cpuset/01/cpuset.cpus | ||
283 | echo 0 > /opt/cpuset/01/cpuset.mems | ||
284 | echo 1 > /opt/cpuset/01/cpuset.memory_migrate | ||
285 | mkdir /opt/cpuset/02 | ||
286 | echo 1 > /opt/cpuset/02/cpuset.cpus | ||
287 | echo 1 > /opt/cpuset/02/cpuset.mems | ||
288 | echo 1 > /opt/cpuset/02/cpuset.memory_migrate | ||
289 | |||
290 | In above set, when you moves a task from 01 to 02, page migration to | ||
291 | node 0 to node 1 will occur. Following is a script to migrate all | ||
292 | under cpuset. | ||
293 | -- | ||
294 | move_task() | ||
295 | { | ||
296 | for pid in $1 | ||
297 | do | ||
298 | /bin/echo $pid >$2/tasks 2>/dev/null | ||
299 | echo -n $pid | ||
300 | echo -n " " | ||
301 | done | ||
302 | echo END | ||
303 | } | ||
304 | |||
305 | G1_TASK=`cat ${G1}/tasks` | ||
306 | G2_TASK=`cat ${G2}/tasks` | ||
307 | move_task "${G1_TASK}" ${G2} & | ||
308 | -- | ||
309 | 9.4 Memory hotplug. | ||
310 | memory hotplug test is one of good test. | ||
311 | to offline memory, do following. | ||
312 | # echo offline > /sys/devices/system/memory/memoryXXX/state | ||
313 | (XXX is the place of memory) | ||
314 | This is an easy way to test page migration, too. | ||
315 | |||
316 | 9.5 mkdir/rmdir | ||
317 | When using hierarchy, mkdir/rmdir test should be done. | ||
318 | Use tests like the following. | ||
319 | |||
320 | echo 1 >/opt/cgroup/01/memory/use_hierarchy | ||
321 | mkdir /opt/cgroup/01/child_a | ||
322 | mkdir /opt/cgroup/01/child_b | ||
323 | |||
324 | set limit to 01. | ||
325 | add limit to 01/child_b | ||
326 | run jobs under child_a and child_b | ||
327 | |||
328 | create/delete following groups at random while jobs are running. | ||
329 | /opt/cgroup/01/child_a/child_aa | ||
330 | /opt/cgroup/01/child_b/child_bb | ||
331 | /opt/cgroup/01/child_c | ||
332 | |||
333 | running new jobs in new group is also good. | ||
334 | |||
335 | 9.6 Mount with other subsystems. | ||
336 | Mounting with other subsystems is a good test because there is a | ||
337 | race and lock dependency with other cgroup subsystems. | ||
338 | |||
339 | example) | ||
340 | # mount -t cgroup none /cgroup -t cpuset,memory,cpu,devices | ||
341 | |||
342 | and do task move, mkdir, rmdir etc...under this. | ||
diff --git a/Documentation/controllers/memory.txt b/Documentation/controllers/memory.txt index 1c07547d3f81..e1501964df1e 100644 --- a/Documentation/controllers/memory.txt +++ b/Documentation/controllers/memory.txt | |||
@@ -137,7 +137,32 @@ behind this approach is that a cgroup that aggressively uses a shared | |||
137 | page will eventually get charged for it (once it is uncharged from | 137 | page will eventually get charged for it (once it is uncharged from |
138 | the cgroup that brought it in -- this will happen on memory pressure). | 138 | the cgroup that brought it in -- this will happen on memory pressure). |
139 | 139 | ||
140 | 2.4 Reclaim | 140 | Exception: If CONFIG_CGROUP_CGROUP_MEM_RES_CTLR_SWAP is not used.. |
141 | When you do swapoff and make swapped-out pages of shmem(tmpfs) to | ||
142 | be backed into memory in force, charges for pages are accounted against the | ||
143 | caller of swapoff rather than the users of shmem. | ||
144 | |||
145 | |||
146 | 2.4 Swap Extension (CONFIG_CGROUP_MEM_RES_CTLR_SWAP) | ||
147 | Swap Extension allows you to record charge for swap. A swapped-in page is | ||
148 | charged back to original page allocator if possible. | ||
149 | |||
150 | When swap is accounted, following files are added. | ||
151 | - memory.memsw.usage_in_bytes. | ||
152 | - memory.memsw.limit_in_bytes. | ||
153 | |||
154 | usage of mem+swap is limited by memsw.limit_in_bytes. | ||
155 | |||
156 | Note: why 'mem+swap' rather than swap. | ||
157 | The global LRU(kswapd) can swap out arbitrary pages. Swap-out means | ||
158 | to move account from memory to swap...there is no change in usage of | ||
159 | mem+swap. | ||
160 | |||
161 | In other words, when we want to limit the usage of swap without affecting | ||
162 | global LRU, mem+swap limit is better than just limiting swap from OS point | ||
163 | of view. | ||
164 | |||
165 | 2.5 Reclaim | ||
141 | 166 | ||
142 | Each cgroup maintains a per cgroup LRU that consists of an active | 167 | Each cgroup maintains a per cgroup LRU that consists of an active |
143 | and inactive list. When a cgroup goes over its limit, we first try | 168 | and inactive list. When a cgroup goes over its limit, we first try |
@@ -207,12 +232,6 @@ exceeded. | |||
207 | The memory.stat file gives accounting information. Now, the number of | 232 | The memory.stat file gives accounting information. Now, the number of |
208 | caches, RSS and Active pages/Inactive pages are shown. | 233 | caches, RSS and Active pages/Inactive pages are shown. |
209 | 234 | ||
210 | The memory.force_empty gives an interface to drop *all* charges by force. | ||
211 | |||
212 | # echo 1 > memory.force_empty | ||
213 | |||
214 | will drop all charges in cgroup. Currently, this is maintained for test. | ||
215 | |||
216 | 4. Testing | 235 | 4. Testing |
217 | 236 | ||
218 | Balbir posted lmbench, AIM9, LTP and vmmstress results [10] and [11]. | 237 | Balbir posted lmbench, AIM9, LTP and vmmstress results [10] and [11]. |
@@ -242,10 +261,106 @@ reclaimed. | |||
242 | 261 | ||
243 | A cgroup can be removed by rmdir, but as discussed in sections 4.1 and 4.2, a | 262 | A cgroup can be removed by rmdir, but as discussed in sections 4.1 and 4.2, a |
244 | cgroup might have some charge associated with it, even though all | 263 | cgroup might have some charge associated with it, even though all |
245 | tasks have migrated away from it. Such charges are automatically dropped at | 264 | tasks have migrated away from it. |
246 | rmdir() if there are no tasks. | 265 | Such charges are freed(at default) or moved to its parent. When moved, |
266 | both of RSS and CACHES are moved to parent. | ||
267 | If both of them are busy, rmdir() returns -EBUSY. See 5.1 Also. | ||
268 | |||
269 | Charges recorded in swap information is not updated at removal of cgroup. | ||
270 | Recorded information is discarded and a cgroup which uses swap (swapcache) | ||
271 | will be charged as a new owner of it. | ||
272 | |||
273 | |||
274 | 5. Misc. interfaces. | ||
275 | |||
276 | 5.1 force_empty | ||
277 | memory.force_empty interface is provided to make cgroup's memory usage empty. | ||
278 | You can use this interface only when the cgroup has no tasks. | ||
279 | When writing anything to this | ||
280 | |||
281 | # echo 0 > memory.force_empty | ||
282 | |||
283 | Almost all pages tracked by this memcg will be unmapped and freed. Some of | ||
284 | pages cannot be freed because it's locked or in-use. Such pages are moved | ||
285 | to parent and this cgroup will be empty. But this may return -EBUSY in | ||
286 | some too busy case. | ||
287 | |||
288 | Typical use case of this interface is that calling this before rmdir(). | ||
289 | Because rmdir() moves all pages to parent, some out-of-use page caches can be | ||
290 | moved to the parent. If you want to avoid that, force_empty will be useful. | ||
291 | |||
292 | 5.2 stat file | ||
293 | memory.stat file includes following statistics (now) | ||
294 | cache - # of pages from page-cache and shmem. | ||
295 | rss - # of pages from anonymous memory. | ||
296 | pgpgin - # of event of charging | ||
297 | pgpgout - # of event of uncharging | ||
298 | active_anon - # of pages on active lru of anon, shmem. | ||
299 | inactive_anon - # of pages on active lru of anon, shmem | ||
300 | active_file - # of pages on active lru of file-cache | ||
301 | inactive_file - # of pages on inactive lru of file cache | ||
302 | unevictable - # of pages cannot be reclaimed.(mlocked etc) | ||
303 | |||
304 | Below is depend on CONFIG_DEBUG_VM. | ||
305 | inactive_ratio - VM inernal parameter. (see mm/page_alloc.c) | ||
306 | recent_rotated_anon - VM internal parameter. (see mm/vmscan.c) | ||
307 | recent_rotated_file - VM internal parameter. (see mm/vmscan.c) | ||
308 | recent_scanned_anon - VM internal parameter. (see mm/vmscan.c) | ||
309 | recent_scanned_file - VM internal parameter. (see mm/vmscan.c) | ||
310 | |||
311 | Memo: | ||
312 | recent_rotated means recent frequency of lru rotation. | ||
313 | recent_scanned means recent # of scans to lru. | ||
314 | showing for better debug please see the code for meanings. | ||
315 | |||
316 | |||
317 | 5.3 swappiness | ||
318 | Similar to /proc/sys/vm/swappiness, but affecting a hierarchy of groups only. | ||
319 | |||
320 | Following cgroup's swapiness can't be changed. | ||
321 | - root cgroup (uses /proc/sys/vm/swappiness). | ||
322 | - a cgroup which uses hierarchy and it has child cgroup. | ||
323 | - a cgroup which uses hierarchy and not the root of hierarchy. | ||
324 | |||
325 | |||
326 | 6. Hierarchy support | ||
327 | |||
328 | The memory controller supports a deep hierarchy and hierarchical accounting. | ||
329 | The hierarchy is created by creating the appropriate cgroups in the | ||
330 | cgroup filesystem. Consider for example, the following cgroup filesystem | ||
331 | hierarchy | ||
332 | |||
333 | root | ||
334 | / | \ | ||
335 | / | \ | ||
336 | a b c | ||
337 | | \ | ||
338 | | \ | ||
339 | d e | ||
340 | |||
341 | In the diagram above, with hierarchical accounting enabled, all memory | ||
342 | usage of e, is accounted to its ancestors up until the root (i.e, c and root), | ||
343 | that has memory.use_hierarchy enabled. If one of the ancestors goes over its | ||
344 | limit, the reclaim algorithm reclaims from the tasks in the ancestor and the | ||
345 | children of the ancestor. | ||
346 | |||
347 | 6.1 Enabling hierarchical accounting and reclaim | ||
348 | |||
349 | The memory controller by default disables the hierarchy feature. Support | ||
350 | can be enabled by writing 1 to memory.use_hierarchy file of the root cgroup | ||
351 | |||
352 | # echo 1 > memory.use_hierarchy | ||
353 | |||
354 | The feature can be disabled by | ||
355 | |||
356 | # echo 0 > memory.use_hierarchy | ||
357 | |||
358 | NOTE1: Enabling/disabling will fail if the cgroup already has other | ||
359 | cgroups created below it. | ||
360 | |||
361 | NOTE2: This feature can be enabled/disabled per subtree. | ||
247 | 362 | ||
248 | 5. TODO | 363 | 7. TODO |
249 | 364 | ||
250 | 1. Add support for accounting huge pages (as a separate controller) | 365 | 1. Add support for accounting huge pages (as a separate controller) |
251 | 2. Make per-cgroup scanner reclaim not-shared pages first | 366 | 2. Make per-cgroup scanner reclaim not-shared pages first |
diff --git a/Documentation/crypto/async-tx-api.txt b/Documentation/crypto/async-tx-api.txt index c1e9545c59bd..9f59fcbf5d82 100644 --- a/Documentation/crypto/async-tx-api.txt +++ b/Documentation/crypto/async-tx-api.txt | |||
@@ -13,9 +13,9 @@ | |||
13 | 3.6 Constraints | 13 | 3.6 Constraints |
14 | 3.7 Example | 14 | 3.7 Example |
15 | 15 | ||
16 | 4 DRIVER DEVELOPER NOTES | 16 | 4 DMAENGINE DRIVER DEVELOPER NOTES |
17 | 4.1 Conformance points | 17 | 4.1 Conformance points |
18 | 4.2 "My application needs finer control of hardware channels" | 18 | 4.2 "My application needs exclusive control of hardware channels" |
19 | 19 | ||
20 | 5 SOURCE | 20 | 5 SOURCE |
21 | 21 | ||
@@ -150,6 +150,7 @@ ops_run_* and ops_complete_* routines in drivers/md/raid5.c for more | |||
150 | implementation examples. | 150 | implementation examples. |
151 | 151 | ||
152 | 4 DRIVER DEVELOPMENT NOTES | 152 | 4 DRIVER DEVELOPMENT NOTES |
153 | |||
153 | 4.1 Conformance points: | 154 | 4.1 Conformance points: |
154 | There are a few conformance points required in dmaengine drivers to | 155 | There are a few conformance points required in dmaengine drivers to |
155 | accommodate assumptions made by applications using the async_tx API: | 156 | accommodate assumptions made by applications using the async_tx API: |
@@ -158,58 +159,49 @@ accommodate assumptions made by applications using the async_tx API: | |||
158 | 3/ Use async_tx_run_dependencies() in the descriptor clean up path to | 159 | 3/ Use async_tx_run_dependencies() in the descriptor clean up path to |
159 | handle submission of dependent operations | 160 | handle submission of dependent operations |
160 | 161 | ||
161 | 4.2 "My application needs finer control of hardware channels" | 162 | 4.2 "My application needs exclusive control of hardware channels" |
162 | This requirement seems to arise from cases where a DMA engine driver is | 163 | Primarily this requirement arises from cases where a DMA engine driver |
163 | trying to support device-to-memory DMA. The dmaengine and async_tx | 164 | is being used to support device-to-memory operations. A channel that is |
164 | implementations were designed for offloading memory-to-memory | 165 | performing these operations cannot, for many platform specific reasons, |
165 | operations; however, there are some capabilities of the dmaengine layer | 166 | be shared. For these cases the dma_request_channel() interface is |
166 | that can be used for platform-specific channel management. | 167 | provided. |
167 | Platform-specific constraints can be handled by registering the | 168 | |
168 | application as a 'dma_client' and implementing a 'dma_event_callback' to | 169 | The interface is: |
169 | apply a filter to the available channels in the system. Before showing | 170 | struct dma_chan *dma_request_channel(dma_cap_mask_t mask, |
170 | how to implement a custom dma_event callback some background of | 171 | dma_filter_fn filter_fn, |
171 | dmaengine's client support is required. | 172 | void *filter_param); |
172 | 173 | ||
173 | The following routines in dmaengine support multiple clients requesting | 174 | Where dma_filter_fn is defined as: |
174 | use of a channel: | 175 | typedef bool (*dma_filter_fn)(struct dma_chan *chan, void *filter_param); |
175 | - dma_async_client_register(struct dma_client *client) | 176 | |
176 | - dma_async_client_chan_request(struct dma_client *client) | 177 | When the optional 'filter_fn' parameter is set to NULL |
177 | 178 | dma_request_channel simply returns the first channel that satisfies the | |
178 | dma_async_client_register takes a pointer to an initialized dma_client | 179 | capability mask. Otherwise, when the mask parameter is insufficient for |
179 | structure. It expects that the 'event_callback' and 'cap_mask' fields | 180 | specifying the necessary channel, the filter_fn routine can be used to |
180 | are already initialized. | 181 | disposition the available channels in the system. The filter_fn routine |
181 | 182 | is called once for each free channel in the system. Upon seeing a | |
182 | dma_async_client_chan_request triggers dmaengine to notify the client of | 183 | suitable channel filter_fn returns DMA_ACK which flags that channel to |
183 | all channels that satisfy the capability mask. It is up to the client's | 184 | be the return value from dma_request_channel. A channel allocated via |
184 | event_callback routine to track how many channels the client needs and | 185 | this interface is exclusive to the caller, until dma_release_channel() |
185 | how many it is currently using. The dma_event_callback routine returns a | 186 | is called. |
186 | dma_state_client code to let dmaengine know the status of the | 187 | |
187 | allocation. | 188 | The DMA_PRIVATE capability flag is used to tag dma devices that should |
188 | 189 | not be used by the general-purpose allocator. It can be set at | |
189 | Below is the example of how to extend this functionality for | 190 | initialization time if it is known that a channel will always be |
190 | platform-specific filtering of the available channels beyond the | 191 | private. Alternatively, it is set when dma_request_channel() finds an |
191 | standard capability mask: | 192 | unused "public" channel. |
192 | 193 | ||
193 | static enum dma_state_client | 194 | A couple caveats to note when implementing a driver and consumer: |
194 | my_dma_client_callback(struct dma_client *client, | 195 | 1/ Once a channel has been privately allocated it will no longer be |
195 | struct dma_chan *chan, enum dma_state state) | 196 | considered by the general-purpose allocator even after a call to |
196 | { | 197 | dma_release_channel(). |
197 | struct dma_device *dma_dev; | 198 | 2/ Since capabilities are specified at the device level a dma_device |
198 | struct my_platform_specific_dma *plat_dma_dev; | 199 | with multiple channels will either have all channels public, or all |
199 | 200 | channels private. | |
200 | dma_dev = chan->device; | ||
201 | plat_dma_dev = container_of(dma_dev, | ||
202 | struct my_platform_specific_dma, | ||
203 | dma_dev); | ||
204 | |||
205 | if (!plat_dma_dev->platform_specific_capability) | ||
206 | return DMA_DUP; | ||
207 | |||
208 | . . . | ||
209 | } | ||
210 | 201 | ||
211 | 5 SOURCE | 202 | 5 SOURCE |
212 | include/linux/dmaengine.h: core header file for DMA drivers and clients | 203 | |
204 | include/linux/dmaengine.h: core header file for DMA drivers and api users | ||
213 | drivers/dma/dmaengine.c: offload engine channel management routines | 205 | drivers/dma/dmaengine.c: offload engine channel management routines |
214 | drivers/dma/: location for offload engine drivers | 206 | drivers/dma/: location for offload engine drivers |
215 | include/linux/async_tx.h: core header file for the async_tx api | 207 | include/linux/async_tx.h: core header file for the async_tx api |
diff --git a/Documentation/dell_rbu.txt b/Documentation/dell_rbu.txt index 2c0d631de0cf..c11b931f8f98 100644 --- a/Documentation/dell_rbu.txt +++ b/Documentation/dell_rbu.txt | |||
@@ -81,8 +81,8 @@ Until this step is completed the driver cannot be unloaded. | |||
81 | Also echoing either mono ,packet or init in to image_type will free up the | 81 | Also echoing either mono ,packet or init in to image_type will free up the |
82 | memory allocated by the driver. | 82 | memory allocated by the driver. |
83 | 83 | ||
84 | If an user by accident executes steps 1 and 3 above without executing step 2; | 84 | If a user by accident executes steps 1 and 3 above without executing step 2; |
85 | it will make the /sys/class/firmware/dell_rbu/ entries to disappear. | 85 | it will make the /sys/class/firmware/dell_rbu/ entries disappear. |
86 | The entries can be recreated by doing the following | 86 | The entries can be recreated by doing the following |
87 | echo init > /sys/devices/platform/dell_rbu/image_type | 87 | echo init > /sys/devices/platform/dell_rbu/image_type |
88 | NOTE: echoing init in image_type does not change it original value. | 88 | NOTE: echoing init in image_type does not change it original value. |
diff --git a/Documentation/development-process/4.Coding b/Documentation/development-process/4.Coding index 014aca8f14e2..a5a3450faaa0 100644 --- a/Documentation/development-process/4.Coding +++ b/Documentation/development-process/4.Coding | |||
@@ -375,10 +375,10 @@ say, this can be a large job, so it is best to be sure that the | |||
375 | justification is solid. | 375 | justification is solid. |
376 | 376 | ||
377 | When making an incompatible API change, one should, whenever possible, | 377 | When making an incompatible API change, one should, whenever possible, |
378 | ensure that code which has not been updated is caught by the compiler. | 378 | ensure that code which has not been updated is caught by the compiler. |
379 | This will help you to be sure that you have found all in-tree uses of that | 379 | This will help you to be sure that you have found all in-tree uses of that |
380 | interface. It will also alert developers of out-of-tree code that there is | 380 | interface. It will also alert developers of out-of-tree code that there is |
381 | a change that they need to respond to. Supporting out-of-tree code is not | 381 | a change that they need to respond to. Supporting out-of-tree code is not |
382 | something that kernel developers need to be worried about, but we also do | 382 | something that kernel developers need to be worried about, but we also do |
383 | not have to make life harder for out-of-tree developers than it it needs to | 383 | not have to make life harder for out-of-tree developers than it needs to |
384 | be. | 384 | be. |
diff --git a/Documentation/dmaengine.txt b/Documentation/dmaengine.txt new file mode 100644 index 000000000000..0c1c2f63c0a9 --- /dev/null +++ b/Documentation/dmaengine.txt | |||
@@ -0,0 +1 @@ | |||
See Documentation/crypto/async-tx-api.txt | |||
diff --git a/Documentation/feature-removal-schedule.txt b/Documentation/feature-removal-schedule.txt index df18d87c4837..5ddbe350487a 100644 --- a/Documentation/feature-removal-schedule.txt +++ b/Documentation/feature-removal-schedule.txt | |||
@@ -315,3 +315,23 @@ When: 2.6.29 (ideally) or 2.6.30 (more likely) | |||
315 | Why: Deprecated by the new (standard) device driver binding model. Use | 315 | Why: Deprecated by the new (standard) device driver binding model. Use |
316 | i2c_driver->probe() and ->remove() instead. | 316 | i2c_driver->probe() and ->remove() instead. |
317 | Who: Jean Delvare <khali@linux-fr.org> | 317 | Who: Jean Delvare <khali@linux-fr.org> |
318 | |||
319 | --------------------------- | ||
320 | |||
321 | What: fscher and fscpos drivers | ||
322 | When: June 2009 | ||
323 | Why: Deprecated by the new fschmd driver. | ||
324 | Who: Hans de Goede <hdegoede@redhat.com> | ||
325 | Jean Delvare <khali@linux-fr.org> | ||
326 | |||
327 | --------------------------- | ||
328 | |||
329 | What: SELinux "compat_net" functionality | ||
330 | When: 2.6.30 at the earliest | ||
331 | Why: In 2.6.18 the Secmark concept was introduced to replace the "compat_net" | ||
332 | network access control functionality of SELinux. Secmark offers both | ||
333 | better performance and greater flexibility than the "compat_net" | ||
334 | mechanism. Now that the major Linux distributions have moved to | ||
335 | Secmark, it is time to deprecate the older mechanism and start the | ||
336 | process of removing the old code. | ||
337 | Who: Paul Moore <paul.moore@hp.com> | ||
diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking index ccec55394380..ec6a9392a173 100644 --- a/Documentation/filesystems/Locking +++ b/Documentation/filesystems/Locking | |||
@@ -97,8 +97,8 @@ prototypes: | |||
97 | void (*put_super) (struct super_block *); | 97 | void (*put_super) (struct super_block *); |
98 | void (*write_super) (struct super_block *); | 98 | void (*write_super) (struct super_block *); |
99 | int (*sync_fs)(struct super_block *sb, int wait); | 99 | int (*sync_fs)(struct super_block *sb, int wait); |
100 | void (*write_super_lockfs) (struct super_block *); | 100 | int (*freeze_fs) (struct super_block *); |
101 | void (*unlockfs) (struct super_block *); | 101 | int (*unfreeze_fs) (struct super_block *); |
102 | int (*statfs) (struct dentry *, struct kstatfs *); | 102 | int (*statfs) (struct dentry *, struct kstatfs *); |
103 | int (*remount_fs) (struct super_block *, int *, char *); | 103 | int (*remount_fs) (struct super_block *, int *, char *); |
104 | void (*clear_inode) (struct inode *); | 104 | void (*clear_inode) (struct inode *); |
@@ -119,8 +119,8 @@ delete_inode: no | |||
119 | put_super: yes yes no | 119 | put_super: yes yes no |
120 | write_super: no yes read | 120 | write_super: no yes read |
121 | sync_fs: no no read | 121 | sync_fs: no no read |
122 | write_super_lockfs: ? | 122 | freeze_fs: ? |
123 | unlockfs: ? | 123 | unfreeze_fs: ? |
124 | statfs: no no no | 124 | statfs: no no no |
125 | remount_fs: yes yes maybe (see below) | 125 | remount_fs: yes yes maybe (see below) |
126 | clear_inode: no | 126 | clear_inode: no |
@@ -397,7 +397,7 @@ prototypes: | |||
397 | }; | 397 | }; |
398 | 398 | ||
399 | locking rules: | 399 | locking rules: |
400 | All except ->poll() may block. | 400 | All may block. |
401 | BKL | 401 | BKL |
402 | llseek: no (see below) | 402 | llseek: no (see below) |
403 | read: no | 403 | read: no |
diff --git a/Documentation/filesystems/btrfs.txt b/Documentation/filesystems/btrfs.txt new file mode 100644 index 000000000000..64087c34327f --- /dev/null +++ b/Documentation/filesystems/btrfs.txt | |||
@@ -0,0 +1,91 @@ | |||
1 | |||
2 | BTRFS | ||
3 | ===== | ||
4 | |||
5 | Btrfs is a new copy on write filesystem for Linux aimed at | ||
6 | implementing advanced features while focusing on fault tolerance, | ||
7 | repair and easy administration. Initially developed by Oracle, Btrfs | ||
8 | is licensed under the GPL and open for contribution from anyone. | ||
9 | |||
10 | Linux has a wealth of filesystems to choose from, but we are facing a | ||
11 | number of challenges with scaling to the large storage subsystems that | ||
12 | are becoming common in today's data centers. Filesystems need to scale | ||
13 | in their ability to address and manage large storage, and also in | ||
14 | their ability to detect, repair and tolerate errors in the data stored | ||
15 | on disk. Btrfs is under heavy development, and is not suitable for | ||
16 | any uses other than benchmarking and review. The Btrfs disk format is | ||
17 | not yet finalized. | ||
18 | |||
19 | The main Btrfs features include: | ||
20 | |||
21 | * Extent based file storage (2^64 max file size) | ||
22 | * Space efficient packing of small files | ||
23 | * Space efficient indexed directories | ||
24 | * Dynamic inode allocation | ||
25 | * Writable snapshots | ||
26 | * Subvolumes (separate internal filesystem roots) | ||
27 | * Object level mirroring and striping | ||
28 | * Checksums on data and metadata (multiple algorithms available) | ||
29 | * Compression | ||
30 | * Integrated multiple device support, with several raid algorithms | ||
31 | * Online filesystem check (not yet implemented) | ||
32 | * Very fast offline filesystem check | ||
33 | * Efficient incremental backup and FS mirroring (not yet implemented) | ||
34 | * Online filesystem defragmentation | ||
35 | |||
36 | |||
37 | |||
38 | MAILING LIST | ||
39 | ============ | ||
40 | |||
41 | There is a Btrfs mailing list hosted on vger.kernel.org. You can | ||
42 | find details on how to subscribe here: | ||
43 | |||
44 | http://vger.kernel.org/vger-lists.html#linux-btrfs | ||
45 | |||
46 | Mailing list archives are available from gmane: | ||
47 | |||
48 | http://dir.gmane.org/gmane.comp.file-systems.btrfs | ||
49 | |||
50 | |||
51 | |||
52 | IRC | ||
53 | === | ||
54 | |||
55 | Discussion of Btrfs also occurs on the #btrfs channel of the Freenode | ||
56 | IRC network. | ||
57 | |||
58 | |||
59 | |||
60 | UTILITIES | ||
61 | ========= | ||
62 | |||
63 | Userspace tools for creating and manipulating Btrfs file systems are | ||
64 | available from the git repository at the following location: | ||
65 | |||
66 | http://git.kernel.org/?p=linux/kernel/git/mason/btrfs-progs-unstable.git | ||
67 | git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-progs-unstable.git | ||
68 | |||
69 | These include the following tools: | ||
70 | |||
71 | mkfs.btrfs: create a filesystem | ||
72 | |||
73 | btrfsctl: control program to create snapshots and subvolumes: | ||
74 | |||
75 | mount /dev/sda2 /mnt | ||
76 | btrfsctl -s new_subvol_name /mnt | ||
77 | btrfsctl -s snapshot_of_default /mnt/default | ||
78 | btrfsctl -s snapshot_of_new_subvol /mnt/new_subvol_name | ||
79 | btrfsctl -s snapshot_of_a_snapshot /mnt/snapshot_of_new_subvol | ||
80 | ls /mnt | ||
81 | default snapshot_of_a_snapshot snapshot_of_new_subvol | ||
82 | new_subvol_name snapshot_of_default | ||
83 | |||
84 | Snapshots and subvolumes cannot be deleted right now, but you can | ||
85 | rm -rf all the files and directories inside them. | ||
86 | |||
87 | btrfsck: do a limited check of the FS extent trees. | ||
88 | |||
89 | btrfs-debug-tree: print all of the FS metadata in text form. Example: | ||
90 | |||
91 | btrfs-debug-tree /dev/sda2 >& big_output_file | ||
diff --git a/Documentation/filesystems/ext4.txt b/Documentation/filesystems/ext4.txt index 174eaff7ded9..cec829bc7291 100644 --- a/Documentation/filesystems/ext4.txt +++ b/Documentation/filesystems/ext4.txt | |||
@@ -58,13 +58,22 @@ Note: More extensive information for getting started with ext4 can be | |||
58 | 58 | ||
59 | # mount -t ext4 /dev/hda1 /wherever | 59 | # mount -t ext4 /dev/hda1 /wherever |
60 | 60 | ||
61 | - When comparing performance with other filesystems, remember that | 61 | - When comparing performance with other filesystems, it's always |
62 | ext3/4 by default offers higher data integrity guarantees than most. | 62 | important to try multiple workloads; very often a subtle change in a |
63 | So when comparing with a metadata-only journalling filesystem, such | 63 | workload parameter can completely change the ranking of which |
64 | as ext3, use `mount -o data=writeback'. And you might as well use | 64 | filesystems do well compared to others. When comparing versus ext3, |
65 | `mount -o nobh' too along with it. Making the journal larger than | 65 | note that ext4 enables write barriers by default, while ext3 does |
66 | the mke2fs default often helps performance with metadata-intensive | 66 | not enable write barriers by default. So it is useful to use |
67 | workloads. | 67 | explicitly specify whether barriers are enabled or not when via the |
68 | '-o barriers=[0|1]' mount option for both ext3 and ext4 filesystems | ||
69 | for a fair comparison. When tuning ext3 for best benchmark numbers, | ||
70 | it is often worthwhile to try changing the data journaling mode; '-o | ||
71 | data=writeback,nobh' can be faster for some workloads. (Note | ||
72 | however that running mounted with data=writeback can potentially | ||
73 | leave stale data exposed in recently written files in case of an | ||
74 | unclean shutdown, which could be a security exposure in some | ||
75 | situations.) Configuring the filesystem with a large journal can | ||
76 | also be helpful for metadata-intensive workloads. | ||
68 | 77 | ||
69 | 2. Features | 78 | 2. Features |
70 | =========== | 79 | =========== |
@@ -74,7 +83,7 @@ Note: More extensive information for getting started with ext4 can be | |||
74 | * ability to use filesystems > 16TB (e2fsprogs support not available yet) | 83 | * ability to use filesystems > 16TB (e2fsprogs support not available yet) |
75 | * extent format reduces metadata overhead (RAM, IO for access, transactions) | 84 | * extent format reduces metadata overhead (RAM, IO for access, transactions) |
76 | * extent format more robust in face of on-disk corruption due to magics, | 85 | * extent format more robust in face of on-disk corruption due to magics, |
77 | * internal redunancy in tree | 86 | * internal redundancy in tree |
78 | * improved file allocation (multi-block alloc) | 87 | * improved file allocation (multi-block alloc) |
79 | * fix 32000 subdirectory limit | 88 | * fix 32000 subdirectory limit |
80 | * nsec timestamps for mtime, atime, ctime, create time | 89 | * nsec timestamps for mtime, atime, ctime, create time |
@@ -116,10 +125,11 @@ grouping of bitmaps and inode tables. Some test results available here: | |||
116 | When mounting an ext4 filesystem, the following option are accepted: | 125 | When mounting an ext4 filesystem, the following option are accepted: |
117 | (*) == default | 126 | (*) == default |
118 | 127 | ||
119 | extents (*) ext4 will use extents to address file data. The | 128 | ro Mount filesystem read only. Note that ext4 will |
120 | file system will no longer be mountable by ext3. | 129 | replay the journal (and thus write to the |
121 | 130 | partition) even when mounted "read only". The | |
122 | noextents ext4 will not use extents for newly created files | 131 | mount options "ro,noload" can be used to prevent |
132 | writes to the filesystem. | ||
123 | 133 | ||
124 | journal_checksum Enable checksumming of the journal transactions. | 134 | journal_checksum Enable checksumming of the journal transactions. |
125 | This will allow the recovery code in e2fsck and the | 135 | This will allow the recovery code in e2fsck and the |
@@ -134,17 +144,17 @@ journal_async_commit Commit block can be written to disk without waiting | |||
134 | journal=update Update the ext4 file system's journal to the current | 144 | journal=update Update the ext4 file system's journal to the current |
135 | format. | 145 | format. |
136 | 146 | ||
137 | journal=inum When a journal already exists, this option is ignored. | ||
138 | Otherwise, it specifies the number of the inode which | ||
139 | will represent the ext4 file system's journal file. | ||
140 | |||
141 | journal_dev=devnum When the external journal device's major/minor numbers | 147 | journal_dev=devnum When the external journal device's major/minor numbers |
142 | have changed, this option allows the user to specify | 148 | have changed, this option allows the user to specify |
143 | the new journal location. The journal device is | 149 | the new journal location. The journal device is |
144 | identified through its new major/minor numbers encoded | 150 | identified through its new major/minor numbers encoded |
145 | in devnum. | 151 | in devnum. |
146 | 152 | ||
147 | noload Don't load the journal on mounting. | 153 | noload Don't load the journal on mounting. Note that |
154 | if the filesystem was not unmounted cleanly, | ||
155 | skipping the journal replay will lead to the | ||
156 | filesystem containing inconsistencies that can | ||
157 | lead to any number of problems. | ||
148 | 158 | ||
149 | data=journal All data are committed into the journal prior to being | 159 | data=journal All data are committed into the journal prior to being |
150 | written into the main file system. | 160 | written into the main file system. |
@@ -219,9 +229,12 @@ minixdf Make 'df' act like Minix. | |||
219 | 229 | ||
220 | debug Extra debugging information is sent to syslog. | 230 | debug Extra debugging information is sent to syslog. |
221 | 231 | ||
222 | errors=remount-ro(*) Remount the filesystem read-only on an error. | 232 | errors=remount-ro Remount the filesystem read-only on an error. |
223 | errors=continue Keep going on a filesystem error. | 233 | errors=continue Keep going on a filesystem error. |
224 | errors=panic Panic and halt the machine if an error occurs. | 234 | errors=panic Panic and halt the machine if an error occurs. |
235 | (These mount options override the errors behavior | ||
236 | specified in the superblock, which can be configured | ||
237 | using tune2fs) | ||
225 | 238 | ||
226 | data_err=ignore(*) Just print an error message if an error occurs | 239 | data_err=ignore(*) Just print an error message if an error occurs |
227 | in a file data buffer in ordered mode. | 240 | in a file data buffer in ordered mode. |
@@ -261,6 +274,42 @@ delalloc (*) Deferring block allocation until write-out time. | |||
261 | nodelalloc Disable delayed allocation. Blocks are allocation | 274 | nodelalloc Disable delayed allocation. Blocks are allocation |
262 | when data is copied from user to page cache. | 275 | when data is copied from user to page cache. |
263 | 276 | ||
277 | max_batch_time=usec Maximum amount of time ext4 should wait for | ||
278 | additional filesystem operations to be batch | ||
279 | together with a synchronous write operation. | ||
280 | Since a synchronous write operation is going to | ||
281 | force a commit and then a wait for the I/O | ||
282 | complete, it doesn't cost much, and can be a | ||
283 | huge throughput win, we wait for a small amount | ||
284 | of time to see if any other transactions can | ||
285 | piggyback on the synchronous write. The | ||
286 | algorithm used is designed to automatically tune | ||
287 | for the speed of the disk, by measuring the | ||
288 | amount of time (on average) that it takes to | ||
289 | finish committing a transaction. Call this time | ||
290 | the "commit time". If the time that the | ||
291 | transactoin has been running is less than the | ||
292 | commit time, ext4 will try sleeping for the | ||
293 | commit time to see if other operations will join | ||
294 | the transaction. The commit time is capped by | ||
295 | the max_batch_time, which defaults to 15000us | ||
296 | (15ms). This optimization can be turned off | ||
297 | entirely by setting max_batch_time to 0. | ||
298 | |||
299 | min_batch_time=usec This parameter sets the commit time (as | ||
300 | described above) to be at least min_batch_time. | ||
301 | It defaults to zero microseconds. Increasing | ||
302 | this parameter may improve the throughput of | ||
303 | multi-threaded, synchronous workloads on very | ||
304 | fast disks, at the cost of increasing latency. | ||
305 | |||
306 | journal_ioprio=prio The I/O priority (from 0 to 7, where 0 is the | ||
307 | highest priorty) which should be used for I/O | ||
308 | operations submitted by kjournald2 during a | ||
309 | commit operation. This defaults to 3, which is | ||
310 | a slightly higher priority than the default I/O | ||
311 | priority. | ||
312 | |||
264 | Data Mode | 313 | Data Mode |
265 | ========= | 314 | ========= |
266 | There are 3 different data modes: | 315 | There are 3 different data modes: |
diff --git a/Documentation/filesystems/proc.txt b/Documentation/filesystems/proc.txt index 71df353e367c..d105eb45282a 100644 --- a/Documentation/filesystems/proc.txt +++ b/Documentation/filesystems/proc.txt | |||
@@ -140,6 +140,7 @@ Table 1-1: Process specific entries in /proc | |||
140 | statm Process memory status information | 140 | statm Process memory status information |
141 | status Process status in human readable form | 141 | status Process status in human readable form |
142 | wchan If CONFIG_KALLSYMS is set, a pre-decoded wchan | 142 | wchan If CONFIG_KALLSYMS is set, a pre-decoded wchan |
143 | stack Report full stack trace, enable via CONFIG_STACKTRACE | ||
143 | smaps Extension based on maps, the rss size for each mapped file | 144 | smaps Extension based on maps, the rss size for each mapped file |
144 | .............................................................................. | 145 | .............................................................................. |
145 | 146 | ||
@@ -1385,6 +1386,15 @@ swapcache reclaim. Decreasing vfs_cache_pressure causes the kernel to prefer | |||
1385 | to retain dentry and inode caches. Increasing vfs_cache_pressure beyond 100 | 1386 | to retain dentry and inode caches. Increasing vfs_cache_pressure beyond 100 |
1386 | causes the kernel to prefer to reclaim dentries and inodes. | 1387 | causes the kernel to prefer to reclaim dentries and inodes. |
1387 | 1388 | ||
1389 | dirty_background_bytes | ||
1390 | ---------------------- | ||
1391 | |||
1392 | Contains the amount of dirty memory at which the pdflush background writeback | ||
1393 | daemon will start writeback. | ||
1394 | |||
1395 | If dirty_background_bytes is written, dirty_background_ratio becomes a function | ||
1396 | of its value (dirty_background_bytes / the amount of dirtyable system memory). | ||
1397 | |||
1388 | dirty_background_ratio | 1398 | dirty_background_ratio |
1389 | ---------------------- | 1399 | ---------------------- |
1390 | 1400 | ||
@@ -1393,14 +1403,29 @@ pages + file cache, not including locked pages and HugePages), the number of | |||
1393 | pages at which the pdflush background writeback daemon will start writing out | 1403 | pages at which the pdflush background writeback daemon will start writing out |
1394 | dirty data. | 1404 | dirty data. |
1395 | 1405 | ||
1406 | If dirty_background_ratio is written, dirty_background_bytes becomes a function | ||
1407 | of its value (dirty_background_ratio * the amount of dirtyable system memory). | ||
1408 | |||
1409 | dirty_bytes | ||
1410 | ----------- | ||
1411 | |||
1412 | Contains the amount of dirty memory at which a process generating disk writes | ||
1413 | will itself start writeback. | ||
1414 | |||
1415 | If dirty_bytes is written, dirty_ratio becomes a function of its value | ||
1416 | (dirty_bytes / the amount of dirtyable system memory). | ||
1417 | |||
1396 | dirty_ratio | 1418 | dirty_ratio |
1397 | ----------------- | 1419 | ----------- |
1398 | 1420 | ||
1399 | Contains, as a percentage of the dirtyable system memory (free pages + mapped | 1421 | Contains, as a percentage of the dirtyable system memory (free pages + mapped |
1400 | pages + file cache, not including locked pages and HugePages), the number of | 1422 | pages + file cache, not including locked pages and HugePages), the number of |
1401 | pages at which a process which is generating disk writes will itself start | 1423 | pages at which a process which is generating disk writes will itself start |
1402 | writing out dirty data. | 1424 | writing out dirty data. |
1403 | 1425 | ||
1426 | If dirty_ratio is written, dirty_bytes becomes a function of its value | ||
1427 | (dirty_ratio * the amount of dirtyable system memory). | ||
1428 | |||
1404 | dirty_writeback_centisecs | 1429 | dirty_writeback_centisecs |
1405 | ------------------------- | 1430 | ------------------------- |
1406 | 1431 | ||
diff --git a/Documentation/filesystems/squashfs.txt b/Documentation/filesystems/squashfs.txt new file mode 100644 index 000000000000..3e79e4a7a392 --- /dev/null +++ b/Documentation/filesystems/squashfs.txt | |||
@@ -0,0 +1,225 @@ | |||
1 | SQUASHFS 4.0 FILESYSTEM | ||
2 | ======================= | ||
3 | |||
4 | Squashfs is a compressed read-only filesystem for Linux. | ||
5 | It uses zlib compression to compress files, inodes and directories. | ||
6 | Inodes in the system are very small and all blocks are packed to minimise | ||
7 | data overhead. Block sizes greater than 4K are supported up to a maximum | ||
8 | of 1Mbytes (default block size 128K). | ||
9 | |||
10 | Squashfs is intended for general read-only filesystem use, for archival | ||
11 | use (i.e. in cases where a .tar.gz file may be used), and in constrained | ||
12 | block device/memory systems (e.g. embedded systems) where low overhead is | ||
13 | needed. | ||
14 | |||
15 | Mailing list: squashfs-devel@lists.sourceforge.net | ||
16 | Web site: www.squashfs.org | ||
17 | |||
18 | 1. FILESYSTEM FEATURES | ||
19 | ---------------------- | ||
20 | |||
21 | Squashfs filesystem features versus Cramfs: | ||
22 | |||
23 | Squashfs Cramfs | ||
24 | |||
25 | Max filesystem size: 2^64 16 MiB | ||
26 | Max file size: ~ 2 TiB 16 MiB | ||
27 | Max files: unlimited unlimited | ||
28 | Max directories: unlimited unlimited | ||
29 | Max entries per directory: unlimited unlimited | ||
30 | Max block size: 1 MiB 4 KiB | ||
31 | Metadata compression: yes no | ||
32 | Directory indexes: yes no | ||
33 | Sparse file support: yes no | ||
34 | Tail-end packing (fragments): yes no | ||
35 | Exportable (NFS etc.): yes no | ||
36 | Hard link support: yes no | ||
37 | "." and ".." in readdir: yes no | ||
38 | Real inode numbers: yes no | ||
39 | 32-bit uids/gids: yes no | ||
40 | File creation time: yes no | ||
41 | Xattr and ACL support: no no | ||
42 | |||
43 | Squashfs compresses data, inodes and directories. In addition, inode and | ||
44 | directory data are highly compacted, and packed on byte boundaries. Each | ||
45 | compressed inode is on average 8 bytes in length (the exact length varies on | ||
46 | file type, i.e. regular file, directory, symbolic link, and block/char device | ||
47 | inodes have different sizes). | ||
48 | |||
49 | 2. USING SQUASHFS | ||
50 | ----------------- | ||
51 | |||
52 | As squashfs is a read-only filesystem, the mksquashfs program must be used to | ||
53 | create populated squashfs filesystems. This and other squashfs utilities | ||
54 | can be obtained from http://www.squashfs.org. Usage instructions can be | ||
55 | obtained from this site also. | ||
56 | |||
57 | |||
58 | 3. SQUASHFS FILESYSTEM DESIGN | ||
59 | ----------------------------- | ||
60 | |||
61 | A squashfs filesystem consists of seven parts, packed together on a byte | ||
62 | alignment: | ||
63 | |||
64 | --------------- | ||
65 | | superblock | | ||
66 | |---------------| | ||
67 | | datablocks | | ||
68 | | & fragments | | ||
69 | |---------------| | ||
70 | | inode table | | ||
71 | |---------------| | ||
72 | | directory | | ||
73 | | table | | ||
74 | |---------------| | ||
75 | | fragment | | ||
76 | | table | | ||
77 | |---------------| | ||
78 | | export | | ||
79 | | table | | ||
80 | |---------------| | ||
81 | | uid/gid | | ||
82 | | lookup table | | ||
83 | --------------- | ||
84 | |||
85 | Compressed data blocks are written to the filesystem as files are read from | ||
86 | the source directory, and checked for duplicates. Once all file data has been | ||
87 | written the completed inode, directory, fragment, export and uid/gid lookup | ||
88 | tables are written. | ||
89 | |||
90 | 3.1 Inodes | ||
91 | ---------- | ||
92 | |||
93 | Metadata (inodes and directories) are compressed in 8Kbyte blocks. Each | ||
94 | compressed block is prefixed by a two byte length, the top bit is set if the | ||
95 | block is uncompressed. A block will be uncompressed if the -noI option is set, | ||
96 | or if the compressed block was larger than the uncompressed block. | ||
97 | |||
98 | Inodes are packed into the metadata blocks, and are not aligned to block | ||
99 | boundaries, therefore inodes overlap compressed blocks. Inodes are identified | ||
100 | by a 48-bit number which encodes the location of the compressed metadata block | ||
101 | containing the inode, and the byte offset into that block where the inode is | ||
102 | placed (<block, offset>). | ||
103 | |||
104 | To maximise compression there are different inodes for each file type | ||
105 | (regular file, directory, device, etc.), the inode contents and length | ||
106 | varying with the type. | ||
107 | |||
108 | To further maximise compression, two types of regular file inode and | ||
109 | directory inode are defined: inodes optimised for frequently occurring | ||
110 | regular files and directories, and extended types where extra | ||
111 | information has to be stored. | ||
112 | |||
113 | 3.2 Directories | ||
114 | --------------- | ||
115 | |||
116 | Like inodes, directories are packed into compressed metadata blocks, stored | ||
117 | in a directory table. Directories are accessed using the start address of | ||
118 | the metablock containing the directory and the offset into the | ||
119 | decompressed block (<block, offset>). | ||
120 | |||
121 | Directories are organised in a slightly complex way, and are not simply | ||
122 | a list of file names. The organisation takes advantage of the | ||
123 | fact that (in most cases) the inodes of the files will be in the same | ||
124 | compressed metadata block, and therefore, can share the start block. | ||
125 | Directories are therefore organised in a two level list, a directory | ||
126 | header containing the shared start block value, and a sequence of directory | ||
127 | entries, each of which share the shared start block. A new directory header | ||
128 | is written once/if the inode start block changes. The directory | ||
129 | header/directory entry list is repeated as many times as necessary. | ||
130 | |||
131 | Directories are sorted, and can contain a directory index to speed up | ||
132 | file lookup. Directory indexes store one entry per metablock, each entry | ||
133 | storing the index/filename mapping to the first directory header | ||
134 | in each metadata block. Directories are sorted in alphabetical order, | ||
135 | and at lookup the index is scanned linearly looking for the first filename | ||
136 | alphabetically larger than the filename being looked up. At this point the | ||
137 | location of the metadata block the filename is in has been found. | ||
138 | The general idea of the index is ensure only one metadata block needs to be | ||
139 | decompressed to do a lookup irrespective of the length of the directory. | ||
140 | This scheme has the advantage that it doesn't require extra memory overhead | ||
141 | and doesn't require much extra storage on disk. | ||
142 | |||
143 | 3.3 File data | ||
144 | ------------- | ||
145 | |||
146 | Regular files consist of a sequence of contiguous compressed blocks, and/or a | ||
147 | compressed fragment block (tail-end packed block). The compressed size | ||
148 | of each datablock is stored in a block list contained within the | ||
149 | file inode. | ||
150 | |||
151 | To speed up access to datablocks when reading 'large' files (256 Mbytes or | ||
152 | larger), the code implements an index cache that caches the mapping from | ||
153 | block index to datablock location on disk. | ||
154 | |||
155 | The index cache allows Squashfs to handle large files (up to 1.75 TiB) while | ||
156 | retaining a simple and space-efficient block list on disk. The cache | ||
157 | is split into slots, caching up to eight 224 GiB files (128 KiB blocks). | ||
158 | Larger files use multiple slots, with 1.75 TiB files using all 8 slots. | ||
159 | The index cache is designed to be memory efficient, and by default uses | ||
160 | 16 KiB. | ||
161 | |||
162 | 3.4 Fragment lookup table | ||
163 | ------------------------- | ||
164 | |||
165 | Regular files can contain a fragment index which is mapped to a fragment | ||
166 | location on disk and compressed size using a fragment lookup table. This | ||
167 | fragment lookup table is itself stored compressed into metadata blocks. | ||
168 | A second index table is used to locate these. This second index table for | ||
169 | speed of access (and because it is small) is read at mount time and cached | ||
170 | in memory. | ||
171 | |||
172 | 3.5 Uid/gid lookup table | ||
173 | ------------------------ | ||
174 | |||
175 | For space efficiency regular files store uid and gid indexes, which are | ||
176 | converted to 32-bit uids/gids using an id look up table. This table is | ||
177 | stored compressed into metadata blocks. A second index table is used to | ||
178 | locate these. This second index table for speed of access (and because it | ||
179 | is small) is read at mount time and cached in memory. | ||
180 | |||
181 | 3.6 Export table | ||
182 | ---------------- | ||
183 | |||
184 | To enable Squashfs filesystems to be exportable (via NFS etc.) filesystems | ||
185 | can optionally (disabled with the -no-exports Mksquashfs option) contain | ||
186 | an inode number to inode disk location lookup table. This is required to | ||
187 | enable Squashfs to map inode numbers passed in filehandles to the inode | ||
188 | location on disk, which is necessary when the export code reinstantiates | ||
189 | expired/flushed inodes. | ||
190 | |||
191 | This table is stored compressed into metadata blocks. A second index table is | ||
192 | used to locate these. This second index table for speed of access (and because | ||
193 | it is small) is read at mount time and cached in memory. | ||
194 | |||
195 | |||
196 | 4. TODOS AND OUTSTANDING ISSUES | ||
197 | ------------------------------- | ||
198 | |||
199 | 4.1 Todo list | ||
200 | ------------- | ||
201 | |||
202 | Implement Xattr and ACL support. The Squashfs 4.0 filesystem layout has hooks | ||
203 | for these but the code has not been written. Once the code has been written | ||
204 | the existing layout should not require modification. | ||
205 | |||
206 | 4.2 Squashfs internal cache | ||
207 | --------------------------- | ||
208 | |||
209 | Blocks in Squashfs are compressed. To avoid repeatedly decompressing | ||
210 | recently accessed data Squashfs uses two small metadata and fragment caches. | ||
211 | |||
212 | The cache is not used for file datablocks, these are decompressed and cached in | ||
213 | the page-cache in the normal way. The cache is used to temporarily cache | ||
214 | fragment and metadata blocks which have been read as a result of a metadata | ||
215 | (i.e. inode or directory) or fragment access. Because metadata and fragments | ||
216 | are packed together into blocks (to gain greater compression) the read of a | ||
217 | particular piece of metadata or fragment will retrieve other metadata/fragments | ||
218 | which have been packed with it, these because of locality-of-reference may be | ||
219 | read in the near future. Temporarily caching them ensures they are available | ||
220 | for near future access without requiring an additional read and decompress. | ||
221 | |||
222 | In the future this internal cache may be replaced with an implementation which | ||
223 | uses the kernel page cache. Because the page cache operates on page sized | ||
224 | units this may introduce additional complexity in terms of locking and | ||
225 | associated race conditions. | ||
diff --git a/Documentation/filesystems/vfs.txt b/Documentation/filesystems/vfs.txt index ef19afa186a9..deeeed0faa8f 100644 --- a/Documentation/filesystems/vfs.txt +++ b/Documentation/filesystems/vfs.txt | |||
@@ -210,8 +210,8 @@ struct super_operations { | |||
210 | void (*put_super) (struct super_block *); | 210 | void (*put_super) (struct super_block *); |
211 | void (*write_super) (struct super_block *); | 211 | void (*write_super) (struct super_block *); |
212 | int (*sync_fs)(struct super_block *sb, int wait); | 212 | int (*sync_fs)(struct super_block *sb, int wait); |
213 | void (*write_super_lockfs) (struct super_block *); | 213 | int (*freeze_fs) (struct super_block *); |
214 | void (*unlockfs) (struct super_block *); | 214 | int (*unfreeze_fs) (struct super_block *); |
215 | int (*statfs) (struct dentry *, struct kstatfs *); | 215 | int (*statfs) (struct dentry *, struct kstatfs *); |
216 | int (*remount_fs) (struct super_block *, int *, char *); | 216 | int (*remount_fs) (struct super_block *, int *, char *); |
217 | void (*clear_inode) (struct inode *); | 217 | void (*clear_inode) (struct inode *); |
@@ -270,11 +270,11 @@ or bottom half). | |||
270 | a superblock. The second parameter indicates whether the method | 270 | a superblock. The second parameter indicates whether the method |
271 | should wait until the write out has been completed. Optional. | 271 | should wait until the write out has been completed. Optional. |
272 | 272 | ||
273 | write_super_lockfs: called when VFS is locking a filesystem and | 273 | freeze_fs: called when VFS is locking a filesystem and |
274 | forcing it into a consistent state. This method is currently | 274 | forcing it into a consistent state. This method is currently |
275 | used by the Logical Volume Manager (LVM). | 275 | used by the Logical Volume Manager (LVM). |
276 | 276 | ||
277 | unlockfs: called when VFS is unlocking a filesystem and making it writable | 277 | unfreeze_fs: called when VFS is unlocking a filesystem and making it writable |
278 | again. | 278 | again. |
279 | 279 | ||
280 | statfs: called when the VFS needs to get filesystem statistics. This | 280 | statfs: called when the VFS needs to get filesystem statistics. This |
diff --git a/Documentation/hwmon/abituguru-datasheet b/Documentation/hwmon/abituguru-datasheet index aef5a9b36846..d9251efdcec7 100644 --- a/Documentation/hwmon/abituguru-datasheet +++ b/Documentation/hwmon/abituguru-datasheet | |||
@@ -74,7 +74,7 @@ a sensor. | |||
74 | Notice that some banks have both a read and a write address this is how the | 74 | Notice that some banks have both a read and a write address this is how the |
75 | uGuru determines if a read from or a write to the bank is taking place, thus | 75 | uGuru determines if a read from or a write to the bank is taking place, thus |
76 | when reading you should always use the read address and when writing the | 76 | when reading you should always use the read address and when writing the |
77 | write address. The write address is always one (1) more then the read address. | 77 | write address. The write address is always one (1) more than the read address. |
78 | 78 | ||
79 | 79 | ||
80 | uGuru ready | 80 | uGuru ready |
@@ -121,7 +121,7 @@ Once all bytes have been read data will hold 0x09, but there is no reason to | |||
121 | test for this. Notice that the number of bytes is bank address dependent see | 121 | test for this. Notice that the number of bytes is bank address dependent see |
122 | above and below. | 122 | above and below. |
123 | 123 | ||
124 | After completing a successfull read it is advised to put the uGuru back in | 124 | After completing a successful read it is advised to put the uGuru back in |
125 | ready mode, so that it is ready for the next read / write cycle. This way | 125 | ready mode, so that it is ready for the next read / write cycle. This way |
126 | if your program / driver is unloaded and later loaded again the detection | 126 | if your program / driver is unloaded and later loaded again the detection |
127 | algorithm described above will still work. | 127 | algorithm described above will still work. |
@@ -141,7 +141,7 @@ don't ask why this is the way it is. | |||
141 | 141 | ||
142 | Once DATA holds 0x01 read CMD it should hold 0xAC now. | 142 | Once DATA holds 0x01 read CMD it should hold 0xAC now. |
143 | 143 | ||
144 | After completing a successfull write it is advised to put the uGuru back in | 144 | After completing a successful write it is advised to put the uGuru back in |
145 | ready mode, so that it is ready for the next read / write cycle. This way | 145 | ready mode, so that it is ready for the next read / write cycle. This way |
146 | if your program / driver is unloaded and later loaded again the detection | 146 | if your program / driver is unloaded and later loaded again the detection |
147 | algorithm described above will still work. | 147 | algorithm described above will still work. |
@@ -224,7 +224,7 @@ Bit 3: Beep if alarm (RW) | |||
224 | Bit 4: 1 if alarm cause measured temp is over the warning threshold (R) | 224 | Bit 4: 1 if alarm cause measured temp is over the warning threshold (R) |
225 | Bit 5: 1 if alarm cause measured volt is over the max threshold (R) | 225 | Bit 5: 1 if alarm cause measured volt is over the max threshold (R) |
226 | Bit 6: 1 if alarm cause measured volt is under the min threshold (R) | 226 | Bit 6: 1 if alarm cause measured volt is under the min threshold (R) |
227 | Bit 7: Volt sensor: Shutdown if alarm persist for more then 4 seconds (RW) | 227 | Bit 7: Volt sensor: Shutdown if alarm persist for more than 4 seconds (RW) |
228 | Temp sensor: Shutdown if temp is over the shutdown threshold (RW) | 228 | Temp sensor: Shutdown if temp is over the shutdown threshold (RW) |
229 | 229 | ||
230 | * This bit is only honored/used by the uGuru if a temp sensor is connected | 230 | * This bit is only honored/used by the uGuru if a temp sensor is connected |
@@ -293,7 +293,7 @@ Byte 0: | |||
293 | Alarm behaviour for the selected sensor. A 1 enables the described behaviour. | 293 | Alarm behaviour for the selected sensor. A 1 enables the described behaviour. |
294 | Bit 0: Give an alarm if measured rpm is under the min threshold (RW) | 294 | Bit 0: Give an alarm if measured rpm is under the min threshold (RW) |
295 | Bit 3: Beep if alarm (RW) | 295 | Bit 3: Beep if alarm (RW) |
296 | Bit 7: Shutdown if alarm persist for more then 4 seconds (RW) | 296 | Bit 7: Shutdown if alarm persist for more than 4 seconds (RW) |
297 | 297 | ||
298 | Byte 1: | 298 | Byte 1: |
299 | min threshold (scale as bank 0x26) | 299 | min threshold (scale as bank 0x26) |
diff --git a/Documentation/hwmon/adt7470 b/Documentation/hwmon/adt7470 index 75d13ca147cc..8ce4aa0a0f55 100644 --- a/Documentation/hwmon/adt7470 +++ b/Documentation/hwmon/adt7470 | |||
@@ -31,15 +31,11 @@ Each of the measured inputs (temperature, fan speed) has corresponding high/low | |||
31 | limit values. The ADT7470 will signal an ALARM if any measured value exceeds | 31 | limit values. The ADT7470 will signal an ALARM if any measured value exceeds |
32 | either limit. | 32 | either limit. |
33 | 33 | ||
34 | The ADT7470 DOES NOT sample all inputs continuously. A single pin on the | 34 | The ADT7470 samples all inputs continuously. A kernel thread is started up for |
35 | ADT7470 is connected to a multitude of thermal diodes, but the chip must be | 35 | the purpose of periodically querying the temperature sensors, thus allowing the |
36 | instructed explicitly to read the multitude of diodes. If you want to use | 36 | automatic fan pwm control to set the fan speed. The driver will not read the |
37 | automatic fan control mode, you must manually read any of the temperature | 37 | registers more often than once every 5 seconds. Further, configuration data is |
38 | sensors or the fan control algorithm will not run. The chip WILL NOT DO THIS | 38 | only read once per minute. |
39 | AUTOMATICALLY; this must be done from userspace. This may be a bug in the chip | ||
40 | design, given that many other AD chips take care of this. The driver will not | ||
41 | read the registers more often than once every 5 seconds. Further, | ||
42 | configuration data is only read once per minute. | ||
43 | 39 | ||
44 | Special Features | 40 | Special Features |
45 | ---------------- | 41 | ---------------- |
@@ -72,5 +68,6 @@ pwm#_auto_point2_temp. | |||
72 | Notes | 68 | Notes |
73 | ----- | 69 | ----- |
74 | 70 | ||
75 | As stated above, the temperature inputs must be read periodically from | 71 | The temperature inputs no longer need to be read periodically from userspace in |
76 | userspace in order for the automatic pwm algorithm to run. | 72 | order for the automatic pwm algorithm to run. This was the case for earlier |
73 | versions of the driver. | ||
diff --git a/Documentation/hwmon/f71882fg b/Documentation/hwmon/f71882fg new file mode 100644 index 000000000000..a8321267b5b6 --- /dev/null +++ b/Documentation/hwmon/f71882fg | |||
@@ -0,0 +1,89 @@ | |||
1 | Kernel driver f71882fg | ||
2 | ====================== | ||
3 | |||
4 | Supported chips: | ||
5 | * Fintek F71882FG and F71883FG | ||
6 | Prefix: 'f71882fg' | ||
7 | Addresses scanned: none, address read from Super I/O config space | ||
8 | Datasheet: Available from the Fintek website | ||
9 | * Fintek F71862FG and F71863FG | ||
10 | Prefix: 'f71862fg' | ||
11 | Addresses scanned: none, address read from Super I/O config space | ||
12 | Datasheet: Available from the Fintek website | ||
13 | * Fintek F8000 | ||
14 | Prefix: 'f8000' | ||
15 | Addresses scanned: none, address read from Super I/O config space | ||
16 | Datasheet: Not public | ||
17 | |||
18 | Author: Hans de Goede <hdegoede@redhat.com> | ||
19 | |||
20 | |||
21 | Description | ||
22 | ----------- | ||
23 | |||
24 | Fintek F718xxFG/F8000 Super I/O chips include complete hardware monitoring | ||
25 | capabilities. They can monitor up to 9 voltages (3 for the F8000), 4 fans and | ||
26 | 3 temperature sensors. | ||
27 | |||
28 | These chips also have fan controlling features, using either DC or PWM, in | ||
29 | three different modes (one manual, two automatic). | ||
30 | |||
31 | The driver assumes that no more than one chip is present, which seems | ||
32 | reasonable. | ||
33 | |||
34 | |||
35 | Monitoring | ||
36 | ---------- | ||
37 | |||
38 | The Voltage, Fan and Temperature Monitoring uses the standard sysfs | ||
39 | interface as documented in sysfs-interface, without any exceptions. | ||
40 | |||
41 | |||
42 | Fan Control | ||
43 | ----------- | ||
44 | |||
45 | Both PWM (pulse-width modulation) and DC fan speed control methods are | ||
46 | supported. The right one to use depends on external circuitry on the | ||
47 | motherboard, so the driver assumes that the BIOS set the method | ||
48 | properly. | ||
49 | |||
50 | There are 2 modes to specify the speed of the fan, PWM duty cycle (or DC | ||
51 | voltage) mode, where 0-100% duty cycle (0-100% of 12V) is specified. And RPM | ||
52 | mode where the actual RPM of the fan (as measured) is controlled and the speed | ||
53 | gets specified as 0-100% of the fan#_full_speed file. | ||
54 | |||
55 | Since both modes work in a 0-100% (mapped to 0-255) scale, there isn't a | ||
56 | whole lot of a difference when modifying fan control settings. The only | ||
57 | important difference is that in RPM mode the 0-100% controls the fan speed | ||
58 | between 0-100% of fan#_full_speed. It is assumed that if the BIOS programs | ||
59 | RPM mode, it will also set fan#_full_speed properly, if it does not then | ||
60 | fan control will not work properly, unless you set a sane fan#_full_speed | ||
61 | value yourself. | ||
62 | |||
63 | Switching between these modes requires re-initializing a whole bunch of | ||
64 | registers, so the mode which the BIOS has set is kept. The mode is | ||
65 | printed when loading the driver. | ||
66 | |||
67 | Three different fan control modes are supported; the mode number is written | ||
68 | to the pwm#_enable file. Note that not all modes are supported on all | ||
69 | chips, and some modes may only be available in RPM / PWM mode on the F8000. | ||
70 | Writing an unsupported mode will result in an invalid parameter error. | ||
71 | |||
72 | * 1: Manual mode | ||
73 | You ask for a specific PWM duty cycle / DC voltage or a specific % of | ||
74 | fan#_full_speed by writing to the pwm# file. This mode is only | ||
75 | available on the F8000 if the fan channel is in RPM mode. | ||
76 | |||
77 | * 2: Normal auto mode | ||
78 | You can define a number of temperature/fan speed trip points, which % the | ||
79 | fan should run at at this temp and which temp a fan should follow using the | ||
80 | standard sysfs interface. The number and type of trip points is chip | ||
81 | depended, see which files are available in sysfs. | ||
82 | Fan/PWM channel 3 of the F8000 is always in this mode! | ||
83 | |||
84 | * 3: Thermostat mode (Only available on the F8000 when in duty cycle mode) | ||
85 | The fan speed is regulated to keep the temp the fan is mapped to between | ||
86 | temp#_auto_point2_temp and temp#_auto_point3_temp. | ||
87 | |||
88 | Both of the automatic modes require that pwm1 corresponds to fan1, pwm2 to | ||
89 | fan2 and pwm3 to fan3. | ||
diff --git a/Documentation/hwmon/it87 b/Documentation/hwmon/it87 index 042c0415140b..659315d98e00 100644 --- a/Documentation/hwmon/it87 +++ b/Documentation/hwmon/it87 | |||
@@ -26,6 +26,10 @@ Supported chips: | |||
26 | Datasheet: Publicly available at the ITE website | 26 | Datasheet: Publicly available at the ITE website |
27 | http://www.ite.com.tw/product_info/file/pc/IT8718F_V0.2.zip | 27 | http://www.ite.com.tw/product_info/file/pc/IT8718F_V0.2.zip |
28 | http://www.ite.com.tw/product_info/file/pc/IT8718F_V0%203_(for%20C%20version).zip | 28 | http://www.ite.com.tw/product_info/file/pc/IT8718F_V0%203_(for%20C%20version).zip |
29 | * IT8720F | ||
30 | Prefix: 'it8720' | ||
31 | Addresses scanned: from Super I/O config space (8 I/O ports) | ||
32 | Datasheet: Not yet publicly available. | ||
29 | * SiS950 [clone of IT8705F] | 33 | * SiS950 [clone of IT8705F] |
30 | Prefix: 'it87' | 34 | Prefix: 'it87' |
31 | Addresses scanned: from Super I/O config space (8 I/O ports) | 35 | Addresses scanned: from Super I/O config space (8 I/O ports) |
@@ -71,7 +75,7 @@ Description | |||
71 | ----------- | 75 | ----------- |
72 | 76 | ||
73 | This driver implements support for the IT8705F, IT8712F, IT8716F, | 77 | This driver implements support for the IT8705F, IT8712F, IT8716F, |
74 | IT8718F, IT8726F and SiS950 chips. | 78 | IT8718F, IT8720F, IT8726F and SiS950 chips. |
75 | 79 | ||
76 | These chips are 'Super I/O chips', supporting floppy disks, infrared ports, | 80 | These chips are 'Super I/O chips', supporting floppy disks, infrared ports, |
77 | joysticks and other miscellaneous stuff. For hardware monitoring, they | 81 | joysticks and other miscellaneous stuff. For hardware monitoring, they |
@@ -84,19 +88,19 @@ the IT8716F and late IT8712F have 6. They are shared with other functions | |||
84 | though, so the functionality may not be available on a given system. | 88 | though, so the functionality may not be available on a given system. |
85 | The driver dumbly assume it is there. | 89 | The driver dumbly assume it is there. |
86 | 90 | ||
87 | The IT8718F also features VID inputs (up to 8 pins) but the value is | 91 | The IT8718F and IT8720F also features VID inputs (up to 8 pins) but the value |
88 | stored in the Super-I/O configuration space. Due to technical limitations, | 92 | is stored in the Super-I/O configuration space. Due to technical limitations, |
89 | this value can currently only be read once at initialization time, so | 93 | this value can currently only be read once at initialization time, so |
90 | the driver won't notice and report changes in the VID value. The two | 94 | the driver won't notice and report changes in the VID value. The two |
91 | upper VID bits share their pins with voltage inputs (in5 and in6) so you | 95 | upper VID bits share their pins with voltage inputs (in5 and in6) so you |
92 | can't have both on a given board. | 96 | can't have both on a given board. |
93 | 97 | ||
94 | The IT8716F, IT8718F and later IT8712F revisions have support for | 98 | The IT8716F, IT8718F, IT8720F and later IT8712F revisions have support for |
95 | 2 additional fans. The additional fans are supported by the driver. | 99 | 2 additional fans. The additional fans are supported by the driver. |
96 | 100 | ||
97 | The IT8716F and IT8718F, and late IT8712F and IT8705F also have optional | 101 | The IT8716F, IT8718F and IT8720F, and late IT8712F and IT8705F also have |
98 | 16-bit tachometer counters for fans 1 to 3. This is better (no more fan | 102 | optional 16-bit tachometer counters for fans 1 to 3. This is better (no more |
99 | clock divider mess) but not compatible with the older chips and | 103 | fan clock divider mess) but not compatible with the older chips and |
100 | revisions. The 16-bit tachometer mode is enabled by the driver when one | 104 | revisions. The 16-bit tachometer mode is enabled by the driver when one |
101 | of the above chips is detected. | 105 | of the above chips is detected. |
102 | 106 | ||
@@ -122,7 +126,7 @@ zero'; this is important for negative voltage measurements. All voltage | |||
122 | inputs can measure voltages between 0 and 4.08 volts, with a resolution of | 126 | inputs can measure voltages between 0 and 4.08 volts, with a resolution of |
123 | 0.016 volt. The battery voltage in8 does not have limit registers. | 127 | 0.016 volt. The battery voltage in8 does not have limit registers. |
124 | 128 | ||
125 | The VID lines (IT8712F/IT8716F/IT8718F) encode the core voltage value: | 129 | The VID lines (IT8712F/IT8716F/IT8718F/IT8720F) encode the core voltage value: |
126 | the voltage level your processor should work with. This is hardcoded by | 130 | the voltage level your processor should work with. This is hardcoded by |
127 | the mainboard and/or processor itself. It is a value in volts. | 131 | the mainboard and/or processor itself. It is a value in volts. |
128 | 132 | ||
diff --git a/Documentation/hwmon/lm70 b/Documentation/hwmon/lm70 index 2bdd3feebf53..0d240291e3cc 100644 --- a/Documentation/hwmon/lm70 +++ b/Documentation/hwmon/lm70 | |||
@@ -1,9 +1,11 @@ | |||
1 | Kernel driver lm70 | 1 | Kernel driver lm70 |
2 | ================== | 2 | ================== |
3 | 3 | ||
4 | Supported chip: | 4 | Supported chips: |
5 | * National Semiconductor LM70 | 5 | * National Semiconductor LM70 |
6 | Datasheet: http://www.national.com/pf/LM/LM70.html | 6 | Datasheet: http://www.national.com/pf/LM/LM70.html |
7 | * Texas Instruments TMP121/TMP123 | ||
8 | Information: http://focus.ti.com/docs/prod/folders/print/tmp121.html | ||
7 | 9 | ||
8 | Author: | 10 | Author: |
9 | Kaiwan N Billimoria <kaiwan@designergraphix.com> | 11 | Kaiwan N Billimoria <kaiwan@designergraphix.com> |
@@ -25,6 +27,14 @@ complement digital temperature (sent via the SIO line), is available in the | |||
25 | driver for interpretation. This driver makes use of the kernel's in-core | 27 | driver for interpretation. This driver makes use of the kernel's in-core |
26 | SPI support. | 28 | SPI support. |
27 | 29 | ||
30 | As a real (in-tree) example of this "SPI protocol driver" interfacing | ||
31 | with a "SPI master controller driver", see drivers/spi/spi_lm70llp.c | ||
32 | and its associated documentation. | ||
33 | |||
34 | The TMP121/TMP123 are very similar; main differences are 4 wire SPI inter- | ||
35 | face (read only) and 13-bit temperature data (0.0625 degrees celsius reso- | ||
36 | lution). | ||
37 | |||
28 | Thanks to | 38 | Thanks to |
29 | --------- | 39 | --------- |
30 | Jean Delvare <khali@linux-fr.org> for mentoring the hwmon-side driver | 40 | Jean Delvare <khali@linux-fr.org> for mentoring the hwmon-side driver |
diff --git a/Documentation/hwmon/lm85 b/Documentation/hwmon/lm85 index 400620741290..a13680871bc7 100644 --- a/Documentation/hwmon/lm85 +++ b/Documentation/hwmon/lm85 | |||
@@ -164,7 +164,7 @@ configured individually according to the following options. | |||
164 | temperature. (PWM value from 0 to 255) | 164 | temperature. (PWM value from 0 to 255) |
165 | 165 | ||
166 | * pwm#_auto_pwm_minctl - this flags selects for temp#_auto_temp_off temperature | 166 | * pwm#_auto_pwm_minctl - this flags selects for temp#_auto_temp_off temperature |
167 | the bahaviour of fans. Write 1 to let fans spinning at | 167 | the behaviour of fans. Write 1 to let fans spinning at |
168 | pwm#_auto_pwm_min or write 0 to let them off. | 168 | pwm#_auto_pwm_min or write 0 to let them off. |
169 | 169 | ||
170 | NOTE: It has been reported that there is a bug in the LM85 that causes the flag | 170 | NOTE: It has been reported that there is a bug in the LM85 that causes the flag |
diff --git a/Documentation/hwmon/ltc4245 b/Documentation/hwmon/ltc4245 new file mode 100644 index 000000000000..bae7a3adc5d8 --- /dev/null +++ b/Documentation/hwmon/ltc4245 | |||
@@ -0,0 +1,81 @@ | |||
1 | Kernel driver ltc4245 | ||
2 | ===================== | ||
3 | |||
4 | Supported chips: | ||
5 | * Linear Technology LTC4245 | ||
6 | Prefix: 'ltc4245' | ||
7 | Addresses scanned: 0x20-0x3f | ||
8 | Datasheet: | ||
9 | http://www.linear.com/pc/downloadDocument.do?navId=H0,C1,C1003,C1006,C1140,P19392,D13517 | ||
10 | |||
11 | Author: Ira W. Snyder <iws@ovro.caltech.edu> | ||
12 | |||
13 | |||
14 | Description | ||
15 | ----------- | ||
16 | |||
17 | The LTC4245 controller allows a board to be safely inserted and removed | ||
18 | from a live backplane in multiple supply systems such as CompactPCI and | ||
19 | PCI Express. | ||
20 | |||
21 | |||
22 | Usage Notes | ||
23 | ----------- | ||
24 | |||
25 | This driver does not probe for LTC4245 devices, due to the fact that some | ||
26 | of the possible addresses are unfriendly to probing. You will need to use | ||
27 | the "force" parameter to tell the driver where to find the device. | ||
28 | |||
29 | Example: the following will load the driver for an LTC4245 at address 0x23 | ||
30 | on I2C bus #1: | ||
31 | $ modprobe ltc4245 force=1,0x23 | ||
32 | |||
33 | |||
34 | Sysfs entries | ||
35 | ------------- | ||
36 | |||
37 | The LTC4245 has built-in limits for over and under current warnings. This | ||
38 | makes it very likely that the reference circuit will be used. | ||
39 | |||
40 | This driver uses the values in the datasheet to change the register values | ||
41 | into the values specified in the sysfs-interface document. The current readings | ||
42 | rely on the sense resistors listed in Table 2: "Sense Resistor Values". | ||
43 | |||
44 | in1_input 12v input voltage (mV) | ||
45 | in2_input 5v input voltage (mV) | ||
46 | in3_input 3v input voltage (mV) | ||
47 | in4_input Vee (-12v) input voltage (mV) | ||
48 | |||
49 | in1_min_alarm 12v input undervoltage alarm | ||
50 | in2_min_alarm 5v input undervoltage alarm | ||
51 | in3_min_alarm 3v input undervoltage alarm | ||
52 | in4_min_alarm Vee (-12v) input undervoltage alarm | ||
53 | |||
54 | curr1_input 12v current (mA) | ||
55 | curr2_input 5v current (mA) | ||
56 | curr3_input 3v current (mA) | ||
57 | curr4_input Vee (-12v) current (mA) | ||
58 | |||
59 | curr1_max_alarm 12v overcurrent alarm | ||
60 | curr2_max_alarm 5v overcurrent alarm | ||
61 | curr3_max_alarm 3v overcurrent alarm | ||
62 | curr4_max_alarm Vee (-12v) overcurrent alarm | ||
63 | |||
64 | in5_input 12v output voltage (mV) | ||
65 | in6_input 5v output voltage (mV) | ||
66 | in7_input 3v output voltage (mV) | ||
67 | in8_input Vee (-12v) output voltage (mV) | ||
68 | |||
69 | in5_min_alarm 12v output undervoltage alarm | ||
70 | in6_min_alarm 5v output undervoltage alarm | ||
71 | in7_min_alarm 3v output undervoltage alarm | ||
72 | in8_min_alarm Vee (-12v) output undervoltage alarm | ||
73 | |||
74 | in9_input GPIO #1 voltage data | ||
75 | in10_input GPIO #2 voltage data | ||
76 | in11_input GPIO #3 voltage data | ||
77 | |||
78 | power1_input 12v power usage (mW) | ||
79 | power2_input 5v power usage (mW) | ||
80 | power3_input 3v power usage (mW) | ||
81 | power4_input Vee (-12v) power usage (mW) | ||
diff --git a/Documentation/ide/warm-plug-howto.txt b/Documentation/ide/warm-plug-howto.txt index d5885468b072..98152bcd515a 100644 --- a/Documentation/ide/warm-plug-howto.txt +++ b/Documentation/ide/warm-plug-howto.txt | |||
@@ -11,3 +11,8 @@ unplug old device(s) and plug new device(s) | |||
11 | # echo -n "1" > /sys/class/ide_port/idex/scan | 11 | # echo -n "1" > /sys/class/ide_port/idex/scan |
12 | 12 | ||
13 | done | 13 | done |
14 | |||
15 | NOTE: please make sure that partitions are unmounted and that there are | ||
16 | no other active references to devices before doing "delete_devices" step, | ||
17 | also do not attempt "scan" step on devices currently in use -- otherwise | ||
18 | results may be unpredictable and lead to data loss if you're unlucky | ||
diff --git a/Documentation/input/walkera0701.txt b/Documentation/input/walkera0701.txt new file mode 100644 index 000000000000..8f4289efc5c4 --- /dev/null +++ b/Documentation/input/walkera0701.txt | |||
@@ -0,0 +1,109 @@ | |||
1 | |||
2 | Walkera WK-0701 transmitter is supplied with a ready to fly Walkera | ||
3 | helicopters such as HM36, HM37, HM60. The walkera0701 module enables to use | ||
4 | this transmitter as joystick | ||
5 | |||
6 | Devel homepage and download: | ||
7 | http://zub.fei.tuke.sk/walkera-wk0701/ | ||
8 | |||
9 | or use cogito: | ||
10 | cg-clone http://zub.fei.tuke.sk/GIT/walkera0701-joystick | ||
11 | |||
12 | |||
13 | Connecting to PC: | ||
14 | |||
15 | At back side of transmitter S-video connector can be found. Modulation | ||
16 | pulses from processor to HF part can be found at pin 2 of this connector, | ||
17 | pin 3 is GND. Between pin 3 and CPU 5k6 resistor can be found. To get | ||
18 | modulation pulses to PC, signal pulses must be amplified. | ||
19 | |||
20 | Cable: (walkera TX to parport) | ||
21 | |||
22 | Walkera WK-0701 TX S-VIDEO connector: | ||
23 | (back side of TX) | ||
24 | __ __ S-video: canon25 | ||
25 | / |_| \ pin 2 (signal) NPN parport | ||
26 | / O 4 3 O \ pin 3 (GND) LED ________________ 10 ACK | ||
27 | ( O 2 1 O ) | C | ||
28 | \ ___ / 2 ________________________|\|_____|/ | ||
29 | | [___] | |/| B |\ | ||
30 | ------- 3 __________________________________|________________ 25 GND | ||
31 | E | ||
32 | |||
33 | |||
34 | I use green LED and BC109 NPN transistor. | ||
35 | |||
36 | Software: | ||
37 | |||
38 | Build kernel with walkera0701 module. Module walkera0701 need exclusive | ||
39 | access to parport, modules like lp must be unloaded before loading | ||
40 | walkera0701 module, check dmesg for error messages. Connect TX to PC by | ||
41 | cable and run jstest /dev/input/js0 to see values from TX. If no value can | ||
42 | be changed by TX "joystick", check output from /proc/interrupts. Value for | ||
43 | (usually irq7) parport must increase if TX is on. | ||
44 | |||
45 | |||
46 | |||
47 | Technical details: | ||
48 | |||
49 | Driver use interrupt from parport ACK input bit to measure pulse length | ||
50 | using hrtimers. | ||
51 | |||
52 | Frame format: | ||
53 | Based on walkera WK-0701 PCM Format description by Shaul Eizikovich. | ||
54 | (downloaded from http://www.smartpropoplus.com/Docs/Walkera_Wk-0701_PCM.pdf) | ||
55 | |||
56 | Signal pulses: | ||
57 | (ANALOG) | ||
58 | SYNC BIN OCT | ||
59 | +---------+ +------+ | ||
60 | | | | | | ||
61 | --+ +------+ +--- | ||
62 | |||
63 | Frame: | ||
64 | SYNC , BIN1, OCT1, BIN2, OCT2 ... BIN24, OCT24, BIN25, next frame SYNC .. | ||
65 | |||
66 | pulse length: | ||
67 | Binary values: Analog octal values: | ||
68 | |||
69 | 288 uS Binary 0 318 uS 000 | ||
70 | 438 uS Binary 1 398 uS 001 | ||
71 | 478 uS 010 | ||
72 | 558 uS 011 | ||
73 | 638 uS 100 | ||
74 | 1306 uS SYNC 718 uS 101 | ||
75 | 798 uS 110 | ||
76 | 878 uS 111 | ||
77 | |||
78 | 24 bin+oct values + 1 bin value = 24*4+1 bits = 97 bits | ||
79 | |||
80 | (Warning, pulses on ACK ar inverted by transistor, irq is rised up on sync | ||
81 | to bin change or octal value to bin change). | ||
82 | |||
83 | Binary data representations: | ||
84 | |||
85 | One binary and octal value can be grouped to nibble. 24 nibbles + one binary | ||
86 | values can be sampled between sync pulses. | ||
87 | |||
88 | Values for first four channels (analog joystick values) can be found in | ||
89 | first 10 nibbles. Analog value is represented by one sign bit and 9 bit | ||
90 | absolute binary value. (10 bits per channel). Next nibble is checksum for | ||
91 | first ten nibbles. | ||
92 | |||
93 | Next nibbles 12 .. 21 represents four channels (not all channels can be | ||
94 | directly controlled from TX). Binary representations ar the same as in first | ||
95 | four channels. In nibbles 22 and 23 is a special magic number. Nibble 24 is | ||
96 | checksum for nibbles 12..23. | ||
97 | |||
98 | After last octal value for nibble 24 and next sync pulse one additional | ||
99 | binary value can be sampled. This bit and magic number is not used in | ||
100 | software driver. Some details about this magic numbers can be found in | ||
101 | Walkera_Wk-0701_PCM.pdf. | ||
102 | |||
103 | Checksum calculation: | ||
104 | |||
105 | Summary of octal values in nibbles must be same as octal value in checksum | ||
106 | nibble (only first 3 bits are used). Binary value for checksum nibble is | ||
107 | calculated by sum of binary values in checked nibbles + sum of octal values | ||
108 | in checked nibbles divided by 8. Only bit 0 of this sum is used. | ||
109 | |||
diff --git a/Documentation/ioctl/ioctl-number.txt b/Documentation/ioctl/ioctl-number.txt index 824699174436..f1d639903325 100644 --- a/Documentation/ioctl/ioctl-number.txt +++ b/Documentation/ioctl/ioctl-number.txt | |||
@@ -84,7 +84,7 @@ Code Seq# Include File Comments | |||
84 | 'B' C0-FF advanced bbus | 84 | 'B' C0-FF advanced bbus |
85 | <mailto:maassen@uni-freiburg.de> | 85 | <mailto:maassen@uni-freiburg.de> |
86 | 'C' all linux/soundcard.h | 86 | 'C' all linux/soundcard.h |
87 | 'D' all asm-s390/dasd.h | 87 | 'D' all arch/s390/include/asm/dasd.h |
88 | 'E' all linux/input.h | 88 | 'E' all linux/input.h |
89 | 'F' all linux/fb.h | 89 | 'F' all linux/fb.h |
90 | 'H' all linux/hiddev.h | 90 | 'H' all linux/hiddev.h |
@@ -105,7 +105,7 @@ Code Seq# Include File Comments | |||
105 | 'S' 80-81 scsi/scsi_ioctl.h conflict! | 105 | 'S' 80-81 scsi/scsi_ioctl.h conflict! |
106 | 'S' 82-FF scsi/scsi.h conflict! | 106 | 'S' 82-FF scsi/scsi.h conflict! |
107 | 'T' all linux/soundcard.h conflict! | 107 | 'T' all linux/soundcard.h conflict! |
108 | 'T' all asm-i386/ioctls.h conflict! | 108 | 'T' all arch/x86/include/asm/ioctls.h conflict! |
109 | 'U' 00-EF linux/drivers/usb/usb.h | 109 | 'U' 00-EF linux/drivers/usb/usb.h |
110 | 'V' all linux/vt.h | 110 | 'V' all linux/vt.h |
111 | 'W' 00-1F linux/watchdog.h conflict! | 111 | 'W' 00-1F linux/watchdog.h conflict! |
@@ -120,7 +120,7 @@ Code Seq# Include File Comments | |||
120 | <mailto:natalia@nikhefk.nikhef.nl> | 120 | <mailto:natalia@nikhefk.nikhef.nl> |
121 | 'c' 00-7F linux/comstats.h conflict! | 121 | 'c' 00-7F linux/comstats.h conflict! |
122 | 'c' 00-7F linux/coda.h conflict! | 122 | 'c' 00-7F linux/coda.h conflict! |
123 | 'c' 80-9F asm-s390/chsc.h | 123 | 'c' 80-9F arch/s390/include/asm/chsc.h |
124 | 'd' 00-FF linux/char/drm/drm/h conflict! | 124 | 'd' 00-FF linux/char/drm/drm/h conflict! |
125 | 'd' 00-DF linux/video_decoder.h conflict! | 125 | 'd' 00-DF linux/video_decoder.h conflict! |
126 | 'd' F0-FF linux/digi1.h | 126 | 'd' F0-FF linux/digi1.h |
@@ -170,7 +170,7 @@ Code Seq# Include File Comments | |||
170 | <mailto:oe@port.de> | 170 | <mailto:oe@port.de> |
171 | 0x80 00-1F linux/fb.h | 171 | 0x80 00-1F linux/fb.h |
172 | 0x81 00-1F linux/videotext.h | 172 | 0x81 00-1F linux/videotext.h |
173 | 0x89 00-06 asm-i386/sockios.h | 173 | 0x89 00-06 arch/x86/include/asm/sockios.h |
174 | 0x89 0B-DF linux/sockios.h | 174 | 0x89 0B-DF linux/sockios.h |
175 | 0x89 E0-EF linux/sockios.h SIOCPROTOPRIVATE range | 175 | 0x89 E0-EF linux/sockios.h SIOCPROTOPRIVATE range |
176 | 0x89 F0-FF linux/sockios.h SIOCDEVPRIVATE range | 176 | 0x89 F0-FF linux/sockios.h SIOCDEVPRIVATE range |
diff --git a/Documentation/kbuild/kbuild.txt b/Documentation/kbuild/kbuild.txt index 51771847e816..923f9ddee8f6 100644 --- a/Documentation/kbuild/kbuild.txt +++ b/Documentation/kbuild/kbuild.txt | |||
@@ -124,3 +124,10 @@ KBUILD_EXTRA_SYMBOLS | |||
124 | -------------------------------------------------- | 124 | -------------------------------------------------- |
125 | For modules use symbols from another modules. | 125 | For modules use symbols from another modules. |
126 | See more details in modules.txt. | 126 | See more details in modules.txt. |
127 | |||
128 | ALLSOURCE_ARCHS | ||
129 | -------------------------------------------------- | ||
130 | For tags/TAGS/cscope targets, you can specify more than one archs | ||
131 | to be included in the databases, separated by blankspace. e.g. | ||
132 | |||
133 | $ make ALLSOURCE_ARCHS="x86 mips arm" tags | ||
diff --git a/Documentation/kbuild/modules.txt b/Documentation/kbuild/modules.txt index 1821c077b435..b1096da953c8 100644 --- a/Documentation/kbuild/modules.txt +++ b/Documentation/kbuild/modules.txt | |||
@@ -253,7 +253,7 @@ following files: | |||
253 | 253 | ||
254 | # Module specific targets | 254 | # Module specific targets |
255 | genbin: | 255 | genbin: |
256 | echo "X" > 8123_bin_shipped | 256 | echo "X" > 8123_bin.o_shipped |
257 | 257 | ||
258 | 258 | ||
259 | In example 2, we are down to two fairly simple files and for simple | 259 | In example 2, we are down to two fairly simple files and for simple |
@@ -279,7 +279,7 @@ following files: | |||
279 | 279 | ||
280 | # Module specific targets | 280 | # Module specific targets |
281 | genbin: | 281 | genbin: |
282 | echo "X" > 8123_bin_shipped | 282 | echo "X" > 8123_bin.o_shipped |
283 | 283 | ||
284 | endif | 284 | endif |
285 | 285 | ||
diff --git a/Documentation/kernel-doc-nano-HOWTO.txt b/Documentation/kernel-doc-nano-HOWTO.txt index c6841eee9598..d73fbd2b2b45 100644 --- a/Documentation/kernel-doc-nano-HOWTO.txt +++ b/Documentation/kernel-doc-nano-HOWTO.txt | |||
@@ -71,6 +71,11 @@ The @argument descriptions must begin on the very next line following | |||
71 | this opening short function description line, with no intervening | 71 | this opening short function description line, with no intervening |
72 | empty comment lines. | 72 | empty comment lines. |
73 | 73 | ||
74 | If a function parameter is "..." (varargs), it should be listed in | ||
75 | kernel-doc notation as: | ||
76 | * @...: description | ||
77 | |||
78 | |||
74 | Example kernel-doc data structure comment. | 79 | Example kernel-doc data structure comment. |
75 | 80 | ||
76 | /** | 81 | /** |
@@ -282,6 +287,32 @@ struct my_struct { | |||
282 | }; | 287 | }; |
283 | 288 | ||
284 | 289 | ||
290 | Including documentation blocks in source files | ||
291 | ---------------------------------------------- | ||
292 | |||
293 | To facilitate having source code and comments close together, you can | ||
294 | include kernel-doc documentation blocks that are free-form comments | ||
295 | instead of being kernel-doc for functions, structures, unions, | ||
296 | enums, or typedefs. This could be used for something like a | ||
297 | theory of operation for a driver or library code, for example. | ||
298 | |||
299 | This is done by using a DOC: section keyword with a section title. E.g.: | ||
300 | |||
301 | /** | ||
302 | * DOC: Theory of Operation | ||
303 | * | ||
304 | * The whizbang foobar is a dilly of a gizmo. It can do whatever you | ||
305 | * want it to do, at any time. It reads your mind. Here's how it works. | ||
306 | * | ||
307 | * foo bar splat | ||
308 | * | ||
309 | * The only drawback to this gizmo is that is can sometimes damage | ||
310 | * hardware, software, or its subject(s). | ||
311 | */ | ||
312 | |||
313 | DOC: sections are used in SGML templates files as indicated below. | ||
314 | |||
315 | |||
285 | How to make new SGML template files | 316 | How to make new SGML template files |
286 | ----------------------------------- | 317 | ----------------------------------- |
287 | 318 | ||
@@ -302,6 +333,9 @@ exported using EXPORT_SYMBOL. | |||
302 | !F<filename> <function [functions...]> is replaced by the | 333 | !F<filename> <function [functions...]> is replaced by the |
303 | documentation, in <filename>, for the functions listed. | 334 | documentation, in <filename>, for the functions listed. |
304 | 335 | ||
336 | !P<filename> <section title> is replaced by the contents of the DOC: | ||
337 | section titled <section title> from <filename>. | ||
338 | Spaces are allowed in <section title>; do not quote the <section title>. | ||
305 | 339 | ||
306 | Tim. | 340 | Tim. |
307 | */ <twaugh@redhat.com> | 341 | */ <twaugh@redhat.com> |
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index af600c0fe0ec..ac613a661f46 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
@@ -92,6 +92,7 @@ parameter is applicable: | |||
92 | SUSPEND System suspend states are enabled. | 92 | SUSPEND System suspend states are enabled. |
93 | FTRACE Function tracing enabled. | 93 | FTRACE Function tracing enabled. |
94 | TS Appropriate touchscreen support is enabled. | 94 | TS Appropriate touchscreen support is enabled. |
95 | UMS USB Mass Storage support is enabled. | ||
95 | USB USB support is enabled. | 96 | USB USB support is enabled. |
96 | USBHID USB Human Interface Device support is enabled. | 97 | USBHID USB Human Interface Device support is enabled. |
97 | V4L Video For Linux support is enabled. | 98 | V4L Video For Linux support is enabled. |
@@ -141,6 +142,7 @@ and is between 256 and 4096 characters. It is defined in the file | |||
141 | ht -- run only enough ACPI to enable Hyper Threading | 142 | ht -- run only enough ACPI to enable Hyper Threading |
142 | strict -- Be less tolerant of platforms that are not | 143 | strict -- Be less tolerant of platforms that are not |
143 | strictly ACPI specification compliant. | 144 | strictly ACPI specification compliant. |
145 | rsdt -- prefer RSDT over (default) XSDT | ||
144 | 146 | ||
145 | See also Documentation/power/pm.txt, pci=noacpi | 147 | See also Documentation/power/pm.txt, pci=noacpi |
146 | 148 | ||
@@ -151,16 +153,20 @@ and is between 256 and 4096 characters. It is defined in the file | |||
151 | default: 0 | 153 | default: 0 |
152 | 154 | ||
153 | acpi_sleep= [HW,ACPI] Sleep options | 155 | acpi_sleep= [HW,ACPI] Sleep options |
154 | Format: { s3_bios, s3_mode, s3_beep, s4_nohwsig, old_ordering } | 156 | Format: { s3_bios, s3_mode, s3_beep, s4_nohwsig, |
155 | See Documentation/power/video.txt for s3_bios and s3_mode. | 157 | old_ordering, s4_nonvs } |
158 | See Documentation/power/video.txt for information on | ||
159 | s3_bios and s3_mode. | ||
156 | s3_beep is for debugging; it makes the PC's speaker beep | 160 | s3_beep is for debugging; it makes the PC's speaker beep |
157 | as soon as the kernel's real-mode entry point is called. | 161 | as soon as the kernel's real-mode entry point is called. |
158 | s4_nohwsig prevents ACPI hardware signature from being | 162 | s4_nohwsig prevents ACPI hardware signature from being |
159 | used during resume from hibernation. | 163 | used during resume from hibernation. |
160 | old_ordering causes the ACPI 1.0 ordering of the _PTS | 164 | old_ordering causes the ACPI 1.0 ordering of the _PTS |
161 | control method, wrt putting devices into low power | 165 | control method, with respect to putting devices into |
162 | states, to be enforced (the ACPI 2.0 ordering of _PTS is | 166 | low power states, to be enforced (the ACPI 2.0 ordering |
163 | used by default). | 167 | of _PTS is used by default). |
168 | s4_nonvs prevents the kernel from saving/restoring the | ||
169 | ACPI NVS memory during hibernation. | ||
164 | 170 | ||
165 | acpi_sci= [HW,ACPI] ACPI System Control Interrupt trigger mode | 171 | acpi_sci= [HW,ACPI] ACPI System Control Interrupt trigger mode |
166 | Format: { level | edge | high | low } | 172 | Format: { level | edge | high | low } |
@@ -195,7 +201,7 @@ and is between 256 and 4096 characters. It is defined in the file | |||
195 | acpi_skip_timer_override [HW,ACPI] | 201 | acpi_skip_timer_override [HW,ACPI] |
196 | Recognize and ignore IRQ0/pin2 Interrupt Override. | 202 | Recognize and ignore IRQ0/pin2 Interrupt Override. |
197 | For broken nForce2 BIOS resulting in XT-PIC timer. | 203 | For broken nForce2 BIOS resulting in XT-PIC timer. |
198 | acpi_use_timer_override [HW,ACPI} | 204 | acpi_use_timer_override [HW,ACPI] |
199 | Use timer override. For some broken Nvidia NF5 boards | 205 | Use timer override. For some broken Nvidia NF5 boards |
200 | that require a timer override, but don't have | 206 | that require a timer override, but don't have |
201 | HPET | 207 | HPET |
@@ -470,8 +476,8 @@ and is between 256 and 4096 characters. It is defined in the file | |||
470 | 476 | ||
471 | clearcpuid=BITNUM [X86] | 477 | clearcpuid=BITNUM [X86] |
472 | Disable CPUID feature X for the kernel. See | 478 | Disable CPUID feature X for the kernel. See |
473 | include/asm-x86/cpufeature.h for the valid bit numbers. | 479 | arch/x86/include/asm/cpufeature.h for the valid bit |
474 | Note the Linux specific bits are not necessarily | 480 | numbers. Note the Linux specific bits are not necessarily |
475 | stable over kernel options, but the vendor specific | 481 | stable over kernel options, but the vendor specific |
476 | ones should be. | 482 | ones should be. |
477 | Also note that user programs calling CPUID directly | 483 | Also note that user programs calling CPUID directly |
@@ -552,6 +558,11 @@ and is between 256 and 4096 characters. It is defined in the file | |||
552 | not work reliably with all consoles, but is known | 558 | not work reliably with all consoles, but is known |
553 | to work with serial and VGA consoles. | 559 | to work with serial and VGA consoles. |
554 | 560 | ||
561 | coredump_filter= | ||
562 | [KNL] Change the default value for | ||
563 | /proc/<pid>/coredump_filter. | ||
564 | See also Documentation/filesystems/proc.txt. | ||
565 | |||
555 | cpcihp_generic= [HW,PCI] Generic port I/O CompactPCI driver | 566 | cpcihp_generic= [HW,PCI] Generic port I/O CompactPCI driver |
556 | Format: | 567 | Format: |
557 | <first_slot>,<last_slot>,<port>,<enum_bit>[,<debug>] | 568 | <first_slot>,<last_slot>,<port>,<enum_bit>[,<debug>] |
@@ -824,8 +835,8 @@ and is between 256 and 4096 characters. It is defined in the file | |||
824 | 835 | ||
825 | hlt [BUGS=ARM,SH] | 836 | hlt [BUGS=ARM,SH] |
826 | 837 | ||
827 | hvc_iucv= [S390] Number of z/VM IUCV Hypervisor console (HVC) | 838 | hvc_iucv= [S390] Number of z/VM IUCV hypervisor console (HVC) |
828 | back-ends. Valid parameters: 0..8 | 839 | terminal devices. Valid values: 0..8 |
829 | 840 | ||
830 | i8042.debug [HW] Toggle i8042 debug mode | 841 | i8042.debug [HW] Toggle i8042 debug mode |
831 | i8042.direct [HW] Put keyboard port into non-translated mode | 842 | i8042.direct [HW] Put keyboard port into non-translated mode |
@@ -873,17 +884,19 @@ and is between 256 and 4096 characters. It is defined in the file | |||
873 | See Documentation/ide/ide.txt. | 884 | See Documentation/ide/ide.txt. |
874 | 885 | ||
875 | idle= [X86] | 886 | idle= [X86] |
876 | Format: idle=poll or idle=mwait, idle=halt, idle=nomwait | 887 | Format: idle=poll, idle=mwait, idle=halt, idle=nomwait |
877 | Poll forces a polling idle loop that can slightly improves the performance | 888 | Poll forces a polling idle loop that can slightly |
878 | of waking up a idle CPU, but will use a lot of power and make the system | 889 | improve the performance of waking up a idle CPU, but |
879 | run hot. Not recommended. | 890 | will use a lot of power and make the system run hot. |
880 | idle=mwait. On systems which support MONITOR/MWAIT but the kernel chose | 891 | Not recommended. |
881 | to not use it because it doesn't save as much power as a normal idle | 892 | idle=mwait: On systems which support MONITOR/MWAIT but |
882 | loop use the MONITOR/MWAIT idle loop anyways. Performance should be the same | 893 | the kernel chose to not use it because it doesn't save |
883 | as idle=poll. | 894 | as much power as a normal idle loop, use the |
884 | idle=halt. Halt is forced to be used for CPU idle. | 895 | MONITOR/MWAIT idle loop anyways. Performance should be |
896 | the same as idle=poll. | ||
897 | idle=halt: Halt is forced to be used for CPU idle. | ||
885 | In such case C2/C3 won't be used again. | 898 | In such case C2/C3 won't be used again. |
886 | idle=nomwait. Disable mwait for CPU C-states | 899 | idle=nomwait: Disable mwait for CPU C-states |
887 | 900 | ||
888 | ide-pci-generic.all-generic-ide [HW] (E)IDE subsystem | 901 | ide-pci-generic.all-generic-ide [HW] (E)IDE subsystem |
889 | Claim all unknown PCI IDE storage controllers. | 902 | Claim all unknown PCI IDE storage controllers. |
@@ -914,6 +927,10 @@ and is between 256 and 4096 characters. It is defined in the file | |||
914 | 927 | ||
915 | inttest= [IA64] | 928 | inttest= [IA64] |
916 | 929 | ||
930 | iomem= Disable strict checking of access to MMIO memory | ||
931 | strict regions from userspace. | ||
932 | relaxed | ||
933 | |||
917 | iommu= [x86] | 934 | iommu= [x86] |
918 | off | 935 | off |
919 | force | 936 | force |
@@ -1074,8 +1091,8 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1074 | lapic [X86-32,APIC] Enable the local APIC even if BIOS | 1091 | lapic [X86-32,APIC] Enable the local APIC even if BIOS |
1075 | disabled it. | 1092 | disabled it. |
1076 | 1093 | ||
1077 | lapic_timer_c2_ok [X86-32,x86-64,APIC] trust the local apic timer in | 1094 | lapic_timer_c2_ok [X86-32,x86-64,APIC] trust the local apic timer |
1078 | C2 power state. | 1095 | in C2 power state. |
1079 | 1096 | ||
1080 | libata.dma= [LIBATA] DMA control | 1097 | libata.dma= [LIBATA] DMA control |
1081 | libata.dma=0 Disable all PATA and SATA DMA | 1098 | libata.dma=0 Disable all PATA and SATA DMA |
@@ -1127,6 +1144,8 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1127 | If there are multiple matching configurations changing | 1144 | If there are multiple matching configurations changing |
1128 | the same attribute, the last one is used. | 1145 | the same attribute, the last one is used. |
1129 | 1146 | ||
1147 | lmb=debug [KNL] Enable lmb debug messages. | ||
1148 | |||
1130 | load_ramdisk= [RAM] List of ramdisks to load from floppy | 1149 | load_ramdisk= [RAM] List of ramdisks to load from floppy |
1131 | See Documentation/blockdev/ramdisk.txt. | 1150 | See Documentation/blockdev/ramdisk.txt. |
1132 | 1151 | ||
@@ -1560,6 +1579,9 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1560 | 1579 | ||
1561 | nosoftlockup [KNL] Disable the soft-lockup detector. | 1580 | nosoftlockup [KNL] Disable the soft-lockup detector. |
1562 | 1581 | ||
1582 | noswapaccount [KNL] Disable accounting of swap in memory resource | ||
1583 | controller. (See Documentation/controllers/memory.txt) | ||
1584 | |||
1563 | nosync [HW,M68K] Disables sync negotiation for all devices. | 1585 | nosync [HW,M68K] Disables sync negotiation for all devices. |
1564 | 1586 | ||
1565 | notsc [BUGS=X86-32] Disable Time Stamp Counter | 1587 | notsc [BUGS=X86-32] Disable Time Stamp Counter |
@@ -1579,6 +1601,10 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1579 | 1601 | ||
1580 | nr_uarts= [SERIAL] maximum number of UARTs to be registered. | 1602 | nr_uarts= [SERIAL] maximum number of UARTs to be registered. |
1581 | 1603 | ||
1604 | ohci1394_dma=early [HW] enable debugging via the ohci1394 driver. | ||
1605 | See Documentation/debugging-via-ohci1394.txt for more | ||
1606 | info. | ||
1607 | |||
1582 | olpc_ec_timeout= [OLPC] ms delay when issuing EC commands | 1608 | olpc_ec_timeout= [OLPC] ms delay when issuing EC commands |
1583 | Rather than timing out after 20 ms if an EC | 1609 | Rather than timing out after 20 ms if an EC |
1584 | command is not properly ACKed, override the length | 1610 | command is not properly ACKed, override the length |
@@ -1803,10 +1829,10 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1803 | autoconfiguration. | 1829 | autoconfiguration. |
1804 | Ranges are in pairs (memory base and size). | 1830 | Ranges are in pairs (memory base and size). |
1805 | 1831 | ||
1806 | dynamic_printk | 1832 | dynamic_printk Enables pr_debug()/dev_dbg() calls if |
1807 | Enables pr_debug()/dev_dbg() calls if | 1833 | CONFIG_DYNAMIC_PRINTK_DEBUG has been enabled. |
1808 | CONFIG_DYNAMIC_PRINTK_DEBUG has been enabled. These can also | 1834 | These can also be switched on/off via |
1809 | be switched on/off via <debugfs>/dynamic_printk/modules | 1835 | <debugfs>/dynamic_printk/modules |
1810 | 1836 | ||
1811 | print-fatal-signals= | 1837 | print-fatal-signals= |
1812 | [KNL] debug: print fatal signals | 1838 | [KNL] debug: print fatal signals |
@@ -1894,7 +1920,7 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1894 | 1920 | ||
1895 | reboot= [BUGS=X86-32,BUGS=ARM,BUGS=IA-64] Rebooting mode | 1921 | reboot= [BUGS=X86-32,BUGS=ARM,BUGS=IA-64] Rebooting mode |
1896 | Format: <reboot_mode>[,<reboot_mode2>[,...]] | 1922 | Format: <reboot_mode>[,<reboot_mode2>[,...]] |
1897 | See arch/*/kernel/reboot.c or arch/*/kernel/process.c | 1923 | See arch/*/kernel/reboot.c or arch/*/kernel/process.c |
1898 | 1924 | ||
1899 | relax_domain_level= | 1925 | relax_domain_level= |
1900 | [KNL, SMP] Set scheduler's default relax_domain_level. | 1926 | [KNL, SMP] Set scheduler's default relax_domain_level. |
@@ -2294,7 +2320,8 @@ and is between 256 and 4096 characters. It is defined in the file | |||
2294 | 2320 | ||
2295 | thermal.psv= [HW,ACPI] | 2321 | thermal.psv= [HW,ACPI] |
2296 | -1: disable all passive trip points | 2322 | -1: disable all passive trip points |
2297 | <degrees C>: override all passive trip points to this value | 2323 | <degrees C>: override all passive trip points to this |
2324 | value | ||
2298 | 2325 | ||
2299 | thermal.tzp= [HW,ACPI] | 2326 | thermal.tzp= [HW,ACPI] |
2300 | Specify global default ACPI thermal zone polling rate | 2327 | Specify global default ACPI thermal zone polling rate |
@@ -2382,6 +2409,41 @@ and is between 256 and 4096 characters. It is defined in the file | |||
2382 | usbhid.mousepoll= | 2409 | usbhid.mousepoll= |
2383 | [USBHID] The interval which mice are to be polled at. | 2410 | [USBHID] The interval which mice are to be polled at. |
2384 | 2411 | ||
2412 | usb-storage.delay_use= | ||
2413 | [UMS] The delay in seconds before a new device is | ||
2414 | scanned for Logical Units (default 5). | ||
2415 | |||
2416 | usb-storage.quirks= | ||
2417 | [UMS] A list of quirks entries to supplement or | ||
2418 | override the built-in unusual_devs list. List | ||
2419 | entries are separated by commas. Each entry has | ||
2420 | the form VID:PID:Flags where VID and PID are Vendor | ||
2421 | and Product ID values (4-digit hex numbers) and | ||
2422 | Flags is a set of characters, each corresponding | ||
2423 | to a common usb-storage quirk flag as follows: | ||
2424 | a = SANE_SENSE (collect more than 18 bytes | ||
2425 | of sense data); | ||
2426 | c = FIX_CAPACITY (decrease the reported | ||
2427 | device capacity by one sector); | ||
2428 | h = CAPACITY_HEURISTICS (decrease the | ||
2429 | reported device capacity by one | ||
2430 | sector if the number is odd); | ||
2431 | i = IGNORE_DEVICE (don't bind to this | ||
2432 | device); | ||
2433 | l = NOT_LOCKABLE (don't try to lock and | ||
2434 | unlock ejectable media); | ||
2435 | m = MAX_SECTORS_64 (don't transfer more | ||
2436 | than 64 sectors = 32 KB at a time); | ||
2437 | o = CAPACITY_OK (accept the capacity | ||
2438 | reported by the device); | ||
2439 | r = IGNORE_RESIDUE (the device reports | ||
2440 | bogus residue values); | ||
2441 | s = SINGLE_LUN (the device has only one | ||
2442 | Logical Unit); | ||
2443 | w = NO_WP_DETECT (don't test whether the | ||
2444 | medium is write-protected). | ||
2445 | Example: quirks=0419:aaf5:rl,0421:0433:rc | ||
2446 | |||
2385 | add_efi_memmap [EFI; x86-32,X86-64] Include EFI memory map in | 2447 | add_efi_memmap [EFI; x86-32,X86-64] Include EFI memory map in |
2386 | kernel's map of available physical RAM. | 2448 | kernel's map of available physical RAM. |
2387 | 2449 | ||
@@ -2442,8 +2504,8 @@ and is between 256 and 4096 characters. It is defined in the file | |||
2442 | Format: | 2504 | Format: |
2443 | <irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]] | 2505 | <irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]] |
2444 | 2506 | ||
2445 | norandmaps Don't use address space randomization | 2507 | norandmaps Don't use address space randomization. Equivalent to |
2446 | Equivalent to echo 0 > /proc/sys/kernel/randomize_va_space | 2508 | echo 0 > /proc/sys/kernel/randomize_va_space |
2447 | 2509 | ||
2448 | ______________________________________________________________________ | 2510 | ______________________________________________________________________ |
2449 | 2511 | ||
diff --git a/Documentation/kobject.txt b/Documentation/kobject.txt index f5d2aad65a67..b2e374586bd8 100644 --- a/Documentation/kobject.txt +++ b/Documentation/kobject.txt | |||
@@ -118,8 +118,8 @@ the name of the kobject, call kobject_rename(): | |||
118 | 118 | ||
119 | int kobject_rename(struct kobject *kobj, const char *new_name); | 119 | int kobject_rename(struct kobject *kobj, const char *new_name); |
120 | 120 | ||
121 | Note kobject_rename does perform any locking or have a solid notion of | 121 | kobject_rename does not perform any locking or have a solid notion of |
122 | what names are valid so the provide must provide their own sanity checking | 122 | what names are valid so the caller must provide their own sanity checking |
123 | and serialization. | 123 | and serialization. |
124 | 124 | ||
125 | There is a function called kobject_set_name() but that is legacy cruft and | 125 | There is a function called kobject_set_name() but that is legacy cruft and |
diff --git a/Documentation/kprobes.txt b/Documentation/kprobes.txt index a79633d702bf..48b3de90eb1e 100644 --- a/Documentation/kprobes.txt +++ b/Documentation/kprobes.txt | |||
@@ -497,7 +497,10 @@ The first column provides the kernel address where the probe is inserted. | |||
497 | The second column identifies the type of probe (k - kprobe, r - kretprobe | 497 | The second column identifies the type of probe (k - kprobe, r - kretprobe |
498 | and j - jprobe), while the third column specifies the symbol+offset of | 498 | and j - jprobe), while the third column specifies the symbol+offset of |
499 | the probe. If the probed function belongs to a module, the module name | 499 | the probe. If the probed function belongs to a module, the module name |
500 | is also specified. | 500 | is also specified. Following columns show probe status. If the probe is on |
501 | a virtual address that is no longer valid (module init sections, module | ||
502 | virtual addresses that correspond to modules that've been unloaded), | ||
503 | such probes are marked with [GONE]. | ||
501 | 504 | ||
502 | /debug/kprobes/enabled: Turn kprobes ON/OFF | 505 | /debug/kprobes/enabled: Turn kprobes ON/OFF |
503 | 506 | ||
diff --git a/Documentation/laptops/thinkpad-acpi.txt b/Documentation/laptops/thinkpad-acpi.txt index 71f0fe1fc1b0..898b4987bb80 100644 --- a/Documentation/laptops/thinkpad-acpi.txt +++ b/Documentation/laptops/thinkpad-acpi.txt | |||
@@ -1475,7 +1475,7 @@ Sysfs interface changelog: | |||
1475 | 1475 | ||
1476 | 0x020100: Marker for thinkpad-acpi with hot key NVRAM polling | 1476 | 0x020100: Marker for thinkpad-acpi with hot key NVRAM polling |
1477 | support. If you must, use it to know you should not | 1477 | support. If you must, use it to know you should not |
1478 | start an userspace NVRAM poller (allows to detect when | 1478 | start a userspace NVRAM poller (allows to detect when |
1479 | NVRAM is compiled out by the user because it is | 1479 | NVRAM is compiled out by the user because it is |
1480 | unneeded/undesired in the first place). | 1480 | unneeded/undesired in the first place). |
1481 | 0x020101: Marker for thinkpad-acpi with hot key NVRAM polling | 1481 | 0x020101: Marker for thinkpad-acpi with hot key NVRAM polling |
diff --git a/Documentation/magic-number.txt b/Documentation/magic-number.txt index 95070028d15e..505f19607542 100644 --- a/Documentation/magic-number.txt +++ b/Documentation/magic-number.txt | |||
@@ -125,14 +125,14 @@ TRIDENT_CARD_MAGIC 0x5072696E trident_card sound/oss/trident.c | |||
125 | ROUTER_MAGIC 0x524d4157 wan_device include/linux/wanrouter.h | 125 | ROUTER_MAGIC 0x524d4157 wan_device include/linux/wanrouter.h |
126 | SCC_MAGIC 0x52696368 gs_port drivers/char/scc.h | 126 | SCC_MAGIC 0x52696368 gs_port drivers/char/scc.h |
127 | SAVEKMSG_MAGIC1 0x53415645 savekmsg arch/*/amiga/config.c | 127 | SAVEKMSG_MAGIC1 0x53415645 savekmsg arch/*/amiga/config.c |
128 | GDA_MAGIC 0x58464552 gda include/asm-mips64/sn/gda.h | 128 | GDA_MAGIC 0x58464552 gda arch/mips/include/asm/sn/gda.h |
129 | RED_MAGIC1 0x5a2cf071 (any) mm/slab.c | 129 | RED_MAGIC1 0x5a2cf071 (any) mm/slab.c |
130 | STL_PORTMAGIC 0x5a7182c9 stlport include/linux/stallion.h | 130 | STL_PORTMAGIC 0x5a7182c9 stlport include/linux/stallion.h |
131 | EEPROM_MAGIC_VALUE 0x5ab478d2 lanai_dev drivers/atm/lanai.c | 131 | EEPROM_MAGIC_VALUE 0x5ab478d2 lanai_dev drivers/atm/lanai.c |
132 | HDLCDRV_MAGIC 0x5ac6e778 hdlcdrv_state include/linux/hdlcdrv.h | 132 | HDLCDRV_MAGIC 0x5ac6e778 hdlcdrv_state include/linux/hdlcdrv.h |
133 | EPCA_MAGIC 0x5c6df104 channel include/linux/epca.h | 133 | EPCA_MAGIC 0x5c6df104 channel include/linux/epca.h |
134 | PCXX_MAGIC 0x5c6df104 channel drivers/char/pcxx.h | 134 | PCXX_MAGIC 0x5c6df104 channel drivers/char/pcxx.h |
135 | KV_MAGIC 0x5f4b565f kernel_vars_s include/asm-mips64/sn/klkernvars.h | 135 | KV_MAGIC 0x5f4b565f kernel_vars_s arch/mips/include/asm/sn/klkernvars.h |
136 | I810_STATE_MAGIC 0x63657373 i810_state sound/oss/i810_audio.c | 136 | I810_STATE_MAGIC 0x63657373 i810_state sound/oss/i810_audio.c |
137 | TRIDENT_STATE_MAGIC 0x63657373 trient_state sound/oss/trident.c | 137 | TRIDENT_STATE_MAGIC 0x63657373 trient_state sound/oss/trident.c |
138 | M3_CARD_MAGIC 0x646e6f50 m3_card sound/oss/maestro3.c | 138 | M3_CARD_MAGIC 0x646e6f50 m3_card sound/oss/maestro3.c |
@@ -158,7 +158,7 @@ CCB_MAGIC 0xf2691ad2 ccb drivers/scsi/ncr53c8xx.c | |||
158 | QUEUE_MAGIC_FREE 0xf7e1c9a3 queue_entry drivers/scsi/arm/queue.c | 158 | QUEUE_MAGIC_FREE 0xf7e1c9a3 queue_entry drivers/scsi/arm/queue.c |
159 | QUEUE_MAGIC_USED 0xf7e1cc33 queue_entry drivers/scsi/arm/queue.c | 159 | QUEUE_MAGIC_USED 0xf7e1cc33 queue_entry drivers/scsi/arm/queue.c |
160 | HTB_CMAGIC 0xFEFAFEF1 htb_class net/sched/sch_htb.c | 160 | HTB_CMAGIC 0xFEFAFEF1 htb_class net/sched/sch_htb.c |
161 | NMI_MAGIC 0x48414d4d455201 nmi_s include/asm-mips64/sn/nmi.h | 161 | NMI_MAGIC 0x48414d4d455201 nmi_s arch/mips/include/asm/sn/nmi.h |
162 | 162 | ||
163 | Note that there are also defined special per-driver magic numbers in sound | 163 | Note that there are also defined special per-driver magic numbers in sound |
164 | memory management. See include/sound/sndmagic.h for complete list of them. Many | 164 | memory management. See include/sound/sndmagic.h for complete list of them. Many |
diff --git a/Documentation/memory-hotplug.txt b/Documentation/memory-hotplug.txt index 168117bd6ee8..4c2ecf537a4a 100644 --- a/Documentation/memory-hotplug.txt +++ b/Documentation/memory-hotplug.txt | |||
@@ -124,7 +124,7 @@ config options. | |||
124 | This option can be kernel module too. | 124 | This option can be kernel module too. |
125 | 125 | ||
126 | -------------------------------- | 126 | -------------------------------- |
127 | 3 sysfs files for memory hotplug | 127 | 4 sysfs files for memory hotplug |
128 | -------------------------------- | 128 | -------------------------------- |
129 | All sections have their device information under /sys/devices/system/memory as | 129 | All sections have their device information under /sys/devices/system/memory as |
130 | 130 | ||
@@ -138,11 +138,12 @@ For example, assume 1GiB section size. A device for a memory starting at | |||
138 | (0x100000000 / 1Gib = 4) | 138 | (0x100000000 / 1Gib = 4) |
139 | This device covers address range [0x100000000 ... 0x140000000) | 139 | This device covers address range [0x100000000 ... 0x140000000) |
140 | 140 | ||
141 | Under each section, you can see 3 files. | 141 | Under each section, you can see 4 files. |
142 | 142 | ||
143 | /sys/devices/system/memory/memoryXXX/phys_index | 143 | /sys/devices/system/memory/memoryXXX/phys_index |
144 | /sys/devices/system/memory/memoryXXX/phys_device | 144 | /sys/devices/system/memory/memoryXXX/phys_device |
145 | /sys/devices/system/memory/memoryXXX/state | 145 | /sys/devices/system/memory/memoryXXX/state |
146 | /sys/devices/system/memory/memoryXXX/removable | ||
146 | 147 | ||
147 | 'phys_index' : read-only and contains section id, same as XXX. | 148 | 'phys_index' : read-only and contains section id, same as XXX. |
148 | 'state' : read-write | 149 | 'state' : read-write |
@@ -150,10 +151,20 @@ Under each section, you can see 3 files. | |||
150 | at write: user can specify "online", "offline" command | 151 | at write: user can specify "online", "offline" command |
151 | 'phys_device': read-only: designed to show the name of physical memory device. | 152 | 'phys_device': read-only: designed to show the name of physical memory device. |
152 | This is not well implemented now. | 153 | This is not well implemented now. |
154 | 'removable' : read-only: contains an integer value indicating | ||
155 | whether the memory section is removable or not | ||
156 | removable. A value of 1 indicates that the memory | ||
157 | section is removable and a value of 0 indicates that | ||
158 | it is not removable. | ||
153 | 159 | ||
154 | NOTE: | 160 | NOTE: |
155 | These directories/files appear after physical memory hotplug phase. | 161 | These directories/files appear after physical memory hotplug phase. |
156 | 162 | ||
163 | If CONFIG_NUMA is enabled the | ||
164 | /sys/devices/system/memory/memoryXXX memory section | ||
165 | directories can also be accessed via symbolic links located in | ||
166 | the /sys/devices/system/node/node* directories. For example: | ||
167 | /sys/devices/system/node/node0/memory9 -> ../../memory/memory9 | ||
157 | 168 | ||
158 | -------------------------------- | 169 | -------------------------------- |
159 | 4. Physical memory hot-add phase | 170 | 4. Physical memory hot-add phase |
@@ -365,7 +376,6 @@ node if necessary. | |||
365 | - allowing memory hot-add to ZONE_MOVABLE. maybe we need some switch like | 376 | - allowing memory hot-add to ZONE_MOVABLE. maybe we need some switch like |
366 | sysctl or new control file. | 377 | sysctl or new control file. |
367 | - showing memory section and physical device relationship. | 378 | - showing memory section and physical device relationship. |
368 | - showing memory section and node relationship (maybe good for NUMA) | ||
369 | - showing memory section is under ZONE_MOVABLE or not | 379 | - showing memory section is under ZONE_MOVABLE or not |
370 | - test and make it better memory offlining. | 380 | - test and make it better memory offlining. |
371 | - support HugeTLB page migration and offlining. | 381 | - support HugeTLB page migration and offlining. |
diff --git a/Documentation/mips/AU1xxx_IDE.README b/Documentation/mips/AU1xxx_IDE.README index 25a6ed1aaa5b..f54962aea84d 100644 --- a/Documentation/mips/AU1xxx_IDE.README +++ b/Documentation/mips/AU1xxx_IDE.README | |||
@@ -44,7 +44,7 @@ FILES, CONFIGS AND COMPATABILITY | |||
44 | 44 | ||
45 | Two files are introduced: | 45 | Two files are introduced: |
46 | 46 | ||
47 | a) 'include/asm-mips/mach-au1x00/au1xxx_ide.h' | 47 | a) 'arch/mips/include/asm/mach-au1x00/au1xxx_ide.h' |
48 | containes : struct _auide_hwif | 48 | containes : struct _auide_hwif |
49 | timing parameters for PIO mode 0/1/2/3/4 | 49 | timing parameters for PIO mode 0/1/2/3/4 |
50 | timing parameters for MWDMA 0/1/2 | 50 | timing parameters for MWDMA 0/1/2 |
diff --git a/Documentation/networking/rxrpc.txt b/Documentation/networking/rxrpc.txt index c3669a3fb4af..60d05eb77c64 100644 --- a/Documentation/networking/rxrpc.txt +++ b/Documentation/networking/rxrpc.txt | |||
@@ -540,7 +540,7 @@ A client would issue an operation by: | |||
540 | MSG_MORE should be set in msghdr::msg_flags on all but the last part of | 540 | MSG_MORE should be set in msghdr::msg_flags on all but the last part of |
541 | the request. Multiple requests may be made simultaneously. | 541 | the request. Multiple requests may be made simultaneously. |
542 | 542 | ||
543 | If a call is intended to go to a destination other then the default | 543 | If a call is intended to go to a destination other than the default |
544 | specified through connect(), then msghdr::msg_name should be set on the | 544 | specified through connect(), then msghdr::msg_name should be set on the |
545 | first request message of that call. | 545 | first request message of that call. |
546 | 546 | ||
diff --git a/Documentation/networking/tuntap.txt b/Documentation/networking/tuntap.txt index 839cbb71388b..c0aab985bad9 100644 --- a/Documentation/networking/tuntap.txt +++ b/Documentation/networking/tuntap.txt | |||
@@ -118,7 +118,7 @@ As mentioned above, main purpose of TUN/TAP driver is tunneling. | |||
118 | It is used by VTun (http://vtun.sourceforge.net). | 118 | It is used by VTun (http://vtun.sourceforge.net). |
119 | 119 | ||
120 | Another interesting application using TUN/TAP is pipsecd | 120 | Another interesting application using TUN/TAP is pipsecd |
121 | (http://perso.enst.fr/~beyssac/pipsec/), an userspace IPSec | 121 | (http://perso.enst.fr/~beyssac/pipsec/), a userspace IPSec |
122 | implementation that can use complete kernel routing (unlike FreeS/WAN). | 122 | implementation that can use complete kernel routing (unlike FreeS/WAN). |
123 | 123 | ||
124 | 3. How does Virtual network device actually work ? | 124 | 3. How does Virtual network device actually work ? |
diff --git a/Documentation/nommu-mmap.txt b/Documentation/nommu-mmap.txt index 7714f57caad5..b565e8279d13 100644 --- a/Documentation/nommu-mmap.txt +++ b/Documentation/nommu-mmap.txt | |||
@@ -109,12 +109,18 @@ and it's also much more restricted in the latter case: | |||
109 | FURTHER NOTES ON NO-MMU MMAP | 109 | FURTHER NOTES ON NO-MMU MMAP |
110 | ============================ | 110 | ============================ |
111 | 111 | ||
112 | (*) A request for a private mapping of less than a page in size may not return | 112 | (*) A request for a private mapping of a file may return a buffer that is not |
113 | a page-aligned buffer. This is because the kernel calls kmalloc() to | 113 | page-aligned. This is because XIP may take place, and the data may not be |
114 | allocate the buffer, not get_free_page(). | 114 | paged aligned in the backing store. |
115 | 115 | ||
116 | (*) A list of all the mappings on the system is visible through /proc/maps in | 116 | (*) A request for an anonymous mapping will always be page aligned. If |
117 | no-MMU mode. | 117 | possible the size of the request should be a power of two otherwise some |
118 | of the space may be wasted as the kernel must allocate a power-of-2 | ||
119 | granule but will only discard the excess if appropriately configured as | ||
120 | this has an effect on fragmentation. | ||
121 | |||
122 | (*) A list of all the private copy and anonymous mappings on the system is | ||
123 | visible through /proc/maps in no-MMU mode. | ||
118 | 124 | ||
119 | (*) A list of all the mappings in use by a process is visible through | 125 | (*) A list of all the mappings in use by a process is visible through |
120 | /proc/<pid>/maps in no-MMU mode. | 126 | /proc/<pid>/maps in no-MMU mode. |
@@ -242,3 +248,18 @@ PROVIDING SHAREABLE BLOCK DEVICE SUPPORT | |||
242 | Provision of shared mappings on block device files is exactly the same as for | 248 | Provision of shared mappings on block device files is exactly the same as for |
243 | character devices. If there isn't a real device underneath, then the driver | 249 | character devices. If there isn't a real device underneath, then the driver |
244 | should allocate sufficient contiguous memory to honour any supported mapping. | 250 | should allocate sufficient contiguous memory to honour any supported mapping. |
251 | |||
252 | |||
253 | ================================= | ||
254 | ADJUSTING PAGE TRIMMING BEHAVIOUR | ||
255 | ================================= | ||
256 | |||
257 | NOMMU mmap automatically rounds up to the nearest power-of-2 number of pages | ||
258 | when performing an allocation. This can have adverse effects on memory | ||
259 | fragmentation, and as such, is left configurable. The default behaviour is to | ||
260 | aggressively trim allocations and discard any excess pages back in to the page | ||
261 | allocator. In order to retain finer-grained control over fragmentation, this | ||
262 | behaviour can either be disabled completely, or bumped up to a higher page | ||
263 | watermark where trimming begins. | ||
264 | |||
265 | Page trimming behaviour is configurable via the sysctl `vm.nr_trim_pages'. | ||
diff --git a/Documentation/powerpc/cpu_features.txt b/Documentation/powerpc/cpu_features.txt index 472739880e87..ffa4183fdb8b 100644 --- a/Documentation/powerpc/cpu_features.txt +++ b/Documentation/powerpc/cpu_features.txt | |||
@@ -31,7 +31,7 @@ anyways). | |||
31 | 31 | ||
32 | After detecting the processor type, the kernel patches out sections of code | 32 | After detecting the processor type, the kernel patches out sections of code |
33 | that shouldn't be used by writing nop's over it. Using cpufeatures requires | 33 | that shouldn't be used by writing nop's over it. Using cpufeatures requires |
34 | just 2 macros (found in include/asm-ppc/cputable.h), as seen in head.S | 34 | just 2 macros (found in arch/powerpc/include/asm/cputable.h), as seen in head.S |
35 | transfer_to_handler: | 35 | transfer_to_handler: |
36 | 36 | ||
37 | #ifdef CONFIG_ALTIVEC | 37 | #ifdef CONFIG_ALTIVEC |
diff --git a/Documentation/powerpc/dts-bindings/4xx/ndfc.txt b/Documentation/powerpc/dts-bindings/4xx/ndfc.txt new file mode 100644 index 000000000000..869f0b5f16e8 --- /dev/null +++ b/Documentation/powerpc/dts-bindings/4xx/ndfc.txt | |||
@@ -0,0 +1,39 @@ | |||
1 | AMCC NDFC (NanD Flash Controller) | ||
2 | |||
3 | Required properties: | ||
4 | - compatible : "ibm,ndfc". | ||
5 | - reg : should specify chip select and size used for the chip (0x2000). | ||
6 | |||
7 | Optional properties: | ||
8 | - ccr : NDFC config and control register value (default 0). | ||
9 | - bank-settings : NDFC bank configuration register value (default 0). | ||
10 | |||
11 | Notes: | ||
12 | - partition(s) - follows the OF MTD standard for partitions | ||
13 | |||
14 | Example: | ||
15 | |||
16 | ndfc@1,0 { | ||
17 | compatible = "ibm,ndfc"; | ||
18 | reg = <0x00000001 0x00000000 0x00002000>; | ||
19 | ccr = <0x00001000>; | ||
20 | bank-settings = <0x80002222>; | ||
21 | #address-cells = <1>; | ||
22 | #size-cells = <1>; | ||
23 | |||
24 | nand { | ||
25 | #address-cells = <1>; | ||
26 | #size-cells = <1>; | ||
27 | |||
28 | partition@0 { | ||
29 | label = "kernel"; | ||
30 | reg = <0x00000000 0x00200000>; | ||
31 | }; | ||
32 | partition@200000 { | ||
33 | label = "root"; | ||
34 | reg = <0x00200000 0x03E00000>; | ||
35 | }; | ||
36 | }; | ||
37 | }; | ||
38 | |||
39 | |||
diff --git a/Documentation/powerpc/dts-bindings/fsl/board.txt b/Documentation/powerpc/dts-bindings/fsl/board.txt index 81a917ef96e9..6c974d28eeb4 100644 --- a/Documentation/powerpc/dts-bindings/fsl/board.txt +++ b/Documentation/powerpc/dts-bindings/fsl/board.txt | |||
@@ -18,7 +18,7 @@ This is the memory-mapped registers for on board FPGA. | |||
18 | 18 | ||
19 | Required properities: | 19 | Required properities: |
20 | - compatible : should be "fsl,fpga-pixis". | 20 | - compatible : should be "fsl,fpga-pixis". |
21 | - reg : should contain the address and the lenght of the FPPGA register | 21 | - reg : should contain the address and the length of the FPPGA register |
22 | set. | 22 | set. |
23 | 23 | ||
24 | Example (MPC8610HPCD): | 24 | Example (MPC8610HPCD): |
@@ -27,3 +27,33 @@ Example (MPC8610HPCD): | |||
27 | compatible = "fsl,fpga-pixis"; | 27 | compatible = "fsl,fpga-pixis"; |
28 | reg = <0xe8000000 32>; | 28 | reg = <0xe8000000 32>; |
29 | }; | 29 | }; |
30 | |||
31 | * Freescale BCSR GPIO banks | ||
32 | |||
33 | Some BCSR registers act as simple GPIO controllers, each such | ||
34 | register can be represented by the gpio-controller node. | ||
35 | |||
36 | Required properities: | ||
37 | - compatible : Should be "fsl,<board>-bcsr-gpio". | ||
38 | - reg : Should contain the address and the length of the GPIO bank | ||
39 | register. | ||
40 | - #gpio-cells : Should be two. The first cell is the pin number and the | ||
41 | second cell is used to specify optional paramters (currently unused). | ||
42 | - gpio-controller : Marks the port as GPIO controller. | ||
43 | |||
44 | Example: | ||
45 | |||
46 | bcsr@1,0 { | ||
47 | #address-cells = <1>; | ||
48 | #size-cells = <1>; | ||
49 | compatible = "fsl,mpc8360mds-bcsr"; | ||
50 | reg = <1 0 0x8000>; | ||
51 | ranges = <0 1 0 0x8000>; | ||
52 | |||
53 | bcsr13: gpio-controller@d { | ||
54 | #gpio-cells = <2>; | ||
55 | compatible = "fsl,mpc8360mds-bcsr-gpio"; | ||
56 | reg = <0xd 1>; | ||
57 | gpio-controller; | ||
58 | }; | ||
59 | }; | ||
diff --git a/Documentation/s390/Debugging390.txt b/Documentation/s390/Debugging390.txt index d30a281c570f..10711d9f0788 100644 --- a/Documentation/s390/Debugging390.txt +++ b/Documentation/s390/Debugging390.txt | |||
@@ -1402,7 +1402,7 @@ Syscalls are implemented on Linux for S390 by the Supervisor call instruction (S | |||
1402 | possibilities of these as the instruction is made up of a 0xA opcode & the second byte being | 1402 | possibilities of these as the instruction is made up of a 0xA opcode & the second byte being |
1403 | the syscall number. They are traced using the simple command. | 1403 | the syscall number. They are traced using the simple command. |
1404 | TR SVC <Optional value or range> | 1404 | TR SVC <Optional value or range> |
1405 | the syscalls are defined in linux/include/asm-s390/unistd.h | 1405 | the syscalls are defined in linux/arch/s390/include/asm/unistd.h |
1406 | e.g. to trace all file opens just do | 1406 | e.g. to trace all file opens just do |
1407 | TR SVC 5 ( as this is the syscall number of open ) | 1407 | TR SVC 5 ( as this is the syscall number of open ) |
1408 | 1408 | ||
diff --git a/Documentation/s390/cds.txt b/Documentation/s390/cds.txt index c4b7b2bd369a..480a78ef5a1e 100644 --- a/Documentation/s390/cds.txt +++ b/Documentation/s390/cds.txt | |||
@@ -98,7 +98,7 @@ platform. Some of the interface routines are specific to Linux/390 and some | |||
98 | of them can be found on other Linux platforms implementations too. | 98 | of them can be found on other Linux platforms implementations too. |
99 | Miscellaneous function prototypes, data declarations, and macro definitions | 99 | Miscellaneous function prototypes, data declarations, and macro definitions |
100 | can be found in the architecture specific C header file | 100 | can be found in the architecture specific C header file |
101 | linux/include/asm-s390/irq.h. | 101 | linux/arch/s390/include/asm/irq.h. |
102 | 102 | ||
103 | Overview of CDS interface concepts | 103 | Overview of CDS interface concepts |
104 | 104 | ||
diff --git a/Documentation/s390/s390dbf.txt b/Documentation/s390/s390dbf.txt index e05420973698..2d10053dd97e 100644 --- a/Documentation/s390/s390dbf.txt +++ b/Documentation/s390/s390dbf.txt | |||
@@ -2,7 +2,7 @@ S390 Debug Feature | |||
2 | ================== | 2 | ================== |
3 | 3 | ||
4 | files: arch/s390/kernel/debug.c | 4 | files: arch/s390/kernel/debug.c |
5 | include/asm-s390/debug.h | 5 | arch/s390/include/asm/debug.h |
6 | 6 | ||
7 | Description: | 7 | Description: |
8 | ------------ | 8 | ------------ |
diff --git a/Documentation/scsi/ChangeLog.lpfc b/Documentation/scsi/ChangeLog.lpfc index ae3f962a7cfc..ff19a52fe004 100644 --- a/Documentation/scsi/ChangeLog.lpfc +++ b/Documentation/scsi/ChangeLog.lpfc | |||
@@ -733,7 +733,7 @@ Changes from 20040920 to 20041018 | |||
733 | I/O completion path a little more, especially taking care of | 733 | I/O completion path a little more, especially taking care of |
734 | fast-pathing the non-error case. Also removes tons of dead | 734 | fast-pathing the non-error case. Also removes tons of dead |
735 | members and defines from lpfc_scsi.h - e.g. lpfc_target is down | 735 | members and defines from lpfc_scsi.h - e.g. lpfc_target is down |
736 | to nothing more then the lpfc_nodelist pointer. | 736 | to nothing more than the lpfc_nodelist pointer. |
737 | * Added binary sysfs file to issue mbox commands | 737 | * Added binary sysfs file to issue mbox commands |
738 | * Replaced #if __BIG_ENDIAN with #if __BIG_ENDIAN_BITFIELD for | 738 | * Replaced #if __BIG_ENDIAN with #if __BIG_ENDIAN_BITFIELD for |
739 | compatibility with the user space applications. | 739 | compatibility with the user space applications. |
diff --git a/Documentation/scsi/ChangeLog.ncr53c8xx b/Documentation/scsi/ChangeLog.ncr53c8xx index a9f721aeb11c..8b278c10edfd 100644 --- a/Documentation/scsi/ChangeLog.ncr53c8xx +++ b/Documentation/scsi/ChangeLog.ncr53c8xx | |||
@@ -19,7 +19,7 @@ Sun Sep 24 21:30 2000 Gerard Roudier (groudier@club-internet.fr) | |||
19 | 19 | ||
20 | Wed Jul 26 23:30 2000 Gerard Roudier (groudier@club-internet.fr) | 20 | Wed Jul 26 23:30 2000 Gerard Roudier (groudier@club-internet.fr) |
21 | * version ncr53c8xx-3.4.1 | 21 | * version ncr53c8xx-3.4.1 |
22 | - Provide OpenFirmare path through the proc FS on PPC. | 22 | - Provide OpenFirmware path through the proc FS on PPC. |
23 | - Remove trailing argument #2 from a couple of #undefs. | 23 | - Remove trailing argument #2 from a couple of #undefs. |
24 | 24 | ||
25 | Sun Jul 09 16:30 2000 Gerard Roudier (groudier@club-internet.fr) | 25 | Sun Jul 09 16:30 2000 Gerard Roudier (groudier@club-internet.fr) |
diff --git a/Documentation/scsi/ChangeLog.sym53c8xx b/Documentation/scsi/ChangeLog.sym53c8xx index ef985ec348e6..02ffbc1e8a84 100644 --- a/Documentation/scsi/ChangeLog.sym53c8xx +++ b/Documentation/scsi/ChangeLog.sym53c8xx | |||
@@ -81,7 +81,7 @@ Sun Sep 24 21:30 2000 Gerard Roudier (groudier@club-internet.fr) | |||
81 | 81 | ||
82 | Wed Jul 26 23:30 2000 Gerard Roudier (groudier@club-internet.fr) | 82 | Wed Jul 26 23:30 2000 Gerard Roudier (groudier@club-internet.fr) |
83 | * version sym53c8xx-1.7.1 | 83 | * version sym53c8xx-1.7.1 |
84 | - Provide OpenFirmare path through the proc FS on PPC. | 84 | - Provide OpenFirmware path through the proc FS on PPC. |
85 | - Download of on-chip SRAM using memcpy_toio() doesn't work | 85 | - Download of on-chip SRAM using memcpy_toio() doesn't work |
86 | on PPC. Restore previous method (MEMORY MOVE from SCRIPTS). | 86 | on PPC. Restore previous method (MEMORY MOVE from SCRIPTS). |
87 | - Remove trailing argument #2 from a couple of #undefs. | 87 | - Remove trailing argument #2 from a couple of #undefs. |
diff --git a/Documentation/scsi/scsi_fc_transport.txt b/Documentation/scsi/scsi_fc_transport.txt index 38d324d62b25..e5b071d46619 100644 --- a/Documentation/scsi/scsi_fc_transport.txt +++ b/Documentation/scsi/scsi_fc_transport.txt | |||
@@ -191,7 +191,7 @@ Vport States: | |||
191 | This is equivalent to a driver "attach" on an adapter, which is | 191 | This is equivalent to a driver "attach" on an adapter, which is |
192 | independent of the adapter's link state. | 192 | independent of the adapter's link state. |
193 | - Instantiation of the vport on the FC link via ELS traffic, etc. | 193 | - Instantiation of the vport on the FC link via ELS traffic, etc. |
194 | This is equivalent to a "link up" and successfull link initialization. | 194 | This is equivalent to a "link up" and successful link initialization. |
195 | Further information can be found in the interfaces section below for | 195 | Further information can be found in the interfaces section below for |
196 | Vport Creation. | 196 | Vport Creation. |
197 | 197 | ||
@@ -320,7 +320,7 @@ Vport Creation: | |||
320 | This is equivalent to a driver "attach" on an adapter, which is | 320 | This is equivalent to a driver "attach" on an adapter, which is |
321 | independent of the adapter's link state. | 321 | independent of the adapter's link state. |
322 | - Instantiation of the vport on the FC link via ELS traffic, etc. | 322 | - Instantiation of the vport on the FC link via ELS traffic, etc. |
323 | This is equivalent to a "link up" and successfull link initialization. | 323 | This is equivalent to a "link up" and successful link initialization. |
324 | 324 | ||
325 | The LLDD's vport_create() function will not synchronously wait for both | 325 | The LLDD's vport_create() function will not synchronously wait for both |
326 | parts to be fully completed before returning. It must validate that the | 326 | parts to be fully completed before returning. It must validate that the |
diff --git a/Documentation/spi/spi-lm70llp b/Documentation/spi/spi-lm70llp index 154bd02220b9..34a9cfd746bd 100644 --- a/Documentation/spi/spi-lm70llp +++ b/Documentation/spi/spi-lm70llp | |||
@@ -13,10 +13,20 @@ Description | |||
13 | This driver provides glue code connecting a National Semiconductor LM70 LLP | 13 | This driver provides glue code connecting a National Semiconductor LM70 LLP |
14 | temperature sensor evaluation board to the kernel's SPI core subsystem. | 14 | temperature sensor evaluation board to the kernel's SPI core subsystem. |
15 | 15 | ||
16 | This is a SPI master controller driver. It can be used in conjunction with | ||
17 | (layered under) the LM70 logical driver (a "SPI protocol driver"). | ||
16 | In effect, this driver turns the parallel port interface on the eval board | 18 | In effect, this driver turns the parallel port interface on the eval board |
17 | into a SPI bus with a single device, which will be driven by the generic | 19 | into a SPI bus with a single device, which will be driven by the generic |
18 | LM70 driver (drivers/hwmon/lm70.c). | 20 | LM70 driver (drivers/hwmon/lm70.c). |
19 | 21 | ||
22 | |||
23 | Hardware Interfacing | ||
24 | -------------------- | ||
25 | The schematic for this particular board (the LM70EVAL-LLP) is | ||
26 | available (on page 4) here: | ||
27 | |||
28 | http://www.national.com/appinfo/tempsensors/files/LM70LLPEVALmanual.pdf | ||
29 | |||
20 | The hardware interfacing on the LM70 LLP eval board is as follows: | 30 | The hardware interfacing on the LM70 LLP eval board is as follows: |
21 | 31 | ||
22 | Parallel LM70 LLP | 32 | Parallel LM70 LLP |
diff --git a/Documentation/sysctl/vm.txt b/Documentation/sysctl/vm.txt index d79eeda7a699..a3415070bcac 100644 --- a/Documentation/sysctl/vm.txt +++ b/Documentation/sysctl/vm.txt | |||
@@ -38,10 +38,12 @@ Currently, these files are in /proc/sys/vm: | |||
38 | - numa_zonelist_order | 38 | - numa_zonelist_order |
39 | - nr_hugepages | 39 | - nr_hugepages |
40 | - nr_overcommit_hugepages | 40 | - nr_overcommit_hugepages |
41 | - nr_trim_pages (only if CONFIG_MMU=n) | ||
41 | 42 | ||
42 | ============================================================== | 43 | ============================================================== |
43 | 44 | ||
44 | dirty_ratio, dirty_background_ratio, dirty_expire_centisecs, | 45 | dirty_bytes, dirty_ratio, dirty_background_bytes, |
46 | dirty_background_ratio, dirty_expire_centisecs, | ||
45 | dirty_writeback_centisecs, highmem_is_dirtyable, | 47 | dirty_writeback_centisecs, highmem_is_dirtyable, |
46 | vfs_cache_pressure, laptop_mode, block_dump, swap_token_timeout, | 48 | vfs_cache_pressure, laptop_mode, block_dump, swap_token_timeout, |
47 | drop-caches, hugepages_treat_as_movable: | 49 | drop-caches, hugepages_treat_as_movable: |
@@ -347,3 +349,20 @@ Change the maximum size of the hugepage pool. The maximum is | |||
347 | nr_hugepages + nr_overcommit_hugepages. | 349 | nr_hugepages + nr_overcommit_hugepages. |
348 | 350 | ||
349 | See Documentation/vm/hugetlbpage.txt | 351 | See Documentation/vm/hugetlbpage.txt |
352 | |||
353 | ============================================================== | ||
354 | |||
355 | nr_trim_pages | ||
356 | |||
357 | This is available only on NOMMU kernels. | ||
358 | |||
359 | This value adjusts the excess page trimming behaviour of power-of-2 aligned | ||
360 | NOMMU mmap allocations. | ||
361 | |||
362 | A value of 0 disables trimming of allocations entirely, while a value of 1 | ||
363 | trims excess pages aggressively. Any value >= 1 acts as the watermark where | ||
364 | trimming of allocations is initiated. | ||
365 | |||
366 | The default value is 1. | ||
367 | |||
368 | See Documentation/nommu-mmap.txt for more information. | ||
diff --git a/Documentation/usb/power-management.txt b/Documentation/usb/power-management.txt index e48ea1d51010..ad642615ad4c 100644 --- a/Documentation/usb/power-management.txt +++ b/Documentation/usb/power-management.txt | |||
@@ -313,11 +313,13 @@ three of the methods listed above. In addition, a driver indicates | |||
313 | that it supports autosuspend by setting the .supports_autosuspend flag | 313 | that it supports autosuspend by setting the .supports_autosuspend flag |
314 | in its usb_driver structure. It is then responsible for informing the | 314 | in its usb_driver structure. It is then responsible for informing the |
315 | USB core whenever one of its interfaces becomes busy or idle. The | 315 | USB core whenever one of its interfaces becomes busy or idle. The |
316 | driver does so by calling these three functions: | 316 | driver does so by calling these five functions: |
317 | 317 | ||
318 | int usb_autopm_get_interface(struct usb_interface *intf); | 318 | int usb_autopm_get_interface(struct usb_interface *intf); |
319 | void usb_autopm_put_interface(struct usb_interface *intf); | 319 | void usb_autopm_put_interface(struct usb_interface *intf); |
320 | int usb_autopm_set_interface(struct usb_interface *intf); | 320 | int usb_autopm_set_interface(struct usb_interface *intf); |
321 | int usb_autopm_get_interface_async(struct usb_interface *intf); | ||
322 | void usb_autopm_put_interface_async(struct usb_interface *intf); | ||
321 | 323 | ||
322 | The functions work by maintaining a counter in the usb_interface | 324 | The functions work by maintaining a counter in the usb_interface |
323 | structure. When intf->pm_usage_count is > 0 then the interface is | 325 | structure. When intf->pm_usage_count is > 0 then the interface is |
@@ -330,10 +332,12 @@ associated with the device itself rather than any of its interfaces. | |||
330 | This field is used only by the USB core.) | 332 | This field is used only by the USB core.) |
331 | 333 | ||
332 | The driver owns intf->pm_usage_count; it can modify the value however | 334 | The driver owns intf->pm_usage_count; it can modify the value however |
333 | and whenever it likes. A nice aspect of the usb_autopm_* routines is | 335 | and whenever it likes. A nice aspect of the non-async usb_autopm_* |
334 | that the changes they make are protected by the usb_device structure's | 336 | routines is that the changes they make are protected by the usb_device |
335 | PM mutex (udev->pm_mutex); however drivers may change pm_usage_count | 337 | structure's PM mutex (udev->pm_mutex); however drivers may change |
336 | without holding the mutex. | 338 | pm_usage_count without holding the mutex. Drivers using the async |
339 | routines are responsible for their own synchronization and mutual | ||
340 | exclusion. | ||
337 | 341 | ||
338 | usb_autopm_get_interface() increments pm_usage_count and | 342 | usb_autopm_get_interface() increments pm_usage_count and |
339 | attempts an autoresume if the new value is > 0 and the | 343 | attempts an autoresume if the new value is > 0 and the |
@@ -348,6 +352,14 @@ without holding the mutex. | |||
348 | is suspended, and it attempts an autosuspend if the value is | 352 | is suspended, and it attempts an autosuspend if the value is |
349 | <= 0 and the device isn't suspended. | 353 | <= 0 and the device isn't suspended. |
350 | 354 | ||
355 | usb_autopm_get_interface_async() and | ||
356 | usb_autopm_put_interface_async() do almost the same things as | ||
357 | their non-async counterparts. The differences are: they do | ||
358 | not acquire the PM mutex, and they use a workqueue to do their | ||
359 | jobs. As a result they can be called in an atomic context, | ||
360 | such as an URB's completion handler, but when they return the | ||
361 | device will not generally not yet be in the desired state. | ||
362 | |||
351 | There also are a couple of utility routines drivers can use: | 363 | There also are a couple of utility routines drivers can use: |
352 | 364 | ||
353 | usb_autopm_enable() sets pm_usage_cnt to 0 and then calls | 365 | usb_autopm_enable() sets pm_usage_cnt to 0 and then calls |
diff --git a/Documentation/vm/unevictable-lru.txt b/Documentation/vm/unevictable-lru.txt index 125eed560e5a..0706a7282a8c 100644 --- a/Documentation/vm/unevictable-lru.txt +++ b/Documentation/vm/unevictable-lru.txt | |||
@@ -137,13 +137,6 @@ shrink_page_list() where they will be detected when vmscan walks the reverse | |||
137 | map in try_to_unmap(). If try_to_unmap() returns SWAP_MLOCK, shrink_page_list() | 137 | map in try_to_unmap(). If try_to_unmap() returns SWAP_MLOCK, shrink_page_list() |
138 | will cull the page at that point. | 138 | will cull the page at that point. |
139 | 139 | ||
140 | Note that for anonymous pages, shrink_page_list() attempts to add the page to | ||
141 | the swap cache before it tries to unmap the page. To avoid this unnecessary | ||
142 | consumption of swap space, shrink_page_list() calls try_to_munlock() to check | ||
143 | whether any VM_LOCKED vmas map the page without attempting to unmap the page. | ||
144 | If try_to_munlock() returns SWAP_MLOCK, shrink_page_list() will cull the page | ||
145 | without consuming swap space. try_to_munlock() will be described below. | ||
146 | |||
147 | To "cull" an unevictable page, vmscan simply puts the page back on the lru | 140 | To "cull" an unevictable page, vmscan simply puts the page back on the lru |
148 | list using putback_lru_page()--the inverse operation to isolate_lru_page()-- | 141 | list using putback_lru_page()--the inverse operation to isolate_lru_page()-- |
149 | after dropping the page lock. Because the condition which makes the page | 142 | after dropping the page lock. Because the condition which makes the page |
@@ -190,8 +183,8 @@ several places: | |||
190 | in the VM_LOCKED flag being set for the vma. | 183 | in the VM_LOCKED flag being set for the vma. |
191 | 3) in the fault path, if mlocked pages are "culled" in the fault path, | 184 | 3) in the fault path, if mlocked pages are "culled" in the fault path, |
192 | and when a VM_LOCKED stack segment is expanded. | 185 | and when a VM_LOCKED stack segment is expanded. |
193 | 4) as mentioned above, in vmscan:shrink_page_list() with attempting to | 186 | 4) as mentioned above, in vmscan:shrink_page_list() when attempting to |
194 | reclaim a page in a VM_LOCKED vma--via try_to_unmap() or try_to_munlock(). | 187 | reclaim a page in a VM_LOCKED vma via try_to_unmap(). |
195 | 188 | ||
196 | Mlocked pages become unlocked and rescued from the unevictable list when: | 189 | Mlocked pages become unlocked and rescued from the unevictable list when: |
197 | 190 | ||
@@ -260,9 +253,9 @@ mlock_fixup() filters several classes of "special" vmas: | |||
260 | 253 | ||
261 | 2) vmas mapping hugetlbfs page are already effectively pinned into memory. | 254 | 2) vmas mapping hugetlbfs page are already effectively pinned into memory. |
262 | We don't need nor want to mlock() these pages. However, to preserve the | 255 | We don't need nor want to mlock() these pages. However, to preserve the |
263 | prior behavior of mlock()--before the unevictable/mlock changes--mlock_fixup() | 256 | prior behavior of mlock()--before the unevictable/mlock changes-- |
264 | will call make_pages_present() in the hugetlbfs vma range to allocate the | 257 | mlock_fixup() will call make_pages_present() in the hugetlbfs vma range |
265 | huge pages and populate the ptes. | 258 | to allocate the huge pages and populate the ptes. |
266 | 259 | ||
267 | 3) vmas with VM_DONTEXPAND|VM_RESERVED are generally user space mappings of | 260 | 3) vmas with VM_DONTEXPAND|VM_RESERVED are generally user space mappings of |
268 | kernel pages, such as the vdso page, relay channel pages, etc. These pages | 261 | kernel pages, such as the vdso page, relay channel pages, etc. These pages |
@@ -322,7 +315,7 @@ __mlock_vma_pages_range()--the same function used to mlock a vma range-- | |||
322 | passing a flag to indicate that munlock() is being performed. | 315 | passing a flag to indicate that munlock() is being performed. |
323 | 316 | ||
324 | Because the vma access protections could have been changed to PROT_NONE after | 317 | Because the vma access protections could have been changed to PROT_NONE after |
325 | faulting in and mlocking some pages, get_user_pages() was unreliable for visiting | 318 | faulting in and mlocking pages, get_user_pages() was unreliable for visiting |
326 | these pages for munlocking. Because we don't want to leave pages mlocked(), | 319 | these pages for munlocking. Because we don't want to leave pages mlocked(), |
327 | get_user_pages() was enhanced to accept a flag to ignore the permissions when | 320 | get_user_pages() was enhanced to accept a flag to ignore the permissions when |
328 | fetching the pages--all of which should be resident as a result of previous | 321 | fetching the pages--all of which should be resident as a result of previous |
@@ -416,8 +409,8 @@ Mlocked Pages: munmap()/exit()/exec() System Call Handling | |||
416 | When unmapping an mlocked region of memory, whether by an explicit call to | 409 | When unmapping an mlocked region of memory, whether by an explicit call to |
417 | munmap() or via an internal unmap from exit() or exec() processing, we must | 410 | munmap() or via an internal unmap from exit() or exec() processing, we must |
418 | munlock the pages if we're removing the last VM_LOCKED vma that maps the pages. | 411 | munlock the pages if we're removing the last VM_LOCKED vma that maps the pages. |
419 | Before the unevictable/mlock changes, mlocking did not mark the pages in any way, | 412 | Before the unevictable/mlock changes, mlocking did not mark the pages in any |
420 | so unmapping them required no processing. | 413 | way, so unmapping them required no processing. |
421 | 414 | ||
422 | To munlock a range of memory under the unevictable/mlock infrastructure, the | 415 | To munlock a range of memory under the unevictable/mlock infrastructure, the |
423 | munmap() hander and task address space tear down function call | 416 | munmap() hander and task address space tear down function call |
@@ -517,12 +510,10 @@ couldn't be mlocked. | |||
517 | Mlocked pages: try_to_munlock() Reverse Map Scan | 510 | Mlocked pages: try_to_munlock() Reverse Map Scan |
518 | 511 | ||
519 | TODO/FIXME: a better name might be page_mlocked()--analogous to the | 512 | TODO/FIXME: a better name might be page_mlocked()--analogous to the |
520 | page_referenced() reverse map walker--especially if we continue to call this | 513 | page_referenced() reverse map walker. |
521 | from shrink_page_list(). See related TODO/FIXME below. | ||
522 | 514 | ||
523 | When munlock_vma_page()--see "Mlocked Pages: munlock()/munlockall() System | 515 | When munlock_vma_page()--see "Mlocked Pages: munlock()/munlockall() |
524 | Call Handling" above--tries to munlock a page, or when shrink_page_list() | 516 | System Call Handling" above--tries to munlock a page, it needs to |
525 | encounters an anonymous page that is not yet in the swap cache, they need to | ||
526 | determine whether or not the page is mapped by any VM_LOCKED vma, without | 517 | determine whether or not the page is mapped by any VM_LOCKED vma, without |
527 | actually attempting to unmap all ptes from the page. For this purpose, the | 518 | actually attempting to unmap all ptes from the page. For this purpose, the |
528 | unevictable/mlock infrastructure introduced a variant of try_to_unmap() called | 519 | unevictable/mlock infrastructure introduced a variant of try_to_unmap() called |
@@ -535,10 +526,7 @@ for VM_LOCKED vmas. When such a vma is found for anonymous pages and file | |||
535 | pages mapped in linear VMAs, as in the try_to_unmap() case, the functions | 526 | pages mapped in linear VMAs, as in the try_to_unmap() case, the functions |
536 | attempt to acquire the associated mmap semphore, mlock the page via | 527 | attempt to acquire the associated mmap semphore, mlock the page via |
537 | mlock_vma_page() and return SWAP_MLOCK. This effectively undoes the | 528 | mlock_vma_page() and return SWAP_MLOCK. This effectively undoes the |
538 | pre-clearing of the page's PG_mlocked done by munlock_vma_page() and informs | 529 | pre-clearing of the page's PG_mlocked done by munlock_vma_page. |
539 | shrink_page_list() that the anonymous page should be culled rather than added | ||
540 | to the swap cache in preparation for a try_to_unmap() that will almost | ||
541 | certainly fail. | ||
542 | 530 | ||
543 | If try_to_unmap() is unable to acquire a VM_LOCKED vma's associated mmap | 531 | If try_to_unmap() is unable to acquire a VM_LOCKED vma's associated mmap |
544 | semaphore, it will return SWAP_AGAIN. This will allow shrink_page_list() | 532 | semaphore, it will return SWAP_AGAIN. This will allow shrink_page_list() |
@@ -557,10 +545,7 @@ However, the scan can terminate when it encounters a VM_LOCKED vma and can | |||
557 | successfully acquire the vma's mmap semphore for read and mlock the page. | 545 | successfully acquire the vma's mmap semphore for read and mlock the page. |
558 | Although try_to_munlock() can be called many [very many!] times when | 546 | Although try_to_munlock() can be called many [very many!] times when |
559 | munlock()ing a large region or tearing down a large address space that has been | 547 | munlock()ing a large region or tearing down a large address space that has been |
560 | mlocked via mlockall(), overall this is a fairly rare event. In addition, | 548 | mlocked via mlockall(), overall this is a fairly rare event. |
561 | although shrink_page_list() calls try_to_munlock() for every anonymous page that | ||
562 | it handles that is not yet in the swap cache, on average anonymous pages will | ||
563 | have very short reverse map lists. | ||
564 | 549 | ||
565 | Mlocked Page: Page Reclaim in shrink_*_list() | 550 | Mlocked Page: Page Reclaim in shrink_*_list() |
566 | 551 | ||
@@ -588,8 +573,8 @@ Some examples of these unevictable pages on the LRU lists are: | |||
588 | munlock_vma_page() was forced to let the page back on to the normal | 573 | munlock_vma_page() was forced to let the page back on to the normal |
589 | LRU list for vmscan to handle. | 574 | LRU list for vmscan to handle. |
590 | 575 | ||
591 | shrink_inactive_list() also culls any unevictable pages that it finds | 576 | shrink_inactive_list() also culls any unevictable pages that it finds on |
592 | on the inactive lists, again diverting them to the appropriate zone's unevictable | 577 | the inactive lists, again diverting them to the appropriate zone's unevictable |
593 | lru list. shrink_inactive_list() should only see SHM_LOCKed pages that became | 578 | lru list. shrink_inactive_list() should only see SHM_LOCKed pages that became |
594 | SHM_LOCKed after shrink_active_list() had moved them to the inactive list, or | 579 | SHM_LOCKed after shrink_active_list() had moved them to the inactive list, or |
595 | pages mapped into VM_LOCKED vmas that munlock_vma_page() couldn't isolate from | 580 | pages mapped into VM_LOCKED vmas that munlock_vma_page() couldn't isolate from |
@@ -597,19 +582,7 @@ the lru to recheck via try_to_munlock(). shrink_inactive_list() won't notice | |||
597 | the latter, but will pass on to shrink_page_list(). | 582 | the latter, but will pass on to shrink_page_list(). |
598 | 583 | ||
599 | shrink_page_list() again culls obviously unevictable pages that it could | 584 | shrink_page_list() again culls obviously unevictable pages that it could |
600 | encounter for similar reason to shrink_inactive_list(). As already discussed, | 585 | encounter for similar reason to shrink_inactive_list(). Pages mapped into |
601 | shrink_page_list() proactively looks for anonymous pages that should have | ||
602 | PG_mlocked set but don't--these would not be detected by page_evictable()--to | ||
603 | avoid adding them to the swap cache unnecessarily. File pages mapped into | ||
604 | VM_LOCKED vmas but without PG_mlocked set will make it all the way to | 586 | VM_LOCKED vmas but without PG_mlocked set will make it all the way to |
605 | try_to_unmap(). shrink_page_list() will divert them to the unevictable list when | 587 | try_to_unmap(). shrink_page_list() will divert them to the unevictable list |
606 | try_to_unmap() returns SWAP_MLOCK, as discussed above. | 588 | when try_to_unmap() returns SWAP_MLOCK, as discussed above. |
607 | |||
608 | TODO/FIXME: If we can enhance the swap cache to reliably remove entries | ||
609 | with page_count(page) > 2, as long as all ptes are mapped to the page and | ||
610 | not the swap entry, we can probably remove the call to try_to_munlock() in | ||
611 | shrink_page_list() and just remove the page from the swap cache when | ||
612 | try_to_unmap() returns SWAP_MLOCK. Currently, remove_exclusive_swap_page() | ||
613 | doesn't seem to allow that. | ||
614 | |||
615 | |||
diff --git a/Documentation/w1/masters/00-INDEX b/Documentation/w1/masters/00-INDEX index 7b0ceaaad7af..d63fa024ac05 100644 --- a/Documentation/w1/masters/00-INDEX +++ b/Documentation/w1/masters/00-INDEX | |||
@@ -4,5 +4,7 @@ ds2482 | |||
4 | - The Maxim/Dallas Semiconductor DS2482 provides 1-wire busses. | 4 | - The Maxim/Dallas Semiconductor DS2482 provides 1-wire busses. |
5 | ds2490 | 5 | ds2490 |
6 | - The Maxim/Dallas Semiconductor DS2490 builds USB <-> W1 bridges. | 6 | - The Maxim/Dallas Semiconductor DS2490 builds USB <-> W1 bridges. |
7 | mxc_w1 | ||
8 | - W1 master controller driver found on Freescale MX2/MX3 SoCs | ||
7 | w1-gpio | 9 | w1-gpio |
8 | - GPIO 1-wire bus master driver. | 10 | - GPIO 1-wire bus master driver. |
diff --git a/Documentation/w1/masters/mxc-w1 b/Documentation/w1/masters/mxc-w1 new file mode 100644 index 000000000000..97f6199a7f39 --- /dev/null +++ b/Documentation/w1/masters/mxc-w1 | |||
@@ -0,0 +1,11 @@ | |||
1 | Kernel driver mxc_w1 | ||
2 | ==================== | ||
3 | |||
4 | Supported chips: | ||
5 | * Freescale MX27, MX31 and probably other i.MX SoCs | ||
6 | Datasheets: | ||
7 | http://www.freescale.com/files/32bit/doc/data_sheet/MCIMX31.pdf?fpsp=1 | ||
8 | http://www.freescale.com/files/dsp/MCIMX27.pdf?fpsp=1 | ||
9 | |||
10 | Author: Originally based on Freescale code, prepared for mainline by | ||
11 | Sascha Hauer <s.hauer@pengutronix.de> | ||
diff --git a/Documentation/w1/w1.netlink b/Documentation/w1/w1.netlink index 3640c7c87d45..804445f745ed 100644 --- a/Documentation/w1/w1.netlink +++ b/Documentation/w1/w1.netlink | |||
@@ -5,69 +5,157 @@ Message types. | |||
5 | ============= | 5 | ============= |
6 | 6 | ||
7 | There are three types of messages between w1 core and userspace: | 7 | There are three types of messages between w1 core and userspace: |
8 | 1. Events. They are generated each time new master or slave device found | 8 | 1. Events. They are generated each time new master or slave device |
9 | either due to automatic or requested search. | 9 | found either due to automatic or requested search. |
10 | 2. Userspace commands. Includes read/write and search/alarm search comamnds. | 10 | 2. Userspace commands. |
11 | 3. Replies to userspace commands. | 11 | 3. Replies to userspace commands. |
12 | 12 | ||
13 | 13 | ||
14 | Protocol. | 14 | Protocol. |
15 | ======== | 15 | ======== |
16 | 16 | ||
17 | [struct cn_msg] - connector header. It's length field is equal to size of the attached data. | 17 | [struct cn_msg] - connector header. |
18 | Its length field is equal to size of the attached data | ||
18 | [struct w1_netlink_msg] - w1 netlink header. | 19 | [struct w1_netlink_msg] - w1 netlink header. |
19 | __u8 type - message type. | 20 | __u8 type - message type. |
20 | W1_SLAVE_ADD/W1_SLAVE_REMOVE - slave add/remove events. | 21 | W1_LIST_MASTERS |
21 | W1_MASTER_ADD/W1_MASTER_REMOVE - master add/remove events. | 22 | list current bus masters |
22 | W1_MASTER_CMD - userspace command for bus master device (search/alarm search). | 23 | W1_SLAVE_ADD/W1_SLAVE_REMOVE |
23 | W1_SLAVE_CMD - userspace command for slave device (read/write/ search/alarm search | 24 | slave add/remove events |
24 | for bus master device where given slave device found). | 25 | W1_MASTER_ADD/W1_MASTER_REMOVE |
26 | master add/remove events | ||
27 | W1_MASTER_CMD | ||
28 | userspace command for bus master | ||
29 | device (search/alarm search) | ||
30 | W1_SLAVE_CMD | ||
31 | userspace command for slave device | ||
32 | (read/write/touch) | ||
25 | __u8 res - reserved | 33 | __u8 res - reserved |
26 | __u16 len - size of attached to this header data. | 34 | __u16 len - size of data attached to this header data |
27 | union { | 35 | union { |
28 | __u8 id; - slave unique device id | 36 | __u8 id[8]; - slave unique device id |
29 | struct w1_mst { | 37 | struct w1_mst { |
30 | __u32 id; - master's id. | 38 | __u32 id; - master's id |
31 | __u32 res; - reserved | 39 | __u32 res; - reserved |
32 | } mst; | 40 | } mst; |
33 | } id; | 41 | } id; |
34 | 42 | ||
35 | [strucrt w1_netlink_cmd] - command for gived master or slave device. | 43 | [struct w1_netlink_cmd] - command for given master or slave device. |
36 | __u8 cmd - command opcode. | 44 | __u8 cmd - command opcode. |
37 | W1_CMD_READ - read command. | 45 | W1_CMD_READ - read command |
38 | W1_CMD_WRITE - write command. | 46 | W1_CMD_WRITE - write command |
39 | W1_CMD_SEARCH - search command. | 47 | W1_CMD_TOUCH - touch command |
40 | W1_CMD_ALARM_SEARCH - alarm search command. | 48 | (write and sample data back to userspace) |
49 | W1_CMD_SEARCH - search command | ||
50 | W1_CMD_ALARM_SEARCH - alarm search command | ||
41 | __u8 res - reserved | 51 | __u8 res - reserved |
42 | __u16 len - length of data for this command. | 52 | __u16 len - length of data for this command |
43 | For read command data must be allocated like for write command. | 53 | For read command data must be allocated like for write command |
44 | __u8 data[0] - data for this command. | 54 | __u8 data[0] - data for this command |
45 | 55 | ||
46 | 56 | ||
47 | Each connector message can include one or more w1_netlink_msg with zero of more attached w1_netlink_cmd messages. | 57 | Each connector message can include one or more w1_netlink_msg with |
58 | zero or more attached w1_netlink_cmd messages. | ||
48 | 59 | ||
49 | For event messages there are no w1_netlink_cmd embedded structures, only connector header | 60 | For event messages there are no w1_netlink_cmd embedded structures, |
50 | and w1_netlink_msg strucutre with "len" field being zero and filled type (one of event types) | 61 | only connector header and w1_netlink_msg strucutre with "len" field |
51 | and id - either 8 bytes of slave unique id in host order, or master's id, which is assigned | 62 | being zero and filled type (one of event types) and id: |
52 | to bus master device when it is added to w1 core. | 63 | either 8 bytes of slave unique id in host order, |
64 | or master's id, which is assigned to bus master device | ||
65 | when it is added to w1 core. | ||
66 | |||
67 | Currently replies to userspace commands are only generated for read | ||
68 | command request. One reply is generated exactly for one w1_netlink_cmd | ||
69 | read request. Replies are not combined when sent - i.e. typical reply | ||
70 | messages looks like the following: | ||
53 | 71 | ||
54 | Currently replies to userspace commands are only generated for read command request. | ||
55 | One reply is generated exactly for one w1_netlink_cmd read request. | ||
56 | Replies are not combined when sent - i.e. typical reply messages looks like the following: | ||
57 | [cn_msg][w1_netlink_msg][w1_netlink_cmd] | 72 | [cn_msg][w1_netlink_msg][w1_netlink_cmd] |
58 | cn_msg.len = sizeof(struct w1_netlink_msg) + sizeof(struct w1_netlink_cmd) + cmd->len; | 73 | cn_msg.len = sizeof(struct w1_netlink_msg) + |
74 | sizeof(struct w1_netlink_cmd) + | ||
75 | cmd->len; | ||
59 | w1_netlink_msg.len = sizeof(struct w1_netlink_cmd) + cmd->len; | 76 | w1_netlink_msg.len = sizeof(struct w1_netlink_cmd) + cmd->len; |
60 | w1_netlink_cmd.len = cmd->len; | 77 | w1_netlink_cmd.len = cmd->len; |
61 | 78 | ||
79 | Replies to W1_LIST_MASTERS should send a message back to the userspace | ||
80 | which will contain list of all registered master ids in the following | ||
81 | format: | ||
82 | |||
83 | cn_msg (CN_W1_IDX.CN_W1_VAL as id, len is equal to sizeof(struct | ||
84 | w1_netlink_msg) plus number of masters multipled by 4) | ||
85 | w1_netlink_msg (type: W1_LIST_MASTERS, len is equal to | ||
86 | number of masters multiplied by 4 (u32 size)) | ||
87 | id0 ... idN | ||
88 | |||
89 | Each message is at most 4k in size, so if number of master devices | ||
90 | exceeds this, it will be split into several messages, | ||
91 | cn.seq will be increased for each one. | ||
92 | |||
93 | W1 search and alarm search commands. | ||
94 | request: | ||
95 | [cn_msg] | ||
96 | [w1_netlink_msg type = W1_MASTER_CMD | ||
97 | id is equal to the bus master id to use for searching] | ||
98 | [w1_netlink_cmd cmd = W1_CMD_SEARCH or W1_CMD_ALARM_SEARCH] | ||
99 | |||
100 | reply: | ||
101 | [cn_msg, ack = 1 and increasing, 0 means the last message, | ||
102 | seq is equal to the request seq] | ||
103 | [w1_netlink_msg type = W1_MASTER_CMD] | ||
104 | [w1_netlink_cmd cmd = W1_CMD_SEARCH or W1_CMD_ALARM_SEARCH | ||
105 | len is equal to number of IDs multiplied by 8] | ||
106 | [64bit-id0 ... 64bit-idN] | ||
107 | Length in each header corresponds to the size of the data behind it, so | ||
108 | w1_netlink_cmd->len = N * 8; where N is number of IDs in this message. | ||
109 | Can be zero. | ||
110 | w1_netlink_msg->len = sizeof(struct w1_netlink_cmd) + N * 8; | ||
111 | cn_msg->len = sizeof(struct w1_netlink_msg) + | ||
112 | sizeof(struct w1_netlink_cmd) + | ||
113 | N*8; | ||
114 | |||
115 | W1 reset command. | ||
116 | [cn_msg] | ||
117 | [w1_netlink_msg type = W1_MASTER_CMD | ||
118 | id is equal to the bus master id to use for searching] | ||
119 | [w1_netlink_cmd cmd = W1_CMD_RESET] | ||
120 | |||
121 | |||
122 | Command status replies. | ||
123 | ====================== | ||
124 | |||
125 | Each command (either root, master or slave with or without w1_netlink_cmd | ||
126 | structure) will be 'acked' by the w1 core. Format of the reply is the same | ||
127 | as request message except that length parameters do not account for data | ||
128 | requested by the user, i.e. read/write/touch IO requests will not contain | ||
129 | data, so w1_netlink_cmd.len will be 0, w1_netlink_msg.len will be size | ||
130 | of the w1_netlink_cmd structure and cn_msg.len will be equal to the sum | ||
131 | of the sizeof(struct w1_netlink_msg) and sizeof(struct w1_netlink_cmd). | ||
132 | If reply is generated for master or root command (which do not have | ||
133 | w1_netlink_cmd attached), reply will contain only cn_msg and w1_netlink_msg | ||
134 | structires. | ||
135 | |||
136 | w1_netlink_msg.status field will carry positive error value | ||
137 | (EINVAL for example) or zero in case of success. | ||
138 | |||
139 | All other fields in every structure will mirror the same parameters in the | ||
140 | request message (except lengths as described above). | ||
141 | |||
142 | Status reply is generated for every w1_netlink_cmd embedded in the | ||
143 | w1_netlink_msg, if there are no w1_netlink_cmd structures, | ||
144 | reply will be generated for the w1_netlink_msg. | ||
145 | |||
146 | All w1_netlink_cmd command structures are handled in every w1_netlink_msg, | ||
147 | even if there were errors, only length mismatch interrupts message processing. | ||
148 | |||
62 | 149 | ||
63 | Operation steps in w1 core when new command is received. | 150 | Operation steps in w1 core when new command is received. |
64 | ======================================================= | 151 | ======================================================= |
65 | 152 | ||
66 | When new message (w1_netlink_msg) is received w1 core detects if it is master of slave request, | 153 | When new message (w1_netlink_msg) is received w1 core detects if it is |
67 | according to w1_netlink_msg.type field. | 154 | master or slave request, according to w1_netlink_msg.type field. |
68 | Then master or slave device is searched for. | 155 | Then master or slave device is searched for. |
69 | When found, master device (requested or those one on where slave device is found) is locked. | 156 | When found, master device (requested or those one on where slave device |
70 | If slave command is requested, then reset/select procedure is started to select given device. | 157 | is found) is locked. If slave command is requested, then reset/select |
158 | procedure is started to select given device. | ||
71 | 159 | ||
72 | Then all requested in w1_netlink_msg operations are performed one by one. | 160 | Then all requested in w1_netlink_msg operations are performed one by one. |
73 | If command requires reply (like read command) it is sent on command completion. | 161 | If command requires reply (like read command) it is sent on command completion. |
@@ -82,8 +170,8 @@ Connector [1] specific documentation. | |||
82 | Each connector message includes two u32 fields as "address". | 170 | Each connector message includes two u32 fields as "address". |
83 | w1 uses CN_W1_IDX and CN_W1_VAL defined in include/linux/connector.h header. | 171 | w1 uses CN_W1_IDX and CN_W1_VAL defined in include/linux/connector.h header. |
84 | Each message also includes sequence and acknowledge numbers. | 172 | Each message also includes sequence and acknowledge numbers. |
85 | Sequence number for event messages is appropriate bus master sequence number increased with | 173 | Sequence number for event messages is appropriate bus master sequence number |
86 | each event message sent "through" this master. | 174 | increased with each event message sent "through" this master. |
87 | Sequence number for userspace requests is set by userspace application. | 175 | Sequence number for userspace requests is set by userspace application. |
88 | Sequence number for reply is the same as was in request, and | 176 | Sequence number for reply is the same as was in request, and |
89 | acknowledge number is set to seq+1. | 177 | acknowledge number is set to seq+1. |
@@ -93,6 +181,6 @@ Additional documantion, source code examples. | |||
93 | ============================================ | 181 | ============================================ |
94 | 182 | ||
95 | 1. Documentation/connector | 183 | 1. Documentation/connector |
96 | 2. http://tservice.net.ru/~s0mbre/archive/w1 | 184 | 2. http://www.ioremap.net/archive/w1 |
97 | This archive includes userspace application w1d.c which | 185 | This archive includes userspace application w1d.c which uses |
98 | uses read/write/search commands for all master/slave devices found on the bus. | 186 | read/write/search commands for all master/slave devices found on the bus. |
diff --git a/Documentation/wimax/README.i2400m b/Documentation/wimax/README.i2400m new file mode 100644 index 000000000000..7dffd8919cb0 --- /dev/null +++ b/Documentation/wimax/README.i2400m | |||
@@ -0,0 +1,260 @@ | |||
1 | |||
2 | Driver for the Intel Wireless Wimax Connection 2400m | ||
3 | |||
4 | (C) 2008 Intel Corporation < linux-wimax@intel.com > | ||
5 | |||
6 | This provides a driver for the Intel Wireless WiMAX Connection 2400m | ||
7 | and a basic Linux kernel WiMAX stack. | ||
8 | |||
9 | 1. Requirements | ||
10 | |||
11 | * Linux installation with Linux kernel 2.6.22 or newer (if building | ||
12 | from a separate tree) | ||
13 | * Intel i2400m Echo Peak or Baxter Peak; this includes the Intel | ||
14 | Wireless WiMAX/WiFi Link 5x50 series. | ||
15 | * build tools: | ||
16 | + Linux kernel development package for the target kernel; to | ||
17 | build against your currently running kernel, you need to have | ||
18 | the kernel development package corresponding to the running | ||
19 | image installed (usually if your kernel is named | ||
20 | linux-VERSION, the development package is called | ||
21 | linux-dev-VERSION or linux-headers-VERSION). | ||
22 | + GNU C Compiler, make | ||
23 | |||
24 | 2. Compilation and installation | ||
25 | |||
26 | 2.1. Compilation of the drivers included in the kernel | ||
27 | |||
28 | Configure the kernel; to enable the WiMAX drivers select Drivers > | ||
29 | Networking Drivers > WiMAX device support. Enable all of them as | ||
30 | modules (easier). | ||
31 | |||
32 | If USB or SDIO are not enabled in the kernel configuration, the options | ||
33 | to build the i2400m USB or SDIO drivers will not show. Enable said | ||
34 | subsystems and go back to the WiMAX menu to enable the drivers. | ||
35 | |||
36 | Compile and install your kernel as usual. | ||
37 | |||
38 | 2.2. Compilation of the drivers distributed as an standalone module | ||
39 | |||
40 | To compile | ||
41 | |||
42 | $ cd source/directory | ||
43 | $ make | ||
44 | |||
45 | Once built you can load and unload using the provided load.sh script; | ||
46 | load.sh will load the modules, load.sh u will unload them. | ||
47 | |||
48 | To install in the default kernel directories (and enable auto loading | ||
49 | when the device is plugged): | ||
50 | |||
51 | $ make install | ||
52 | $ depmod -a | ||
53 | |||
54 | If your kernel development files are located in a non standard | ||
55 | directory or if you want to build for a kernel that is not the | ||
56 | currently running one, set KDIR to the right location: | ||
57 | |||
58 | $ make KDIR=/path/to/kernel/dev/tree | ||
59 | |||
60 | For more information, please contact linux-wimax@intel.com. | ||
61 | |||
62 | 3. Installing the firmware | ||
63 | |||
64 | The firmware can be obtained from http://linuxwimax.org or might have | ||
65 | been supplied with your hardware. | ||
66 | |||
67 | It has to be installed in the target system: | ||
68 | * | ||
69 | $ cp FIRMWAREFILE.sbcf /lib/firmware/i2400m-fw-BUSTYPE-1.3.sbcf | ||
70 | |||
71 | * NOTE: if your firmware came in an .rpm or .deb file, just install | ||
72 | it as normal, with the rpm (rpm -i FIRMWARE.rpm) or dpkg | ||
73 | (dpkg -i FIRMWARE.deb) commands. No further action is needed. | ||
74 | * BUSTYPE will be usb or sdio, depending on the hardware you have. | ||
75 | Each hardware type comes with its own firmware and will not work | ||
76 | with other types. | ||
77 | |||
78 | 4. Design | ||
79 | |||
80 | This package contains two major parts: a WiMAX kernel stack and a | ||
81 | driver for the Intel i2400m. | ||
82 | |||
83 | The WiMAX stack is designed to provide for common WiMAX control | ||
84 | services to current and future WiMAX devices from any vendor; please | ||
85 | see README.wimax for details. | ||
86 | |||
87 | The i2400m kernel driver is broken up in two main parts: the bus | ||
88 | generic driver and the bus-specific drivers. The bus generic driver | ||
89 | forms the drivercore and contain no knowledge of the actual method we | ||
90 | use to connect to the device. The bus specific drivers are just the | ||
91 | glue to connect the bus-generic driver and the device. Currently only | ||
92 | USB and SDIO are supported. See drivers/net/wimax/i2400m/i2400m.h for | ||
93 | more information. | ||
94 | |||
95 | The bus generic driver is logically broken up in two parts: OS-glue and | ||
96 | hardware-glue. The OS-glue interfaces with Linux. The hardware-glue | ||
97 | interfaces with the device on using an interface provided by the | ||
98 | bus-specific driver. The reason for this breakup is to be able to | ||
99 | easily reuse the hardware-glue to write drivers for other OSes; note | ||
100 | the hardware glue part is written as a native Linux driver; no | ||
101 | abstraction layers are used, so to port to another OS, the Linux kernel | ||
102 | API calls should be replaced with the target OS's. | ||
103 | |||
104 | 5. Usage | ||
105 | |||
106 | To load the driver, follow the instructions in the install section; | ||
107 | once the driver is loaded, plug in the device (unless it is permanently | ||
108 | plugged in). The driver will enumerate the device, upload the firmware | ||
109 | and output messages in the kernel log (dmesg, /var/log/messages or | ||
110 | /var/log/kern.log) such as: | ||
111 | |||
112 | ... | ||
113 | i2400m_usb 5-4:1.0: firmware interface version 8.0.0 | ||
114 | i2400m_usb 5-4:1.0: WiMAX interface wmx0 (00:1d:e1:01:94:2c) ready | ||
115 | |||
116 | At this point the device is ready to work. | ||
117 | |||
118 | Current versions require the Intel WiMAX Network Service in userspace | ||
119 | to make things work. See the network service's README for instructions | ||
120 | on how to scan, connect and disconnect. | ||
121 | |||
122 | 5.1. Module parameters | ||
123 | |||
124 | Module parameters can be set at kernel or module load time or by | ||
125 | echoing values: | ||
126 | |||
127 | $ echo VALUE > /sys/module/MODULENAME/parameters/PARAMETERNAME | ||
128 | |||
129 | To make changes permanent, for example, for the i2400m module, you can | ||
130 | also create a file named /etc/modprobe.d/i2400m containing: | ||
131 | |||
132 | options i2400m idle_mode_disabled=1 | ||
133 | |||
134 | To find which parameters are supported by a module, run: | ||
135 | |||
136 | $ modinfo path/to/module.ko | ||
137 | |||
138 | During kernel bootup (if the driver is linked in the kernel), specify | ||
139 | the following to the kernel command line: | ||
140 | |||
141 | i2400m.PARAMETER=VALUE | ||
142 | |||
143 | 5.1.1. i2400m: idle_mode_disabled | ||
144 | |||
145 | The i2400m module supports a parameter to disable idle mode. This | ||
146 | parameter, once set, will take effect only when the device is | ||
147 | reinitialized by the driver (eg: following a reset or a reconnect). | ||
148 | |||
149 | 5.2. Debug operations: debugfs entries | ||
150 | |||
151 | The driver will register debugfs entries that allow the user to tweak | ||
152 | debug settings. There are three main container directories where | ||
153 | entries are placed, which correspond to the three blocks a i2400m WiMAX | ||
154 | driver has: | ||
155 | * /sys/kernel/debug/wimax:DEVNAME/ for the generic WiMAX stack | ||
156 | controls | ||
157 | * /sys/kernel/debug/wimax:DEVNAME/i2400m for the i2400m generic | ||
158 | driver controls | ||
159 | * /sys/kernel/debug/wimax:DEVNAME/i2400m-usb (or -sdio) for the | ||
160 | bus-specific i2400m-usb or i2400m-sdio controls). | ||
161 | |||
162 | Of course, if debugfs is mounted in a directory other than | ||
163 | /sys/kernel/debug, those paths will change. | ||
164 | |||
165 | 5.2.1. Increasing debug output | ||
166 | |||
167 | The files named *dl_* indicate knobs for controlling the debug output | ||
168 | of different submodules: | ||
169 | * | ||
170 | # find /sys/kernel/debug/wimax\:wmx0 -name \*dl_\* | ||
171 | /sys/kernel/debug/wimax:wmx0/i2400m-usb/dl_tx | ||
172 | /sys/kernel/debug/wimax:wmx0/i2400m-usb/dl_rx | ||
173 | /sys/kernel/debug/wimax:wmx0/i2400m-usb/dl_notif | ||
174 | /sys/kernel/debug/wimax:wmx0/i2400m-usb/dl_fw | ||
175 | /sys/kernel/debug/wimax:wmx0/i2400m-usb/dl_usb | ||
176 | /sys/kernel/debug/wimax:wmx0/i2400m/dl_tx | ||
177 | /sys/kernel/debug/wimax:wmx0/i2400m/dl_rx | ||
178 | /sys/kernel/debug/wimax:wmx0/i2400m/dl_rfkill | ||
179 | /sys/kernel/debug/wimax:wmx0/i2400m/dl_netdev | ||
180 | /sys/kernel/debug/wimax:wmx0/i2400m/dl_fw | ||
181 | /sys/kernel/debug/wimax:wmx0/i2400m/dl_debugfs | ||
182 | /sys/kernel/debug/wimax:wmx0/i2400m/dl_driver | ||
183 | /sys/kernel/debug/wimax:wmx0/i2400m/dl_control | ||
184 | /sys/kernel/debug/wimax:wmx0/wimax_dl_stack | ||
185 | /sys/kernel/debug/wimax:wmx0/wimax_dl_op_rfkill | ||
186 | /sys/kernel/debug/wimax:wmx0/wimax_dl_op_reset | ||
187 | /sys/kernel/debug/wimax:wmx0/wimax_dl_op_msg | ||
188 | /sys/kernel/debug/wimax:wmx0/wimax_dl_id_table | ||
189 | /sys/kernel/debug/wimax:wmx0/wimax_dl_debugfs | ||
190 | |||
191 | By reading the file you can obtain the current value of said debug | ||
192 | level; by writing to it, you can set it. | ||
193 | |||
194 | To increase the debug level of, for example, the i2400m's generic TX | ||
195 | engine, just write: | ||
196 | |||
197 | $ echo 3 > /sys/kernel/debug/wimax:wmx0/i2400m/dl_tx | ||
198 | |||
199 | Increasing numbers yield increasing debug information; for details of | ||
200 | what is printed and the available levels, check the source. The code | ||
201 | uses 0 for disabled and increasing values until 8. | ||
202 | |||
203 | 5.2.2. RX and TX statistics | ||
204 | |||
205 | The i2400m/rx_stats and i2400m/tx_stats provide statistics about the | ||
206 | data reception/delivery from the device: | ||
207 | |||
208 | $ cat /sys/kernel/debug/wimax:wmx0/i2400m/rx_stats | ||
209 | 45 1 3 34 3104 48 480 | ||
210 | |||
211 | The numbers reported are | ||
212 | * packets/RX-buffer: total, min, max | ||
213 | * RX-buffers: total RX buffers received, accumulated RX buffer size | ||
214 | in bytes, min size received, max size received | ||
215 | |||
216 | Thus, to find the average buffer size received, divide accumulated | ||
217 | RX-buffer / total RX-buffers. | ||
218 | |||
219 | To clear the statistics back to 0, write anything to the rx_stats file: | ||
220 | |||
221 | $ echo 1 > /sys/kernel/debug/wimax:wmx0/i2400m_rx_stats | ||
222 | |||
223 | Likewise for TX. | ||
224 | |||
225 | Note the packets this debug file refers to are not network packet, but | ||
226 | packets in the sense of the device-specific protocol for communication | ||
227 | to the host. See drivers/net/wimax/i2400m/tx.c. | ||
228 | |||
229 | 5.2.3. Tracing messages received from user space | ||
230 | |||
231 | To echo messages received from user space into the trace pipe that the | ||
232 | i2400m driver creates, set the debug file i2400m/trace_msg_from_user to | ||
233 | 1: | ||
234 | * | ||
235 | $ echo 1 > /sys/kernel/debug/wimax:wmx0/i2400m/trace_msg_from_user | ||
236 | |||
237 | 5.2.4. Performing a device reset | ||
238 | |||
239 | By writing a 0, a 1 or a 2 to the file | ||
240 | /sys/kernel/debug/wimax:wmx0/reset, the driver performs a warm (without | ||
241 | disconnecting from the bus), cold (disconnecting from the bus) or bus | ||
242 | (bus specific) reset on the device. | ||
243 | |||
244 | 5.2.5. Asking the device to enter power saving mode | ||
245 | |||
246 | By writing any value to the /sys/kernel/debug/wimax:wmx0 file, the | ||
247 | device will attempt to enter power saving mode. | ||
248 | |||
249 | 6. Troubleshooting | ||
250 | |||
251 | 6.1. Driver complains about 'i2400m-fw-usb-1.2.sbcf: request failed' | ||
252 | |||
253 | If upon connecting the device, the following is output in the kernel | ||
254 | log: | ||
255 | |||
256 | i2400m_usb 5-4:1.0: fw i2400m-fw-usb-1.3.sbcf: request failed: -2 | ||
257 | |||
258 | This means that the driver cannot locate the firmware file named | ||
259 | /lib/firmware/i2400m-fw-usb-1.2.sbcf. Check that the file is present in | ||
260 | the right location. | ||
diff --git a/Documentation/wimax/README.wimax b/Documentation/wimax/README.wimax new file mode 100644 index 000000000000..b78c4378084e --- /dev/null +++ b/Documentation/wimax/README.wimax | |||
@@ -0,0 +1,81 @@ | |||
1 | |||
2 | Linux kernel WiMAX stack | ||
3 | |||
4 | (C) 2008 Intel Corporation < linux-wimax@intel.com > | ||
5 | |||
6 | This provides a basic Linux kernel WiMAX stack to provide a common | ||
7 | control API for WiMAX devices, usable from kernel and user space. | ||
8 | |||
9 | 1. Design | ||
10 | |||
11 | The WiMAX stack is designed to provide for common WiMAX control | ||
12 | services to current and future WiMAX devices from any vendor. | ||
13 | |||
14 | Because currently there is only one and we don't know what would be the | ||
15 | common services, the APIs it currently provides are very minimal. | ||
16 | However, it is done in such a way that it is easily extensible to | ||
17 | accommodate future requirements. | ||
18 | |||
19 | The stack works by embedding a struct wimax_dev in your device's | ||
20 | control structures. This provides a set of callbacks that the WiMAX | ||
21 | stack will call in order to implement control operations requested by | ||
22 | the user. As well, the stack provides API functions that the driver | ||
23 | calls to notify about changes of state in the device. | ||
24 | |||
25 | The stack exports the API calls needed to control the device to user | ||
26 | space using generic netlink as a marshalling mechanism. You can access | ||
27 | them using your own code or use the wrappers provided for your | ||
28 | convenience in libwimax (in the wimax-tools package). | ||
29 | |||
30 | For detailed information on the stack, please see | ||
31 | include/linux/wimax.h. | ||
32 | |||
33 | 2. Usage | ||
34 | |||
35 | For usage in a driver (registration, API, etc) please refer to the | ||
36 | instructions in the header file include/linux/wimax.h. | ||
37 | |||
38 | When a device is registered with the WiMAX stack, a set of debugfs | ||
39 | files will appear in /sys/kernel/debug/wimax:wmxX can tweak for | ||
40 | control. | ||
41 | |||
42 | 2.1. Obtaining debug information: debugfs entries | ||
43 | |||
44 | The WiMAX stack is compiled, by default, with debug messages that can | ||
45 | be used to diagnose issues. By default, said messages are disabled. | ||
46 | |||
47 | The drivers will register debugfs entries that allow the user to tweak | ||
48 | debug settings. | ||
49 | |||
50 | Each driver, when registering with the stack, will cause a debugfs | ||
51 | directory named wimax:DEVICENAME to be created; optionally, it might | ||
52 | create more subentries below it. | ||
53 | |||
54 | 2.1.1. Increasing debug output | ||
55 | |||
56 | The files named *dl_* indicate knobs for controlling the debug output | ||
57 | of different submodules of the WiMAX stack: | ||
58 | * | ||
59 | # find /sys/kernel/debug/wimax\:wmx0 -name \*dl_\* | ||
60 | /sys/kernel/debug/wimax:wmx0/wimax_dl_stack | ||
61 | /sys/kernel/debug/wimax:wmx0/wimax_dl_op_rfkill | ||
62 | /sys/kernel/debug/wimax:wmx0/wimax_dl_op_reset | ||
63 | /sys/kernel/debug/wimax:wmx0/wimax_dl_op_msg | ||
64 | /sys/kernel/debug/wimax:wmx0/wimax_dl_id_table | ||
65 | /sys/kernel/debug/wimax:wmx0/wimax_dl_debugfs | ||
66 | /sys/kernel/debug/wimax:wmx0/.... # other driver specific files | ||
67 | |||
68 | NOTE: Of course, if debugfs is mounted in a directory other than | ||
69 | /sys/kernel/debug, those paths will change. | ||
70 | |||
71 | By reading the file you can obtain the current value of said debug | ||
72 | level; by writing to it, you can set it. | ||
73 | |||
74 | To increase the debug level of, for example, the id-table submodule, | ||
75 | just write: | ||
76 | |||
77 | $ echo 3 > /sys/kernel/debug/wimax:wmx0/wimax_dl_id_table | ||
78 | |||
79 | Increasing numbers yield increasing debug information; for details of | ||
80 | what is printed and the available levels, check the source. The code | ||
81 | uses 0 for disabled and increasing values until 8. | ||
diff --git a/Documentation/x86/boot.txt b/Documentation/x86/boot.txt index fcdc62b3c3d8..7b4596ac4120 100644 --- a/Documentation/x86/boot.txt +++ b/Documentation/x86/boot.txt | |||
@@ -44,7 +44,7 @@ Protocol 2.07: (Kernel 2.6.24) Added paravirtualised boot protocol. | |||
44 | and KEEP_SEGMENTS flag in load_flags. | 44 | and KEEP_SEGMENTS flag in load_flags. |
45 | 45 | ||
46 | Protocol 2.08: (Kernel 2.6.26) Added crc32 checksum and ELF format | 46 | Protocol 2.08: (Kernel 2.6.26) Added crc32 checksum and ELF format |
47 | payload. Introduced payload_offset and payload length | 47 | payload. Introduced payload_offset and payload_length |
48 | fields to aid in locating the payload. | 48 | fields to aid in locating the payload. |
49 | 49 | ||
50 | Protocol 2.09: (Kernel 2.6.26) Added a field of 64-bit physical | 50 | Protocol 2.09: (Kernel 2.6.26) Added a field of 64-bit physical |
diff --git a/Documentation/x86/zero-page.txt b/Documentation/x86/zero-page.txt index 169ad423a3d1..4f913857b8a2 100644 --- a/Documentation/x86/zero-page.txt +++ b/Documentation/x86/zero-page.txt | |||
@@ -3,7 +3,7 @@ protocol of kernel. These should be filled by bootloader or 16-bit | |||
3 | real-mode setup code of the kernel. References/settings to it mainly | 3 | real-mode setup code of the kernel. References/settings to it mainly |
4 | are in: | 4 | are in: |
5 | 5 | ||
6 | include/asm-x86/bootparam.h | 6 | arch/x86/include/asm/bootparam.h |
7 | 7 | ||
8 | 8 | ||
9 | Offset Proto Name Meaning | 9 | Offset Proto Name Meaning |