diff options
Diffstat (limited to 'Documentation')
85 files changed, 4016 insertions, 1668 deletions
diff --git a/Documentation/00-INDEX b/Documentation/00-INDEX index 5405f7aecefc..8dfc6708a257 100644 --- a/Documentation/00-INDEX +++ b/Documentation/00-INDEX | |||
@@ -130,8 +130,6 @@ edac.txt | |||
130 | - information on EDAC - Error Detection And Correction | 130 | - information on EDAC - Error Detection And Correction |
131 | eisa.txt | 131 | eisa.txt |
132 | - info on EISA bus support. | 132 | - info on EISA bus support. |
133 | exception.txt | ||
134 | - how Linux v2.2 handles exceptions without verify_area etc. | ||
135 | fault-injection/ | 133 | fault-injection/ |
136 | - dir with docs about the fault injection capabilities infrastructure. | 134 | - dir with docs about the fault injection capabilities infrastructure. |
137 | fb/ | 135 | fb/ |
@@ -234,6 +232,8 @@ memory.txt | |||
234 | - info on typical Linux memory problems. | 232 | - info on typical Linux memory problems. |
235 | mips/ | 233 | mips/ |
236 | - directory with info about Linux on MIPS architecture. | 234 | - directory with info about Linux on MIPS architecture. |
235 | mmc/ | ||
236 | - directory with info about the MMC subsystem | ||
237 | mono.txt | 237 | mono.txt |
238 | - how to execute Mono-based .NET binaries with the help of BINFMT_MISC. | 238 | - how to execute Mono-based .NET binaries with the help of BINFMT_MISC. |
239 | mutex-design.txt | 239 | mutex-design.txt |
diff --git a/Documentation/ABI/testing/debugfs-kmemtrace b/Documentation/ABI/testing/debugfs-kmemtrace deleted file mode 100644 index 5e6a92a02d85..000000000000 --- a/Documentation/ABI/testing/debugfs-kmemtrace +++ /dev/null | |||
@@ -1,71 +0,0 @@ | |||
1 | What: /sys/kernel/debug/kmemtrace/ | ||
2 | Date: July 2008 | ||
3 | Contact: Eduard - Gabriel Munteanu <eduard.munteanu@linux360.ro> | ||
4 | Description: | ||
5 | |||
6 | In kmemtrace-enabled kernels, the following files are created: | ||
7 | |||
8 | /sys/kernel/debug/kmemtrace/ | ||
9 | cpu<n> (0400) Per-CPU tracing data, see below. (binary) | ||
10 | total_overruns (0400) Total number of bytes which were dropped from | ||
11 | cpu<n> files because of full buffer condition, | ||
12 | non-binary. (text) | ||
13 | abi_version (0400) Kernel's kmemtrace ABI version. (text) | ||
14 | |||
15 | Each per-CPU file should be read according to the relay interface. That is, | ||
16 | the reader should set affinity to that specific CPU and, as currently done by | ||
17 | the userspace application (though there are other methods), use poll() with | ||
18 | an infinite timeout before every read(). Otherwise, erroneous data may be | ||
19 | read. The binary data has the following _core_ format: | ||
20 | |||
21 | Event ID (1 byte) Unsigned integer, one of: | ||
22 | 0 - represents an allocation (KMEMTRACE_EVENT_ALLOC) | ||
23 | 1 - represents a freeing of previously allocated memory | ||
24 | (KMEMTRACE_EVENT_FREE) | ||
25 | Type ID (1 byte) Unsigned integer, one of: | ||
26 | 0 - this is a kmalloc() / kfree() | ||
27 | 1 - this is a kmem_cache_alloc() / kmem_cache_free() | ||
28 | 2 - this is a __get_free_pages() et al. | ||
29 | Event size (2 bytes) Unsigned integer representing the | ||
30 | size of this event. Used to extend | ||
31 | kmemtrace. Discard the bytes you | ||
32 | don't know about. | ||
33 | Sequence number (4 bytes) Signed integer used to reorder data | ||
34 | logged on SMP machines. Wraparound | ||
35 | must be taken into account, although | ||
36 | it is unlikely. | ||
37 | Caller address (8 bytes) Return address to the caller. | ||
38 | Pointer to mem (8 bytes) Pointer to target memory area. Can be | ||
39 | NULL, but not all such calls might be | ||
40 | recorded. | ||
41 | |||
42 | In case of KMEMTRACE_EVENT_ALLOC events, the next fields follow: | ||
43 | |||
44 | Requested bytes (8 bytes) Total number of requested bytes, | ||
45 | unsigned, must not be zero. | ||
46 | Allocated bytes (8 bytes) Total number of actually allocated | ||
47 | bytes, unsigned, must not be lower | ||
48 | than requested bytes. | ||
49 | Requested flags (4 bytes) GFP flags supplied by the caller. | ||
50 | Target CPU (4 bytes) Signed integer, valid for event id 1. | ||
51 | If equal to -1, target CPU is the same | ||
52 | as origin CPU, but the reverse might | ||
53 | not be true. | ||
54 | |||
55 | The data is made available in the same endianness the machine has. | ||
56 | |||
57 | Other event ids and type ids may be defined and added. Other fields may be | ||
58 | added by increasing event size, but see below for details. | ||
59 | Every modification to the ABI, including new id definitions, are followed | ||
60 | by bumping the ABI version by one. | ||
61 | |||
62 | Adding new data to the packet (features) is done at the end of the mandatory | ||
63 | data: | ||
64 | Feature size (2 byte) | ||
65 | Feature ID (1 byte) | ||
66 | Feature data (Feature size - 3 bytes) | ||
67 | |||
68 | |||
69 | Users: | ||
70 | kmemtrace-user - git://repo.or.cz/kmemtrace-user.git | ||
71 | |||
diff --git a/Documentation/ABI/testing/sysfs-bus-i2c-devices-hm6352 b/Documentation/ABI/testing/sysfs-bus-i2c-devices-hm6352 new file mode 100644 index 000000000000..feb2e4a87075 --- /dev/null +++ b/Documentation/ABI/testing/sysfs-bus-i2c-devices-hm6352 | |||
@@ -0,0 +1,21 @@ | |||
1 | Where: /sys/bus/i2c/devices/.../heading0_input | ||
2 | Date: April 2010 | ||
3 | Kernel Version: 2.6.36? | ||
4 | Contact: alan.cox@intel.com | ||
5 | Description: Reports the current heading from the compass as a floating | ||
6 | point value in degrees. | ||
7 | |||
8 | Where: /sys/bus/i2c/devices/.../power_state | ||
9 | Date: April 2010 | ||
10 | Kernel Version: 2.6.36? | ||
11 | Contact: alan.cox@intel.com | ||
12 | Description: Sets the power state of the device. 0 sets the device into | ||
13 | sleep mode, 1 wakes it up. | ||
14 | |||
15 | Where: /sys/bus/i2c/devices/.../calibration | ||
16 | Date: April 2010 | ||
17 | Kernel Version: 2.6.36? | ||
18 | Contact: alan.cox@intel.com | ||
19 | Description: Sets the calibration on or off (1 = on, 0 = off). See the | ||
20 | chip data sheet. | ||
21 | |||
diff --git a/Documentation/ABI/testing/sysfs-bus-pci b/Documentation/ABI/testing/sysfs-bus-pci index 25be3250f7d6..f979d825d112 100644 --- a/Documentation/ABI/testing/sysfs-bus-pci +++ b/Documentation/ABI/testing/sysfs-bus-pci | |||
@@ -139,3 +139,30 @@ Contact: linux-pci@vger.kernel.org | |||
139 | Description: | 139 | Description: |
140 | This symbolic link points to the PCI hotplug controller driver | 140 | This symbolic link points to the PCI hotplug controller driver |
141 | module that manages the hotplug slot. | 141 | module that manages the hotplug slot. |
142 | |||
143 | What: /sys/bus/pci/devices/.../label | ||
144 | Date: July 2010 | ||
145 | Contact: Narendra K <narendra_k@dell.com>, linux-bugs@dell.com | ||
146 | Description: | ||
147 | Reading this attribute will provide the firmware | ||
148 | given name(SMBIOS type 41 string) of the PCI device. | ||
149 | The attribute will be created only if the firmware | ||
150 | has given a name to the PCI device. | ||
151 | Users: | ||
152 | Userspace applications interested in knowing the | ||
153 | firmware assigned name of the PCI device. | ||
154 | |||
155 | What: /sys/bus/pci/devices/.../index | ||
156 | Date: July 2010 | ||
157 | Contact: Narendra K <narendra_k@dell.com>, linux-bugs@dell.com | ||
158 | Description: | ||
159 | Reading this attribute will provide the firmware | ||
160 | given instance(SMBIOS type 41 device type instance) | ||
161 | of the PCI device. The attribute will be created | ||
162 | only if the firmware has given a device type instance | ||
163 | to the PCI device. | ||
164 | Users: | ||
165 | Userspace applications interested in knowing the | ||
166 | firmware assigned device type instance of the PCI | ||
167 | device that can help in understanding the firmware | ||
168 | intended order of the PCI device. | ||
diff --git a/Documentation/ABI/testing/sysfs-devices-platform-_UDC_-gadget b/Documentation/ABI/testing/sysfs-devices-platform-_UDC_-gadget index 34034027b13c..d548eaac230a 100644 --- a/Documentation/ABI/testing/sysfs-devices-platform-_UDC_-gadget +++ b/Documentation/ABI/testing/sysfs-devices-platform-_UDC_-gadget | |||
@@ -7,3 +7,15 @@ Description: | |||
7 | 0 -> resumed | 7 | 0 -> resumed |
8 | 8 | ||
9 | (_UDC_ is the name of the USB Device Controller driver) | 9 | (_UDC_ is the name of the USB Device Controller driver) |
10 | |||
11 | What: /sys/devices/platform/_UDC_/gadget/gadget-lunX/nofua | ||
12 | Date: July 2010 | ||
13 | Contact: Andy Shevchenko <andy.shevchenko@gmail.com> | ||
14 | Description: | ||
15 | Show or set the reaction on the FUA (Force Unit Access) bit in | ||
16 | the SCSI WRITE(10,12) commands when a gadget in USB Mass | ||
17 | Storage mode. | ||
18 | |||
19 | Possible values are: | ||
20 | 1 -> ignore the FUA flag | ||
21 | 0 -> obey the FUA flag | ||
diff --git a/Documentation/ABI/testing/sysfs-i2c-bmp085 b/Documentation/ABI/testing/sysfs-i2c-bmp085 new file mode 100644 index 000000000000..585962ad0465 --- /dev/null +++ b/Documentation/ABI/testing/sysfs-i2c-bmp085 | |||
@@ -0,0 +1,31 @@ | |||
1 | What: /sys/bus/i2c/devices/<busnum>-<devaddr>/pressure0_input | ||
2 | Date: June 2010 | ||
3 | Contact: Christoph Mair <christoph.mair@gmail.com> | ||
4 | Description: Start a pressure measurement and read the result. Values | ||
5 | represent the ambient air pressure in pascal (0.01 millibar). | ||
6 | |||
7 | Reading: returns the current air pressure. | ||
8 | |||
9 | |||
10 | What: /sys/bus/i2c/devices/<busnum>-<devaddr>/temp0_input | ||
11 | Date: June 2010 | ||
12 | Contact: Christoph Mair <christoph.mair@gmail.com> | ||
13 | Description: Measure the ambient temperature. The returned value represents | ||
14 | the ambient temperature in units of 0.1 degree celsius. | ||
15 | |||
16 | Reading: returns the current temperature. | ||
17 | |||
18 | |||
19 | What: /sys/bus/i2c/devices/<busnum>-<devaddr>/oversampling | ||
20 | Date: June 2010 | ||
21 | Contact: Christoph Mair <christoph.mair@gmail.com> | ||
22 | Description: Tell the bmp085 to use more samples to calculate a pressure | ||
23 | value. When writing to this file the chip will use 2^x samples | ||
24 | to calculate the next pressure value with x being the value | ||
25 | written. Using this feature will decrease RMS noise and | ||
26 | increase the measurement time. | ||
27 | |||
28 | Reading: returns the current oversampling setting. | ||
29 | |||
30 | Writing: sets a new oversampling setting. | ||
31 | Accepted values: 0..3. | ||
diff --git a/Documentation/DMA-API-HOWTO.txt b/Documentation/DMA-API-HOWTO.txt index 98ce51796f71..d568bc235bc0 100644 --- a/Documentation/DMA-API-HOWTO.txt +++ b/Documentation/DMA-API-HOWTO.txt | |||
@@ -738,21 +738,31 @@ to "Closing". | |||
738 | CONFIG_NEED_SG_DMA_LENGTH if the architecture supports IOMMUs | 738 | CONFIG_NEED_SG_DMA_LENGTH if the architecture supports IOMMUs |
739 | (including software IOMMU). | 739 | (including software IOMMU). |
740 | 740 | ||
741 | 2) ARCH_KMALLOC_MINALIGN | 741 | 2) ARCH_DMA_MINALIGN |
742 | 742 | ||
743 | Architectures must ensure that kmalloc'ed buffer is | 743 | Architectures must ensure that kmalloc'ed buffer is |
744 | DMA-safe. Drivers and subsystems depend on it. If an architecture | 744 | DMA-safe. Drivers and subsystems depend on it. If an architecture |
745 | isn't fully DMA-coherent (i.e. hardware doesn't ensure that data in | 745 | isn't fully DMA-coherent (i.e. hardware doesn't ensure that data in |
746 | the CPU cache is identical to data in main memory), | 746 | the CPU cache is identical to data in main memory), |
747 | ARCH_KMALLOC_MINALIGN must be set so that the memory allocator | 747 | ARCH_DMA_MINALIGN must be set so that the memory allocator |
748 | makes sure that kmalloc'ed buffer doesn't share a cache line with | 748 | makes sure that kmalloc'ed buffer doesn't share a cache line with |
749 | the others. See arch/arm/include/asm/cache.h as an example. | 749 | the others. See arch/arm/include/asm/cache.h as an example. |
750 | 750 | ||
751 | Note that ARCH_KMALLOC_MINALIGN is about DMA memory alignment | 751 | Note that ARCH_DMA_MINALIGN is about DMA memory alignment |
752 | constraints. You don't need to worry about the architecture data | 752 | constraints. You don't need to worry about the architecture data |
753 | alignment constraints (e.g. the alignment constraints about 64-bit | 753 | alignment constraints (e.g. the alignment constraints about 64-bit |
754 | objects). | 754 | objects). |
755 | 755 | ||
756 | 3) Supporting multiple types of IOMMUs | ||
757 | |||
758 | If your architecture needs to support multiple types of IOMMUs, you | ||
759 | can use include/linux/asm-generic/dma-mapping-common.h. It's a | ||
760 | library to support the DMA API with multiple types of IOMMUs. Lots | ||
761 | of architectures (x86, powerpc, sh, alpha, ia64, microblaze and | ||
762 | sparc) use it. Choose one to see how it can be used. If you need to | ||
763 | support multiple types of IOMMUs in a single system, the example of | ||
764 | x86 or powerpc helps. | ||
765 | |||
756 | Closing | 766 | Closing |
757 | 767 | ||
758 | This document, and the API itself, would not be in its current | 768 | This document, and the API itself, would not be in its current |
diff --git a/Documentation/DMA-API.txt b/Documentation/DMA-API.txt index 05e2ae236865..fe2326906610 100644 --- a/Documentation/DMA-API.txt +++ b/Documentation/DMA-API.txt | |||
@@ -456,12 +456,6 @@ be identical to those passed in (and returned by | |||
456 | dma_alloc_noncoherent()). | 456 | dma_alloc_noncoherent()). |
457 | 457 | ||
458 | int | 458 | int |
459 | dma_is_consistent(struct device *dev, dma_addr_t dma_handle) | ||
460 | |||
461 | Returns true if the device dev is performing consistent DMA on the memory | ||
462 | area pointed to by the dma_handle. | ||
463 | |||
464 | int | ||
465 | dma_get_cache_alignment(void) | 459 | dma_get_cache_alignment(void) |
466 | 460 | ||
467 | Returns the processor cache alignment. This is the absolute minimum | 461 | Returns the processor cache alignment. This is the absolute minimum |
diff --git a/Documentation/DocBook/Makefile b/Documentation/DocBook/Makefile index b6f2ba2f36b7..8b6e00a71034 100644 --- a/Documentation/DocBook/Makefile +++ b/Documentation/DocBook/Makefile | |||
@@ -35,7 +35,7 @@ PS_METHOD = $(prefer-db2x) | |||
35 | PHONY += xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs cleandocs xmldoclinks | 35 | PHONY += xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs cleandocs xmldoclinks |
36 | 36 | ||
37 | BOOKS := $(addprefix $(obj)/,$(DOCBOOKS)) | 37 | BOOKS := $(addprefix $(obj)/,$(DOCBOOKS)) |
38 | xmldocs: $(BOOKS) xmldoclinks | 38 | xmldocs: $(BOOKS) |
39 | sgmldocs: xmldocs | 39 | sgmldocs: xmldocs |
40 | 40 | ||
41 | PS := $(patsubst %.xml, %.ps, $(BOOKS)) | 41 | PS := $(patsubst %.xml, %.ps, $(BOOKS)) |
@@ -45,7 +45,7 @@ PDF := $(patsubst %.xml, %.pdf, $(BOOKS)) | |||
45 | pdfdocs: $(PDF) | 45 | pdfdocs: $(PDF) |
46 | 46 | ||
47 | HTML := $(sort $(patsubst %.xml, %.html, $(BOOKS))) | 47 | HTML := $(sort $(patsubst %.xml, %.html, $(BOOKS))) |
48 | htmldocs: $(HTML) | 48 | htmldocs: $(HTML) xmldoclinks |
49 | $(call build_main_index) | 49 | $(call build_main_index) |
50 | $(call build_images) | 50 | $(call build_images) |
51 | 51 | ||
@@ -95,7 +95,7 @@ define rule_docproc | |||
95 | ) > $(dir $@).$(notdir $@).cmd | 95 | ) > $(dir $@).$(notdir $@).cmd |
96 | endef | 96 | endef |
97 | 97 | ||
98 | %.xml: %.tmpl FORCE | 98 | %.xml: %.tmpl xmldoclinks FORCE |
99 | $(call if_changed_rule,docproc) | 99 | $(call if_changed_rule,docproc) |
100 | 100 | ||
101 | ### | 101 | ### |
diff --git a/Documentation/DocBook/device-drivers.tmpl b/Documentation/DocBook/device-drivers.tmpl index 1b2dd4fc3db2..ecd35e9d4410 100644 --- a/Documentation/DocBook/device-drivers.tmpl +++ b/Documentation/DocBook/device-drivers.tmpl | |||
@@ -111,6 +111,7 @@ X!Edrivers/base/attribute_container.c | |||
111 | <!-- | 111 | <!-- |
112 | X!Edrivers/base/interface.c | 112 | X!Edrivers/base/interface.c |
113 | --> | 113 | --> |
114 | !Iinclude/linux/platform_device.h | ||
114 | !Edrivers/base/platform.c | 115 | !Edrivers/base/platform.c |
115 | !Edrivers/base/bus.c | 116 | !Edrivers/base/bus.c |
116 | </sect1> | 117 | </sect1> |
diff --git a/Documentation/DocBook/kernel-api.tmpl b/Documentation/DocBook/kernel-api.tmpl index 44b3def961a2..a20c6f6fffc3 100644 --- a/Documentation/DocBook/kernel-api.tmpl +++ b/Documentation/DocBook/kernel-api.tmpl | |||
@@ -132,7 +132,6 @@ X!Ilib/string.c | |||
132 | <title>FIFO Buffer</title> | 132 | <title>FIFO Buffer</title> |
133 | <sect1><title>kfifo interface</title> | 133 | <sect1><title>kfifo interface</title> |
134 | !Iinclude/linux/kfifo.h | 134 | !Iinclude/linux/kfifo.h |
135 | !Ekernel/kfifo.c | ||
136 | </sect1> | 135 | </sect1> |
137 | </chapter> | 136 | </chapter> |
138 | 137 | ||
diff --git a/Documentation/DocBook/kgdb.tmpl b/Documentation/DocBook/kgdb.tmpl index 55f12ac37acd..490d862c5f0d 100644 --- a/Documentation/DocBook/kgdb.tmpl +++ b/Documentation/DocBook/kgdb.tmpl | |||
@@ -199,10 +199,33 @@ | |||
199 | may be configured as a kernel built-in or a kernel loadable module. | 199 | may be configured as a kernel built-in or a kernel loadable module. |
200 | You can only make use of <constant>kgdbwait</constant> and early | 200 | You can only make use of <constant>kgdbwait</constant> and early |
201 | debugging if you build kgdboc into the kernel as a built-in. | 201 | debugging if you build kgdboc into the kernel as a built-in. |
202 | <para>Optionally you can elect to activate kms (Kernel Mode | ||
203 | Setting) integration. When you use kms with kgdboc and you have a | ||
204 | video driver that has atomic mode setting hooks, it is possible to | ||
205 | enter the debugger on the graphics console. When the kernel | ||
206 | execution is resumed, the previous graphics mode will be restored. | ||
207 | This integration can serve as a useful tool to aid in diagnosing | ||
208 | crashes or doing analysis of memory with kdb while allowing the | ||
209 | full graphics console applications to run. | ||
210 | </para> | ||
202 | </para> | 211 | </para> |
203 | <sect2 id="kgdbocArgs"> | 212 | <sect2 id="kgdbocArgs"> |
204 | <title>kgdboc arguments</title> | 213 | <title>kgdboc arguments</title> |
205 | <para>Usage: <constant>kgdboc=[kbd][[,]serial_device][,baud]</constant></para> | 214 | <para>Usage: <constant>kgdboc=[kms][[,]kbd][[,]serial_device][,baud]</constant></para> |
215 | <para>The order listed above must be observed if you use any of the | ||
216 | optional configurations together. | ||
217 | </para> | ||
218 | <para>Abbreviations: | ||
219 | <itemizedlist> | ||
220 | <listitem><para>kms = Kernel Mode Setting</para></listitem> | ||
221 | <listitem><para>kbd = Keyboard</para></listitem> | ||
222 | </itemizedlist> | ||
223 | </para> | ||
224 | <para>You can configure kgdboc to use the keyboard, and or a serial | ||
225 | device depending on if you are using kdb and or kgdb, in one of the | ||
226 | following scenarios. The order listed above must be observed if | ||
227 | you use any of the optional configurations together. Using kms + | ||
228 | only gdb is generally not a useful combination.</para> | ||
206 | <sect3 id="kgdbocArgs1"> | 229 | <sect3 id="kgdbocArgs1"> |
207 | <title>Using loadable module or built-in</title> | 230 | <title>Using loadable module or built-in</title> |
208 | <para> | 231 | <para> |
@@ -212,7 +235,7 @@ | |||
212 | <listitem> | 235 | <listitem> |
213 | <para>As a kernel loadable module:</para> | 236 | <para>As a kernel loadable module:</para> |
214 | <para>Use the command: <constant>modprobe kgdboc kgdboc=<tty-device>,[baud]</constant></para> | 237 | <para>Use the command: <constant>modprobe kgdboc kgdboc=<tty-device>,[baud]</constant></para> |
215 | <para>Here are two examples of how you might formate the kgdboc | 238 | <para>Here are two examples of how you might format the kgdboc |
216 | string. The first is for an x86 target using the first serial port. | 239 | string. The first is for an x86 target using the first serial port. |
217 | The second example is for the ARM Versatile AB using the second | 240 | The second example is for the ARM Versatile AB using the second |
218 | serial port. | 241 | serial port. |
@@ -240,6 +263,9 @@ | |||
240 | </sect3> | 263 | </sect3> |
241 | <sect3 id="kgdbocArgs3"> | 264 | <sect3 id="kgdbocArgs3"> |
242 | <title>More examples</title> | 265 | <title>More examples</title> |
266 | <para>You can configure kgdboc to use the keyboard, and or a serial | ||
267 | device depending on if you are using kdb and or kgdb, in one of the | ||
268 | following scenarios.</para> | ||
243 | <para>You can configure kgdboc to use the keyboard, and or a serial device | 269 | <para>You can configure kgdboc to use the keyboard, and or a serial device |
244 | depending on if you are using kdb and or kgdb, in one of the | 270 | depending on if you are using kdb and or kgdb, in one of the |
245 | following scenarios. | 271 | following scenarios. |
@@ -255,6 +281,12 @@ | |||
255 | <listitem><para>kdb with a keyboard</para> | 281 | <listitem><para>kdb with a keyboard</para> |
256 | <para><constant>kgdboc=kbd</constant></para> | 282 | <para><constant>kgdboc=kbd</constant></para> |
257 | </listitem> | 283 | </listitem> |
284 | <listitem><para>kdb with kernel mode setting</para> | ||
285 | <para><constant>kgdboc=kms,kbd</constant></para> | ||
286 | </listitem> | ||
287 | <listitem><para>kdb with kernel mode setting and kgdb over a serial port</para> | ||
288 | <para><constant>kgdboc=kms,kbd,ttyS0,115200</constant></para> | ||
289 | </listitem> | ||
258 | </orderedlist> | 290 | </orderedlist> |
259 | </para> | 291 | </para> |
260 | </sect3> | 292 | </sect3> |
@@ -637,6 +669,8 @@ Task Addr Pid Parent [*] cpu State Thread Command | |||
637 | <listitem><para>The logic to perform safe memory reads and writes to memory while using the debugger</para></listitem> | 669 | <listitem><para>The logic to perform safe memory reads and writes to memory while using the debugger</para></listitem> |
638 | <listitem><para>A full implementation for software breakpoints unless overridden by the arch</para></listitem> | 670 | <listitem><para>A full implementation for software breakpoints unless overridden by the arch</para></listitem> |
639 | <listitem><para>The API to invoke either the kdb or kgdb frontend to the debug core.</para></listitem> | 671 | <listitem><para>The API to invoke either the kdb or kgdb frontend to the debug core.</para></listitem> |
672 | <listitem><para>The structures and callback API for atomic kernel mode setting.</para> | ||
673 | <para>NOTE: kgdboc is where the kms callbacks are invoked.</para></listitem> | ||
640 | </itemizedlist> | 674 | </itemizedlist> |
641 | </para> | 675 | </para> |
642 | </listitem> | 676 | </listitem> |
@@ -747,6 +781,8 @@ Task Addr Pid Parent [*] cpu State Thread Command | |||
747 | </sect1> | 781 | </sect1> |
748 | <sect1 id="kgdbocDesign"> | 782 | <sect1 id="kgdbocDesign"> |
749 | <title>kgdboc internals</title> | 783 | <title>kgdboc internals</title> |
784 | <sect2> | ||
785 | <title>kgdboc and uarts</title> | ||
750 | <para> | 786 | <para> |
751 | The kgdboc driver is actually a very thin driver that relies on the | 787 | The kgdboc driver is actually a very thin driver that relies on the |
752 | underlying low level to the hardware driver having "polling hooks" | 788 | underlying low level to the hardware driver having "polling hooks" |
@@ -754,11 +790,8 @@ Task Addr Pid Parent [*] cpu State Thread Command | |||
754 | implementation of kgdboc it the serial_core was changed to expose a | 790 | implementation of kgdboc it the serial_core was changed to expose a |
755 | low level UART hook for doing polled mode reading and writing of a | 791 | low level UART hook for doing polled mode reading and writing of a |
756 | single character while in an atomic context. When kgdb makes an I/O | 792 | single character while in an atomic context. When kgdb makes an I/O |
757 | request to the debugger, kgdboc invokes a call back in the serial | 793 | request to the debugger, kgdboc invokes a callback in the serial |
758 | core which in turn uses the call back in the UART driver. It is | 794 | core which in turn uses the callback in the UART driver.</para> |
759 | certainly possible to extend kgdboc to work with non-UART based | ||
760 | consoles in the future. | ||
761 | </para> | ||
762 | <para> | 795 | <para> |
763 | When using kgdboc with a UART, the UART driver must implement two callbacks in the <constant>struct uart_ops</constant>. Example from drivers/8250.c:<programlisting> | 796 | When using kgdboc with a UART, the UART driver must implement two callbacks in the <constant>struct uart_ops</constant>. Example from drivers/8250.c:<programlisting> |
764 | #ifdef CONFIG_CONSOLE_POLL | 797 | #ifdef CONFIG_CONSOLE_POLL |
@@ -772,9 +805,68 @@ Task Addr Pid Parent [*] cpu State Thread Command | |||
772 | that they can be called from an atomic context and have to restore | 805 | that they can be called from an atomic context and have to restore |
773 | the state of the UART chip on return such that the system can return | 806 | the state of the UART chip on return such that the system can return |
774 | to normal when the debugger detaches. You need to be very careful | 807 | to normal when the debugger detaches. You need to be very careful |
775 | with any kind of lock you consider, because failing here is most | 808 | with any kind of lock you consider, because failing here is most likely |
776 | going to mean pressing the reset button. | 809 | going to mean pressing the reset button. |
777 | </para> | 810 | </para> |
811 | </sect2> | ||
812 | <sect2 id="kgdbocKbd"> | ||
813 | <title>kgdboc and keyboards</title> | ||
814 | <para>The kgdboc driver contains logic to configure communications | ||
815 | with an attached keyboard. The keyboard infrastructure is only | ||
816 | compiled into the kernel when CONFIG_KDB_KEYBOARD=y is set in the | ||
817 | kernel configuration.</para> | ||
818 | <para>The core polled keyboard driver driver for PS/2 type keyboards | ||
819 | is in drivers/char/kdb_keyboard.c. This driver is hooked into the | ||
820 | debug core when kgdboc populates the callback in the array | ||
821 | called <constant>kdb_poll_funcs[]</constant>. The | ||
822 | kdb_get_kbd_char() is the top-level function which polls hardware | ||
823 | for single character input. | ||
824 | </para> | ||
825 | </sect2> | ||
826 | <sect2 id="kgdbocKms"> | ||
827 | <title>kgdboc and kms</title> | ||
828 | <para>The kgdboc driver contains logic to request the graphics | ||
829 | display to switch to a text context when you are using | ||
830 | "kgdboc=kms,kbd", provided that you have a video driver which has a | ||
831 | frame buffer console and atomic kernel mode setting support.</para> | ||
832 | <para> | ||
833 | Every time the kernel | ||
834 | debugger is entered it calls kgdboc_pre_exp_handler() which in turn | ||
835 | calls con_debug_enter() in the virtual console layer. On resuming kernel | ||
836 | execution, the kernel debugger calls kgdboc_post_exp_handler() which | ||
837 | in turn calls con_debug_leave().</para> | ||
838 | <para>Any video driver that wants to be compatible with the kernel | ||
839 | debugger and the atomic kms callbacks must implement the | ||
840 | mode_set_base_atomic, fb_debug_enter and fb_debug_leave operations. | ||
841 | For the fb_debug_enter and fb_debug_leave the option exists to use | ||
842 | the generic drm fb helper functions or implement something custom for | ||
843 | the hardware. The following example shows the initialization of the | ||
844 | .mode_set_base_atomic operation in | ||
845 | drivers/gpu/drm/i915/intel_display.c: | ||
846 | <informalexample> | ||
847 | <programlisting> | ||
848 | static const struct drm_crtc_helper_funcs intel_helper_funcs = { | ||
849 | [...] | ||
850 | .mode_set_base_atomic = intel_pipe_set_base_atomic, | ||
851 | [...] | ||
852 | }; | ||
853 | </programlisting> | ||
854 | </informalexample> | ||
855 | </para> | ||
856 | <para>Here is an example of how the i915 driver initializes the fb_debug_enter and fb_debug_leave functions to use the generic drm helpers in | ||
857 | drivers/gpu/drm/i915/intel_fb.c: | ||
858 | <informalexample> | ||
859 | <programlisting> | ||
860 | static struct fb_ops intelfb_ops = { | ||
861 | [...] | ||
862 | .fb_debug_enter = drm_fb_helper_debug_enter, | ||
863 | .fb_debug_leave = drm_fb_helper_debug_leave, | ||
864 | [...] | ||
865 | }; | ||
866 | </programlisting> | ||
867 | </informalexample> | ||
868 | </para> | ||
869 | </sect2> | ||
778 | </sect1> | 870 | </sect1> |
779 | </chapter> | 871 | </chapter> |
780 | <chapter id="credits"> | 872 | <chapter id="credits"> |
diff --git a/Documentation/DocBook/stylesheet.xsl b/Documentation/DocBook/stylesheet.xsl index 254c1d5d2e50..85b25275196f 100644 --- a/Documentation/DocBook/stylesheet.xsl +++ b/Documentation/DocBook/stylesheet.xsl | |||
@@ -6,4 +6,5 @@ | |||
6 | <param name="callout.graphics">0</param> | 6 | <param name="callout.graphics">0</param> |
7 | <!-- <param name="paper.type">A4</param> --> | 7 | <!-- <param name="paper.type">A4</param> --> |
8 | <param name="generate.section.toc.level">2</param> | 8 | <param name="generate.section.toc.level">2</param> |
9 | <param name="use.id.as.filename">1</param> | ||
9 | </stylesheet> | 10 | </stylesheet> |
diff --git a/Documentation/DocBook/v4l/lirc_device_interface.xml b/Documentation/DocBook/v4l/lirc_device_interface.xml index 0413234023d4..68134c0ab4d1 100644 --- a/Documentation/DocBook/v4l/lirc_device_interface.xml +++ b/Documentation/DocBook/v4l/lirc_device_interface.xml | |||
@@ -229,6 +229,22 @@ on working with the default settings initially.</para> | |||
229 | and LIRC_SETUP_END. Drivers can also choose to ignore these ioctls.</para> | 229 | and LIRC_SETUP_END. Drivers can also choose to ignore these ioctls.</para> |
230 | </listitem> | 230 | </listitem> |
231 | </varlistentry> | 231 | </varlistentry> |
232 | <varlistentry> | ||
233 | <term>LIRC_SET_WIDEBAND_RECEIVER</term> | ||
234 | <listitem> | ||
235 | <para>Some receivers are equipped with special wide band receiver which is intended | ||
236 | to be used to learn output of existing remote. | ||
237 | Calling that ioctl with (1) will enable it, and with (0) disable it. | ||
238 | This might be useful of receivers that have otherwise narrow band receiver | ||
239 | that prevents them to be used with some remotes. | ||
240 | Wide band receiver might also be more precise | ||
241 | On the other hand its disadvantage it usually reduced range of reception. | ||
242 | Note: wide band receiver might be implictly enabled if you enable | ||
243 | carrier reports. In that case it will be disabled as soon as you disable | ||
244 | carrier reports. Trying to disable wide band receiver while carrier | ||
245 | reports are active will do nothing.</para> | ||
246 | </listitem> | ||
247 | </varlistentry> | ||
232 | </variablelist> | 248 | </variablelist> |
233 | 249 | ||
234 | </section> | 250 | </section> |
diff --git a/Documentation/DocBook/v4l/pixfmt-packed-rgb.xml b/Documentation/DocBook/v4l/pixfmt-packed-rgb.xml index d2dd697a81d8..26e879231088 100644 --- a/Documentation/DocBook/v4l/pixfmt-packed-rgb.xml +++ b/Documentation/DocBook/v4l/pixfmt-packed-rgb.xml | |||
@@ -240,6 +240,45 @@ colorspace <constant>V4L2_COLORSPACE_SRGB</constant>.</para> | |||
240 | <entry>r<subscript>1</subscript></entry> | 240 | <entry>r<subscript>1</subscript></entry> |
241 | <entry>r<subscript>0</subscript></entry> | 241 | <entry>r<subscript>0</subscript></entry> |
242 | </row> | 242 | </row> |
243 | <row id="V4L2-PIX-FMT-BGR666"> | ||
244 | <entry><constant>V4L2_PIX_FMT_BGR666</constant></entry> | ||
245 | <entry>'BGRH'</entry> | ||
246 | <entry></entry> | ||
247 | <entry>b<subscript>5</subscript></entry> | ||
248 | <entry>b<subscript>4</subscript></entry> | ||
249 | <entry>b<subscript>3</subscript></entry> | ||
250 | <entry>b<subscript>2</subscript></entry> | ||
251 | <entry>b<subscript>1</subscript></entry> | ||
252 | <entry>b<subscript>0</subscript></entry> | ||
253 | <entry>g<subscript>5</subscript></entry> | ||
254 | <entry>g<subscript>4</subscript></entry> | ||
255 | <entry></entry> | ||
256 | <entry>g<subscript>3</subscript></entry> | ||
257 | <entry>g<subscript>2</subscript></entry> | ||
258 | <entry>g<subscript>1</subscript></entry> | ||
259 | <entry>g<subscript>0</subscript></entry> | ||
260 | <entry>r<subscript>5</subscript></entry> | ||
261 | <entry>r<subscript>4</subscript></entry> | ||
262 | <entry>r<subscript>3</subscript></entry> | ||
263 | <entry>r<subscript>2</subscript></entry> | ||
264 | <entry></entry> | ||
265 | <entry>r<subscript>1</subscript></entry> | ||
266 | <entry>r<subscript>0</subscript></entry> | ||
267 | <entry></entry> | ||
268 | <entry></entry> | ||
269 | <entry></entry> | ||
270 | <entry></entry> | ||
271 | <entry></entry> | ||
272 | <entry></entry> | ||
273 | <entry></entry> | ||
274 | <entry></entry> | ||
275 | <entry></entry> | ||
276 | <entry></entry> | ||
277 | <entry></entry> | ||
278 | <entry></entry> | ||
279 | <entry></entry> | ||
280 | <entry></entry> | ||
281 | </row> | ||
243 | <row id="V4L2-PIX-FMT-BGR24"> | 282 | <row id="V4L2-PIX-FMT-BGR24"> |
244 | <entry><constant>V4L2_PIX_FMT_BGR24</constant></entry> | 283 | <entry><constant>V4L2_PIX_FMT_BGR24</constant></entry> |
245 | <entry>'BGR3'</entry> | 284 | <entry>'BGR3'</entry> |
@@ -700,6 +739,45 @@ defined in error. Drivers may interpret them as in <xref | |||
700 | <entry>b<subscript>1</subscript></entry> | 739 | <entry>b<subscript>1</subscript></entry> |
701 | <entry>b<subscript>0</subscript></entry> | 740 | <entry>b<subscript>0</subscript></entry> |
702 | </row> | 741 | </row> |
742 | <row id="V4L2-PIX-FMT-BGR666"> | ||
743 | <entry><constant>V4L2_PIX_FMT_BGR666</constant></entry> | ||
744 | <entry>'BGRH'</entry> | ||
745 | <entry></entry> | ||
746 | <entry>b<subscript>5</subscript></entry> | ||
747 | <entry>b<subscript>4</subscript></entry> | ||
748 | <entry>b<subscript>3</subscript></entry> | ||
749 | <entry>b<subscript>2</subscript></entry> | ||
750 | <entry>b<subscript>1</subscript></entry> | ||
751 | <entry>b<subscript>0</subscript></entry> | ||
752 | <entry>g<subscript>5</subscript></entry> | ||
753 | <entry>g<subscript>4</subscript></entry> | ||
754 | <entry></entry> | ||
755 | <entry>g<subscript>3</subscript></entry> | ||
756 | <entry>g<subscript>2</subscript></entry> | ||
757 | <entry>g<subscript>1</subscript></entry> | ||
758 | <entry>g<subscript>0</subscript></entry> | ||
759 | <entry>r<subscript>5</subscript></entry> | ||
760 | <entry>r<subscript>4</subscript></entry> | ||
761 | <entry>r<subscript>3</subscript></entry> | ||
762 | <entry>r<subscript>2</subscript></entry> | ||
763 | <entry></entry> | ||
764 | <entry>r<subscript>1</subscript></entry> | ||
765 | <entry>r<subscript>0</subscript></entry> | ||
766 | <entry></entry> | ||
767 | <entry></entry> | ||
768 | <entry></entry> | ||
769 | <entry></entry> | ||
770 | <entry></entry> | ||
771 | <entry></entry> | ||
772 | <entry></entry> | ||
773 | <entry></entry> | ||
774 | <entry></entry> | ||
775 | <entry></entry> | ||
776 | <entry></entry> | ||
777 | <entry></entry> | ||
778 | <entry></entry> | ||
779 | <entry></entry> | ||
780 | </row> | ||
703 | <row><!-- id="V4L2-PIX-FMT-BGR24" --> | 781 | <row><!-- id="V4L2-PIX-FMT-BGR24" --> |
704 | <entry><constant>V4L2_PIX_FMT_BGR24</constant></entry> | 782 | <entry><constant>V4L2_PIX_FMT_BGR24</constant></entry> |
705 | <entry>'BGR3'</entry> | 783 | <entry>'BGR3'</entry> |
diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches index 72651f788f4e..689e2371095c 100644 --- a/Documentation/SubmittingPatches +++ b/Documentation/SubmittingPatches | |||
@@ -98,6 +98,17 @@ system, git, as a "commit log". See #15, below. | |||
98 | If your description starts to get long, that's a sign that you probably | 98 | If your description starts to get long, that's a sign that you probably |
99 | need to split up your patch. See #3, next. | 99 | need to split up your patch. See #3, next. |
100 | 100 | ||
101 | When you submit or resubmit a patch or patch series, include the | ||
102 | complete patch description and justification for it. Don't just | ||
103 | say that this is version N of the patch (series). Don't expect the | ||
104 | patch merger to refer back to earlier patch versions or referenced | ||
105 | URLs to find the patch description and put that into the patch. | ||
106 | I.e., the patch (series) and its description should be self-contained. | ||
107 | This benefits both the patch merger(s) and reviewers. Some reviewers | ||
108 | probably didn't even receive earlier versions of the patch. | ||
109 | |||
110 | If the patch fixes a logged bug entry, refer to that bug entry by | ||
111 | number and URL. | ||
101 | 112 | ||
102 | 113 | ||
103 | 3) Separate your changes. | 114 | 3) Separate your changes. |
diff --git a/Documentation/acpi/method-customizing.txt b/Documentation/acpi/method-customizing.txt index e628cd23ca80..3e1d25aee3fb 100644 --- a/Documentation/acpi/method-customizing.txt +++ b/Documentation/acpi/method-customizing.txt | |||
@@ -19,6 +19,8 @@ Note: Only ACPI METHOD can be overridden, any other object types like | |||
19 | "Device", "OperationRegion", are not recognized. | 19 | "Device", "OperationRegion", are not recognized. |
20 | Note: The same ACPI control method can be overridden for many times, | 20 | Note: The same ACPI control method can be overridden for many times, |
21 | and it's always the latest one that used by Linux/kernel. | 21 | and it's always the latest one that used by Linux/kernel. |
22 | Note: To get the ACPI debug object output (Store (AAAA, Debug)), | ||
23 | please run "echo 1 > /sys/module/acpi/parameters/aml_debug_output". | ||
22 | 24 | ||
23 | 1. override an existing method | 25 | 1. override an existing method |
24 | a) get the ACPI table via ACPI sysfs I/F. e.g. to get the DSDT, | 26 | a) get the ACPI table via ACPI sysfs I/F. e.g. to get the DSDT, |
diff --git a/Documentation/blackfin/00-INDEX b/Documentation/blackfin/00-INDEX index c34e12440fec..2df0365f2dff 100644 --- a/Documentation/blackfin/00-INDEX +++ b/Documentation/blackfin/00-INDEX | |||
@@ -1,11 +1,8 @@ | |||
1 | 00-INDEX | 1 | 00-INDEX |
2 | - This file | 2 | - This file |
3 | 3 | ||
4 | cachefeatures.txt | 4 | bfin-gpio-notes.txt |
5 | - Supported cache features. | ||
6 | |||
7 | Filesystems | ||
8 | - Requirements for mounting the root file system. | ||
9 | |||
10 | bfin-gpio-note.txt | ||
11 | - Notes in developing/using bfin-gpio driver. | 5 | - Notes in developing/using bfin-gpio driver. |
6 | |||
7 | bfin-spi-notes.txt | ||
8 | - Notes for using bfin spi bus driver. | ||
diff --git a/Documentation/blackfin/Filesystems b/Documentation/blackfin/Filesystems deleted file mode 100644 index 51260a1b8032..000000000000 --- a/Documentation/blackfin/Filesystems +++ /dev/null | |||
@@ -1,169 +0,0 @@ | |||
1 | /* | ||
2 | * File: Documentation/blackfin/Filesystems | ||
3 | * Based on: | ||
4 | * Author: | ||
5 | * | ||
6 | * Created: | ||
7 | * Description: This file contains the simple DMA Implementation for Blackfin | ||
8 | * | ||
9 | * Rev: $Id: Filesystems 2384 2006-11-01 04:12:43Z magicyang $ | ||
10 | * | ||
11 | * Modified: | ||
12 | * Copyright 2004-2006 Analog Devices Inc. | ||
13 | * | ||
14 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ | ||
15 | * | ||
16 | */ | ||
17 | |||
18 | How to mount the root file system in uClinux/Blackfin | ||
19 | ----------------------------------------------------- | ||
20 | |||
21 | 1 Mounting EXT3 File system. | ||
22 | ------------------------ | ||
23 | |||
24 | Creating an EXT3 File system for uClinux/Blackfin: | ||
25 | |||
26 | |||
27 | Please follow the steps to form the EXT3 File system and mount the same as root | ||
28 | file system. | ||
29 | |||
30 | a Make an ext3 file system as large as you want the final root file | ||
31 | system. | ||
32 | |||
33 | mkfs.ext3 /dev/ram0 <your-rootfs-size-in-1k-blocks> | ||
34 | |||
35 | b Mount this Empty file system on a free directory as: | ||
36 | |||
37 | mount -t ext3 /dev/ram0 ./test | ||
38 | where ./test is the empty directory. | ||
39 | |||
40 | c Copy your root fs directory that you have so carefully made over. | ||
41 | |||
42 | cp -af /tmp/my_final_rootfs_files/* ./test | ||
43 | |||
44 | (For ex: cp -af uClinux-dist/romfs/* ./test) | ||
45 | |||
46 | d If you have done everything right till now you should be able to see | ||
47 | the required "root" dir's (that's etc, root, bin, lib, sbin...) | ||
48 | |||
49 | e Now unmount the file system | ||
50 | |||
51 | umount ./test | ||
52 | |||
53 | f Create the root file system image. | ||
54 | |||
55 | dd if=/dev/ram0 bs=1k count=<your-rootfs-size-in-1k-blocks> \ | ||
56 | > ext3fs.img | ||
57 | |||
58 | |||
59 | Now you have to tell the kernel that will be mounting this file system as | ||
60 | rootfs. | ||
61 | So do a make menuconfig under kernel and select the Ext3 journaling file system | ||
62 | support under File system --> submenu. | ||
63 | |||
64 | |||
65 | 2. Mounting EXT2 File system. | ||
66 | ------------------------- | ||
67 | |||
68 | By default the ext2 file system image will be created if you invoke make from | ||
69 | the top uClinux-dist directory. | ||
70 | |||
71 | |||
72 | 3. Mounting CRAMFS File System | ||
73 | ---------------------------- | ||
74 | |||
75 | To create a CRAMFS file system image execute the command | ||
76 | |||
77 | mkfs.cramfs ./test cramfs.img | ||
78 | |||
79 | where ./test is the target directory. | ||
80 | |||
81 | |||
82 | 4. Mounting ROMFS File System | ||
83 | -------------------------- | ||
84 | |||
85 | To create a ROMFS file system image execute the command | ||
86 | |||
87 | genromfs -v -V "ROMdisk" -f romfs.img -d ./test | ||
88 | |||
89 | where ./test is the target directory | ||
90 | |||
91 | |||
92 | 5. Mounting the JFFS2 Filesystem | ||
93 | ----------------------------- | ||
94 | |||
95 | To create a compressed JFFS filesystem (JFFS2), please execute the command | ||
96 | |||
97 | mkfs.jffs2 -d ./test -o jffs2.img | ||
98 | |||
99 | where ./test is the target directory. | ||
100 | |||
101 | However, please make sure the following is in your kernel config. | ||
102 | |||
103 | /* | ||
104 | * RAM/ROM/Flash chip drivers | ||
105 | */ | ||
106 | #define CONFIG_MTD_CFI 1 | ||
107 | #define CONFIG_MTD_ROM 1 | ||
108 | /* | ||
109 | * Mapping drivers for chip access | ||
110 | */ | ||
111 | #define CONFIG_MTD_COMPLEX_MAPPINGS 1 | ||
112 | #define CONFIG_MTD_BF533 1 | ||
113 | #undef CONFIG_MTD_UCLINUX | ||
114 | |||
115 | Through the u-boot boot loader, use the jffs2.img in the corresponding | ||
116 | partition made in linux-2.6.x/drivers/mtd/maps/bf533_flash.c. | ||
117 | |||
118 | NOTE - Currently the Flash driver is available only for EZKIT. Watch out for a | ||
119 | STAMP driver soon. | ||
120 | |||
121 | |||
122 | 6. Mounting the NFS File system | ||
123 | ----------------------------- | ||
124 | |||
125 | For mounting the NFS please do the following in the kernel config. | ||
126 | |||
127 | In Networking Support --> Networking options --> TCP/IP networking --> | ||
128 | IP: kernel level autoconfiguration | ||
129 | |||
130 | Enable BOOTP Support. | ||
131 | |||
132 | In Kernel hacking --> Compiled-in kernel boot parameter add the following | ||
133 | |||
134 | root=/dev/nfs rw ip=bootp | ||
135 | |||
136 | In File system --> Network File system, Enable | ||
137 | |||
138 | NFS file system support --> NFSv3 client support | ||
139 | Root File system on NFS | ||
140 | |||
141 | in uClibc menuconfig, do the following | ||
142 | In Networking Support | ||
143 | enable Remote Procedure Call (RPC) support | ||
144 | Full RPC Support | ||
145 | |||
146 | On the Host side, ensure that /etc/dhcpd.conf looks something like this | ||
147 | |||
148 | ddns-update-style ad-hoc; | ||
149 | allow bootp; | ||
150 | subnet 10.100.4.0 netmask 255.255.255.0 { | ||
151 | default-lease-time 122209600; | ||
152 | max-lease-time 31557600; | ||
153 | group { | ||
154 | host bf533 { | ||
155 | hardware ethernet 00:CF:52:49:C3:01; | ||
156 | fixed-address 10.100.4.50; | ||
157 | option root-path "/home/nfsmount"; | ||
158 | } | ||
159 | } | ||
160 | |||
161 | ensure that /etc/exports looks something like this | ||
162 | /home/nfsmount *(rw,no_root_squash,no_all_squash) | ||
163 | |||
164 | run the following commands as root (may differ depending on your | ||
165 | distribution) : | ||
166 | - service nfs start | ||
167 | - service portmap start | ||
168 | - service dhcpd start | ||
169 | - /usr/sbin/exportfs | ||
diff --git a/Documentation/blackfin/bfin-spi-notes.txt b/Documentation/blackfin/bfin-spi-notes.txt new file mode 100644 index 000000000000..556fa877f2e8 --- /dev/null +++ b/Documentation/blackfin/bfin-spi-notes.txt | |||
@@ -0,0 +1,14 @@ | |||
1 | SPI Chip Select behavior: | ||
2 | |||
3 | With the Blackfin on-chip SPI peripheral, there is some logic tied to the CPHA | ||
4 | bit whether the Slave Select Line is controlled by hardware (CPHA=0) or | ||
5 | controlled by software (CPHA=1). However, the Linux SPI bus driver assumes that | ||
6 | the Slave Select is always under software control and being asserted during | ||
7 | the entire SPI transfer. - And not just bits_per_word duration. | ||
8 | |||
9 | In most cases you can utilize SPI MODE_3 instead of MODE_0 to work-around this | ||
10 | behavior. If your SPI slave device in question requires SPI MODE_0 or MODE_2 | ||
11 | timing, you can utilize the GPIO controlled SPI Slave Select option instead. | ||
12 | |||
13 | You can even use the same pin whose peripheral role is a SSEL, | ||
14 | but use it as a GPIO instead. | ||
diff --git a/Documentation/blackfin/cachefeatures.txt b/Documentation/blackfin/cachefeatures.txt deleted file mode 100644 index 75de51f94515..000000000000 --- a/Documentation/blackfin/cachefeatures.txt +++ /dev/null | |||
@@ -1,55 +0,0 @@ | |||
1 | /* | ||
2 | * File: Documentation/blackfin/cachefeatures.txt | ||
3 | * Based on: | ||
4 | * Author: | ||
5 | * | ||
6 | * Created: | ||
7 | * Description: This file contains the simple DMA Implementation for Blackfin | ||
8 | * | ||
9 | * Rev: $Id: cachefeatures.txt 2384 2006-11-01 04:12:43Z magicyang $ | ||
10 | * | ||
11 | * Modified: | ||
12 | * Copyright 2004-2006 Analog Devices Inc. | ||
13 | * | ||
14 | * Bugs: Enter bugs at http://blackfin.uclinux.org/ | ||
15 | * | ||
16 | */ | ||
17 | |||
18 | - Instruction and Data cache initialization. | ||
19 | icache_init(); | ||
20 | dcache_init(); | ||
21 | |||
22 | - Instruction and Data cache Invalidation Routines, when flushing the | ||
23 | same is not required. | ||
24 | _icache_invalidate(); | ||
25 | _dcache_invalidate(); | ||
26 | |||
27 | Also, for invalidating the entire instruction and data cache, the below | ||
28 | routines are provided (another method for invalidation, refer page no 267 and 287 of | ||
29 | ADSP-BF533 Hardware Reference manual) | ||
30 | |||
31 | invalidate_entire_dcache(); | ||
32 | invalidate_entire_icache(); | ||
33 | |||
34 | -External Flushing of Instruction and data cache routines. | ||
35 | |||
36 | flush_instruction_cache(); | ||
37 | flush_data_cache(); | ||
38 | |||
39 | - Internal Flushing of Instruction and Data Cache. | ||
40 | |||
41 | icplb_flush(); | ||
42 | dcplb_flush(); | ||
43 | |||
44 | - Miscellaneous cache functions. | ||
45 | |||
46 | flush_cache_all(); | ||
47 | flush_cache_mm(); | ||
48 | invalidate_dcache_range(); | ||
49 | flush_dcache_range(); | ||
50 | flush_dcache_page(); | ||
51 | flush_cache_range(); | ||
52 | flush_cache_page(); | ||
53 | invalidate_dcache_range(); | ||
54 | flush_page_to_ram(); | ||
55 | |||
diff --git a/Documentation/block/biodoc.txt b/Documentation/block/biodoc.txt index 508b5b2b0289..b9a83dd24732 100644 --- a/Documentation/block/biodoc.txt +++ b/Documentation/block/biodoc.txt | |||
@@ -7,7 +7,7 @@ Notes Written on Jan 15, 2002: | |||
7 | 7 | ||
8 | Last Updated May 2, 2002 | 8 | Last Updated May 2, 2002 |
9 | September 2003: Updated I/O Scheduler portions | 9 | September 2003: Updated I/O Scheduler portions |
10 | Nick Piggin <piggin@cyberone.com.au> | 10 | Nick Piggin <npiggin@kernel.dk> |
11 | 11 | ||
12 | Introduction: | 12 | Introduction: |
13 | 13 | ||
diff --git a/Documentation/coccinelle.txt b/Documentation/coccinelle.txt new file mode 100644 index 000000000000..cd2b02837066 --- /dev/null +++ b/Documentation/coccinelle.txt | |||
@@ -0,0 +1,258 @@ | |||
1 | Copyright 2010 Nicolas Palix <npalix@diku.dk> | ||
2 | Copyright 2010 Julia Lawall <julia@diku.dk> | ||
3 | Copyright 2010 Gilles Muller <Gilles.Muller@lip6.fr> | ||
4 | |||
5 | |||
6 | Getting Coccinelle | ||
7 | ~~~~~~~~~~~~~~~~~~~~ | ||
8 | |||
9 | The semantic patches included in the kernel use the 'virtual rule' | ||
10 | feature which was introduced in Coccinelle version 0.1.11. | ||
11 | |||
12 | Coccinelle (>=0.2.0) is available through the package manager | ||
13 | of many distributions, e.g. : | ||
14 | |||
15 | - Debian (>=squeeze) | ||
16 | - Fedora (>=13) | ||
17 | - Ubuntu (>=10.04 Lucid Lynx) | ||
18 | - OpenSUSE | ||
19 | - Arch Linux | ||
20 | - NetBSD | ||
21 | - FreeBSD | ||
22 | |||
23 | |||
24 | You can get the latest version released from the Coccinelle homepage at | ||
25 | http://coccinelle.lip6.fr/ | ||
26 | |||
27 | Once you have it, run the following command: | ||
28 | |||
29 | ./configure | ||
30 | make | ||
31 | |||
32 | as a regular user, and install it with | ||
33 | |||
34 | sudo make install | ||
35 | |||
36 | |||
37 | Using Coccinelle on the Linux kernel | ||
38 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
39 | |||
40 | A Coccinelle-specific target is defined in the top level | ||
41 | Makefile. This target is named 'coccicheck' and calls the 'coccicheck' | ||
42 | front-end in the 'scripts' directory. | ||
43 | |||
44 | Four modes are defined: report, patch, context, and org. The mode to | ||
45 | use is specified by setting the MODE variable with 'MODE=<mode>'. | ||
46 | |||
47 | 'report' generates a list in the following format: | ||
48 | file:line:column-column: message | ||
49 | |||
50 | 'patch' proposes a fix, when possible. | ||
51 | |||
52 | 'context' highlights lines of interest and their context in a | ||
53 | diff-like style.Lines of interest are indicated with '-'. | ||
54 | |||
55 | 'org' generates a report in the Org mode format of Emacs. | ||
56 | |||
57 | Note that not all semantic patches implement all modes. | ||
58 | |||
59 | To make a report for every semantic patch, run the following command: | ||
60 | |||
61 | make coccicheck MODE=report | ||
62 | |||
63 | NB: The 'report' mode is the default one. | ||
64 | |||
65 | To produce patches, run: | ||
66 | |||
67 | make coccicheck MODE=patch | ||
68 | |||
69 | |||
70 | The coccicheck target applies every semantic patch available in the | ||
71 | subdirectories of 'scripts/coccinelle' to the entire Linux kernel. | ||
72 | |||
73 | For each semantic patch, a changelog message is proposed. It gives a | ||
74 | description of the problem being checked by the semantic patch, and | ||
75 | includes a reference to Coccinelle. | ||
76 | |||
77 | As any static code analyzer, Coccinelle produces false | ||
78 | positives. Thus, reports must be carefully checked, and patches | ||
79 | reviewed. | ||
80 | |||
81 | |||
82 | Using Coccinelle with a single semantic patch | ||
83 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
84 | |||
85 | The optional make variable COCCI can be used to check a single | ||
86 | semantic patch. In that case, the variable must be initialized with | ||
87 | the name of the semantic patch to apply. | ||
88 | |||
89 | For instance: | ||
90 | |||
91 | make coccicheck COCCI=<my_SP.cocci> MODE=patch | ||
92 | or | ||
93 | make coccicheck COCCI=<my_SP.cocci> MODE=report | ||
94 | |||
95 | |||
96 | Proposing new semantic patches | ||
97 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
98 | |||
99 | New semantic patches can be proposed and submitted by kernel | ||
100 | developers. For sake of clarity, they should be organized in the | ||
101 | subdirectories of 'scripts/coccinelle/'. | ||
102 | |||
103 | |||
104 | Detailed description of the 'report' mode | ||
105 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
106 | |||
107 | 'report' generates a list in the following format: | ||
108 | file:line:column-column: message | ||
109 | |||
110 | Example: | ||
111 | |||
112 | Running | ||
113 | |||
114 | make coccicheck MODE=report COCCI=scripts/coccinelle/err_cast.cocci | ||
115 | |||
116 | will execute the following part of the SmPL script. | ||
117 | |||
118 | <smpl> | ||
119 | @r depends on !context && !patch && (org || report)@ | ||
120 | expression x; | ||
121 | position p; | ||
122 | @@ | ||
123 | |||
124 | ERR_PTR@p(PTR_ERR(x)) | ||
125 | |||
126 | @script:python depends on report@ | ||
127 | p << r.p; | ||
128 | x << r.x; | ||
129 | @@ | ||
130 | |||
131 | msg="ERR_CAST can be used with %s" % (x) | ||
132 | coccilib.report.print_report(p[0], msg) | ||
133 | </smpl> | ||
134 | |||
135 | This SmPL excerpt generates entries on the standard output, as | ||
136 | illustrated below: | ||
137 | |||
138 | /home/user/linux/crypto/ctr.c:188:9-16: ERR_CAST can be used with alg | ||
139 | /home/user/linux/crypto/authenc.c:619:9-16: ERR_CAST can be used with auth | ||
140 | /home/user/linux/crypto/xts.c:227:9-16: ERR_CAST can be used with alg | ||
141 | |||
142 | |||
143 | Detailed description of the 'patch' mode | ||
144 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
145 | |||
146 | When the 'patch' mode is available, it proposes a fix for each problem | ||
147 | identified. | ||
148 | |||
149 | Example: | ||
150 | |||
151 | Running | ||
152 | make coccicheck MODE=patch COCCI=scripts/coccinelle/err_cast.cocci | ||
153 | |||
154 | will execute the following part of the SmPL script. | ||
155 | |||
156 | <smpl> | ||
157 | @ depends on !context && patch && !org && !report @ | ||
158 | expression x; | ||
159 | @@ | ||
160 | |||
161 | - ERR_PTR(PTR_ERR(x)) | ||
162 | + ERR_CAST(x) | ||
163 | </smpl> | ||
164 | |||
165 | This SmPL excerpt generates patch hunks on the standard output, as | ||
166 | illustrated below: | ||
167 | |||
168 | diff -u -p a/crypto/ctr.c b/crypto/ctr.c | ||
169 | --- a/crypto/ctr.c 2010-05-26 10:49:38.000000000 +0200 | ||
170 | +++ b/crypto/ctr.c 2010-06-03 23:44:49.000000000 +0200 | ||
171 | @@ -185,7 +185,7 @@ static struct crypto_instance *crypto_ct | ||
172 | alg = crypto_attr_alg(tb[1], CRYPTO_ALG_TYPE_CIPHER, | ||
173 | CRYPTO_ALG_TYPE_MASK); | ||
174 | if (IS_ERR(alg)) | ||
175 | - return ERR_PTR(PTR_ERR(alg)); | ||
176 | + return ERR_CAST(alg); | ||
177 | |||
178 | /* Block size must be >= 4 bytes. */ | ||
179 | err = -EINVAL; | ||
180 | |||
181 | Detailed description of the 'context' mode | ||
182 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
183 | |||
184 | 'context' highlights lines of interest and their context | ||
185 | in a diff-like style. | ||
186 | |||
187 | NOTE: The diff-like output generated is NOT an applicable patch. The | ||
188 | intent of the 'context' mode is to highlight the important lines | ||
189 | (annotated with minus, '-') and gives some surrounding context | ||
190 | lines around. This output can be used with the diff mode of | ||
191 | Emacs to review the code. | ||
192 | |||
193 | Example: | ||
194 | |||
195 | Running | ||
196 | make coccicheck MODE=context COCCI=scripts/coccinelle/err_cast.cocci | ||
197 | |||
198 | will execute the following part of the SmPL script. | ||
199 | |||
200 | <smpl> | ||
201 | @ depends on context && !patch && !org && !report@ | ||
202 | expression x; | ||
203 | @@ | ||
204 | |||
205 | * ERR_PTR(PTR_ERR(x)) | ||
206 | </smpl> | ||
207 | |||
208 | This SmPL excerpt generates diff hunks on the standard output, as | ||
209 | illustrated below: | ||
210 | |||
211 | diff -u -p /home/user/linux/crypto/ctr.c /tmp/nothing | ||
212 | --- /home/user/linux/crypto/ctr.c 2010-05-26 10:49:38.000000000 +0200 | ||
213 | +++ /tmp/nothing | ||
214 | @@ -185,7 +185,6 @@ static struct crypto_instance *crypto_ct | ||
215 | alg = crypto_attr_alg(tb[1], CRYPTO_ALG_TYPE_CIPHER, | ||
216 | CRYPTO_ALG_TYPE_MASK); | ||
217 | if (IS_ERR(alg)) | ||
218 | - return ERR_PTR(PTR_ERR(alg)); | ||
219 | |||
220 | /* Block size must be >= 4 bytes. */ | ||
221 | err = -EINVAL; | ||
222 | |||
223 | Detailed description of the 'org' mode | ||
224 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
225 | |||
226 | 'org' generates a report in the Org mode format of Emacs. | ||
227 | |||
228 | Example: | ||
229 | |||
230 | Running | ||
231 | make coccicheck MODE=org COCCI=scripts/coccinelle/err_cast.cocci | ||
232 | |||
233 | will execute the following part of the SmPL script. | ||
234 | |||
235 | <smpl> | ||
236 | @r depends on !context && !patch && (org || report)@ | ||
237 | expression x; | ||
238 | position p; | ||
239 | @@ | ||
240 | |||
241 | ERR_PTR@p(PTR_ERR(x)) | ||
242 | |||
243 | @script:python depends on org@ | ||
244 | p << r.p; | ||
245 | x << r.x; | ||
246 | @@ | ||
247 | |||
248 | msg="ERR_CAST can be used with %s" % (x) | ||
249 | msg_safe=msg.replace("[","@(").replace("]",")") | ||
250 | coccilib.org.print_todo(p[0], msg_safe) | ||
251 | </smpl> | ||
252 | |||
253 | This SmPL excerpt generates Org entries on the standard output, as | ||
254 | illustrated below: | ||
255 | |||
256 | * TODO [[view:/home/user/linux/crypto/ctr.c::face=ovl-face1::linb=188::colb=9::cole=16][ERR_CAST can be used with alg]] | ||
257 | * TODO [[view:/home/user/linux/crypto/authenc.c::face=ovl-face1::linb=619::colb=9::cole=16][ERR_CAST can be used with auth]] | ||
258 | * TODO [[view:/home/user/linux/crypto/xts.c::face=ovl-face1::linb=227::colb=9::cole=16][ERR_CAST can be used with alg]] | ||
diff --git a/Documentation/cpu-hotplug.txt b/Documentation/cpu-hotplug.txt index a99d7031cdf9..45d5a217484f 100644 --- a/Documentation/cpu-hotplug.txt +++ b/Documentation/cpu-hotplug.txt | |||
@@ -2,7 +2,7 @@ | |||
2 | 2 | ||
3 | Maintainers: | 3 | Maintainers: |
4 | CPU Hotplug Core: | 4 | CPU Hotplug Core: |
5 | Rusty Russell <rusty@rustycorp.com.au> | 5 | Rusty Russell <rusty@rustcorp.com.au> |
6 | Srivatsa Vaddagiri <vatsa@in.ibm.com> | 6 | Srivatsa Vaddagiri <vatsa@in.ibm.com> |
7 | i386: | 7 | i386: |
8 | Zwane Mwaikambo <zwane@arm.linux.org.uk> | 8 | Zwane Mwaikambo <zwane@arm.linux.org.uk> |
diff --git a/Documentation/devices.txt b/Documentation/devices.txt index f2da781705b2..d0d1df6cb5de 100644 --- a/Documentation/devices.txt +++ b/Documentation/devices.txt | |||
@@ -445,6 +445,7 @@ Your cooperation is appreciated. | |||
445 | 233 = /dev/kmview View-OS A process with a view | 445 | 233 = /dev/kmview View-OS A process with a view |
446 | 234 = /dev/btrfs-control Btrfs control device | 446 | 234 = /dev/btrfs-control Btrfs control device |
447 | 235 = /dev/autofs Autofs control device | 447 | 235 = /dev/autofs Autofs control device |
448 | 236 = /dev/mapper/control Device-Mapper control device | ||
448 | 240-254 Reserved for local use | 449 | 240-254 Reserved for local use |
449 | 255 Reserved for MISC_DYNAMIC_MINOR | 450 | 255 Reserved for MISC_DYNAMIC_MINOR |
450 | 451 | ||
diff --git a/Documentation/feature-removal-schedule.txt b/Documentation/feature-removal-schedule.txt index be7030e4dd73..842aa9de84a6 100644 --- a/Documentation/feature-removal-schedule.txt +++ b/Documentation/feature-removal-schedule.txt | |||
@@ -116,29 +116,6 @@ Who: Mauro Carvalho Chehab <mchehab@infradead.org> | |||
116 | 116 | ||
117 | --------------------------- | 117 | --------------------------- |
118 | 118 | ||
119 | What: PCMCIA control ioctl (needed for pcmcia-cs [cardmgr, cardctl]) | ||
120 | When: 2.6.35/2.6.36 | ||
121 | Files: drivers/pcmcia/: pcmcia_ioctl.c | ||
122 | Why: With the 16-bit PCMCIA subsystem now behaving (almost) like a | ||
123 | normal hotpluggable bus, and with it using the default kernel | ||
124 | infrastructure (hotplug, driver core, sysfs) keeping the PCMCIA | ||
125 | control ioctl needed by cardmgr and cardctl from pcmcia-cs is | ||
126 | unnecessary and potentially harmful (it does not provide for | ||
127 | proper locking), and makes further cleanups and integration of the | ||
128 | PCMCIA subsystem into the Linux kernel device driver model more | ||
129 | difficult. The features provided by cardmgr and cardctl are either | ||
130 | handled by the kernel itself now or are available in the new | ||
131 | pcmciautils package available at | ||
132 | http://kernel.org/pub/linux/utils/kernel/pcmcia/ | ||
133 | |||
134 | For all architectures except ARM, the associated config symbol | ||
135 | has been removed from kernel 2.6.34; for ARM, it will be likely | ||
136 | be removed from kernel 2.6.35. The actual code will then likely | ||
137 | be removed from kernel 2.6.36. | ||
138 | Who: Dominik Brodowski <linux@dominikbrodowski.net> | ||
139 | |||
140 | --------------------------- | ||
141 | |||
142 | What: sys_sysctl | 119 | What: sys_sysctl |
143 | When: September 2010 | 120 | When: September 2010 |
144 | Option: CONFIG_SYSCTL_SYSCALL | 121 | Option: CONFIG_SYSCTL_SYSCALL |
@@ -174,6 +151,31 @@ Who: Eric Biederman <ebiederm@xmission.com> | |||
174 | 151 | ||
175 | --------------------------- | 152 | --------------------------- |
176 | 153 | ||
154 | What: /proc/<pid>/oom_adj | ||
155 | When: August 2012 | ||
156 | Why: /proc/<pid>/oom_adj allows userspace to influence the oom killer's | ||
157 | badness heuristic used to determine which task to kill when the kernel | ||
158 | is out of memory. | ||
159 | |||
160 | The badness heuristic has since been rewritten since the introduction of | ||
161 | this tunable such that its meaning is deprecated. The value was | ||
162 | implemented as a bitshift on a score generated by the badness() | ||
163 | function that did not have any precise units of measure. With the | ||
164 | rewrite, the score is given as a proportion of available memory to the | ||
165 | task allocating pages, so using a bitshift which grows the score | ||
166 | exponentially is, thus, impossible to tune with fine granularity. | ||
167 | |||
168 | A much more powerful interface, /proc/<pid>/oom_score_adj, was | ||
169 | introduced with the oom killer rewrite that allows users to increase or | ||
170 | decrease the badness() score linearly. This interface will replace | ||
171 | /proc/<pid>/oom_adj. | ||
172 | |||
173 | A warning will be emitted to the kernel log if an application uses this | ||
174 | deprecated interface. After it is printed once, future warnings will be | ||
175 | suppressed until the kernel is rebooted. | ||
176 | |||
177 | --------------------------- | ||
178 | |||
177 | What: remove EXPORT_SYMBOL(kernel_thread) | 179 | What: remove EXPORT_SYMBOL(kernel_thread) |
178 | When: August 2006 | 180 | When: August 2006 |
179 | Files: arch/*/kernel/*_ksyms.c | 181 | Files: arch/*/kernel/*_ksyms.c |
@@ -358,14 +360,6 @@ When: 2.6.33 | |||
358 | Why: Should be implemented in userspace, policy daemon. | 360 | Why: Should be implemented in userspace, policy daemon. |
359 | Who: Johannes Berg <johannes@sipsolutions.net> | 361 | Who: Johannes Berg <johannes@sipsolutions.net> |
360 | 362 | ||
361 | --------------------------- | ||
362 | |||
363 | What: CONFIG_INOTIFY | ||
364 | When: 2.6.33 | ||
365 | Why: last user (audit) will be converted to the newer more generic | ||
366 | and more easily maintained fsnotify subsystem | ||
367 | Who: Eric Paris <eparis@redhat.com> | ||
368 | |||
369 | ---------------------------- | 363 | ---------------------------- |
370 | 364 | ||
371 | What: sound-slot/service-* module aliases and related clutters in | 365 | What: sound-slot/service-* module aliases and related clutters in |
@@ -468,16 +462,6 @@ Who: Jan Kiszka <jan.kiszka@web.de> | |||
468 | 462 | ||
469 | ---------------------------- | 463 | ---------------------------- |
470 | 464 | ||
471 | What: xtime, wall_to_monotonic | ||
472 | When: 2.6.36+ | ||
473 | Files: kernel/time/timekeeping.c include/linux/time.h | ||
474 | Why: Cleaning up timekeeping internal values. Please use | ||
475 | existing timekeeping accessor functions to access | ||
476 | the equivalent functionality. | ||
477 | Who: John Stultz <johnstul@us.ibm.com> | ||
478 | |||
479 | ---------------------------- | ||
480 | |||
481 | What: KVM paravirt mmu host support | 465 | What: KVM paravirt mmu host support |
482 | When: January 2011 | 466 | When: January 2011 |
483 | Why: The paravirt mmu host support is slower than non-paravirt mmu, both | 467 | Why: The paravirt mmu host support is slower than non-paravirt mmu, both |
@@ -563,3 +547,20 @@ Why: superseded by acpi_sleep=nonvs | |||
563 | Who: Rafael J. Wysocki <rjw@sisk.pl> | 547 | Who: Rafael J. Wysocki <rjw@sisk.pl> |
564 | 548 | ||
565 | ---------------------------- | 549 | ---------------------------- |
550 | |||
551 | What: PCI DMA unmap state API | ||
552 | When: August 2012 | ||
553 | Why: PCI DMA unmap state API (include/linux/pci-dma.h) was replaced | ||
554 | with DMA unmap state API (DMA unmap state API can be used for | ||
555 | any bus). | ||
556 | Who: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | ||
557 | |||
558 | ---------------------------- | ||
559 | |||
560 | What: DMA_xxBIT_MASK macros | ||
561 | When: Jun 2011 | ||
562 | Why: DMA_xxBIT_MASK macros were replaced with DMA_BIT_MASK() macros. | ||
563 | Who: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | ||
564 | |||
565 | ---------------------------- | ||
566 | |||
diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking index 96d4293607ec..2db4283efa8d 100644 --- a/Documentation/filesystems/Locking +++ b/Documentation/filesystems/Locking | |||
@@ -92,8 +92,8 @@ prototypes: | |||
92 | void (*destroy_inode)(struct inode *); | 92 | void (*destroy_inode)(struct inode *); |
93 | void (*dirty_inode) (struct inode *); | 93 | void (*dirty_inode) (struct inode *); |
94 | int (*write_inode) (struct inode *, int); | 94 | int (*write_inode) (struct inode *, int); |
95 | void (*drop_inode) (struct inode *); | 95 | int (*drop_inode) (struct inode *); |
96 | void (*delete_inode) (struct inode *); | 96 | void (*evict_inode) (struct inode *); |
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); |
@@ -101,14 +101,13 @@ prototypes: | |||
101 | int (*unfreeze_fs) (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 *); | ||
105 | void (*umount_begin) (struct super_block *); | 104 | void (*umount_begin) (struct super_block *); |
106 | int (*show_options)(struct seq_file *, struct vfsmount *); | 105 | int (*show_options)(struct seq_file *, struct vfsmount *); |
107 | ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t); | 106 | ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t); |
108 | ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t); | 107 | ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t); |
109 | 108 | ||
110 | locking rules: | 109 | locking rules: |
111 | All may block. | 110 | All may block [not true, see below] |
112 | None have BKL | 111 | None have BKL |
113 | s_umount | 112 | s_umount |
114 | alloc_inode: | 113 | alloc_inode: |
@@ -116,22 +115,25 @@ destroy_inode: | |||
116 | dirty_inode: (must not sleep) | 115 | dirty_inode: (must not sleep) |
117 | write_inode: | 116 | write_inode: |
118 | drop_inode: !!!inode_lock!!! | 117 | drop_inode: !!!inode_lock!!! |
119 | delete_inode: | 118 | evict_inode: |
120 | put_super: write | 119 | put_super: write |
121 | write_super: read | 120 | write_super: read |
122 | sync_fs: read | 121 | sync_fs: read |
123 | freeze_fs: read | 122 | freeze_fs: read |
124 | unfreeze_fs: read | 123 | unfreeze_fs: read |
125 | statfs: no | 124 | statfs: maybe(read) (see below) |
126 | remount_fs: maybe (see below) | 125 | remount_fs: write |
127 | clear_inode: | ||
128 | umount_begin: no | 126 | umount_begin: no |
129 | show_options: no (namespace_sem) | 127 | show_options: no (namespace_sem) |
130 | quota_read: no (see below) | 128 | quota_read: no (see below) |
131 | quota_write: no (see below) | 129 | quota_write: no (see below) |
132 | 130 | ||
133 | ->remount_fs() will have the s_umount exclusive lock if it's already mounted. | 131 | ->statfs() has s_umount (shared) when called by ustat(2) (native or |
134 | When called from get_sb_single, it does NOT have the s_umount lock. | 132 | compat), but that's an accident of bad API; s_umount is used to pin |
133 | the superblock down when we only have dev_t given us by userland to | ||
134 | identify the superblock. Everything else (statfs(), fstatfs(), etc.) | ||
135 | doesn't hold it when calling ->statfs() - superblock is pinned down | ||
136 | by resolving the pathname passed to syscall. | ||
135 | ->quota_read() and ->quota_write() functions are both guaranteed to | 137 | ->quota_read() and ->quota_write() functions are both guaranteed to |
136 | be the only ones operating on the quota file by the quota code (via | 138 | be the only ones operating on the quota file by the quota code (via |
137 | dqio_sem) (unless an admin really wants to screw up something and | 139 | dqio_sem) (unless an admin really wants to screw up something and |
@@ -372,8 +374,6 @@ prototypes: | |||
372 | ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t); | 374 | ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t); |
373 | int (*readdir) (struct file *, void *, filldir_t); | 375 | int (*readdir) (struct file *, void *, filldir_t); |
374 | unsigned int (*poll) (struct file *, struct poll_table_struct *); | 376 | unsigned int (*poll) (struct file *, struct poll_table_struct *); |
375 | int (*ioctl) (struct inode *, struct file *, unsigned int, | ||
376 | unsigned long); | ||
377 | long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); | 377 | long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); |
378 | long (*compat_ioctl) (struct file *, unsigned int, unsigned long); | 378 | long (*compat_ioctl) (struct file *, unsigned int, unsigned long); |
379 | int (*mmap) (struct file *, struct vm_area_struct *); | 379 | int (*mmap) (struct file *, struct vm_area_struct *); |
@@ -407,8 +407,7 @@ write: no | |||
407 | aio_write: no | 407 | aio_write: no |
408 | readdir: no | 408 | readdir: no |
409 | poll: no | 409 | poll: no |
410 | ioctl: yes (see below) | 410 | unlocked_ioctl: no |
411 | unlocked_ioctl: no (see below) | ||
412 | compat_ioctl: no | 411 | compat_ioctl: no |
413 | mmap: no | 412 | mmap: no |
414 | open: no | 413 | open: no |
@@ -451,9 +450,6 @@ move ->readdir() to inode_operations and use a separate method for directory | |||
451 | anything that resembles union-mount we won't have a struct file for all | 450 | anything that resembles union-mount we won't have a struct file for all |
452 | components. And there are other reasons why the current interface is a mess... | 451 | components. And there are other reasons why the current interface is a mess... |
453 | 452 | ||
454 | ->ioctl() on regular files is superceded by the ->unlocked_ioctl() that | ||
455 | doesn't take the BKL. | ||
456 | |||
457 | ->read on directories probably must go away - we should just enforce -EISDIR | 453 | ->read on directories probably must go away - we should just enforce -EISDIR |
458 | in sys_read() and friends. | 454 | in sys_read() and friends. |
459 | 455 | ||
diff --git a/Documentation/filesystems/caching/fscache.txt b/Documentation/filesystems/caching/fscache.txt index a91e2e2095b0..770267af5b3e 100644 --- a/Documentation/filesystems/caching/fscache.txt +++ b/Documentation/filesystems/caching/fscache.txt | |||
@@ -343,8 +343,8 @@ This will look something like: | |||
343 | [root@andromeda ~]# head /proc/fs/fscache/objects | 343 | [root@andromeda ~]# head /proc/fs/fscache/objects |
344 | OBJECT PARENT STAT CHLDN OPS OOP IPR EX READS EM EV F S | NETFS_COOKIE_DEF TY FL NETFS_DATA OBJECT_KEY, AUX_DATA | 344 | OBJECT PARENT STAT CHLDN OPS OOP IPR EX READS EM EV F S | NETFS_COOKIE_DEF TY FL NETFS_DATA OBJECT_KEY, AUX_DATA |
345 | ======== ======== ==== ===== === === === == ===== == == = = | ================ == == ================ ================ | 345 | ======== ======== ==== ===== === === === == ===== == == = = | ================ == == ================ ================ |
346 | 17e4b 2 ACTV 0 0 0 0 0 0 7b 4 0 8 | NFS.fh DT 0 ffff88001dd82820 010006017edcf8bbc93b43298fdfbe71e50b57b13a172c0117f38472, e567634700000000000000000000000063f2404a000000000000000000000000c9030000000000000000000063f2404a | 346 | 17e4b 2 ACTV 0 0 0 0 0 0 7b 4 0 0 | NFS.fh DT 0 ffff88001dd82820 010006017edcf8bbc93b43298fdfbe71e50b57b13a172c0117f38472, e567634700000000000000000000000063f2404a000000000000000000000000c9030000000000000000000063f2404a |
347 | 1693a 2 ACTV 0 0 0 0 0 0 7b 4 0 8 | NFS.fh DT 0 ffff88002db23380 010006017edcf8bbc93b43298fdfbe71e50b57b1e0162c01a2df0ea6, 420ebc4a000000000000000000000000420ebc4a0000000000000000000000000e1801000000000000000000420ebc4a | 347 | 1693a 2 ACTV 0 0 0 0 0 0 7b 4 0 0 | NFS.fh DT 0 ffff88002db23380 010006017edcf8bbc93b43298fdfbe71e50b57b1e0162c01a2df0ea6, 420ebc4a000000000000000000000000420ebc4a0000000000000000000000000e1801000000000000000000420ebc4a |
348 | 348 | ||
349 | where the first set of columns before the '|' describe the object: | 349 | where the first set of columns before the '|' describe the object: |
350 | 350 | ||
@@ -362,7 +362,7 @@ where the first set of columns before the '|' describe the object: | |||
362 | EM Object's event mask | 362 | EM Object's event mask |
363 | EV Events raised on this object | 363 | EV Events raised on this object |
364 | F Object flags | 364 | F Object flags |
365 | S Object slow-work work item flags | 365 | S Object work item busy state mask (1:pending 2:running) |
366 | 366 | ||
367 | and the second set of columns describe the object's cookie, if present: | 367 | and the second set of columns describe the object's cookie, if present: |
368 | 368 | ||
@@ -395,8 +395,8 @@ and the following paired letters: | |||
395 | w Show objects that don't have pending writes | 395 | w Show objects that don't have pending writes |
396 | R Show objects that have outstanding reads | 396 | R Show objects that have outstanding reads |
397 | r Show objects that don't have outstanding reads | 397 | r Show objects that don't have outstanding reads |
398 | S Show objects that have slow work queued | 398 | S Show objects that have work queued |
399 | s Show objects that don't have slow work queued | 399 | s Show objects that don't have work queued |
400 | 400 | ||
401 | If neither side of a letter pair is given, then both are implied. For example: | 401 | If neither side of a letter pair is given, then both are implied. For example: |
402 | 402 | ||
diff --git a/Documentation/filesystems/nilfs2.txt b/Documentation/filesystems/nilfs2.txt index d3e7673995eb..d5c0cef38a71 100644 --- a/Documentation/filesystems/nilfs2.txt +++ b/Documentation/filesystems/nilfs2.txt | |||
@@ -49,7 +49,10 @@ Mount options | |||
49 | NILFS2 supports the following mount options: | 49 | NILFS2 supports the following mount options: |
50 | (*) == default | 50 | (*) == default |
51 | 51 | ||
52 | nobarrier Disables barriers. | 52 | barrier(*) This enables/disables the use of write barriers. This |
53 | nobarrier requires an IO stack which can support barriers, and | ||
54 | if nilfs gets an error on a barrier write, it will | ||
55 | disable again with a warning. | ||
53 | errors=continue Keep going on a filesystem error. | 56 | errors=continue Keep going on a filesystem error. |
54 | errors=remount-ro(*) Remount the filesystem read-only on an error. | 57 | errors=remount-ro(*) Remount the filesystem read-only on an error. |
55 | errors=panic Panic and halt the machine if an error occurs. | 58 | errors=panic Panic and halt the machine if an error occurs. |
@@ -74,9 +77,10 @@ norecovery Disable recovery of the filesystem on mount. | |||
74 | This disables every write access on the device for | 77 | This disables every write access on the device for |
75 | read-only mounts or snapshots. This option will fail | 78 | read-only mounts or snapshots. This option will fail |
76 | for r/w mounts on an unclean volume. | 79 | for r/w mounts on an unclean volume. |
77 | discard Issue discard/TRIM commands to the underlying block | 80 | discard This enables/disables the use of discard/TRIM commands. |
78 | device when blocks are freed. This is useful for SSD | 81 | nodiscard(*) The discard/TRIM commands are sent to the underlying |
79 | devices and sparse/thinly-provisioned LUNs. | 82 | block device when blocks are freed. This is useful |
83 | for SSD devices and sparse/thinly-provisioned LUNs. | ||
80 | 84 | ||
81 | NILFS2 usage | 85 | NILFS2 usage |
82 | ============ | 86 | ============ |
diff --git a/Documentation/filesystems/porting b/Documentation/filesystems/porting index a7e9746ee7ea..b12c89538680 100644 --- a/Documentation/filesystems/porting +++ b/Documentation/filesystems/porting | |||
@@ -273,3 +273,48 @@ it's safe to remove it. If you don't need it, remove it. | |||
273 | deliberate; as soon as struct block_device * is propagated in a reasonable | 273 | deliberate; as soon as struct block_device * is propagated in a reasonable |
274 | way by that code fixing will become trivial; until then nothing can be | 274 | way by that code fixing will become trivial; until then nothing can be |
275 | done. | 275 | done. |
276 | |||
277 | [mandatory] | ||
278 | |||
279 | block truncatation on error exit from ->write_begin, and ->direct_IO | ||
280 | moved from generic methods (block_write_begin, cont_write_begin, | ||
281 | nobh_write_begin, blockdev_direct_IO*) to callers. Take a look at | ||
282 | ext2_write_failed and callers for an example. | ||
283 | |||
284 | [mandatory] | ||
285 | |||
286 | ->truncate is going away. The whole truncate sequence needs to be | ||
287 | implemented in ->setattr, which is now mandatory for filesystems | ||
288 | implementing on-disk size changes. Start with a copy of the old inode_setattr | ||
289 | and vmtruncate, and the reorder the vmtruncate + foofs_vmtruncate sequence to | ||
290 | be in order of zeroing blocks using block_truncate_page or similar helpers, | ||
291 | size update and on finally on-disk truncation which should not fail. | ||
292 | inode_change_ok now includes the size checks for ATTR_SIZE and must be called | ||
293 | in the beginning of ->setattr unconditionally. | ||
294 | |||
295 | [mandatory] | ||
296 | |||
297 | ->clear_inode() and ->delete_inode() are gone; ->evict_inode() should | ||
298 | be used instead. It gets called whenever the inode is evicted, whether it has | ||
299 | remaining links or not. Caller does *not* evict the pagecache or inode-associated | ||
300 | metadata buffers; getting rid of those is responsibility of method, as it had | ||
301 | been for ->delete_inode(). | ||
302 | ->drop_inode() returns int now; it's called on final iput() with inode_lock | ||
303 | held and it returns true if filesystems wants the inode to be dropped. As before, | ||
304 | generic_drop_inode() is still the default and it's been updated appropriately. | ||
305 | generic_delete_inode() is also alive and it consists simply of return 1. Note that | ||
306 | all actual eviction work is done by caller after ->drop_inode() returns. | ||
307 | clear_inode() is gone; use end_writeback() instead. As before, it must | ||
308 | be called exactly once on each call of ->evict_inode() (as it used to be for | ||
309 | each call of ->delete_inode()). Unlike before, if you are using inode-associated | ||
310 | metadata buffers (i.e. mark_buffer_dirty_inode()), it's your responsibility to | ||
311 | call invalidate_inode_buffers() before end_writeback(). | ||
312 | No async writeback (and thus no calls of ->write_inode()) will happen | ||
313 | after end_writeback() returns, so actions that should not overlap with ->write_inode() | ||
314 | (e.g. freeing on-disk inode if i_nlink is 0) ought to be done after that call. | ||
315 | |||
316 | NOTE: checking i_nlink in the beginning of ->write_inode() and bailing out | ||
317 | if it's zero is not *and* *never* *had* *been* enough. Final unlink() and iput() | ||
318 | may happen while the inode is in the middle of ->write_inode(); e.g. if you blindly | ||
319 | free the on-disk inode, you may end up doing that while ->write_inode() is writing | ||
320 | to it. | ||
diff --git a/Documentation/filesystems/proc.txt b/Documentation/filesystems/proc.txt index 8fe8895894d8..a6aca8740883 100644 --- a/Documentation/filesystems/proc.txt +++ b/Documentation/filesystems/proc.txt | |||
@@ -33,7 +33,8 @@ Table of Contents | |||
33 | 2 Modifying System Parameters | 33 | 2 Modifying System Parameters |
34 | 34 | ||
35 | 3 Per-Process Parameters | 35 | 3 Per-Process Parameters |
36 | 3.1 /proc/<pid>/oom_adj - Adjust the oom-killer score | 36 | 3.1 /proc/<pid>/oom_adj & /proc/<pid>/oom_score_adj - Adjust the oom-killer |
37 | score | ||
37 | 3.2 /proc/<pid>/oom_score - Display current oom-killer score | 38 | 3.2 /proc/<pid>/oom_score - Display current oom-killer score |
38 | 3.3 /proc/<pid>/io - Display the IO accounting fields | 39 | 3.3 /proc/<pid>/io - Display the IO accounting fields |
39 | 3.4 /proc/<pid>/coredump_filter - Core dump filtering settings | 40 | 3.4 /proc/<pid>/coredump_filter - Core dump filtering settings |
@@ -1234,42 +1235,64 @@ of the kernel. | |||
1234 | CHAPTER 3: PER-PROCESS PARAMETERS | 1235 | CHAPTER 3: PER-PROCESS PARAMETERS |
1235 | ------------------------------------------------------------------------------ | 1236 | ------------------------------------------------------------------------------ |
1236 | 1237 | ||
1237 | 3.1 /proc/<pid>/oom_adj - Adjust the oom-killer score | 1238 | 3.1 /proc/<pid>/oom_adj & /proc/<pid>/oom_score_adj- Adjust the oom-killer score |
1238 | ------------------------------------------------------ | 1239 | -------------------------------------------------------------------------------- |
1239 | 1240 | ||
1240 | This file can be used to adjust the score used to select which processes | 1241 | These file can be used to adjust the badness heuristic used to select which |
1241 | should be killed in an out-of-memory situation. Giving it a high score will | 1242 | process gets killed in out of memory conditions. |
1242 | increase the likelihood of this process being killed by the oom-killer. Valid | 1243 | |
1243 | values are in the range -16 to +15, plus the special value -17, which disables | 1244 | The badness heuristic assigns a value to each candidate task ranging from 0 |
1244 | oom-killing altogether for this process. | 1245 | (never kill) to 1000 (always kill) to determine which process is targeted. The |
1245 | 1246 | units are roughly a proportion along that range of allowed memory the process | |
1246 | The process to be killed in an out-of-memory situation is selected among all others | 1247 | may allocate from based on an estimation of its current memory and swap use. |
1247 | based on its badness score. This value equals the original memory size of the process | 1248 | For example, if a task is using all allowed memory, its badness score will be |
1248 | and is then updated according to its CPU time (utime + stime) and the | 1249 | 1000. If it is using half of its allowed memory, its score will be 500. |
1249 | run time (uptime - start time). The longer it runs the smaller is the score. | 1250 | |
1250 | Badness score is divided by the square root of the CPU time and then by | 1251 | There is an additional factor included in the badness score: root |
1251 | the double square root of the run time. | 1252 | processes are given 3% extra memory over other tasks. |
1252 | 1253 | ||
1253 | Swapped out tasks are killed first. Half of each child's memory size is added to | 1254 | The amount of "allowed" memory depends on the context in which the oom killer |
1254 | the parent's score if they do not share the same memory. Thus forking servers | 1255 | was called. If it is due to the memory assigned to the allocating task's cpuset |
1255 | are the prime candidates to be killed. Having only one 'hungry' child will make | 1256 | being exhausted, the allowed memory represents the set of mems assigned to that |
1256 | parent less preferable than the child. | 1257 | cpuset. If it is due to a mempolicy's node(s) being exhausted, the allowed |
1257 | 1258 | memory represents the set of mempolicy nodes. If it is due to a memory | |
1258 | /proc/<pid>/oom_score shows process' current badness score. | 1259 | limit (or swap limit) being reached, the allowed memory is that configured |
1259 | 1260 | limit. Finally, if it is due to the entire system being out of memory, the | |
1260 | The following heuristics are then applied: | 1261 | allowed memory represents all allocatable resources. |
1261 | * if the task was reniced, its score doubles | 1262 | |
1262 | * superuser or direct hardware access tasks (CAP_SYS_ADMIN, CAP_SYS_RESOURCE | 1263 | The value of /proc/<pid>/oom_score_adj is added to the badness score before it |
1263 | or CAP_SYS_RAWIO) have their score divided by 4 | 1264 | is used to determine which task to kill. Acceptable values range from -1000 |
1264 | * if oom condition happened in one cpuset and checked process does not belong | 1265 | (OOM_SCORE_ADJ_MIN) to +1000 (OOM_SCORE_ADJ_MAX). This allows userspace to |
1265 | to it, its score is divided by 8 | 1266 | polarize the preference for oom killing either by always preferring a certain |
1266 | * the resulting score is multiplied by two to the power of oom_adj, i.e. | 1267 | task or completely disabling it. The lowest possible value, -1000, is |
1267 | points <<= oom_adj when it is positive and | 1268 | equivalent to disabling oom killing entirely for that task since it will always |
1268 | points >>= -(oom_adj) otherwise | 1269 | report a badness score of 0. |
1269 | 1270 | ||
1270 | The task with the highest badness score is then selected and its children | 1271 | Consequently, it is very simple for userspace to define the amount of memory to |
1271 | are killed, process itself will be killed in an OOM situation when it does | 1272 | consider for each task. Setting a /proc/<pid>/oom_score_adj value of +500, for |
1272 | not have children or some of them disabled oom like described above. | 1273 | example, is roughly equivalent to allowing the remainder of tasks sharing the |
1274 | same system, cpuset, mempolicy, or memory controller resources to use at least | ||
1275 | 50% more memory. A value of -500, on the other hand, would be roughly | ||
1276 | equivalent to discounting 50% of the task's allowed memory from being considered | ||
1277 | as scoring against the task. | ||
1278 | |||
1279 | For backwards compatibility with previous kernels, /proc/<pid>/oom_adj may also | ||
1280 | be used to tune the badness score. Its acceptable values range from -16 | ||
1281 | (OOM_ADJUST_MIN) to +15 (OOM_ADJUST_MAX) and a special value of -17 | ||
1282 | (OOM_DISABLE) to disable oom killing entirely for that task. Its value is | ||
1283 | scaled linearly with /proc/<pid>/oom_score_adj. | ||
1284 | |||
1285 | Writing to /proc/<pid>/oom_score_adj or /proc/<pid>/oom_adj will change the | ||
1286 | other with its scaled value. | ||
1287 | |||
1288 | NOTICE: /proc/<pid>/oom_adj is deprecated and will be removed, please see | ||
1289 | Documentation/feature-removal-schedule.txt. | ||
1290 | |||
1291 | Caveat: when a parent task is selected, the oom killer will sacrifice any first | ||
1292 | generation children with seperate address spaces instead, if possible. This | ||
1293 | avoids servers and important system daemons from being killed and loses the | ||
1294 | minimal amount of work. | ||
1295 | |||
1273 | 1296 | ||
1274 | 3.2 /proc/<pid>/oom_score - Display current oom-killer score | 1297 | 3.2 /proc/<pid>/oom_score - Display current oom-killer score |
1275 | ------------------------------------------------------------- | 1298 | ------------------------------------------------------------- |
diff --git a/Documentation/filesystems/squashfs.txt b/Documentation/filesystems/squashfs.txt index 203f7202cc9e..66699afd66ca 100644 --- a/Documentation/filesystems/squashfs.txt +++ b/Documentation/filesystems/squashfs.txt | |||
@@ -2,7 +2,7 @@ SQUASHFS 4.0 FILESYSTEM | |||
2 | ======================= | 2 | ======================= |
3 | 3 | ||
4 | Squashfs is a compressed read-only filesystem for Linux. | 4 | Squashfs is a compressed read-only filesystem for Linux. |
5 | It uses zlib compression to compress files, inodes and directories. | 5 | It uses zlib/lzo compression to compress files, inodes and directories. |
6 | Inodes in the system are very small and all blocks are packed to minimise | 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 | 7 | data overhead. Block sizes greater than 4K are supported up to a maximum |
8 | of 1Mbytes (default block size 128K). | 8 | of 1Mbytes (default block size 128K). |
diff --git a/Documentation/filesystems/sysfs-pci.txt b/Documentation/filesystems/sysfs-pci.txt index 85354b32d731..74eaac26f8b8 100644 --- a/Documentation/filesystems/sysfs-pci.txt +++ b/Documentation/filesystems/sysfs-pci.txt | |||
@@ -39,7 +39,7 @@ files, each with their own function. | |||
39 | local_cpus nearby CPU mask (cpumask, ro) | 39 | local_cpus nearby CPU mask (cpumask, ro) |
40 | remove remove device from kernel's list (ascii, wo) | 40 | remove remove device from kernel's list (ascii, wo) |
41 | resource PCI resource host addresses (ascii, ro) | 41 | resource PCI resource host addresses (ascii, ro) |
42 | resource0..N PCI resource N, if present (binary, mmap) | 42 | resource0..N PCI resource N, if present (binary, mmap, rw[1]) |
43 | resource0_wc..N_wc PCI WC map resource N, if prefetchable (binary, mmap) | 43 | resource0_wc..N_wc PCI WC map resource N, if prefetchable (binary, mmap) |
44 | rom PCI ROM resource, if present (binary, ro) | 44 | rom PCI ROM resource, if present (binary, ro) |
45 | subsystem_device PCI subsystem device (ascii, ro) | 45 | subsystem_device PCI subsystem device (ascii, ro) |
@@ -54,13 +54,16 @@ files, each with their own function. | |||
54 | binary - file contains binary data | 54 | binary - file contains binary data |
55 | cpumask - file contains a cpumask type | 55 | cpumask - file contains a cpumask type |
56 | 56 | ||
57 | [1] rw for RESOURCE_IO (I/O port) regions only | ||
58 | |||
57 | The read only files are informational, writes to them will be ignored, with | 59 | The read only files are informational, writes to them will be ignored, with |
58 | the exception of the 'rom' file. Writable files can be used to perform | 60 | the exception of the 'rom' file. Writable files can be used to perform |
59 | actions on the device (e.g. changing config space, detaching a device). | 61 | actions on the device (e.g. changing config space, detaching a device). |
60 | mmapable files are available via an mmap of the file at offset 0 and can be | 62 | mmapable files are available via an mmap of the file at offset 0 and can be |
61 | used to do actual device programming from userspace. Note that some platforms | 63 | used to do actual device programming from userspace. Note that some platforms |
62 | don't support mmapping of certain resources, so be sure to check the return | 64 | don't support mmapping of certain resources, so be sure to check the return |
63 | value from any attempted mmap. | 65 | value from any attempted mmap. The most notable of these are I/O port |
66 | resources, which also provide read/write access. | ||
64 | 67 | ||
65 | The 'enable' file provides a counter that indicates how many times the device | 68 | The 'enable' file provides a counter that indicates how many times the device |
66 | has been enabled. If the 'enable' file currently returns '4', and a '1' is | 69 | has been enabled. If the 'enable' file currently returns '4', and a '1' is |
diff --git a/Documentation/filesystems/sysfs.txt b/Documentation/filesystems/sysfs.txt index 931c806642c5..5d1335faec2d 100644 --- a/Documentation/filesystems/sysfs.txt +++ b/Documentation/filesystems/sysfs.txt | |||
@@ -4,7 +4,7 @@ sysfs - _The_ filesystem for exporting kernel objects. | |||
4 | Patrick Mochel <mochel@osdl.org> | 4 | Patrick Mochel <mochel@osdl.org> |
5 | Mike Murphy <mamurph@cs.clemson.edu> | 5 | Mike Murphy <mamurph@cs.clemson.edu> |
6 | 6 | ||
7 | Revised: 22 February 2009 | 7 | Revised: 15 July 2010 |
8 | Original: 10 January 2003 | 8 | Original: 10 January 2003 |
9 | 9 | ||
10 | 10 | ||
@@ -124,7 +124,7 @@ show and store methods of the attribute owners. | |||
124 | 124 | ||
125 | struct sysfs_ops { | 125 | struct sysfs_ops { |
126 | ssize_t (*show)(struct kobject *, struct attribute *, char *); | 126 | ssize_t (*show)(struct kobject *, struct attribute *, char *); |
127 | ssize_t (*store)(struct kobject *, struct attribute *, const char *); | 127 | ssize_t (*store)(struct kobject *, struct attribute *, const char *, size_t); |
128 | }; | 128 | }; |
129 | 129 | ||
130 | [ Subsystems should have already defined a struct kobj_type as a | 130 | [ Subsystems should have already defined a struct kobj_type as a |
@@ -139,18 +139,22 @@ calls the associated methods. | |||
139 | 139 | ||
140 | To illustrate: | 140 | To illustrate: |
141 | 141 | ||
142 | #define to_dev(obj) container_of(obj, struct device, kobj) | ||
142 | #define to_dev_attr(_attr) container_of(_attr, struct device_attribute, attr) | 143 | #define to_dev_attr(_attr) container_of(_attr, struct device_attribute, attr) |
143 | #define to_dev(d) container_of(d, struct device, kobj) | ||
144 | 144 | ||
145 | static ssize_t | 145 | static ssize_t dev_attr_show(struct kobject *kobj, struct attribute *attr, |
146 | dev_attr_show(struct kobject * kobj, struct attribute * attr, char * buf) | 146 | char *buf) |
147 | { | 147 | { |
148 | struct device_attribute * dev_attr = to_dev_attr(attr); | 148 | struct device_attribute *dev_attr = to_dev_attr(attr); |
149 | struct device * dev = to_dev(kobj); | 149 | struct device *dev = to_dev(kobj); |
150 | ssize_t ret = 0; | 150 | ssize_t ret = -EIO; |
151 | 151 | ||
152 | if (dev_attr->show) | 152 | if (dev_attr->show) |
153 | ret = dev_attr->show(dev, buf); | 153 | ret = dev_attr->show(dev, dev_attr, buf); |
154 | if (ret >= (ssize_t)PAGE_SIZE) { | ||
155 | print_symbol("dev_attr_show: %s returned bad count\n", | ||
156 | (unsigned long)dev_attr->show); | ||
157 | } | ||
154 | return ret; | 158 | return ret; |
155 | } | 159 | } |
156 | 160 | ||
@@ -163,10 +167,9 @@ To read or write attributes, show() or store() methods must be | |||
163 | specified when declaring the attribute. The method types should be as | 167 | specified when declaring the attribute. The method types should be as |
164 | simple as those defined for device attributes: | 168 | simple as those defined for device attributes: |
165 | 169 | ||
166 | ssize_t (*show)(struct device * dev, struct device_attribute * attr, | 170 | ssize_t (*show)(struct device *dev, struct device_attribute *attr, char *buf); |
167 | char * buf); | 171 | ssize_t (*store)(struct device *dev, struct device_attribute *attr, |
168 | ssize_t (*store)(struct device * dev, struct device_attribute * attr, | 172 | const char *buf, size_t count); |
169 | const char * buf); | ||
170 | 173 | ||
171 | IOW, they should take only an object, an attribute, and a buffer as parameters. | 174 | IOW, they should take only an object, an attribute, and a buffer as parameters. |
172 | 175 | ||
@@ -209,8 +212,8 @@ Other notes: | |||
209 | 212 | ||
210 | - show() should always use snprintf(). | 213 | - show() should always use snprintf(). |
211 | 214 | ||
212 | - store() should return the number of bytes used from the buffer. This | 215 | - store() should return the number of bytes used from the buffer. If the |
213 | can be done using strlen(). | 216 | entire buffer has been used, just return the count argument. |
214 | 217 | ||
215 | - show() or store() can always return errors. If a bad value comes | 218 | - show() or store() can always return errors. If a bad value comes |
216 | through, be sure to return an error. | 219 | through, be sure to return an error. |
@@ -223,15 +226,18 @@ Other notes: | |||
223 | 226 | ||
224 | A very simple (and naive) implementation of a device attribute is: | 227 | A very simple (and naive) implementation of a device attribute is: |
225 | 228 | ||
226 | static ssize_t show_name(struct device *dev, struct device_attribute *attr, char *buf) | 229 | static ssize_t show_name(struct device *dev, struct device_attribute *attr, |
230 | char *buf) | ||
227 | { | 231 | { |
228 | return snprintf(buf, PAGE_SIZE, "%s\n", dev->name); | 232 | return snprintf(buf, PAGE_SIZE, "%s\n", dev->name); |
229 | } | 233 | } |
230 | 234 | ||
231 | static ssize_t store_name(struct device * dev, const char * buf) | 235 | static ssize_t store_name(struct device *dev, struct device_attribute *attr, |
236 | const char *buf, size_t count) | ||
232 | { | 237 | { |
233 | sscanf(buf, "%20s", dev->name); | 238 | snprintf(dev->name, sizeof(dev->name), "%.*s", |
234 | return strnlen(buf, PAGE_SIZE); | 239 | (int)min(count, sizeof(dev->name) - 1), buf); |
240 | return count; | ||
235 | } | 241 | } |
236 | 242 | ||
237 | static DEVICE_ATTR(name, S_IRUGO, show_name, store_name); | 243 | static DEVICE_ATTR(name, S_IRUGO, show_name, store_name); |
@@ -327,7 +333,7 @@ Structure: | |||
327 | struct bus_attribute { | 333 | struct bus_attribute { |
328 | struct attribute attr; | 334 | struct attribute attr; |
329 | ssize_t (*show)(struct bus_type *, char * buf); | 335 | ssize_t (*show)(struct bus_type *, char * buf); |
330 | ssize_t (*store)(struct bus_type *, const char * buf); | 336 | ssize_t (*store)(struct bus_type *, const char * buf, size_t count); |
331 | }; | 337 | }; |
332 | 338 | ||
333 | Declaring: | 339 | Declaring: |
diff --git a/Documentation/filesystems/vfs.txt b/Documentation/filesystems/vfs.txt index 94677e7dcb13..ed7e5efc06d8 100644 --- a/Documentation/filesystems/vfs.txt +++ b/Documentation/filesystems/vfs.txt | |||
@@ -727,7 +727,6 @@ struct file_operations { | |||
727 | ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t); | 727 | ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t); |
728 | int (*readdir) (struct file *, void *, filldir_t); | 728 | int (*readdir) (struct file *, void *, filldir_t); |
729 | unsigned int (*poll) (struct file *, struct poll_table_struct *); | 729 | unsigned int (*poll) (struct file *, struct poll_table_struct *); |
730 | int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long); | ||
731 | long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); | 730 | long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); |
732 | long (*compat_ioctl) (struct file *, unsigned int, unsigned long); | 731 | long (*compat_ioctl) (struct file *, unsigned int, unsigned long); |
733 | int (*mmap) (struct file *, struct vm_area_struct *); | 732 | int (*mmap) (struct file *, struct vm_area_struct *); |
@@ -768,10 +767,7 @@ otherwise noted. | |||
768 | activity on this file and (optionally) go to sleep until there | 767 | activity on this file and (optionally) go to sleep until there |
769 | is activity. Called by the select(2) and poll(2) system calls | 768 | is activity. Called by the select(2) and poll(2) system calls |
770 | 769 | ||
771 | ioctl: called by the ioctl(2) system call | 770 | unlocked_ioctl: called by the ioctl(2) system call. |
772 | |||
773 | unlocked_ioctl: called by the ioctl(2) system call. Filesystems that do not | ||
774 | require the BKL should use this method instead of the ioctl() above. | ||
775 | 771 | ||
776 | compat_ioctl: called by the ioctl(2) system call when 32 bit system calls | 772 | compat_ioctl: called by the ioctl(2) system call when 32 bit system calls |
777 | are used on 64 bit kernels. | 773 | are used on 64 bit kernels. |
diff --git a/Documentation/firmware_class/hotplug-script b/Documentation/firmware_class/hotplug-script index 1990130f2ab1..8143a950b607 100644 --- a/Documentation/firmware_class/hotplug-script +++ b/Documentation/firmware_class/hotplug-script | |||
@@ -6,11 +6,12 @@ | |||
6 | 6 | ||
7 | HOTPLUG_FW_DIR=/usr/lib/hotplug/firmware/ | 7 | HOTPLUG_FW_DIR=/usr/lib/hotplug/firmware/ |
8 | 8 | ||
9 | echo 1 > /sys/$DEVPATH/loading | 9 | if [ "$SUBSYSTEM" == "firmware" -a "$ACTION" == "add" ]; then |
10 | cat $HOTPLUG_FW_DIR/$FIRMWARE > /sys/$DEVPATH/data | 10 | if [ -f $HOTPLUG_FW_DIR/$FIRMWARE ]; then |
11 | echo 0 > /sys/$DEVPATH/loading | 11 | echo 1 > /sys/$DEVPATH/loading |
12 | 12 | cat $HOTPLUG_FW_DIR/$FIRMWARE > /sys/$DEVPATH/data | |
13 | # To cancel the load in case of error: | 13 | echo 0 > /sys/$DEVPATH/loading |
14 | # | 14 | else |
15 | # echo -1 > /sys/$DEVPATH/loading | 15 | echo -1 > /sys/$DEVPATH/loading |
16 | # | 16 | fi |
17 | fi | ||
diff --git a/Documentation/gpio.txt b/Documentation/gpio.txt index c2c6e9b39bbe..d96a6dba5748 100644 --- a/Documentation/gpio.txt +++ b/Documentation/gpio.txt | |||
@@ -158,10 +158,11 @@ and configure pullups/pulldowns appropriately.) | |||
158 | Spinlock-Safe GPIO access | 158 | Spinlock-Safe GPIO access |
159 | ------------------------- | 159 | ------------------------- |
160 | Most GPIO controllers can be accessed with memory read/write instructions. | 160 | Most GPIO controllers can be accessed with memory read/write instructions. |
161 | That doesn't need to sleep, and can safely be done from inside IRQ handlers. | 161 | Those don't need to sleep, and can safely be done from inside hard |
162 | (That includes hardirq contexts on RT kernels.) | 162 | (nonthreaded) IRQ handlers and similar contexts. |
163 | 163 | ||
164 | Use these calls to access such GPIOs: | 164 | Use the following calls to access such GPIOs, |
165 | for which gpio_cansleep() will always return false (see below): | ||
165 | 166 | ||
166 | /* GPIO INPUT: return zero or nonzero */ | 167 | /* GPIO INPUT: return zero or nonzero */ |
167 | int gpio_get_value(unsigned gpio); | 168 | int gpio_get_value(unsigned gpio); |
@@ -210,9 +211,31 @@ To access such GPIOs, a different set of accessors is defined: | |||
210 | /* GPIO OUTPUT, might sleep */ | 211 | /* GPIO OUTPUT, might sleep */ |
211 | void gpio_set_value_cansleep(unsigned gpio, int value); | 212 | void gpio_set_value_cansleep(unsigned gpio, int value); |
212 | 213 | ||
213 | Other than the fact that these calls might sleep, and will not be ignored | 214 | |
214 | for GPIOs that can't be accessed from IRQ handlers, these calls act the | 215 | Accessing such GPIOs requires a context which may sleep, for example |
215 | same as the spinlock-safe calls. | 216 | a threaded IRQ handler, and those accessors must be used instead of |
217 | spinlock-safe accessors without the cansleep() name suffix. | ||
218 | |||
219 | Other than the fact that these accessors might sleep, and will work | ||
220 | on GPIOs that can't be accessed from hardIRQ handlers, these calls act | ||
221 | the same as the spinlock-safe calls. | ||
222 | |||
223 | ** IN ADDITION ** calls to setup and configure such GPIOs must be made | ||
224 | from contexts which may sleep, since they may need to access the GPIO | ||
225 | controller chip too: (These setup calls are usually made from board | ||
226 | setup or driver probe/teardown code, so this is an easy constraint.) | ||
227 | |||
228 | gpio_direction_input() | ||
229 | gpio_direction_output() | ||
230 | gpio_request() | ||
231 | |||
232 | ## gpio_request_one() | ||
233 | ## gpio_request_array() | ||
234 | ## gpio_free_array() | ||
235 | |||
236 | gpio_free() | ||
237 | gpio_set_debounce() | ||
238 | |||
216 | 239 | ||
217 | 240 | ||
218 | Claiming and Releasing GPIOs | 241 | Claiming and Releasing GPIOs |
diff --git a/Documentation/hwmon/coretemp b/Documentation/hwmon/coretemp index 92267b62db59..25568f844804 100644 --- a/Documentation/hwmon/coretemp +++ b/Documentation/hwmon/coretemp | |||
@@ -21,8 +21,8 @@ Temperature is measured in degrees Celsius and measurement resolution is | |||
21 | 1 degree C. Valid temperatures are from 0 to TjMax degrees C, because | 21 | 1 degree C. Valid temperatures are from 0 to TjMax degrees C, because |
22 | the actual value of temperature register is in fact a delta from TjMax. | 22 | the actual value of temperature register is in fact a delta from TjMax. |
23 | 23 | ||
24 | Temperature known as TjMax is the maximum junction temperature of processor. | 24 | Temperature known as TjMax is the maximum junction temperature of processor, |
25 | Intel defines this temperature as 85C or 100C. At this temperature, protection | 25 | which depends on the CPU model. See table below. At this temperature, protection |
26 | mechanism will perform actions to forcibly cool down the processor. Alarm | 26 | mechanism will perform actions to forcibly cool down the processor. Alarm |
27 | may be raised, if the temperature grows enough (more than TjMax) to trigger | 27 | may be raised, if the temperature grows enough (more than TjMax) to trigger |
28 | the Out-Of-Spec bit. Following table summarizes the exported sysfs files: | 28 | the Out-Of-Spec bit. Following table summarizes the exported sysfs files: |
@@ -38,3 +38,104 @@ temp1_label - Contains string "Core X", where X is processor | |||
38 | The TjMax temperature is set to 85 degrees C if undocumented model specific | 38 | The TjMax temperature is set to 85 degrees C if undocumented model specific |
39 | register (UMSR) 0xee has bit 30 set. If not the TjMax is 100 degrees C as | 39 | register (UMSR) 0xee has bit 30 set. If not the TjMax is 100 degrees C as |
40 | (sometimes) documented in processor datasheet. | 40 | (sometimes) documented in processor datasheet. |
41 | |||
42 | Appendix A. Known TjMax lists (TBD): | ||
43 | Some information comes from ark.intel.com | ||
44 | |||
45 | Process Processor TjMax(C) | ||
46 | |||
47 | 32nm Core i3/i5/i7 Processors | ||
48 | i7 660UM/640/620, 640LM/620, 620M, 610E 105 | ||
49 | i5 540UM/520/430, 540M/520/450/430 105 | ||
50 | i3 330E, 370M/350/330 90 rPGA, 105 BGA | ||
51 | i3 330UM 105 | ||
52 | |||
53 | 32nm Core i7 Extreme Processors | ||
54 | 980X 100 | ||
55 | |||
56 | 32nm Celeron Processors | ||
57 | U3400 105 | ||
58 | P4505/P4500 90 | ||
59 | |||
60 | 45nm Xeon Processors 5400 Quad-Core | ||
61 | X5492, X5482, X5472, X5470, X5460, X5450 85 | ||
62 | E5472, E5462, E5450/40/30/20/10/05 85 | ||
63 | L5408 95 | ||
64 | L5430, L5420, L5410 70 | ||
65 | |||
66 | 45nm Xeon Processors 5200 Dual-Core | ||
67 | X5282, X5272, X5270, X5260 90 | ||
68 | E5240 90 | ||
69 | E5205, E5220 70, 90 | ||
70 | L5240 70 | ||
71 | L5238, L5215 95 | ||
72 | |||
73 | 45nm Atom Processors | ||
74 | D525/510/425/410 100 | ||
75 | Z560/550/540/530P/530/520PT/520/515/510PT/510P 90 | ||
76 | Z510/500 90 | ||
77 | N475/470/455/450 100 | ||
78 | N280/270 90 | ||
79 | 330/230 125 | ||
80 | |||
81 | 45nm Core2 Processors | ||
82 | Solo ULV SU3500/3300 100 | ||
83 | T9900/9800/9600/9550/9500/9400/9300/8300/8100 105 | ||
84 | T6670/6500/6400 105 | ||
85 | T6600 90 | ||
86 | SU9600/9400/9300 105 | ||
87 | SP9600/9400 105 | ||
88 | SL9600/9400/9380/9300 105 | ||
89 | P9700/9600/9500/8800/8700/8600/8400/7570 105 | ||
90 | P7550/7450 90 | ||
91 | |||
92 | 45nm Core2 Quad Processors | ||
93 | Q9100/9000 100 | ||
94 | |||
95 | 45nm Core2 Extreme Processors | ||
96 | X9100/9000 105 | ||
97 | QX9300 100 | ||
98 | |||
99 | 45nm Core i3/i5/i7 Processors | ||
100 | i7 940XM/920 100 | ||
101 | i7 840QM/820/740/720 100 | ||
102 | |||
103 | 45nm Celeron Processors | ||
104 | SU2300 100 | ||
105 | 900 105 | ||
106 | |||
107 | 65nm Core2 Duo Processors | ||
108 | Solo U2200, U2100 100 | ||
109 | U7700/7600/7500 100 | ||
110 | T7800/7700/7600/7500/7400/7300/7250/7200/7100 100 | ||
111 | T5870/5670/5600/5550/5500/5470/5450/5300/5270 100 | ||
112 | T5250 100 | ||
113 | T5800/5750/5200 85 | ||
114 | L7700/7500/7400/7300/7200 100 | ||
115 | |||
116 | 65nm Core2 Extreme Processors | ||
117 | X7900/7800 100 | ||
118 | |||
119 | 65nm Core Duo Processors | ||
120 | U2500/2400 100 | ||
121 | T2700/2600/2450/2400/2350/2300E/2300/2250/2050 100 | ||
122 | L2500/2400/2300 100 | ||
123 | |||
124 | 65nm Core Solo Processors | ||
125 | U1500/1400/1300 100 | ||
126 | T1400/1350/1300/1250 100 | ||
127 | |||
128 | 65nm Xeon Processors 5000 Quad-Core | ||
129 | X5000 90-95 | ||
130 | E5000 80 | ||
131 | L5000 70 | ||
132 | L5318 95 | ||
133 | |||
134 | 65nm Xeon Processors 5000 Dual-Core | ||
135 | 5080, 5063, 5060, 5050, 5030 80-90 | ||
136 | 5160, 5150, 5148, 5140, 5130, 5120, 5110 80 | ||
137 | L5138 100 | ||
138 | |||
139 | 65nm Celeron Processors | ||
140 | T1700/1600 100 | ||
141 | 560/550/540/530 100 | ||
diff --git a/Documentation/hwmon/emc2103 b/Documentation/hwmon/emc2103 new file mode 100644 index 000000000000..a12b2c127140 --- /dev/null +++ b/Documentation/hwmon/emc2103 | |||
@@ -0,0 +1,33 @@ | |||
1 | Kernel driver emc2103 | ||
2 | ====================== | ||
3 | |||
4 | Supported chips: | ||
5 | * SMSC EMC2103 | ||
6 | Addresses scanned: I2C 0x2e | ||
7 | Prefix: 'emc2103' | ||
8 | Datasheet: Not public | ||
9 | |||
10 | Authors: | ||
11 | Steve Glendinning <steve.glendinning@smsc.com> | ||
12 | |||
13 | Description | ||
14 | ----------- | ||
15 | |||
16 | The Standard Microsystems Corporation (SMSC) EMC2103 chips | ||
17 | contain up to 4 temperature sensors and a single fan controller. | ||
18 | |||
19 | Fan rotation speeds are reported in RPM (rotations per minute). An alarm is | ||
20 | triggered if the rotation speed has dropped below a programmable limit. Fan | ||
21 | readings can be divided by a programmable divider (1, 2, 4 or 8) to give | ||
22 | the readings more range or accuracy. Not all RPM values can accurately be | ||
23 | represented, so some rounding is done. With a divider of 1, the lowest | ||
24 | representable value is 480 RPM. | ||
25 | |||
26 | This driver supports RPM based control, to use this a fan target | ||
27 | should be written to fan1_target and pwm1_enable should be set to 3. | ||
28 | |||
29 | The 2103-2 and 2103-4 variants have a third temperature sensor, which can | ||
30 | be connected to two anti-parallel diodes. These values can be read | ||
31 | as temp3 and temp4. If only one diode is attached to this channel, temp4 | ||
32 | will show as "fault". The module parameter "apd=0" can be used to suppress | ||
33 | this 4th channel when anti-parallel diodes are not fitted. | ||
diff --git a/Documentation/hwmon/f71882fg b/Documentation/hwmon/f71882fg index a7952c2bd959..1a07fd674cd0 100644 --- a/Documentation/hwmon/f71882fg +++ b/Documentation/hwmon/f71882fg | |||
@@ -2,6 +2,10 @@ Kernel driver f71882fg | |||
2 | ====================== | 2 | ====================== |
3 | 3 | ||
4 | Supported chips: | 4 | Supported chips: |
5 | * Fintek F71808E | ||
6 | Prefix: 'f71808fg' | ||
7 | Addresses scanned: none, address read from Super I/O config space | ||
8 | Datasheet: Not public | ||
5 | * Fintek F71858FG | 9 | * Fintek F71858FG |
6 | Prefix: 'f71858fg' | 10 | Prefix: 'f71858fg' |
7 | Addresses scanned: none, address read from Super I/O config space | 11 | Addresses scanned: none, address read from Super I/O config space |
diff --git a/Documentation/hwmon/jc42 b/Documentation/hwmon/jc42 new file mode 100644 index 000000000000..0e76ef12e4c6 --- /dev/null +++ b/Documentation/hwmon/jc42 | |||
@@ -0,0 +1,97 @@ | |||
1 | Kernel driver jc42 | ||
2 | ================== | ||
3 | |||
4 | Supported chips: | ||
5 | * Analog Devices ADT7408 | ||
6 | Prefix: 'adt7408' | ||
7 | Addresses scanned: I2C 0x18 - 0x1f | ||
8 | Datasheets: | ||
9 | http://www.analog.com/static/imported-files/data_sheets/ADT7408.pdf | ||
10 | * IDT TSE2002B3, TS3000B3 | ||
11 | Prefix: 'tse2002b3', 'ts3000b3' | ||
12 | Addresses scanned: I2C 0x18 - 0x1f | ||
13 | Datasheets: | ||
14 | http://www.idt.com/products/getdoc.cfm?docid=18715691 | ||
15 | http://www.idt.com/products/getdoc.cfm?docid=18715692 | ||
16 | * Maxim MAX6604 | ||
17 | Prefix: 'max6604' | ||
18 | Addresses scanned: I2C 0x18 - 0x1f | ||
19 | Datasheets: | ||
20 | http://datasheets.maxim-ic.com/en/ds/MAX6604.pdf | ||
21 | * Microchip MCP9805, MCP98242, MCP98243, MCP9843 | ||
22 | Prefixes: 'mcp9805', 'mcp98242', 'mcp98243', 'mcp9843' | ||
23 | Addresses scanned: I2C 0x18 - 0x1f | ||
24 | Datasheets: | ||
25 | http://ww1.microchip.com/downloads/en/DeviceDoc/21977b.pdf | ||
26 | http://ww1.microchip.com/downloads/en/DeviceDoc/21996a.pdf | ||
27 | http://ww1.microchip.com/downloads/en/DeviceDoc/22153c.pdf | ||
28 | * NXP Semiconductors SE97, SE97B | ||
29 | Prefix: 'se97' | ||
30 | Addresses scanned: I2C 0x18 - 0x1f | ||
31 | Datasheets: | ||
32 | http://www.nxp.com/documents/data_sheet/SE97.pdf | ||
33 | http://www.nxp.com/documents/data_sheet/SE97B.pdf | ||
34 | * NXP Semiconductors SE98 | ||
35 | Prefix: 'se98' | ||
36 | Addresses scanned: I2C 0x18 - 0x1f | ||
37 | Datasheets: | ||
38 | http://www.nxp.com/documents/data_sheet/SE98.pdf | ||
39 | * ON Semiconductor CAT34TS02, CAT6095 | ||
40 | Prefix: 'cat34ts02', 'cat6095' | ||
41 | Addresses scanned: I2C 0x18 - 0x1f | ||
42 | Datasheet: | ||
43 | http://www.onsemi.com/pub_link/Collateral/CAT34TS02-D.PDF | ||
44 | http://www.onsemi.com/pub/Collateral/CAT6095-D.PDF | ||
45 | * ST Microelectronics STTS424, STTS424E02 | ||
46 | Prefix: 'stts424' | ||
47 | Addresses scanned: I2C 0x18 - 0x1f | ||
48 | Datasheets: | ||
49 | http://www.st.com/stonline/products/literature/ds/13447/stts424.pdf | ||
50 | http://www.st.com/stonline/products/literature/ds/13448/stts424e02.pdf | ||
51 | * JEDEC JC 42.4 compliant temperature sensor chips | ||
52 | Prefix: 'jc42' | ||
53 | Addresses scanned: I2C 0x18 - 0x1f | ||
54 | Datasheet: - | ||
55 | |||
56 | Author: | ||
57 | Guenter Roeck <guenter.roeck@ericsson.com> | ||
58 | |||
59 | |||
60 | Description | ||
61 | ----------- | ||
62 | |||
63 | This driver implements support for JEDEC JC 42.4 compliant temperature sensors. | ||
64 | The driver auto-detects the chips listed above, but can be manually instantiated | ||
65 | to support other JC 42.4 compliant chips. | ||
66 | |||
67 | Example: the following will load the driver for a generic JC 42.4 compliant | ||
68 | temperature sensor at address 0x18 on I2C bus #1: | ||
69 | |||
70 | # modprobe jc42 | ||
71 | # echo jc42 0x18 > /sys/bus/i2c/devices/i2c-1/new_device | ||
72 | |||
73 | A JC 42.4 compliant chip supports a single temperature sensor. Minimum, maximum, | ||
74 | and critical temperature can be configured. There are alarms for high, low, | ||
75 | and critical thresholds. | ||
76 | |||
77 | There is also an hysteresis to control the thresholds for resetting alarms. | ||
78 | Per JC 42.4 specification, the hysteresis threshold can be configured to 0, 1.5, | ||
79 | 3.0, and 6.0 degrees C. Configured hysteresis values will be rounded to those | ||
80 | limits. The chip supports only a single register to configure the hysteresis, | ||
81 | which applies to all limits. This register can be written by writing into | ||
82 | temp1_crit_hyst. Other hysteresis attributes are read-only. | ||
83 | |||
84 | Sysfs entries | ||
85 | ------------- | ||
86 | |||
87 | temp1_input Temperature (RO) | ||
88 | temp1_min Minimum temperature (RW) | ||
89 | temp1_max Maximum temperature (RW) | ||
90 | temp1_crit Critical high temperature (RW) | ||
91 | |||
92 | temp1_crit_hyst Critical hysteresis temperature (RW) | ||
93 | temp1_max_hyst Maximum hysteresis temperature (RO) | ||
94 | |||
95 | temp1_min_alarm Temperature low alarm | ||
96 | temp1_max_alarm Temperature high alarm | ||
97 | temp1_crit_alarm Temperature critical alarm | ||
diff --git a/Documentation/hwmon/ltc4245 b/Documentation/hwmon/ltc4245 index 86b5880d8502..b478b0864965 100644 --- a/Documentation/hwmon/ltc4245 +++ b/Documentation/hwmon/ltc4245 | |||
@@ -72,9 +72,31 @@ in6_min_alarm 5v output undervoltage alarm | |||
72 | in7_min_alarm 3v output undervoltage alarm | 72 | in7_min_alarm 3v output undervoltage alarm |
73 | in8_min_alarm Vee (-12v) output undervoltage alarm | 73 | in8_min_alarm Vee (-12v) output undervoltage alarm |
74 | 74 | ||
75 | in9_input GPIO voltage data | 75 | in9_input GPIO voltage data (see note 1) |
76 | in10_input GPIO voltage data (see note 1) | ||
77 | in11_input GPIO voltage data (see note 1) | ||
76 | 78 | ||
77 | power1_input 12v power usage (mW) | 79 | power1_input 12v power usage (mW) |
78 | power2_input 5v power usage (mW) | 80 | power2_input 5v power usage (mW) |
79 | power3_input 3v power usage (mW) | 81 | power3_input 3v power usage (mW) |
80 | power4_input Vee (-12v) power usage (mW) | 82 | power4_input Vee (-12v) power usage (mW) |
83 | |||
84 | |||
85 | Note 1 | ||
86 | ------ | ||
87 | |||
88 | If you have NOT configured the driver to sample all GPIO pins as analog | ||
89 | voltages, then the in10_input and in11_input sysfs attributes will not be | ||
90 | created. The driver will sample the GPIO pin that is currently connected to the | ||
91 | ADC as an analog voltage, and report the value in in9_input. | ||
92 | |||
93 | If you have configured the driver to sample all GPIO pins as analog voltages, | ||
94 | then they will be sampled in round-robin fashion. If userspace reads too | ||
95 | slowly, -EAGAIN will be returned when you read the sysfs attribute containing | ||
96 | the sensor reading. | ||
97 | |||
98 | The LTC4245 chip can be configured to sample all GPIO pins with two methods: | ||
99 | 1) platform data -- see include/linux/i2c/ltc4245.h | ||
100 | 2) OF device tree -- add the "ltc4245,use-extra-gpios" property to each chip | ||
101 | |||
102 | The default mode of operation is to sample a single GPIO pin. | ||
diff --git a/Documentation/hwmon/pc87427 b/Documentation/hwmon/pc87427 index db5cc1227a83..8fdd08c9e48b 100644 --- a/Documentation/hwmon/pc87427 +++ b/Documentation/hwmon/pc87427 | |||
@@ -18,10 +18,11 @@ Description | |||
18 | 18 | ||
19 | The National Semiconductor Super I/O chip includes complete hardware | 19 | The National Semiconductor Super I/O chip includes complete hardware |
20 | monitoring capabilities. It can monitor up to 18 voltages, 8 fans and | 20 | monitoring capabilities. It can monitor up to 18 voltages, 8 fans and |
21 | 6 temperature sensors. Only the fans are supported at the moment. | 21 | 6 temperature sensors. Only the fans and temperatures are supported at |
22 | the moment, voltages aren't. | ||
22 | 23 | ||
23 | This chip also has fan controlling features, which are not yet supported | 24 | This chip also has fan controlling features (up to 4 PWM outputs), |
24 | by this driver either. | 25 | which are partly supported by this driver. |
25 | 26 | ||
26 | The driver assumes that no more than one chip is present, which seems | 27 | The driver assumes that no more than one chip is present, which seems |
27 | reasonable. | 28 | reasonable. |
@@ -36,3 +37,23 @@ signal. Speeds down to 83 RPM can be measured. | |||
36 | An alarm is triggered if the rotation speed drops below a programmable | 37 | An alarm is triggered if the rotation speed drops below a programmable |
37 | limit. Another alarm is triggered if the speed is too low to be measured | 38 | limit. Another alarm is triggered if the speed is too low to be measured |
38 | (including stalled or missing fan). | 39 | (including stalled or missing fan). |
40 | |||
41 | |||
42 | Fan Speed Control | ||
43 | ----------------- | ||
44 | |||
45 | Fan speed can be controlled by PWM outputs. There are 4 possible modes: | ||
46 | always off, always on, manual and automatic. The latter isn't supported | ||
47 | by the driver: you can only return to that mode if it was the original | ||
48 | setting, and the configuration interface is missing. | ||
49 | |||
50 | |||
51 | Temperature Monitoring | ||
52 | ---------------------- | ||
53 | |||
54 | The PC87427 relies on external sensors (following the SensorPath | ||
55 | standard), so the resolution and range depend on the type of sensor | ||
56 | connected. The integer part can be 8-bit or 9-bit, and can be signed or | ||
57 | not. I couldn't find a way to figure out the external sensor data | ||
58 | temperature format, so user-space adjustment (typically by a factor 2) | ||
59 | may be required. | ||
diff --git a/Documentation/hwmon/pkgtemp b/Documentation/hwmon/pkgtemp new file mode 100644 index 000000000000..c8e1fb0fadd3 --- /dev/null +++ b/Documentation/hwmon/pkgtemp | |||
@@ -0,0 +1,36 @@ | |||
1 | Kernel driver pkgtemp | ||
2 | ====================== | ||
3 | |||
4 | Supported chips: | ||
5 | * Intel family | ||
6 | Prefix: 'pkgtemp' | ||
7 | CPUID: | ||
8 | Datasheet: Intel 64 and IA-32 Architectures Software Developer's Manual | ||
9 | Volume 3A: System Programming Guide | ||
10 | |||
11 | Author: Fenghua Yu | ||
12 | |||
13 | Description | ||
14 | ----------- | ||
15 | |||
16 | This driver permits reading package level temperature sensor embedded inside | ||
17 | Intel CPU package. The sensors can be in core, uncore, memory controller, or | ||
18 | other components in a package. The feature is first implemented in Intel Sandy | ||
19 | Bridge platform. | ||
20 | |||
21 | Temperature is measured in degrees Celsius and measurement resolution is | ||
22 | 1 degree C. Valid temperatures are from 0 to TjMax degrees C, because the actual | ||
23 | value of temperature register is in fact a delta from TjMax. | ||
24 | |||
25 | Temperature known as TjMax is the maximum junction temperature of package. | ||
26 | We get this from MSR_IA32_TEMPERATURE_TARGET. If the MSR is not accessible, | ||
27 | we define TjMax as 100 degrees Celsius. At this temperature, protection | ||
28 | mechanism will perform actions to forcibly cool down the package. Alarm | ||
29 | may be raised, if the temperature grows enough (more than TjMax) to trigger | ||
30 | the Out-Of-Spec bit. Following table summarizes the exported sysfs files: | ||
31 | |||
32 | temp1_input - Package temperature (in millidegrees Celsius). | ||
33 | temp1_max - All cooling devices should be turned on. | ||
34 | temp1_crit - Maximum junction temperature (in millidegrees Celsius). | ||
35 | temp1_crit_alarm - Set when Out-of-spec bit is set, never clears. | ||
36 | Correct CPU operation is no longer guaranteed. | ||
diff --git a/Documentation/hwmon/smm665 b/Documentation/hwmon/smm665 new file mode 100644 index 000000000000..3820fc9ca52d --- /dev/null +++ b/Documentation/hwmon/smm665 | |||
@@ -0,0 +1,157 @@ | |||
1 | Kernel driver smm665 | ||
2 | ==================== | ||
3 | |||
4 | Supported chips: | ||
5 | * Summit Microelectronics SMM465 | ||
6 | Prefix: 'smm465' | ||
7 | Addresses scanned: - | ||
8 | Datasheet: | ||
9 | http://www.summitmicro.com/prod_select/summary/SMM465/SMM465DS.pdf | ||
10 | * Summit Microelectronics SMM665, SMM665B | ||
11 | Prefix: 'smm665' | ||
12 | Addresses scanned: - | ||
13 | Datasheet: | ||
14 | http://www.summitmicro.com/prod_select/summary/SMM665/SMM665B_2089_20.pdf | ||
15 | * Summit Microelectronics SMM665C | ||
16 | Prefix: 'smm665c' | ||
17 | Addresses scanned: - | ||
18 | Datasheet: | ||
19 | http://www.summitmicro.com/prod_select/summary/SMM665C/SMM665C_2125.pdf | ||
20 | * Summit Microelectronics SMM764 | ||
21 | Prefix: 'smm764' | ||
22 | Addresses scanned: - | ||
23 | Datasheet: | ||
24 | http://www.summitmicro.com/prod_select/summary/SMM764/SMM764_2098.pdf | ||
25 | * Summit Microelectronics SMM766, SMM766B | ||
26 | Prefix: 'smm766' | ||
27 | Addresses scanned: - | ||
28 | Datasheets: | ||
29 | http://www.summitmicro.com/prod_select/summary/SMM766/SMM766_2086.pdf | ||
30 | http://www.summitmicro.com/prod_select/summary/SMM766B/SMM766B_2122.pdf | ||
31 | |||
32 | Author: Guenter Roeck <guenter.roeck@ericsson.com> | ||
33 | |||
34 | |||
35 | Module Parameters | ||
36 | ----------------- | ||
37 | |||
38 | * vref: int | ||
39 | Default: 1250 (mV) | ||
40 | Reference voltage on VREF_ADC pin in mV. It should not be necessary to set | ||
41 | this parameter unless a non-default reference voltage is used. | ||
42 | |||
43 | |||
44 | Description | ||
45 | ----------- | ||
46 | |||
47 | [From datasheet] The SMM665 is an Active DC Output power supply Controller | ||
48 | that monitors, margins and cascade sequences power. The part monitors six | ||
49 | power supply channels as well as VDD, 12V input, two general-purpose analog | ||
50 | inputs and an internal temperature sensor using a 10-bit ADC. | ||
51 | |||
52 | Each monitored channel has its own high and low limits, plus a critical | ||
53 | limit. | ||
54 | |||
55 | Support for SMM465, SMM764, and SMM766 has been implemented but is untested. | ||
56 | |||
57 | |||
58 | Usage Notes | ||
59 | ----------- | ||
60 | |||
61 | This driver does not probe for devices, since there is no register which | ||
62 | can be safely used to identify the chip. You will have to instantiate | ||
63 | the devices explicitly. When instantiating the device, you have to specify | ||
64 | its configuration register address. | ||
65 | |||
66 | Example: the following will load the driver for an SMM665 at address 0x57 | ||
67 | on I2C bus #1: | ||
68 | $ modprobe smm665 | ||
69 | $ echo smm665 0x57 > /sys/bus/i2c/devices/i2c-1/new_device | ||
70 | |||
71 | |||
72 | Sysfs entries | ||
73 | ------------- | ||
74 | |||
75 | This driver uses the values in the datasheet to convert ADC register values | ||
76 | into the values specified in the sysfs-interface document. All attributes are | ||
77 | read only. | ||
78 | |||
79 | Min, max, lcrit, and crit values are used by the chip to trigger external signals | ||
80 | and/or other activity. Triggered signals can include HEALTHY, RST, Power Off, | ||
81 | or Fault depending on the chip configuration. The driver reports values as lcrit | ||
82 | or crit if exceeding the limits triggers RST, Power Off, or Fault, and as min or | ||
83 | max otherwise. For details please see the SMM665 datasheet. | ||
84 | |||
85 | For SMM465 and SMM764, values for Channel E and F are reported but undefined. | ||
86 | |||
87 | in1_input 12V input voltage (mV) | ||
88 | in2_input 3.3V (VDD) input voltage (mV) | ||
89 | in3_input Channel A voltage (mV) | ||
90 | in4_input Channel B voltage (mV) | ||
91 | in5_input Channel C voltage (mV) | ||
92 | in6_input Channel D voltage (mV) | ||
93 | in7_input Channel E voltage (mV) | ||
94 | in8_input Channel F voltage (mV) | ||
95 | in9_input AIN1 voltage (mV) | ||
96 | in10_input AIN2 voltage (mV) | ||
97 | |||
98 | in1_min 12v input minimum voltage (mV) | ||
99 | in2_min 3.3V (VDD) input minimum voltage (mV) | ||
100 | in3_min Channel A minimum voltage (mV) | ||
101 | in4_min Channel B minimum voltage (mV) | ||
102 | in5_min Channel C minimum voltage (mV) | ||
103 | in6_min Channel D minimum voltage (mV) | ||
104 | in7_min Channel E minimum voltage (mV) | ||
105 | in8_min Channel F minimum voltage (mV) | ||
106 | in9_min AIN1 minimum voltage (mV) | ||
107 | in10_min AIN2 minimum voltage (mV) | ||
108 | |||
109 | in1_max 12v input maximum voltage (mV) | ||
110 | in2_max 3.3V (VDD) input maximum voltage (mV) | ||
111 | in3_max Channel A maximum voltage (mV) | ||
112 | in4_max Channel B maximum voltage (mV) | ||
113 | in5_max Channel C maximum voltage (mV) | ||
114 | in6_max Channel D maximum voltage (mV) | ||
115 | in7_max Channel E maximum voltage (mV) | ||
116 | in8_max Channel F maximum voltage (mV) | ||
117 | in9_max AIN1 maximum voltage (mV) | ||
118 | in10_max AIN2 maximum voltage (mV) | ||
119 | |||
120 | in1_lcrit 12v input critical minimum voltage (mV) | ||
121 | in2_lcrit 3.3V (VDD) input critical minimum voltage (mV) | ||
122 | in3_lcrit Channel A critical minimum voltage (mV) | ||
123 | in4_lcrit Channel B critical minimum voltage (mV) | ||
124 | in5_lcrit Channel C critical minimum voltage (mV) | ||
125 | in6_lcrit Channel D critical minimum voltage (mV) | ||
126 | in7_lcrit Channel E critical minimum voltage (mV) | ||
127 | in8_lcrit Channel F critical minimum voltage (mV) | ||
128 | in9_lcrit AIN1 critical minimum voltage (mV) | ||
129 | in10_lcrit AIN2 critical minimum voltage (mV) | ||
130 | |||
131 | in1_crit 12v input critical maximum voltage (mV) | ||
132 | in2_crit 3.3V (VDD) input critical maximum voltage (mV) | ||
133 | in3_crit Channel A critical maximum voltage (mV) | ||
134 | in4_crit Channel B critical maximum voltage (mV) | ||
135 | in5_crit Channel C critical maximum voltage (mV) | ||
136 | in6_crit Channel D critical maximum voltage (mV) | ||
137 | in7_crit Channel E critical maximum voltage (mV) | ||
138 | in8_crit Channel F critical maximum voltage (mV) | ||
139 | in9_crit AIN1 critical maximum voltage (mV) | ||
140 | in10_crit AIN2 critical maximum voltage (mV) | ||
141 | |||
142 | in1_crit_alarm 12v input critical alarm | ||
143 | in2_crit_alarm 3.3V (VDD) input critical alarm | ||
144 | in3_crit_alarm Channel A critical alarm | ||
145 | in4_crit_alarm Channel B critical alarm | ||
146 | in5_crit_alarm Channel C critical alarm | ||
147 | in6_crit_alarm Channel D critical alarm | ||
148 | in7_crit_alarm Channel E critical alarm | ||
149 | in8_crit_alarm Channel F critical alarm | ||
150 | in9_crit_alarm AIN1 critical alarm | ||
151 | in10_crit_alarm AIN2 critical alarm | ||
152 | |||
153 | temp1_input Chip tempererature | ||
154 | temp1_min Mimimum chip tempererature | ||
155 | temp1_max Maximum chip tempererature | ||
156 | temp1_crit Critical chip tempererature | ||
157 | temp1_crit_alarm Temperature critical alarm | ||
diff --git a/Documentation/hwmon/sysfs-interface b/Documentation/hwmon/sysfs-interface index d4e2917c6f18..ff45d1f837c8 100644 --- a/Documentation/hwmon/sysfs-interface +++ b/Documentation/hwmon/sysfs-interface | |||
@@ -107,10 +107,24 @@ in[0-*]_min Voltage min value. | |||
107 | Unit: millivolt | 107 | Unit: millivolt |
108 | RW | 108 | RW |
109 | 109 | ||
110 | in[0-*]_lcrit Voltage critical min value. | ||
111 | Unit: millivolt | ||
112 | RW | ||
113 | If voltage drops to or below this limit, the system may | ||
114 | take drastic action such as power down or reset. At the very | ||
115 | least, it should report a fault. | ||
116 | |||
110 | in[0-*]_max Voltage max value. | 117 | in[0-*]_max Voltage max value. |
111 | Unit: millivolt | 118 | Unit: millivolt |
112 | RW | 119 | RW |
113 | 120 | ||
121 | in[0-*]_crit Voltage critical max value. | ||
122 | Unit: millivolt | ||
123 | RW | ||
124 | If voltage reaches or exceeds this limit, the system may | ||
125 | take drastic action such as power down or reset. At the very | ||
126 | least, it should report a fault. | ||
127 | |||
114 | in[0-*]_input Voltage input value. | 128 | in[0-*]_input Voltage input value. |
115 | Unit: millivolt | 129 | Unit: millivolt |
116 | RO | 130 | RO |
@@ -284,7 +298,7 @@ temp[1-*]_input Temperature input value. | |||
284 | Unit: millidegree Celsius | 298 | Unit: millidegree Celsius |
285 | RO | 299 | RO |
286 | 300 | ||
287 | temp[1-*]_crit Temperature critical value, typically greater than | 301 | temp[1-*]_crit Temperature critical max value, typically greater than |
288 | corresponding temp_max values. | 302 | corresponding temp_max values. |
289 | Unit: millidegree Celsius | 303 | Unit: millidegree Celsius |
290 | RW | 304 | RW |
@@ -296,6 +310,11 @@ temp[1-*]_crit_hyst | |||
296 | from the critical value. | 310 | from the critical value. |
297 | RW | 311 | RW |
298 | 312 | ||
313 | temp[1-*]_lcrit Temperature critical min value, typically lower than | ||
314 | corresponding temp_min values. | ||
315 | Unit: millidegree Celsius | ||
316 | RW | ||
317 | |||
299 | temp[1-*]_offset | 318 | temp[1-*]_offset |
300 | Temperature offset which is added to the temperature reading | 319 | Temperature offset which is added to the temperature reading |
301 | by the chip. | 320 | by the chip. |
@@ -344,9 +363,6 @@ Also see the Alarms section for status flags associated with temperatures. | |||
344 | * Currents * | 363 | * Currents * |
345 | ************ | 364 | ************ |
346 | 365 | ||
347 | Note that no known chip provides current measurements as of writing, | ||
348 | so this part is theoretical, so to say. | ||
349 | |||
350 | curr[1-*]_max Current max value | 366 | curr[1-*]_max Current max value |
351 | Unit: milliampere | 367 | Unit: milliampere |
352 | RW | 368 | RW |
@@ -471,6 +487,7 @@ limit-related alarms, not both. The driver should just reflect the hardware | |||
471 | implementation. | 487 | implementation. |
472 | 488 | ||
473 | in[0-*]_alarm | 489 | in[0-*]_alarm |
490 | curr[1-*]_alarm | ||
474 | fan[1-*]_alarm | 491 | fan[1-*]_alarm |
475 | temp[1-*]_alarm | 492 | temp[1-*]_alarm |
476 | Channel alarm | 493 | Channel alarm |
@@ -482,6 +499,8 @@ OR | |||
482 | 499 | ||
483 | in[0-*]_min_alarm | 500 | in[0-*]_min_alarm |
484 | in[0-*]_max_alarm | 501 | in[0-*]_max_alarm |
502 | curr[1-*]_min_alarm | ||
503 | curr[1-*]_max_alarm | ||
485 | fan[1-*]_min_alarm | 504 | fan[1-*]_min_alarm |
486 | fan[1-*]_max_alarm | 505 | fan[1-*]_max_alarm |
487 | temp[1-*]_min_alarm | 506 | temp[1-*]_min_alarm |
@@ -497,7 +516,6 @@ to notify open diodes, unconnected fans etc. where the hardware | |||
497 | supports it. When this boolean has value 1, the measurement for that | 516 | supports it. When this boolean has value 1, the measurement for that |
498 | channel should not be trusted. | 517 | channel should not be trusted. |
499 | 518 | ||
500 | in[0-*]_fault | ||
501 | fan[1-*]_fault | 519 | fan[1-*]_fault |
502 | temp[1-*]_fault | 520 | temp[1-*]_fault |
503 | Input fault condition | 521 | Input fault condition |
@@ -513,6 +531,7 @@ beep_enable Master beep enable | |||
513 | RW | 531 | RW |
514 | 532 | ||
515 | in[0-*]_beep | 533 | in[0-*]_beep |
534 | curr[1-*]_beep | ||
516 | fan[1-*]_beep | 535 | fan[1-*]_beep |
517 | temp[1-*]_beep | 536 | temp[1-*]_beep |
518 | Channel beep | 537 | Channel beep |
diff --git a/Documentation/hwmon/w83627ehf b/Documentation/hwmon/w83627ehf index b7e42ec4b26b..13d556112fc0 100644 --- a/Documentation/hwmon/w83627ehf +++ b/Documentation/hwmon/w83627ehf | |||
@@ -20,6 +20,10 @@ Supported chips: | |||
20 | Prefix: 'w83667hg' | 20 | Prefix: 'w83667hg' |
21 | Addresses scanned: ISA address retrieved from Super I/O registers | 21 | Addresses scanned: ISA address retrieved from Super I/O registers |
22 | Datasheet: not available | 22 | Datasheet: not available |
23 | * Winbond W83667HG-B | ||
24 | Prefix: 'w83667hg' | ||
25 | Addresses scanned: ISA address retrieved from Super I/O registers | ||
26 | Datasheet: Available from Nuvoton upon request | ||
23 | 27 | ||
24 | Authors: | 28 | Authors: |
25 | Jean Delvare <khali@linux-fr.org> | 29 | Jean Delvare <khali@linux-fr.org> |
@@ -32,8 +36,8 @@ Description | |||
32 | ----------- | 36 | ----------- |
33 | 37 | ||
34 | This driver implements support for the Winbond W83627EHF, W83627EHG, | 38 | This driver implements support for the Winbond W83627EHF, W83627EHG, |
35 | W83627DHG, W83627DHG-P and W83667HG super I/O chips. We will refer to them | 39 | W83627DHG, W83627DHG-P, W83667HG and W83667HG-B super I/O chips. |
36 | collectively as Winbond chips. | 40 | We will refer to them collectively as Winbond chips. |
37 | 41 | ||
38 | The chips implement three temperature sensors, five fan rotation | 42 | The chips implement three temperature sensors, five fan rotation |
39 | speed sensors, ten analog voltage sensors (only nine for the 627DHG), one | 43 | speed sensors, ten analog voltage sensors (only nine for the 627DHG), one |
@@ -68,14 +72,15 @@ follows: | |||
68 | temp1 -> pwm1 | 72 | temp1 -> pwm1 |
69 | temp2 -> pwm2 | 73 | temp2 -> pwm2 |
70 | temp3 -> pwm3 | 74 | temp3 -> pwm3 |
71 | prog -> pwm4 (not on 667HG; the programmable setting is not supported by | 75 | prog -> pwm4 (not on 667HG and 667HG-B; the programmable setting is not |
72 | the driver) | 76 | supported by the driver) |
73 | 77 | ||
74 | /sys files | 78 | /sys files |
75 | ---------- | 79 | ---------- |
76 | 80 | ||
77 | name - this is a standard hwmon device entry. For the W83627EHF and W83627EHG, | 81 | name - this is a standard hwmon device entry. For the W83627EHF and W83627EHG, |
78 | it is set to "w83627ehf" and for the W83627DHG it is set to "w83627dhg" | 82 | it is set to "w83627ehf", for the W83627DHG it is set to "w83627dhg", |
83 | and for the W83667HG it is set to "w83667hg". | ||
79 | 84 | ||
80 | pwm[1-4] - this file stores PWM duty cycle or DC value (fan speed) in range: | 85 | pwm[1-4] - this file stores PWM duty cycle or DC value (fan speed) in range: |
81 | 0 (stop) to 255 (full) | 86 | 0 (stop) to 255 (full) |
diff --git a/Documentation/i2c/instantiating-devices b/Documentation/i2c/instantiating-devices index e89490270aba..87da405a8597 100644 --- a/Documentation/i2c/instantiating-devices +++ b/Documentation/i2c/instantiating-devices | |||
@@ -102,7 +102,7 @@ static int __devinit usb_hcd_pnx4008_probe(struct platform_device *pdev) | |||
102 | memset(&i2c_info, 0, sizeof(struct i2c_board_info)); | 102 | memset(&i2c_info, 0, sizeof(struct i2c_board_info)); |
103 | strlcpy(i2c_info.name, "isp1301_pnx", I2C_NAME_SIZE); | 103 | strlcpy(i2c_info.name, "isp1301_pnx", I2C_NAME_SIZE); |
104 | isp1301_i2c_client = i2c_new_probed_device(i2c_adap, &i2c_info, | 104 | isp1301_i2c_client = i2c_new_probed_device(i2c_adap, &i2c_info, |
105 | normal_i2c); | 105 | normal_i2c, NULL); |
106 | i2c_put_adapter(i2c_adap); | 106 | i2c_put_adapter(i2c_adap); |
107 | (...) | 107 | (...) |
108 | } | 108 | } |
diff --git a/Documentation/ioctl/ioctl-number.txt b/Documentation/ioctl/ioctl-number.txt index 2ec3d7d89984..33223ff121d8 100644 --- a/Documentation/ioctl/ioctl-number.txt +++ b/Documentation/ioctl/ioctl-number.txt | |||
@@ -79,6 +79,7 @@ Code Seq#(hex) Include File Comments | |||
79 | 0x22 all scsi/sg.h | 79 | 0x22 all scsi/sg.h |
80 | '#' 00-3F IEEE 1394 Subsystem Block for the entire subsystem | 80 | '#' 00-3F IEEE 1394 Subsystem Block for the entire subsystem |
81 | '$' 00-0F linux/perf_counter.h, linux/perf_event.h | 81 | '$' 00-0F linux/perf_counter.h, linux/perf_event.h |
82 | '&' 00-07 drivers/firewire/nosy-user.h | ||
82 | '1' 00-1F <linux/timepps.h> PPS kit from Ulrich Windl | 83 | '1' 00-1F <linux/timepps.h> PPS kit from Ulrich Windl |
83 | <ftp://ftp.de.kernel.org/pub/linux/daemons/ntp/PPS/> | 84 | <ftp://ftp.de.kernel.org/pub/linux/daemons/ntp/PPS/> |
84 | '2' 01-04 linux/i2o.h | 85 | '2' 01-04 linux/i2o.h |
diff --git a/Documentation/kbuild/kbuild.txt b/Documentation/kbuild/kbuild.txt index 634c625da8ce..1e5165aa9e4e 100644 --- a/Documentation/kbuild/kbuild.txt +++ b/Documentation/kbuild/kbuild.txt | |||
@@ -22,11 +22,33 @@ building C files and assembler files. | |||
22 | 22 | ||
23 | KAFLAGS | 23 | KAFLAGS |
24 | -------------------------------------------------- | 24 | -------------------------------------------------- |
25 | Additional options to the assembler. | 25 | Additional options to the assembler (for built-in and modules). |
26 | |||
27 | AFLAGS_MODULE | ||
28 | -------------------------------------------------- | ||
29 | Addtional module specific options to use for $(AS). | ||
30 | |||
31 | AFLAGS_KERNEL | ||
32 | -------------------------------------------------- | ||
33 | Addtional options for $(AS) when used for assembler | ||
34 | code for code that is compiled as built-in. | ||
26 | 35 | ||
27 | KCFLAGS | 36 | KCFLAGS |
28 | -------------------------------------------------- | 37 | -------------------------------------------------- |
29 | Additional options to the C compiler. | 38 | Additional options to the C compiler (for built-in and modules). |
39 | |||
40 | CFLAGS_KERNEL | ||
41 | -------------------------------------------------- | ||
42 | Addtional options for $(CC) when used to compile | ||
43 | code that is compiled as built-in. | ||
44 | |||
45 | CFLAGS_MODULE | ||
46 | -------------------------------------------------- | ||
47 | Addtional module specific options to use for $(CC). | ||
48 | |||
49 | LDFLAGS_MODULE | ||
50 | -------------------------------------------------- | ||
51 | Additional options used for $(LD) when linking modules. | ||
30 | 52 | ||
31 | KBUILD_VERBOSE | 53 | KBUILD_VERBOSE |
32 | -------------------------------------------------- | 54 | -------------------------------------------------- |
@@ -40,15 +62,15 @@ Set the directory to look for the kernel source when building external | |||
40 | modules. | 62 | modules. |
41 | The directory can be specified in several ways: | 63 | The directory can be specified in several ways: |
42 | 1) Use "M=..." on the command line | 64 | 1) Use "M=..." on the command line |
43 | 2) Environmnet variable KBUILD_EXTMOD | 65 | 2) Environment variable KBUILD_EXTMOD |
44 | 3) Environmnet variable SUBDIRS | 66 | 3) Environment variable SUBDIRS |
45 | The possibilities are listed in the order they take precedence. | 67 | The possibilities are listed in the order they take precedence. |
46 | Using "M=..." will always override the others. | 68 | Using "M=..." will always override the others. |
47 | 69 | ||
48 | KBUILD_OUTPUT | 70 | KBUILD_OUTPUT |
49 | -------------------------------------------------- | 71 | -------------------------------------------------- |
50 | Specify the output directory when building the kernel. | 72 | Specify the output directory when building the kernel. |
51 | The output directory can also be specificed using "O=...". | 73 | The output directory can also be specified using "O=...". |
52 | Setting "O=..." takes precedence over KBUILD_OUTPUT. | 74 | Setting "O=..." takes precedence over KBUILD_OUTPUT. |
53 | 75 | ||
54 | ARCH | 76 | ARCH |
@@ -90,7 +112,7 @@ The script will be called with the following arguments: | |||
90 | $3 - kernel map file | 112 | $3 - kernel map file |
91 | $4 - default install path (use root directory if blank) | 113 | $4 - default install path (use root directory if blank) |
92 | 114 | ||
93 | The implmentation of "make install" is architecture specific | 115 | The implementation of "make install" is architecture specific |
94 | and it may differ from the above. | 116 | and it may differ from the above. |
95 | 117 | ||
96 | INSTALLKERNEL is provided to enable the possibility to | 118 | INSTALLKERNEL is provided to enable the possibility to |
diff --git a/Documentation/kbuild/kconfig.txt b/Documentation/kbuild/kconfig.txt index b2cb16ebcb16..cca46b1a0f6c 100644 --- a/Documentation/kbuild/kconfig.txt +++ b/Documentation/kbuild/kconfig.txt | |||
@@ -65,7 +65,7 @@ also use the environment variable KCONFIG_ALLCONFIG as a flag or a | |||
65 | filename that contains config symbols that the user requires to be | 65 | filename that contains config symbols that the user requires to be |
66 | set to a specific value. If KCONFIG_ALLCONFIG is used without a | 66 | set to a specific value. If KCONFIG_ALLCONFIG is used without a |
67 | filename, "make *config" checks for a file named | 67 | filename, "make *config" checks for a file named |
68 | "all{yes/mod/no/random}.config" (corresponding to the *config command | 68 | "all{yes/mod/no/def/random}.config" (corresponding to the *config command |
69 | that was used) for symbol values that are to be forced. If this file | 69 | that was used) for symbol values that are to be forced. If this file |
70 | is not found, it checks for a file named "all.config" to contain forced | 70 | is not found, it checks for a file named "all.config" to contain forced |
71 | values. | 71 | values. |
diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt index 71c602d61680..c787ae512120 100644 --- a/Documentation/kbuild/makefiles.txt +++ b/Documentation/kbuild/makefiles.txt | |||
@@ -45,7 +45,6 @@ This document describes the Linux kernel Makefiles. | |||
45 | --- 7.1 header-y | 45 | --- 7.1 header-y |
46 | --- 7.2 objhdr-y | 46 | --- 7.2 objhdr-y |
47 | --- 7.3 destination-y | 47 | --- 7.3 destination-y |
48 | --- 7.4 unifdef-y (deprecated) | ||
49 | 48 | ||
50 | === 8 Kbuild Variables | 49 | === 8 Kbuild Variables |
51 | === 9 Makefile language | 50 | === 9 Makefile language |
@@ -168,7 +167,7 @@ more details, with real examples. | |||
168 | #drivers/isdn/i4l/Makefile | 167 | #drivers/isdn/i4l/Makefile |
169 | # Makefile for the kernel ISDN subsystem and device drivers. | 168 | # Makefile for the kernel ISDN subsystem and device drivers. |
170 | # Each configuration option enables a list of files. | 169 | # Each configuration option enables a list of files. |
171 | obj-$(CONFIG_ISDN) += isdn.o | 170 | obj-$(CONFIG_ISDN_I4L) += isdn.o |
172 | obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o | 171 | obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o |
173 | 172 | ||
174 | --- 3.3 Loadable module goals - obj-m | 173 | --- 3.3 Loadable module goals - obj-m |
@@ -187,34 +186,35 @@ more details, with real examples. | |||
187 | Note: In this example $(CONFIG_ISDN_PPP_BSDCOMP) evaluates to 'm' | 186 | Note: In this example $(CONFIG_ISDN_PPP_BSDCOMP) evaluates to 'm' |
188 | 187 | ||
189 | If a kernel module is built from several source files, you specify | 188 | If a kernel module is built from several source files, you specify |
190 | that you want to build a module in the same way as above. | 189 | that you want to build a module in the same way as above; however, |
191 | 190 | kbuild needs to know which object files you want to build your | |
192 | Kbuild needs to know which the parts that you want to build your | 191 | module from, so you have to tell it by setting a $(<module_name>-y) |
193 | module from, so you have to tell it by setting an | 192 | variable. |
194 | $(<module_name>-objs) variable. | ||
195 | 193 | ||
196 | Example: | 194 | Example: |
197 | #drivers/isdn/i4l/Makefile | 195 | #drivers/isdn/i4l/Makefile |
198 | obj-$(CONFIG_ISDN) += isdn.o | 196 | obj-$(CONFIG_ISDN_I4L) += isdn.o |
199 | isdn-objs := isdn_net_lib.o isdn_v110.o isdn_common.o | 197 | isdn-y := isdn_net_lib.o isdn_v110.o isdn_common.o |
200 | 198 | ||
201 | In this example, the module name will be isdn.o. Kbuild will | 199 | In this example, the module name will be isdn.o. Kbuild will |
202 | compile the objects listed in $(isdn-objs) and then run | 200 | compile the objects listed in $(isdn-y) and then run |
203 | "$(LD) -r" on the list of these files to generate isdn.o. | 201 | "$(LD) -r" on the list of these files to generate isdn.o. |
204 | 202 | ||
205 | Kbuild recognises objects used for composite objects by the suffix | 203 | Due to kbuild recognizing $(<module_name>-y) for composite objects, |
206 | -objs, and the suffix -y. This allows the Makefiles to use | 204 | you can use the value of a CONFIG_ symbol to optionally include an |
207 | the value of a CONFIG_ symbol to determine if an object is part | 205 | object file as part of a composite object. |
208 | of a composite object. | ||
209 | 206 | ||
210 | Example: | 207 | Example: |
211 | #fs/ext2/Makefile | 208 | #fs/ext2/Makefile |
212 | obj-$(CONFIG_EXT2_FS) += ext2.o | 209 | obj-$(CONFIG_EXT2_FS) += ext2.o |
213 | ext2-y := balloc.o bitmap.o | 210 | ext2-y := balloc.o dir.o file.o ialloc.o inode.o ioctl.o \ |
214 | ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o | 211 | namei.o super.o symlink.o |
212 | ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o xattr_user.o \ | ||
213 | xattr_trusted.o | ||
215 | 214 | ||
216 | In this example, xattr.o is only part of the composite object | 215 | In this example, xattr.o, xattr_user.o and xattr_trusted.o are only |
217 | ext2.o if $(CONFIG_EXT2_FS_XATTR) evaluates to 'y'. | 216 | part of the composite object ext2.o if $(CONFIG_EXT2_FS_XATTR) |
217 | evaluates to 'y'. | ||
218 | 218 | ||
219 | Note: Of course, when you are building objects into the kernel, | 219 | Note: Of course, when you are building objects into the kernel, |
220 | the syntax above will also work. So, if you have CONFIG_EXT2_FS=y, | 220 | the syntax above will also work. So, if you have CONFIG_EXT2_FS=y, |
@@ -244,12 +244,12 @@ more details, with real examples. | |||
244 | may contain both a built-in.o and a lib.a file. | 244 | may contain both a built-in.o and a lib.a file. |
245 | 245 | ||
246 | Example: | 246 | Example: |
247 | #arch/i386/lib/Makefile | 247 | #arch/x86/lib/Makefile |
248 | lib-y := checksum.o delay.o | 248 | lib-y := delay.o |
249 | 249 | ||
250 | This will create a library lib.a based on checksum.o and delay.o. | 250 | This will create a library lib.a based on delay.o. For kbuild to |
251 | For kbuild to actually recognize that there is a lib.a being built, | 251 | actually recognize that there is a lib.a being built, the directory |
252 | the directory shall be listed in libs-y. | 252 | shall be listed in libs-y. |
253 | See also "6.3 List directories to visit when descending". | 253 | See also "6.3 List directories to visit when descending". |
254 | 254 | ||
255 | Use of lib-y is normally restricted to lib/ and arch/*/lib. | 255 | Use of lib-y is normally restricted to lib/ and arch/*/lib. |
@@ -284,43 +284,40 @@ more details, with real examples. | |||
284 | --- 3.7 Compilation flags | 284 | --- 3.7 Compilation flags |
285 | 285 | ||
286 | ccflags-y, asflags-y and ldflags-y | 286 | ccflags-y, asflags-y and ldflags-y |
287 | The three flags listed above applies only to the kbuild makefile | 287 | These three flags apply only to the kbuild makefile in which they |
288 | where they are assigned. They are used for all the normal | 288 | are assigned. They are used for all the normal cc, as and ld |
289 | cc, as and ld invocation happenign during a recursive build. | 289 | invocations happening during a recursive build. |
290 | Note: Flags with the same behaviour were previously named: | 290 | Note: Flags with the same behaviour were previously named: |
291 | EXTRA_CFLAGS, EXTRA_AFLAGS and EXTRA_LDFLAGS. | 291 | EXTRA_CFLAGS, EXTRA_AFLAGS and EXTRA_LDFLAGS. |
292 | They are yet supported but their use are deprecated. | 292 | They are still supported but their usage is deprecated. |
293 | 293 | ||
294 | ccflags-y specifies options for compiling C files with $(CC). | 294 | ccflags-y specifies options for compiling with $(CC). |
295 | 295 | ||
296 | Example: | 296 | Example: |
297 | # drivers/sound/emu10k1/Makefile | 297 | # drivers/acpi/Makefile |
298 | ccflags-y += -I$(obj) | 298 | ccflags-y := -Os |
299 | ccflags-$(DEBUG) += -DEMU10K1_DEBUG | 299 | ccflags-$(CONFIG_ACPI_DEBUG) += -DACPI_DEBUG_OUTPUT |
300 | |||
301 | 300 | ||
302 | This variable is necessary because the top Makefile owns the | 301 | This variable is necessary because the top Makefile owns the |
303 | variable $(KBUILD_CFLAGS) and uses it for compilation flags for the | 302 | variable $(KBUILD_CFLAGS) and uses it for compilation flags for the |
304 | entire tree. | 303 | entire tree. |
305 | 304 | ||
306 | asflags-y is a similar string for per-directory options | 305 | asflags-y specifies options for assembling with $(AS). |
307 | when compiling assembly language source. | ||
308 | 306 | ||
309 | Example: | 307 | Example: |
310 | #arch/x86_64/kernel/Makefile | 308 | #arch/sparc/kernel/Makefile |
311 | asflags-y := -traditional | 309 | asflags-y := -ansi |
312 | 310 | ||
313 | 311 | ldflags-y specifies options for linking with $(LD). | |
314 | ldflags-y is a string for per-directory options to $(LD). | ||
315 | 312 | ||
316 | Example: | 313 | Example: |
317 | #arch/m68k/fpsp040/Makefile | 314 | #arch/cris/boot/compressed/Makefile |
318 | ldflags-y := -x | 315 | ldflags-y += -T $(srctree)/$(src)/decompress_$(arch-y).lds |
319 | 316 | ||
320 | subdir-ccflags-y, subdir-asflags-y | 317 | subdir-ccflags-y, subdir-asflags-y |
321 | The two flags listed above are similar to ccflags-y and as-falgs-y. | 318 | The two flags listed above are similar to ccflags-y and asflags-y. |
322 | The difference is that the subdir- variants has effect for the kbuild | 319 | The difference is that the subdir- variants have effect for the kbuild |
323 | file where tey are present and all subdirectories. | 320 | file where they are present and all subdirectories. |
324 | Options specified using subdir-* are added to the commandline before | 321 | Options specified using subdir-* are added to the commandline before |
325 | the options specified using the non-subdir variants. | 322 | the options specified using the non-subdir variants. |
326 | 323 | ||
@@ -340,18 +337,18 @@ more details, with real examples. | |||
340 | CFLAGS_aha152x.o = -DAHA152X_STAT -DAUTOCONF | 337 | CFLAGS_aha152x.o = -DAHA152X_STAT -DAUTOCONF |
341 | CFLAGS_gdth.o = # -DDEBUG_GDTH=2 -D__SERIAL__ -D__COM2__ \ | 338 | CFLAGS_gdth.o = # -DDEBUG_GDTH=2 -D__SERIAL__ -D__COM2__ \ |
342 | -DGDTH_STATISTICS | 339 | -DGDTH_STATISTICS |
343 | CFLAGS_seagate.o = -DARBITRATE -DPARITY -DSEAGATE_USE_ASM | ||
344 | 340 | ||
345 | These three lines specify compilation flags for aha152x.o, | 341 | These two lines specify compilation flags for aha152x.o and gdth.o. |
346 | gdth.o, and seagate.o | ||
347 | 342 | ||
348 | $(AFLAGS_$@) is a similar feature for source files in assembly | 343 | $(AFLAGS_$@) is a similar feature for source files in assembly |
349 | languages. | 344 | languages. |
350 | 345 | ||
351 | Example: | 346 | Example: |
352 | # arch/arm/kernel/Makefile | 347 | # arch/arm/kernel/Makefile |
353 | AFLAGS_head-armv.o := -DTEXTADDR=$(TEXTADDR) -traditional | 348 | AFLAGS_head.o := -DTEXT_OFFSET=$(TEXT_OFFSET) |
354 | AFLAGS_head-armo.o := -DTEXTADDR=$(TEXTADDR) -traditional | 349 | AFLAGS_crunch-bits.o := -Wa,-mcpu=ep9312 |
350 | AFLAGS_iwmmxt.o := -Wa,-mcpu=iwmmxt | ||
351 | |||
355 | 352 | ||
356 | --- 3.9 Dependency tracking | 353 | --- 3.9 Dependency tracking |
357 | 354 | ||
@@ -923,16 +920,33 @@ When kbuild executes, the following steps are followed (roughly): | |||
923 | The first example utilises the trick that a config option expands | 920 | The first example utilises the trick that a config option expands |
924 | to 'y' when selected. | 921 | to 'y' when selected. |
925 | 922 | ||
926 | CFLAGS_KERNEL $(CC) options specific for built-in | 923 | KBUILD_AFLAGS_KERNEL $(AS) options specific for built-in |
927 | 924 | ||
928 | $(CFLAGS_KERNEL) contains extra C compiler flags used to compile | 925 | $(KBUILD_AFLAGS_KERNEL) contains extra C compiler flags used to compile |
929 | resident kernel code. | 926 | resident kernel code. |
930 | 927 | ||
931 | CFLAGS_MODULE $(CC) options specific for modules | 928 | KBUILD_AFLAGS_MODULE Options for $(AS) when building modules |
932 | 929 | ||
933 | $(CFLAGS_MODULE) contains extra C compiler flags used to compile code | 930 | $(KBUILD_AFLAGS_MODULE) is used to add arch specific options that |
934 | for loadable kernel modules. | 931 | are used for $(AS). |
932 | From commandline AFLAGS_MODULE shall be used (see kbuild.txt). | ||
933 | |||
934 | KBUILD_CFLAGS_KERNEL $(CC) options specific for built-in | ||
935 | |||
936 | $(KBUILD_CFLAGS_KERNEL) contains extra C compiler flags used to compile | ||
937 | resident kernel code. | ||
935 | 938 | ||
939 | KBUILD_CFLAGS_MODULE Options for $(CC) when building modules | ||
940 | |||
941 | $(KBUILD_CFLAGS_MODULE) is used to add arch specific options that | ||
942 | are used for $(CC). | ||
943 | From commandline CFLAGS_MODULE shall be used (see kbuild.txt). | ||
944 | |||
945 | KBUILD_LDFLAGS_MODULE Options for $(LD) when linking modules | ||
946 | |||
947 | $(KBUILD_LDFLAGS_MODULE) is used to add arch specific options | ||
948 | used when linking modules. This is often a linker script. | ||
949 | From commandline LDFLAGS_MODULE shall be used (see kbuild.txt). | ||
936 | 950 | ||
937 | --- 6.2 Add prerequisites to archprepare: | 951 | --- 6.2 Add prerequisites to archprepare: |
938 | 952 | ||
@@ -1176,14 +1190,14 @@ When kbuild executes, the following steps are followed (roughly): | |||
1176 | === 7 Kbuild syntax for exported headers | 1190 | === 7 Kbuild syntax for exported headers |
1177 | 1191 | ||
1178 | The kernel include a set of headers that is exported to userspace. | 1192 | The kernel include a set of headers that is exported to userspace. |
1179 | Many headers can be exported as-is but other headers requires a | 1193 | Many headers can be exported as-is but other headers require a |
1180 | minimal pre-processing before they are ready for user-space. | 1194 | minimal pre-processing before they are ready for user-space. |
1181 | The pre-processing does: | 1195 | The pre-processing does: |
1182 | - drop kernel specific annotations | 1196 | - drop kernel specific annotations |
1183 | - drop include of compiler.h | 1197 | - drop include of compiler.h |
1184 | - drop all sections that is kernel internat (guarded by ifdef __KERNEL__) | 1198 | - drop all sections that are kernel internal (guarded by ifdef __KERNEL__) |
1185 | 1199 | ||
1186 | Each relevant directory contain a file name "Kbuild" which specify the | 1200 | Each relevant directory contains a file name "Kbuild" which specifies the |
1187 | headers to be exported. | 1201 | headers to be exported. |
1188 | See subsequent chapter for the syntax of the Kbuild file. | 1202 | See subsequent chapter for the syntax of the Kbuild file. |
1189 | 1203 | ||
@@ -1230,11 +1244,6 @@ See subsequent chapter for the syntax of the Kbuild file. | |||
1230 | will be located in the directory "include/linux" when exported. | 1244 | will be located in the directory "include/linux" when exported. |
1231 | 1245 | ||
1232 | 1246 | ||
1233 | --- 7.4 unifdef-y (deprecated) | ||
1234 | |||
1235 | unifdef-y is deprecated. A direct replacement is header-y. | ||
1236 | |||
1237 | |||
1238 | === 8 Kbuild Variables | 1247 | === 8 Kbuild Variables |
1239 | 1248 | ||
1240 | The top Makefile exports the following variables: | 1249 | The top Makefile exports the following variables: |
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index d9239d5f3ad3..2c85c0692b01 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
@@ -73,7 +73,6 @@ parameter is applicable: | |||
73 | MTD MTD (Memory Technology Device) support is enabled. | 73 | MTD MTD (Memory Technology Device) support is enabled. |
74 | NET Appropriate network support is enabled. | 74 | NET Appropriate network support is enabled. |
75 | NUMA NUMA support is enabled. | 75 | NUMA NUMA support is enabled. |
76 | GENERIC_TIME The generic timeofday code is enabled. | ||
77 | NFS Appropriate NFS support is enabled. | 76 | NFS Appropriate NFS support is enabled. |
78 | OSS OSS sound support is enabled. | 77 | OSS OSS sound support is enabled. |
79 | PV_OPS A paravirtualized kernel is enabled. | 78 | PV_OPS A paravirtualized kernel is enabled. |
@@ -89,8 +88,8 @@ parameter is applicable: | |||
89 | RAM RAM disk support is enabled. | 88 | RAM RAM disk support is enabled. |
90 | S390 S390 architecture is enabled. | 89 | S390 S390 architecture is enabled. |
91 | SCSI Appropriate SCSI support is enabled. | 90 | SCSI Appropriate SCSI support is enabled. |
92 | A lot of drivers has their options described inside of | 91 | A lot of drivers have their options described inside |
93 | Documentation/scsi/. | 92 | the Documentation/scsi/ sub-directory. |
94 | SECURITY Different security models are enabled. | 93 | SECURITY Different security models are enabled. |
95 | SELINUX SELinux support is enabled. | 94 | SELINUX SELinux support is enabled. |
96 | APPARMOR AppArmor support is enabled. | 95 | APPARMOR AppArmor support is enabled. |
@@ -116,6 +115,7 @@ parameter is applicable: | |||
116 | More X86-64 boot options can be found in | 115 | More X86-64 boot options can be found in |
117 | Documentation/x86/x86_64/boot-options.txt . | 116 | Documentation/x86/x86_64/boot-options.txt . |
118 | X86 Either 32bit or 64bit x86 (same as X86-32+X86-64) | 117 | X86 Either 32bit or 64bit x86 (same as X86-32+X86-64) |
118 | XEN Xen support is enabled | ||
119 | 119 | ||
120 | In addition, the following text indicates that the option: | 120 | In addition, the following text indicates that the option: |
121 | 121 | ||
@@ -281,36 +281,17 @@ and is between 256 and 4096 characters. It is defined in the file | |||
281 | no: ACPI OperationRegions are not marked as reserved, | 281 | no: ACPI OperationRegions are not marked as reserved, |
282 | no further checks are performed. | 282 | no further checks are performed. |
283 | 283 | ||
284 | ad1848= [HW,OSS] | ||
285 | Format: <io>,<irq>,<dma>,<dma2>,<type> | ||
286 | |||
287 | add_efi_memmap [EFI; X86] Include EFI memory map in | 284 | add_efi_memmap [EFI; X86] Include EFI memory map in |
288 | kernel's map of available physical RAM. | 285 | kernel's map of available physical RAM. |
289 | 286 | ||
290 | advansys= [HW,SCSI] | ||
291 | See header of drivers/scsi/advansys.c. | ||
292 | |||
293 | aedsp16= [HW,OSS] Audio Excel DSP 16 | ||
294 | Format: <io>,<irq>,<dma>,<mss_io>,<mpu_io>,<mpu_irq> | ||
295 | See also header of sound/oss/aedsp16.c. | ||
296 | |||
297 | agp= [AGP] | 287 | agp= [AGP] |
298 | { off | try_unsupported } | 288 | { off | try_unsupported } |
299 | off: disable AGP support | 289 | off: disable AGP support |
300 | try_unsupported: try to drive unsupported chipsets | 290 | try_unsupported: try to drive unsupported chipsets |
301 | (may crash computer or cause data corruption) | 291 | (may crash computer or cause data corruption) |
302 | 292 | ||
303 | aha152x= [HW,SCSI] | 293 | ALSA [HW,ALSA] |
304 | See Documentation/scsi/aha152x.txt. | 294 | See Documentation/sound/alsa/alsa-parameters.txt |
305 | |||
306 | aha1542= [HW,SCSI] | ||
307 | Format: <portbase>[,<buson>,<busoff>[,<dmaspeed>]] | ||
308 | |||
309 | aic7xxx= [HW,SCSI] | ||
310 | See Documentation/scsi/aic7xxx.txt. | ||
311 | |||
312 | aic79xx= [HW,SCSI] | ||
313 | See Documentation/scsi/aic79xx.txt. | ||
314 | 295 | ||
315 | alignment= [KNL,ARM] | 296 | alignment= [KNL,ARM] |
316 | Allow the default userspace alignment fault handler | 297 | Allow the default userspace alignment fault handler |
@@ -372,8 +353,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
372 | 353 | ||
373 | atarimouse= [HW,MOUSE] Atari Mouse | 354 | atarimouse= [HW,MOUSE] Atari Mouse |
374 | 355 | ||
375 | atascsi= [HW,SCSI] Atari SCSI | ||
376 | |||
377 | atkbd.extra= [HW] Enable extra LEDs and keys on IBM RapidAccess, | 356 | atkbd.extra= [HW] Enable extra LEDs and keys on IBM RapidAccess, |
378 | EzKey and similar keyboards | 357 | EzKey and similar keyboards |
379 | 358 | ||
@@ -423,10 +402,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
423 | bttv.pll= See Documentation/video4linux/bttv/Insmod-options | 402 | bttv.pll= See Documentation/video4linux/bttv/Insmod-options |
424 | bttv.tuner= and Documentation/video4linux/bttv/CARDLIST | 403 | bttv.tuner= and Documentation/video4linux/bttv/CARDLIST |
425 | 404 | ||
426 | BusLogic= [HW,SCSI] | ||
427 | See drivers/scsi/BusLogic.c, comment before function | ||
428 | BusLogic_ParseDriverOptions(). | ||
429 | |||
430 | c101= [NET] Moxa C101 synchronous serial card | 405 | c101= [NET] Moxa C101 synchronous serial card |
431 | 406 | ||
432 | cachesize= [BUGS=X86-32] Override level 2 CPU cache size detection. | 407 | cachesize= [BUGS=X86-32] Override level 2 CPU cache size detection. |
@@ -469,7 +444,7 @@ and is between 256 and 4096 characters. It is defined in the file | |||
469 | clocksource is not available, it defaults to PIT. | 444 | clocksource is not available, it defaults to PIT. |
470 | Format: { pit | tsc | cyclone | pmtmr } | 445 | Format: { pit | tsc | cyclone | pmtmr } |
471 | 446 | ||
472 | clocksource= [GENERIC_TIME] Override the default clocksource | 447 | clocksource= Override the default clocksource |
473 | Format: <string> | 448 | Format: <string> |
474 | Override the default clocksource and use the clocksource | 449 | Override the default clocksource and use the clocksource |
475 | with the name specified. | 450 | with the name specified. |
@@ -656,8 +631,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
656 | Disable PIN 1 of APIC timer | 631 | Disable PIN 1 of APIC timer |
657 | Can be useful to work around chipset bugs. | 632 | Can be useful to work around chipset bugs. |
658 | 633 | ||
659 | dmasound= [HW,OSS] Sound subsystem buffers | ||
660 | |||
661 | dma_debug=off If the kernel is compiled with DMA_API_DEBUG support, | 634 | dma_debug=off If the kernel is compiled with DMA_API_DEBUG support, |
662 | this option disables the debugging code at boot. | 635 | this option disables the debugging code at boot. |
663 | 636 | ||
@@ -677,8 +650,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
677 | 650 | ||
678 | dscc4.setup= [NET] | 651 | dscc4.setup= [NET] |
679 | 652 | ||
680 | dtc3181e= [HW,SCSI] | ||
681 | |||
682 | dynamic_printk Enables pr_debug()/dev_dbg() calls if | 653 | dynamic_printk Enables pr_debug()/dev_dbg() calls if |
683 | CONFIG_DYNAMIC_PRINTK_DEBUG has been enabled. | 654 | CONFIG_DYNAMIC_PRINTK_DEBUG has been enabled. |
684 | These can also be switched on/off via | 655 | These can also be switched on/off via |
@@ -687,8 +658,11 @@ and is between 256 and 4096 characters. It is defined in the file | |||
687 | earlycon= [KNL] Output early console device and options. | 658 | earlycon= [KNL] Output early console device and options. |
688 | uart[8250],io,<addr>[,options] | 659 | uart[8250],io,<addr>[,options] |
689 | uart[8250],mmio,<addr>[,options] | 660 | uart[8250],mmio,<addr>[,options] |
661 | uart[8250],mmio32,<addr>[,options] | ||
690 | Start an early, polled-mode console on the 8250/16550 | 662 | Start an early, polled-mode console on the 8250/16550 |
691 | UART at the specified I/O port or MMIO address. | 663 | UART at the specified I/O port or MMIO address. |
664 | MMIO inter-register address stride is either 8bit (mmio) | ||
665 | or 32bit (mmio32). | ||
692 | The options are the same as for ttyS, above. | 666 | The options are the same as for ttyS, above. |
693 | 667 | ||
694 | earlyprintk= [X86,SH,BLACKFIN] | 668 | earlyprintk= [X86,SH,BLACKFIN] |
@@ -716,8 +690,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
716 | This is desgined to be used in conjunction with | 690 | This is desgined to be used in conjunction with |
717 | the boot argument: earlyprintk=vga | 691 | the boot argument: earlyprintk=vga |
718 | 692 | ||
719 | eata= [HW,SCSI] | ||
720 | |||
721 | edd= [EDD] | 693 | edd= [EDD] |
722 | Format: {"off" | "on" | "skip[mbr]"} | 694 | Format: {"off" | "on" | "skip[mbr]"} |
723 | 695 | ||
@@ -773,12 +745,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
773 | Format: <interval>,<probability>,<space>,<times> | 745 | Format: <interval>,<probability>,<space>,<times> |
774 | See also /Documentation/fault-injection/. | 746 | See also /Documentation/fault-injection/. |
775 | 747 | ||
776 | fd_mcs= [HW,SCSI] | ||
777 | See header of drivers/scsi/fd_mcs.c. | ||
778 | |||
779 | fdomain= [HW,SCSI] | ||
780 | See header of drivers/scsi/fdomain.c. | ||
781 | |||
782 | floppy= [HW] | 748 | floppy= [HW] |
783 | See Documentation/blockdev/floppy.txt. | 749 | See Documentation/blockdev/floppy.txt. |
784 | 750 | ||
@@ -838,14 +804,9 @@ and is between 256 and 4096 characters. It is defined in the file | |||
838 | When zero, profiling data is discarded and associated | 804 | When zero, profiling data is discarded and associated |
839 | debugfs files are removed at module unload time. | 805 | debugfs files are removed at module unload time. |
840 | 806 | ||
841 | gdth= [HW,SCSI] | ||
842 | See header of drivers/scsi/gdth.c. | ||
843 | |||
844 | gpt [EFI] Forces disk with valid GPT signature but | 807 | gpt [EFI] Forces disk with valid GPT signature but |
845 | invalid Protective MBR to be treated as GPT. | 808 | invalid Protective MBR to be treated as GPT. |
846 | 809 | ||
847 | gvp11= [HW,SCSI] | ||
848 | |||
849 | hashdist= [KNL,NUMA] Large hashes allocated during boot | 810 | hashdist= [KNL,NUMA] Large hashes allocated during boot |
850 | are distributed across NUMA nodes. Defaults on | 811 | are distributed across NUMA nodes. Defaults on |
851 | for 64bit NUMA, off otherwise. | 812 | for 64bit NUMA, off otherwise. |
@@ -918,9 +879,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
918 | controller | 879 | controller |
919 | i8042.nopnp [HW] Don't use ACPIPnP / PnPBIOS to discover KBD/AUX | 880 | i8042.nopnp [HW] Don't use ACPIPnP / PnPBIOS to discover KBD/AUX |
920 | controllers | 881 | controllers |
921 | i8042.panicblink= | ||
922 | [HW] Frequency with which keyboard LEDs should blink | ||
923 | when kernel panics (default is 0.5 sec) | ||
924 | i8042.reset [HW] Reset the controller during init and cleanup | 882 | i8042.reset [HW] Reset the controller during init and cleanup |
925 | i8042.unlock [HW] Unlock (ignore) the keylock | 883 | i8042.unlock [HW] Unlock (ignore) the keylock |
926 | 884 | ||
@@ -937,9 +895,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
937 | i8k.restricted [HW] Allow controlling fans only if SYS_ADMIN | 895 | i8k.restricted [HW] Allow controlling fans only if SYS_ADMIN |
938 | capability is set. | 896 | capability is set. |
939 | 897 | ||
940 | ibmmcascsi= [HW,MCA,SCSI] IBM MicroChannel SCSI adapter | ||
941 | See Documentation/mca.txt. | ||
942 | |||
943 | icn= [HW,ISDN] | 898 | icn= [HW,ISDN] |
944 | Format: <io>[,<membase>[,<icn_id>[,<icn_id2>]]] | 899 | Format: <io>[,<membase>[,<icn_id>[,<icn_id2>]]] |
945 | 900 | ||
@@ -989,9 +944,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
989 | programs exec'd, files mmap'd for exec, and all files | 944 | programs exec'd, files mmap'd for exec, and all files |
990 | opened for read by uid=0. | 945 | opened for read by uid=0. |
991 | 946 | ||
992 | in2000= [HW,SCSI] | ||
993 | See header of drivers/scsi/in2000.c. | ||
994 | |||
995 | init= [KNL] | 947 | init= [KNL] |
996 | Format: <full_path> | 948 | Format: <full_path> |
997 | Run specified binary instead of /sbin/init as init | 949 | Run specified binary instead of /sbin/init as init |
@@ -1029,6 +981,12 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1029 | result in a hardware IOTLB flush operation as opposed | 981 | result in a hardware IOTLB flush operation as opposed |
1030 | to batching them for performance. | 982 | to batching them for performance. |
1031 | 983 | ||
984 | intremap= [X86-64, Intel-IOMMU] | ||
985 | Format: { on (default) | off | nosid } | ||
986 | on enable Interrupt Remapping (default) | ||
987 | off disable Interrupt Remapping | ||
988 | nosid disable Source ID checking | ||
989 | |||
1032 | inttest= [IA64] | 990 | inttest= [IA64] |
1033 | 991 | ||
1034 | iomem= Disable strict checking of access to MMIO memory | 992 | iomem= Disable strict checking of access to MMIO memory |
@@ -1069,9 +1027,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1069 | See comment before ip2_setup() in | 1027 | See comment before ip2_setup() in |
1070 | drivers/char/ip2/ip2base.c. | 1028 | drivers/char/ip2/ip2base.c. |
1071 | 1029 | ||
1072 | ips= [HW,SCSI] Adaptec / IBM ServeRAID controller | ||
1073 | See header of drivers/scsi/ips.c. | ||
1074 | |||
1075 | irqfixup [HW] | 1030 | irqfixup [HW] |
1076 | When an interrupt is not handled search all handlers | 1031 | When an interrupt is not handled search all handlers |
1077 | for it. Intended to get systems with badly broken | 1032 | for it. Intended to get systems with badly broken |
@@ -1144,9 +1099,12 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1144 | kgdboc= [KGDB,HW] kgdb over consoles. | 1099 | kgdboc= [KGDB,HW] kgdb over consoles. |
1145 | Requires a tty driver that supports console polling, | 1100 | Requires a tty driver that supports console polling, |
1146 | or a supported polling keyboard driver (non-usb). | 1101 | or a supported polling keyboard driver (non-usb). |
1147 | Serial only format: <serial_device>[,baud] | 1102 | Serial only format: <serial_device>[,baud] |
1148 | keyboard only format: kbd | 1103 | keyboard only format: kbd |
1149 | keyboard and serial format: kbd,<serial_device>[,baud] | 1104 | keyboard and serial format: kbd,<serial_device>[,baud] |
1105 | Optional Kernel mode setting: | ||
1106 | kms, kbd format: kms,kbd | ||
1107 | kms, kbd and serial format: kms,kbd,<ser_dev>[,baud] | ||
1150 | 1108 | ||
1151 | kgdbwait [KGDB] Stop kernel execution and enter the | 1109 | kgdbwait [KGDB] Stop kernel execution and enter the |
1152 | kernel debugger at the earliest opportunity. | 1110 | kernel debugger at the earliest opportunity. |
@@ -1344,9 +1302,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1344 | ltpc= [NET] | 1302 | ltpc= [NET] |
1345 | Format: <io>,<irq>,<dma> | 1303 | Format: <io>,<irq>,<dma> |
1346 | 1304 | ||
1347 | mac5380= [HW,SCSI] Format: | ||
1348 | <can_queue>,<cmd_per_lun>,<sg_tablesize>,<hostid>,<use_tags> | ||
1349 | |||
1350 | machvec= [IA64] Force the use of a particular machine-vector | 1305 | machvec= [IA64] Force the use of a particular machine-vector |
1351 | (machvec) in a generic kernel. | 1306 | (machvec) in a generic kernel. |
1352 | Example: machvec=hpzx1_swiotlb | 1307 | Example: machvec=hpzx1_swiotlb |
@@ -1368,13 +1323,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1368 | be mounted | 1323 | be mounted |
1369 | Format: <1-256> | 1324 | Format: <1-256> |
1370 | 1325 | ||
1371 | max_luns= [SCSI] Maximum number of LUNs to probe. | ||
1372 | Should be between 1 and 2^32-1. | ||
1373 | |||
1374 | max_report_luns= | ||
1375 | [SCSI] Maximum number of LUNs received. | ||
1376 | Should be between 1 and 16384. | ||
1377 | |||
1378 | mcatest= [IA-64] | 1326 | mcatest= [IA-64] |
1379 | 1327 | ||
1380 | mce [X86-32] Machine Check Exception | 1328 | mce [X86-32] Machine Check Exception |
@@ -1524,9 +1472,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1524 | that the amount of memory usable for all allocations | 1472 | that the amount of memory usable for all allocations |
1525 | is not too small. | 1473 | is not too small. |
1526 | 1474 | ||
1527 | mpu401= [HW,OSS] | ||
1528 | Format: <io>,<irq> | ||
1529 | |||
1530 | MTD_Partition= [MTD] | 1475 | MTD_Partition= [MTD] |
1531 | Format: <name>,<region-number>,<size>,<offset> | 1476 | Format: <name>,<region-number>,<size>,<offset> |
1532 | 1477 | ||
@@ -1574,19 +1519,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1574 | 1519 | ||
1575 | n2= [NET] SDL Inc. RISCom/N2 synchronous serial card | 1520 | n2= [NET] SDL Inc. RISCom/N2 synchronous serial card |
1576 | 1521 | ||
1577 | NCR_D700= [HW,SCSI] | ||
1578 | See header of drivers/scsi/NCR_D700.c. | ||
1579 | |||
1580 | ncr5380= [HW,SCSI] | ||
1581 | |||
1582 | ncr53c400= [HW,SCSI] | ||
1583 | |||
1584 | ncr53c400a= [HW,SCSI] | ||
1585 | |||
1586 | ncr53c406a= [HW,SCSI] | ||
1587 | |||
1588 | ncr53c8xx= [HW,SCSI] | ||
1589 | |||
1590 | netdev= [NET] Network devices parameters | 1522 | netdev= [NET] Network devices parameters |
1591 | Format: <irq>,<io>,<mem_start>,<mem_end>,<name> | 1523 | Format: <irq>,<io>,<mem_start>,<mem_end>,<name> |
1592 | Note that mem_start is often overloaded to mean | 1524 | Note that mem_start is often overloaded to mean |
@@ -1755,6 +1687,7 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1755 | 1687 | ||
1756 | nointremap [X86-64, Intel-IOMMU] Do not enable interrupt | 1688 | nointremap [X86-64, Intel-IOMMU] Do not enable interrupt |
1757 | remapping. | 1689 | remapping. |
1690 | [Deprecated - use intremap=off] | ||
1758 | 1691 | ||
1759 | nointroute [IA-64] | 1692 | nointroute [IA-64] |
1760 | 1693 | ||
@@ -1812,6 +1745,8 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1812 | 1745 | ||
1813 | nousb [USB] Disable the USB subsystem | 1746 | nousb [USB] Disable the USB subsystem |
1814 | 1747 | ||
1748 | nowatchdog [KNL] Disable the lockup detector. | ||
1749 | |||
1815 | nowb [ARM] | 1750 | nowb [ARM] |
1816 | 1751 | ||
1817 | nox2apic [X86-64,APIC] Do not enable x2APIC mode. | 1752 | nox2apic [X86-64,APIC] Do not enable x2APIC mode. |
@@ -1849,9 +1784,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1849 | For example, to override I2C bus2: | 1784 | For example, to override I2C bus2: |
1850 | omap_mux=i2c2_scl.i2c2_scl=0x100,i2c2_sda.i2c2_sda=0x100 | 1785 | omap_mux=i2c2_scl.i2c2_scl=0x100,i2c2_sda.i2c2_sda=0x100 |
1851 | 1786 | ||
1852 | opl3= [HW,OSS] | ||
1853 | Format: <io> | ||
1854 | |||
1855 | oprofile.timer= [HW] | 1787 | oprofile.timer= [HW] |
1856 | Use timer interrupt instead of performance counters | 1788 | Use timer interrupt instead of performance counters |
1857 | 1789 | ||
@@ -1863,9 +1795,8 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1863 | perfmon on Intel CPUs instead of the | 1795 | perfmon on Intel CPUs instead of the |
1864 | CPU specific event set. | 1796 | CPU specific event set. |
1865 | 1797 | ||
1866 | osst= [HW,SCSI] SCSI Tape Driver | 1798 | OSS [HW,OSS] |
1867 | Format: <buffer_size>,<write_threshold> | 1799 | See Documentation/sound/oss/oss-parameters.txt |
1868 | See also Documentation/scsi/st.txt. | ||
1869 | 1800 | ||
1870 | panic= [KNL] Kernel behaviour on panic | 1801 | panic= [KNL] Kernel behaviour on panic |
1871 | Format: <timeout> | 1802 | Format: <timeout> |
@@ -1899,12 +1830,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1899 | Currently this function knows 686a and 8231 chips. | 1830 | Currently this function knows 686a and 8231 chips. |
1900 | Format: [spp|ps2|epp|ecp|ecpepp] | 1831 | Format: [spp|ps2|epp|ecp|ecpepp] |
1901 | 1832 | ||
1902 | pas2= [HW,OSS] Format: | ||
1903 | <io>,<irq>,<dma>,<dma16>,<sb_io>,<sb_irq>,<sb_dma>,<sb_dma16> | ||
1904 | |||
1905 | pas16= [HW,SCSI] | ||
1906 | See header of drivers/scsi/pas16.c. | ||
1907 | |||
1908 | pause_on_oops= | 1833 | pause_on_oops= |
1909 | Halt all CPUs after the first oops has been printed for | 1834 | Halt all CPUs after the first oops has been printed for |
1910 | the specified number of seconds. This is to be used if | 1835 | the specified number of seconds. This is to be used if |
@@ -1970,6 +1895,8 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1970 | norom [X86] Do not assign address space to | 1895 | norom [X86] Do not assign address space to |
1971 | expansion ROMs that do not already have | 1896 | expansion ROMs that do not already have |
1972 | BIOS assigned address ranges. | 1897 | BIOS assigned address ranges. |
1898 | nobar [X86] Do not assign address space to the | ||
1899 | BARs that weren't assigned by the BIOS. | ||
1973 | irqmask=0xMMMM [X86] Set a bit mask of IRQs allowed to be | 1900 | irqmask=0xMMMM [X86] Set a bit mask of IRQs allowed to be |
1974 | assigned automatically to PCI devices. You can | 1901 | assigned automatically to PCI devices. You can |
1975 | make the kernel exclude IRQs of your ISA cards | 1902 | make the kernel exclude IRQs of your ISA cards |
@@ -2171,10 +2098,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
2171 | [HW,MOUSE] Controls Logitech smartscroll autorepeat. | 2098 | [HW,MOUSE] Controls Logitech smartscroll autorepeat. |
2172 | 0 = disabled, 1 = enabled (default). | 2099 | 0 = disabled, 1 = enabled (default). |
2173 | 2100 | ||
2174 | pss= [HW,OSS] Personal Sound System (ECHO ESC614) | ||
2175 | Format: | ||
2176 | <io>,<mss_io>,<mss_irq>,<mss_dma>,<mpu_io>,<mpu_irq> | ||
2177 | |||
2178 | pt. [PARIDE] | 2101 | pt. [PARIDE] |
2179 | See Documentation/blockdev/paride.txt. | 2102 | See Documentation/blockdev/paride.txt. |
2180 | 2103 | ||
@@ -2273,30 +2196,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
2273 | 2196 | ||
2274 | sched_debug [KNL] Enables verbose scheduler debug messages. | 2197 | sched_debug [KNL] Enables verbose scheduler debug messages. |
2275 | 2198 | ||
2276 | scsi_debug_*= [SCSI] | ||
2277 | See drivers/scsi/scsi_debug.c. | ||
2278 | |||
2279 | scsi_default_dev_flags= | ||
2280 | [SCSI] SCSI default device flags | ||
2281 | Format: <integer> | ||
2282 | |||
2283 | scsi_dev_flags= [SCSI] Black/white list entry for vendor and model | ||
2284 | Format: <vendor>:<model>:<flags> | ||
2285 | (flags are integer value) | ||
2286 | |||
2287 | scsi_logging_level= [SCSI] a bit mask of logging levels | ||
2288 | See drivers/scsi/scsi_logging.h for bits. Also | ||
2289 | settable via sysctl at dev.scsi.logging_level | ||
2290 | (/proc/sys/dev/scsi/logging_level). | ||
2291 | There is also a nice 'scsi_logging_level' script in the | ||
2292 | S390-tools package, available for download at | ||
2293 | http://www-128.ibm.com/developerworks/linux/linux390/s390-tools-1.5.4.html | ||
2294 | |||
2295 | scsi_mod.scan= [SCSI] sync (default) scans SCSI busses as they are | ||
2296 | discovered. async scans them in kernel threads, | ||
2297 | allowing boot to proceed. none ignores them, expecting | ||
2298 | user space to do the scan. | ||
2299 | |||
2300 | security= [SECURITY] Choose a security module to enable at boot. | 2199 | security= [SECURITY] Choose a security module to enable at boot. |
2301 | If this boot parameter is not specified, only the first | 2200 | If this boot parameter is not specified, only the first |
2302 | security module asking for security registration will be | 2201 | security module asking for security registration will be |
@@ -2330,9 +2229,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
2330 | The parameter means the number of CPUs to show, | 2229 | The parameter means the number of CPUs to show, |
2331 | for example 1 means boot CPU only. | 2230 | for example 1 means boot CPU only. |
2332 | 2231 | ||
2333 | sim710= [SCSI,HW] | ||
2334 | See header of drivers/scsi/sim710.c. | ||
2335 | |||
2336 | simeth= [IA-64] | 2232 | simeth= [IA-64] |
2337 | simscsi= | 2233 | simscsi= |
2338 | 2234 | ||
@@ -2390,128 +2286,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
2390 | 1: Fast pin select (default) | 2286 | 1: Fast pin select (default) |
2391 | 2: ATC IRMode | 2287 | 2: ATC IRMode |
2392 | 2288 | ||
2393 | snd-ad1816a= [HW,ALSA] | ||
2394 | |||
2395 | snd-ad1848= [HW,ALSA] | ||
2396 | |||
2397 | snd-ali5451= [HW,ALSA] | ||
2398 | |||
2399 | snd-als100= [HW,ALSA] | ||
2400 | |||
2401 | snd-als4000= [HW,ALSA] | ||
2402 | |||
2403 | snd-azt2320= [HW,ALSA] | ||
2404 | |||
2405 | snd-cmi8330= [HW,ALSA] | ||
2406 | |||
2407 | snd-cmipci= [HW,ALSA] | ||
2408 | |||
2409 | snd-cs4231= [HW,ALSA] | ||
2410 | |||
2411 | snd-cs4232= [HW,ALSA] | ||
2412 | |||
2413 | snd-cs4236= [HW,ALSA] | ||
2414 | |||
2415 | snd-cs4281= [HW,ALSA] | ||
2416 | |||
2417 | snd-cs46xx= [HW,ALSA] | ||
2418 | |||
2419 | snd-dt019x= [HW,ALSA] | ||
2420 | |||
2421 | snd-dummy= [HW,ALSA] | ||
2422 | |||
2423 | snd-emu10k1= [HW,ALSA] | ||
2424 | |||
2425 | snd-ens1370= [HW,ALSA] | ||
2426 | |||
2427 | snd-ens1371= [HW,ALSA] | ||
2428 | |||
2429 | snd-es968= [HW,ALSA] | ||
2430 | |||
2431 | snd-es1688= [HW,ALSA] | ||
2432 | |||
2433 | snd-es18xx= [HW,ALSA] | ||
2434 | |||
2435 | snd-es1938= [HW,ALSA] | ||
2436 | |||
2437 | snd-es1968= [HW,ALSA] | ||
2438 | |||
2439 | snd-fm801= [HW,ALSA] | ||
2440 | |||
2441 | snd-gusclassic= [HW,ALSA] | ||
2442 | |||
2443 | snd-gusextreme= [HW,ALSA] | ||
2444 | |||
2445 | snd-gusmax= [HW,ALSA] | ||
2446 | |||
2447 | snd-hdsp= [HW,ALSA] | ||
2448 | |||
2449 | snd-ice1712= [HW,ALSA] | ||
2450 | |||
2451 | snd-intel8x0= [HW,ALSA] | ||
2452 | |||
2453 | snd-interwave= [HW,ALSA] | ||
2454 | |||
2455 | snd-interwave-stb= | ||
2456 | [HW,ALSA] | ||
2457 | |||
2458 | snd-korg1212= [HW,ALSA] | ||
2459 | |||
2460 | snd-maestro3= [HW,ALSA] | ||
2461 | |||
2462 | snd-mpu401= [HW,ALSA] | ||
2463 | |||
2464 | snd-mtpav= [HW,ALSA] | ||
2465 | |||
2466 | snd-nm256= [HW,ALSA] | ||
2467 | |||
2468 | snd-opl3sa2= [HW,ALSA] | ||
2469 | |||
2470 | snd-opti92x-ad1848= | ||
2471 | [HW,ALSA] | ||
2472 | |||
2473 | snd-opti92x-cs4231= | ||
2474 | [HW,ALSA] | ||
2475 | |||
2476 | snd-opti93x= [HW,ALSA] | ||
2477 | |||
2478 | snd-pmac= [HW,ALSA] | ||
2479 | |||
2480 | snd-rme32= [HW,ALSA] | ||
2481 | |||
2482 | snd-rme96= [HW,ALSA] | ||
2483 | |||
2484 | snd-rme9652= [HW,ALSA] | ||
2485 | |||
2486 | snd-sb8= [HW,ALSA] | ||
2487 | |||
2488 | snd-sb16= [HW,ALSA] | ||
2489 | |||
2490 | snd-sbawe= [HW,ALSA] | ||
2491 | |||
2492 | snd-serial= [HW,ALSA] | ||
2493 | |||
2494 | snd-sgalaxy= [HW,ALSA] | ||
2495 | |||
2496 | snd-sonicvibes= [HW,ALSA] | ||
2497 | |||
2498 | snd-sun-amd7930= | ||
2499 | [HW,ALSA] | ||
2500 | |||
2501 | snd-sun-cs4231= [HW,ALSA] | ||
2502 | |||
2503 | snd-trident= [HW,ALSA] | ||
2504 | |||
2505 | snd-usb-audio= [HW,ALSA,USB] | ||
2506 | |||
2507 | snd-via82xx= [HW,ALSA] | ||
2508 | |||
2509 | snd-virmidi= [HW,ALSA] | ||
2510 | |||
2511 | snd-wavefront= [HW,ALSA] | ||
2512 | |||
2513 | snd-ymfpci= [HW,ALSA] | ||
2514 | |||
2515 | softlockup_panic= | 2289 | softlockup_panic= |
2516 | [KNL] Should the soft-lockup detector generate panics. | 2290 | [KNL] Should the soft-lockup detector generate panics. |
2517 | 2291 | ||
@@ -2526,12 +2300,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
2526 | spia_pedr= | 2300 | spia_pedr= |
2527 | spia_peddr= | 2301 | spia_peddr= |
2528 | 2302 | ||
2529 | sscape= [HW,OSS] | ||
2530 | Format: <io>,<irq>,<dma>,<mpu_io>,<mpu_irq> | ||
2531 | |||
2532 | st= [HW,SCSI] SCSI tape parameters (buffers, etc.) | ||
2533 | See Documentation/scsi/st.txt. | ||
2534 | |||
2535 | stacktrace [FTRACE] | 2303 | stacktrace [FTRACE] |
2536 | Enabled the stack tracer on boot up. | 2304 | Enabled the stack tracer on boot up. |
2537 | 2305 | ||
@@ -2589,18 +2357,12 @@ and is between 256 and 4096 characters. It is defined in the file | |||
2589 | 2357 | ||
2590 | switches= [HW,M68k] | 2358 | switches= [HW,M68k] |
2591 | 2359 | ||
2592 | sym53c416= [HW,SCSI] | ||
2593 | See header of drivers/scsi/sym53c416.c. | ||
2594 | |||
2595 | sysrq_always_enabled | 2360 | sysrq_always_enabled |
2596 | [KNL] | 2361 | [KNL] |
2597 | Ignore sysrq setting - this boot parameter will | 2362 | Ignore sysrq setting - this boot parameter will |
2598 | neutralize any effect of /proc/sys/kernel/sysrq. | 2363 | neutralize any effect of /proc/sys/kernel/sysrq. |
2599 | Useful for debugging. | 2364 | Useful for debugging. |
2600 | 2365 | ||
2601 | t128= [HW,SCSI] | ||
2602 | See header of drivers/scsi/t128.c. | ||
2603 | |||
2604 | tdfx= [HW,DRM] | 2366 | tdfx= [HW,DRM] |
2605 | 2367 | ||
2606 | test_suspend= [SUSPEND] | 2368 | test_suspend= [SUSPEND] |
@@ -2637,10 +2399,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
2637 | <deci-seconds>: poll all this frequency | 2399 | <deci-seconds>: poll all this frequency |
2638 | 0: no polling (default) | 2400 | 0: no polling (default) |
2639 | 2401 | ||
2640 | tmscsim= [HW,SCSI] | ||
2641 | See comment before function dc390_setup() in | ||
2642 | drivers/scsi/tmscsim.c. | ||
2643 | |||
2644 | topology= [S390] | 2402 | topology= [S390] |
2645 | Format: {off | on} | 2403 | Format: {off | on} |
2646 | Specify if the kernel should make use of the cpu | 2404 | Specify if the kernel should make use of the cpu |
@@ -2668,10 +2426,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
2668 | to facilitate early boot debugging. | 2426 | to facilitate early boot debugging. |
2669 | See also Documentation/trace/events.txt | 2427 | See also Documentation/trace/events.txt |
2670 | 2428 | ||
2671 | trix= [HW,OSS] MediaTrix AudioTrix Pro | ||
2672 | Format: | ||
2673 | <io>,<irq>,<dma>,<dma2>,<sb_io>,<sb_irq>,<sb_dma>,<mpu_io>,<mpu_irq> | ||
2674 | |||
2675 | tsc= Disable clocksource-must-verify flag for TSC. | 2429 | tsc= Disable clocksource-must-verify flag for TSC. |
2676 | Format: <string> | 2430 | Format: <string> |
2677 | [x86] reliable: mark tsc clocksource as reliable, this | 2431 | [x86] reliable: mark tsc clocksource as reliable, this |
@@ -2685,15 +2439,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
2685 | <port#>,<js1>,<js2>,<js3>,<js4>,<js5>,<js6>,<js7> | 2439 | <port#>,<js1>,<js2>,<js3>,<js4>,<js5>,<js6>,<js7> |
2686 | See also Documentation/input/joystick-parport.txt | 2440 | See also Documentation/input/joystick-parport.txt |
2687 | 2441 | ||
2688 | u14-34f= [HW,SCSI] UltraStor 14F/34F SCSI host adapter | ||
2689 | See header of drivers/scsi/u14-34f.c. | ||
2690 | |||
2691 | uart401= [HW,OSS] | ||
2692 | Format: <io>,<irq> | ||
2693 | |||
2694 | uart6850= [HW,OSS] | ||
2695 | Format: <io>,<irq> | ||
2696 | |||
2697 | uhash_entries= [KNL,NET] | 2442 | uhash_entries= [KNL,NET] |
2698 | Set number of hash buckets for UDP/UDP-Lite connections | 2443 | Set number of hash buckets for UDP/UDP-Lite connections |
2699 | 2444 | ||
@@ -2859,15 +2604,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
2859 | overridden by individual drivers. 0 will hide | 2604 | overridden by individual drivers. 0 will hide |
2860 | cursors, 1 will display them. | 2605 | cursors, 1 will display them. |
2861 | 2606 | ||
2862 | waveartist= [HW,OSS] | ||
2863 | Format: <io>,<irq>,<dma>,<dma2> | ||
2864 | |||
2865 | wd33c93= [HW,SCSI] | ||
2866 | See header of drivers/scsi/wd33c93.c. | ||
2867 | |||
2868 | wd7000= [HW,SCSI] | ||
2869 | See header of drivers/scsi/wd7000.c. | ||
2870 | |||
2871 | watchdog timers [HW,WDT] For information on watchdog timers, | 2607 | watchdog timers [HW,WDT] For information on watchdog timers, |
2872 | see Documentation/watchdog/watchdog-parameters.txt | 2608 | see Documentation/watchdog/watchdog-parameters.txt |
2873 | or other driver-specific files in the | 2609 | or other driver-specific files in the |
@@ -2886,6 +2622,16 @@ and is between 256 and 4096 characters. It is defined in the file | |||
2886 | xd= [HW,XT] Original XT pre-IDE (RLL encoded) disks. | 2622 | xd= [HW,XT] Original XT pre-IDE (RLL encoded) disks. |
2887 | xd_geo= See header of drivers/block/xd.c. | 2623 | xd_geo= See header of drivers/block/xd.c. |
2888 | 2624 | ||
2625 | xen_emul_unplug= [HW,X86,XEN] | ||
2626 | Unplug Xen emulated devices | ||
2627 | Format: [unplug0,][unplug1] | ||
2628 | ide-disks -- unplug primary master IDE devices | ||
2629 | aux-ide-disks -- unplug non-primary-master IDE devices | ||
2630 | nics -- unplug network devices | ||
2631 | all -- unplug all emulated devices (NICs and IDE disks) | ||
2632 | ignore -- continue loading the Xen platform PCI driver even | ||
2633 | if the version check failed | ||
2634 | |||
2889 | xirc2ps_cs= [NET,PCMCIA] | 2635 | xirc2ps_cs= [NET,PCMCIA] |
2890 | Format: | 2636 | Format: |
2891 | <irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]] | 2637 | <irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]] |
@@ -2894,5 +2640,4 @@ ______________________________________________________________________ | |||
2894 | 2640 | ||
2895 | TODO: | 2641 | TODO: |
2896 | 2642 | ||
2897 | Add documentation for ALSA options. | ||
2898 | Add more DRM drivers. | 2643 | Add more DRM drivers. |
diff --git a/Documentation/kprobes.txt b/Documentation/kprobes.txt index 6653017680dd..1762b81fcdf2 100644 --- a/Documentation/kprobes.txt +++ b/Documentation/kprobes.txt | |||
@@ -285,6 +285,7 @@ architectures: | |||
285 | - sparc64 (Return probes not yet implemented.) | 285 | - sparc64 (Return probes not yet implemented.) |
286 | - arm | 286 | - arm |
287 | - ppc | 287 | - ppc |
288 | - mips | ||
288 | 289 | ||
289 | 3. Configuring Kprobes | 290 | 3. Configuring Kprobes |
290 | 291 | ||
diff --git a/Documentation/mmc/00-INDEX b/Documentation/mmc/00-INDEX new file mode 100644 index 000000000000..fca586f5b853 --- /dev/null +++ b/Documentation/mmc/00-INDEX | |||
@@ -0,0 +1,4 @@ | |||
1 | 00-INDEX | ||
2 | - this file | ||
3 | mmc-dev-attrs.txt | ||
4 | - info on SD and MMC device attributes | ||
diff --git a/Documentation/mmc/mmc-dev-attrs.txt b/Documentation/mmc/mmc-dev-attrs.txt new file mode 100644 index 000000000000..ff2bd685bced --- /dev/null +++ b/Documentation/mmc/mmc-dev-attrs.txt | |||
@@ -0,0 +1,56 @@ | |||
1 | SD and MMC Device Attributes | ||
2 | ============================ | ||
3 | |||
4 | All attributes are read-only. | ||
5 | |||
6 | cid Card Identifaction Register | ||
7 | csd Card Specific Data Register | ||
8 | scr SD Card Configuration Register (SD only) | ||
9 | date Manufacturing Date (from CID Register) | ||
10 | fwrev Firmware/Product Revision (from CID Register) (SD and MMCv1 only) | ||
11 | hwrev Hardware/Product Revision (from CID Register) (SD and MMCv1 only) | ||
12 | manfid Manufacturer ID (from CID Register) | ||
13 | name Product Name (from CID Register) | ||
14 | oemid OEM/Application ID (from CID Register) | ||
15 | serial Product Serial Number (from CID Register) | ||
16 | erase_size Erase group size | ||
17 | preferred_erase_size Preferred erase size | ||
18 | |||
19 | Note on Erase Size and Preferred Erase Size: | ||
20 | |||
21 | "erase_size" is the minimum size, in bytes, of an erase | ||
22 | operation. For MMC, "erase_size" is the erase group size | ||
23 | reported by the card. Note that "erase_size" does not apply | ||
24 | to trim or secure trim operations where the minimum size is | ||
25 | always one 512 byte sector. For SD, "erase_size" is 512 | ||
26 | if the card is block-addressed, 0 otherwise. | ||
27 | |||
28 | SD/MMC cards can erase an arbitrarily large area up to and | ||
29 | including the whole card. When erasing a large area it may | ||
30 | be desirable to do it in smaller chunks for three reasons: | ||
31 | 1. A single erase command will make all other I/O on | ||
32 | the card wait. This is not a problem if the whole card | ||
33 | is being erased, but erasing one partition will make | ||
34 | I/O for another partition on the same card wait for the | ||
35 | duration of the erase - which could be a several | ||
36 | minutes. | ||
37 | 2. To be able to inform the user of erase progress. | ||
38 | 3. The erase timeout becomes too large to be very | ||
39 | useful. Because the erase timeout contains a margin | ||
40 | which is multiplied by the size of the erase area, | ||
41 | the value can end up being several minutes for large | ||
42 | areas. | ||
43 | |||
44 | "erase_size" is not the most efficient unit to erase | ||
45 | (especially for SD where it is just one sector), | ||
46 | hence "preferred_erase_size" provides a good chunk | ||
47 | size for erasing large areas. | ||
48 | |||
49 | For MMC, "preferred_erase_size" is the high-capacity | ||
50 | erase size if a card specifies one, otherwise it is | ||
51 | based on the capacity of the card. | ||
52 | |||
53 | For SD, "preferred_erase_size" is the allocation unit | ||
54 | size specified by the card. | ||
55 | |||
56 | "preferred_erase_size" is in bytes. | ||
diff --git a/Documentation/networking/dns_resolver.txt b/Documentation/networking/dns_resolver.txt new file mode 100644 index 000000000000..aefd1e681804 --- /dev/null +++ b/Documentation/networking/dns_resolver.txt | |||
@@ -0,0 +1,146 @@ | |||
1 | =================== | ||
2 | DNS Resolver Module | ||
3 | =================== | ||
4 | |||
5 | Contents: | ||
6 | |||
7 | - Overview. | ||
8 | - Compilation. | ||
9 | - Setting up. | ||
10 | - Usage. | ||
11 | - Mechanism. | ||
12 | - Debugging. | ||
13 | |||
14 | |||
15 | ======== | ||
16 | OVERVIEW | ||
17 | ======== | ||
18 | |||
19 | The DNS resolver module provides a way for kernel services to make DNS queries | ||
20 | by way of requesting a key of key type dns_resolver. These queries are | ||
21 | upcalled to userspace through /sbin/request-key. | ||
22 | |||
23 | These routines must be supported by userspace tools dns.upcall, cifs.upcall and | ||
24 | request-key. It is under development and does not yet provide the full feature | ||
25 | set. The features it does support include: | ||
26 | |||
27 | (*) Implements the dns_resolver key_type to contact userspace. | ||
28 | |||
29 | It does not yet support the following AFS features: | ||
30 | |||
31 | (*) Dns query support for AFSDB resource record. | ||
32 | |||
33 | This code is extracted from the CIFS filesystem. | ||
34 | |||
35 | |||
36 | =========== | ||
37 | COMPILATION | ||
38 | =========== | ||
39 | |||
40 | The module should be enabled by turning on the kernel configuration options: | ||
41 | |||
42 | CONFIG_DNS_RESOLVER - tristate "DNS Resolver support" | ||
43 | |||
44 | |||
45 | ========== | ||
46 | SETTING UP | ||
47 | ========== | ||
48 | |||
49 | To set up this facility, the /etc/request-key.conf file must be altered so that | ||
50 | /sbin/request-key can appropriately direct the upcalls. For example, to handle | ||
51 | basic dname to IPv4/IPv6 address resolution, the following line should be | ||
52 | added: | ||
53 | |||
54 | #OP TYPE DESC CO-INFO PROGRAM ARG1 ARG2 ARG3 ... | ||
55 | #====== ============ ======= ======= ========================== | ||
56 | create dns_resolver * * /usr/sbin/cifs.upcall %k | ||
57 | |||
58 | To direct a query for query type 'foo', a line of the following should be added | ||
59 | before the more general line given above as the first match is the one taken. | ||
60 | |||
61 | create dns_resolver foo:* * /usr/sbin/dns.foo %k | ||
62 | |||
63 | |||
64 | |||
65 | ===== | ||
66 | USAGE | ||
67 | ===== | ||
68 | |||
69 | To make use of this facility, one of the following functions that are | ||
70 | implemented in the module can be called after doing: | ||
71 | |||
72 | #include <linux/dns_resolver.h> | ||
73 | |||
74 | (1) int dns_query(const char *type, const char *name, size_t namelen, | ||
75 | const char *options, char **_result, time_t *_expiry); | ||
76 | |||
77 | This is the basic access function. It looks for a cached DNS query and if | ||
78 | it doesn't find it, it upcalls to userspace to make a new DNS query, which | ||
79 | may then be cached. The key description is constructed as a string of the | ||
80 | form: | ||
81 | |||
82 | [<type>:]<name> | ||
83 | |||
84 | where <type> optionally specifies the particular upcall program to invoke, | ||
85 | and thus the type of query to do, and <name> specifies the string to be | ||
86 | looked up. The default query type is a straight hostname to IP address | ||
87 | set lookup. | ||
88 | |||
89 | The name parameter is not required to be a NUL-terminated string, and its | ||
90 | length should be given by the namelen argument. | ||
91 | |||
92 | The options parameter may be NULL or it may be a set of options | ||
93 | appropriate to the query type. | ||
94 | |||
95 | The return value is a string appropriate to the query type. For instance, | ||
96 | for the default query type it is just a list of comma-separated IPv4 and | ||
97 | IPv6 addresses. The caller must free the result. | ||
98 | |||
99 | The length of the result string is returned on success, and a negative | ||
100 | error code is returned otherwise. -EKEYREJECTED will be returned if the | ||
101 | DNS lookup failed. | ||
102 | |||
103 | If _expiry is non-NULL, the expiry time (TTL) of the result will be | ||
104 | returned also. | ||
105 | |||
106 | |||
107 | ========= | ||
108 | MECHANISM | ||
109 | ========= | ||
110 | |||
111 | The dnsresolver module registers a key type called "dns_resolver". Keys of | ||
112 | this type are used to transport and cache DNS lookup results from userspace. | ||
113 | |||
114 | When dns_query() is invoked, it calls request_key() to search the local | ||
115 | keyrings for a cached DNS result. If that fails to find one, it upcalls to | ||
116 | userspace to get a new result. | ||
117 | |||
118 | Upcalls to userspace are made through the request_key() upcall vector, and are | ||
119 | directed by means of configuration lines in /etc/request-key.conf that tell | ||
120 | /sbin/request-key what program to run to instantiate the key. | ||
121 | |||
122 | The upcall handler program is responsible for querying the DNS, processing the | ||
123 | result into a form suitable for passing to the keyctl_instantiate_key() | ||
124 | routine. This then passes the data to dns_resolver_instantiate() which strips | ||
125 | off and processes any options included in the data, and then attaches the | ||
126 | remainder of the string to the key as its payload. | ||
127 | |||
128 | The upcall handler program should set the expiry time on the key to that of the | ||
129 | lowest TTL of all the records it has extracted a result from. This means that | ||
130 | the key will be discarded and recreated when the data it holds has expired. | ||
131 | |||
132 | dns_query() returns a copy of the value attached to the key, or an error if | ||
133 | that is indicated instead. | ||
134 | |||
135 | See <file:Documentation/keys-request-key.txt> for further information about | ||
136 | request-key function. | ||
137 | |||
138 | |||
139 | ========= | ||
140 | DEBUGGING | ||
141 | ========= | ||
142 | |||
143 | Debugging messages can be turned on dynamically by writing a 1 into the | ||
144 | following file: | ||
145 | |||
146 | /sys/module/dnsresolver/parameters/debug | ||
diff --git a/Documentation/networking/timestamping.txt b/Documentation/networking/timestamping.txt index e8c8f4f06c67..98097d8cb910 100644 --- a/Documentation/networking/timestamping.txt +++ b/Documentation/networking/timestamping.txt | |||
@@ -172,15 +172,19 @@ struct skb_shared_hwtstamps { | |||
172 | }; | 172 | }; |
173 | 173 | ||
174 | Time stamps for outgoing packets are to be generated as follows: | 174 | Time stamps for outgoing packets are to be generated as follows: |
175 | - In hard_start_xmit(), check if skb_tx(skb)->hardware is set no-zero. | 175 | - In hard_start_xmit(), check if (skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) |
176 | If yes, then the driver is expected to do hardware time stamping. | 176 | is set no-zero. If yes, then the driver is expected to do hardware time |
177 | stamping. | ||
177 | - If this is possible for the skb and requested, then declare | 178 | - If this is possible for the skb and requested, then declare |
178 | that the driver is doing the time stamping by setting the field | 179 | that the driver is doing the time stamping by setting the flag |
179 | skb_tx(skb)->in_progress non-zero. You might want to keep a pointer | 180 | SKBTX_IN_PROGRESS in skb_shinfo(skb)->tx_flags , e.g. with |
180 | to the associated skb for the next step and not free the skb. A driver | 181 | |
181 | not supporting hardware time stamping doesn't do that. A driver must | 182 | skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS; |
182 | never touch sk_buff::tstamp! It is used to store software generated | 183 | |
183 | time stamps by the network subsystem. | 184 | You might want to keep a pointer to the associated skb for the next step |
185 | and not free the skb. A driver not supporting hardware time stamping doesn't | ||
186 | do that. A driver must never touch sk_buff::tstamp! It is used to store | ||
187 | software generated time stamps by the network subsystem. | ||
184 | - As soon as the driver has sent the packet and/or obtained a | 188 | - As soon as the driver has sent the packet and/or obtained a |
185 | hardware time stamp for it, it passes the time stamp back by | 189 | hardware time stamp for it, it passes the time stamp back by |
186 | calling skb_hwtstamp_tx() with the original skb, the raw | 190 | calling skb_hwtstamp_tx() with the original skb, the raw |
@@ -191,6 +195,6 @@ Time stamps for outgoing packets are to be generated as follows: | |||
191 | this would occur at a later time in the processing pipeline than other | 195 | this would occur at a later time in the processing pipeline than other |
192 | software time stamping and therefore could lead to unexpected deltas | 196 | software time stamping and therefore could lead to unexpected deltas |
193 | between time stamps. | 197 | between time stamps. |
194 | - If the driver did not call set skb_tx(skb)->in_progress, then | 198 | - If the driver did not set the SKBTX_IN_PROGRESS flag (see above), then |
195 | dev_hard_start_xmit() checks whether software time stamping | 199 | dev_hard_start_xmit() checks whether software time stamping |
196 | is wanted as fallback and potentially generates the time stamp. | 200 | is wanted as fallback and potentially generates the time stamp. |
diff --git a/Documentation/networking/wavelan.txt b/Documentation/networking/wavelan.txt deleted file mode 100644 index 90e0ac4e15da..000000000000 --- a/Documentation/networking/wavelan.txt +++ /dev/null | |||
@@ -1,74 +0,0 @@ | |||
1 | The Wavelan drivers saga | ||
2 | ------------------------ | ||
3 | |||
4 | By Jean Tourrilhes <jt@hpl.hp.com> | ||
5 | |||
6 | The Wavelan is a Radio network adapter designed by | ||
7 | Lucent. Under this generic name is hidden quite a variety of hardware, | ||
8 | and many Linux driver to support it. | ||
9 | The get the full story on Wireless LANs, please consult : | ||
10 | http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/ | ||
11 | |||
12 | "wavelan" driver (old ISA Wavelan) | ||
13 | ---------------- | ||
14 | o Config : Network device -> Wireless LAN -> AT&T WaveLAN | ||
15 | o Location : .../drivers/net/wireless/wavelan* | ||
16 | o in-line doc : .../drivers/net/wireless/wavelan.p.h | ||
17 | o on-line doc : | ||
18 | http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Wavelan.html | ||
19 | |||
20 | This is the driver for the ISA version of the first generation | ||
21 | of the Wavelan, now discontinued. The device is 2 Mb/s, composed of a | ||
22 | Intel 82586 controller and a Lucent Modem, and is NOT 802.11 compliant. | ||
23 | The driver has been tested with the following hardware : | ||
24 | o Wavelan ISA 915 MHz (full length ISA card) | ||
25 | o Wavelan ISA 915 MHz 2.0 (half length ISA card) | ||
26 | o Wavelan ISA 2.4 GHz (full length ISA card, fixed frequency) | ||
27 | o Wavelan ISA 2.4 GHz 2.0 (half length ISA card, frequency selectable) | ||
28 | o Above cards with the optional DES encryption feature | ||
29 | |||
30 | "wavelan_cs" driver (old Pcmcia Wavelan) | ||
31 | ------------------- | ||
32 | o Config : Network device -> PCMCIA network -> | ||
33 | Pcmcia Wireless LAN -> AT&T/Lucent WaveLAN | ||
34 | o Location : .../drivers/net/pcmcia/wavelan* | ||
35 | o in-line doc : .../drivers/net/pcmcia/wavelan_cs.h | ||
36 | o on-line doc : | ||
37 | http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Wavelan.html | ||
38 | |||
39 | This is the driver for the PCMCIA version of the first | ||
40 | generation of the Wavelan, now discontinued. The device is 2 Mb/s, | ||
41 | composed of a Intel 82593 controller (totally different from the 82586) | ||
42 | and a Lucent Modem, and NOT 802.11 compatible. | ||
43 | The driver has been tested with the following hardware : | ||
44 | o Wavelan Pcmcia 915 MHz 2.0 (Pcmcia card + separate | ||
45 | modem/antenna block) | ||
46 | o Wavelan Pcmcia 2.4 GHz 2.0 (Pcmcia card + separate | ||
47 | modem/antenna block) | ||
48 | |||
49 | "wvlan_cs" driver (Wavelan IEEE, GPL) | ||
50 | ----------------- | ||
51 | o Config : Not yet in kernel | ||
52 | o Location : Pcmcia package 3.1.10+ | ||
53 | o on-line doc : | ||
54 | http://web.archive.org/web/*/http://www.fasta.fh-dortmund.de/users/andy/wvlan/ | ||
55 | |||
56 | This is the driver for the current generation of Wavelan IEEE, | ||
57 | which is 802.11 compatible. Depending on version, it is 2 Mb/s or 11 | ||
58 | Mb/s, with or without encryption, all implemented in Lucent specific | ||
59 | DSP (the Hermes). | ||
60 | This is a GPL full source PCMCIA driver (ISA is just a Pcmcia | ||
61 | card with ISA-Pcmcia bridge). | ||
62 | |||
63 | "wavelan2_cs" driver (Wavelan IEEE, binary) | ||
64 | -------------------- | ||
65 | o Config : Not yet in kernel | ||
66 | o Location : ftp://sourceforge.org/pcmcia/contrib/ | ||
67 | |||
68 | This driver support exactly the same hardware as the previous | ||
69 | driver, the main difference is that it is based on a binary library | ||
70 | and supported by Lucent. | ||
71 | |||
72 | I hope it clears the confusion ;-) | ||
73 | |||
74 | Jean | ||
diff --git a/Documentation/padata.txt b/Documentation/padata.txt index 473ebf22cd69..7ddfe216a0aa 100644 --- a/Documentation/padata.txt +++ b/Documentation/padata.txt | |||
@@ -19,7 +19,7 @@ overall control of how tasks are to be run: | |||
19 | 19 | ||
20 | The pcpumask describes which processors will be used to execute work | 20 | The pcpumask describes which processors will be used to execute work |
21 | submitted to this instance in parallel. The cbcpumask defines which | 21 | submitted to this instance in parallel. The cbcpumask defines which |
22 | processors are allowed to use as the serialization callback processor. | 22 | processors are allowed to be used as the serialization callback processor. |
23 | The workqueue wq is where the work will actually be done; it should be | 23 | The workqueue wq is where the work will actually be done; it should be |
24 | a multithreaded queue, naturally. | 24 | a multithreaded queue, naturally. |
25 | 25 | ||
@@ -30,10 +30,10 @@ cpumasks this helper function can be used: | |||
30 | 30 | ||
31 | Note: Padata maintains two kinds of cpumasks internally. The user supplied | 31 | Note: Padata maintains two kinds of cpumasks internally. The user supplied |
32 | cpumasks, submitted by padata_alloc/padata_alloc_possible and the 'usable' | 32 | cpumasks, submitted by padata_alloc/padata_alloc_possible and the 'usable' |
33 | cpumasks. The usable cpumasks are always the subset of active cpus in the | 33 | cpumasks. The usable cpumasks are always a subset of active CPUs in the |
34 | user supplied cpumasks, these are the cpumasks padata actually use. So | 34 | user supplied cpumasks; these are the cpumasks padata actually uses. So |
35 | it is legal to supply a cpumask to padata that contains offline cpus. | 35 | it is legal to supply a cpumask to padata that contains offline CPUs. |
36 | Once a offline cpu in the user supplied cpumask comes online, padata | 36 | Once an offline CPU in the user supplied cpumask comes online, padata |
37 | is going to use it. | 37 | is going to use it. |
38 | 38 | ||
39 | There are functions for enabling and disabling the instance: | 39 | There are functions for enabling and disabling the instance: |
@@ -44,7 +44,7 @@ There are functions for enabling and disabling the instance: | |||
44 | These functions are setting or clearing the "PADATA_INIT" flag; | 44 | These functions are setting or clearing the "PADATA_INIT" flag; |
45 | if that flag is not set, other functions will refuse to work. | 45 | if that flag is not set, other functions will refuse to work. |
46 | padata_start returns zero on success (flag set) or -EINVAL if the | 46 | padata_start returns zero on success (flag set) or -EINVAL if the |
47 | padata cpumask contains no active cpu (flag not set). | 47 | padata cpumask contains no active CPU (flag not set). |
48 | padata_stop clears the flag and blocks until the padata instance | 48 | padata_stop clears the flag and blocks until the padata instance |
49 | is unused. | 49 | is unused. |
50 | 50 | ||
@@ -63,11 +63,11 @@ done with great frequency. | |||
63 | 63 | ||
64 | It's possible to change both cpumasks of a padata instance with | 64 | It's possible to change both cpumasks of a padata instance with |
65 | padata_set_cpumasks by specifying the cpumasks for parallel execution (pcpumask) | 65 | padata_set_cpumasks by specifying the cpumasks for parallel execution (pcpumask) |
66 | and for the serial callback function (cbcpumask). padata_set_cpumask is to | 66 | and for the serial callback function (cbcpumask). padata_set_cpumask is used to |
67 | change just one of the cpumasks. Here cpumask_type is one of PADATA_CPU_SERIAL, | 67 | change just one of the cpumasks. Here cpumask_type is one of PADATA_CPU_SERIAL, |
68 | PADATA_CPU_PARALLEL and cpumask specifies the new cpumask to use. | 68 | PADATA_CPU_PARALLEL and cpumask specifies the new cpumask to use. |
69 | To simply add or remove one cpu from a certain cpumask the functions | 69 | To simply add or remove one CPU from a certain cpumask the functions |
70 | padata_add_cpu/padata_remove_cpu are used. cpu specifies the cpu to add or | 70 | padata_add_cpu/padata_remove_cpu are used. cpu specifies the CPU to add or |
71 | remove and mask is one of PADATA_CPU_SERIAL, PADATA_CPU_PARALLEL. | 71 | remove and mask is one of PADATA_CPU_SERIAL, PADATA_CPU_PARALLEL. |
72 | 72 | ||
73 | If a user is interested in padata cpumask changes, he can register to | 73 | If a user is interested in padata cpumask changes, he can register to |
@@ -82,7 +82,7 @@ To unregister from that notifier: | |||
82 | struct notifier_block *nblock); | 82 | struct notifier_block *nblock); |
83 | 83 | ||
84 | The padata cpumask change notifier notifies about changes of the usable | 84 | The padata cpumask change notifier notifies about changes of the usable |
85 | cpumasks, i.e. the subset of active cpus in the user supplied cpumask. | 85 | cpumasks, i.e. the subset of active CPUs in the user supplied cpumask. |
86 | 86 | ||
87 | Padata calls the notifier chain with: | 87 | Padata calls the notifier chain with: |
88 | 88 | ||
@@ -92,7 +92,7 @@ Padata calls the notifier chain with: | |||
92 | 92 | ||
93 | Here cpumask_change_notifier is registered notifier, notification_mask | 93 | Here cpumask_change_notifier is registered notifier, notification_mask |
94 | is one of PADATA_CPU_SERIAL, PADATA_CPU_PARALLEL and cpumask is a pointer | 94 | is one of PADATA_CPU_SERIAL, PADATA_CPU_PARALLEL and cpumask is a pointer |
95 | to a struct padata_cpumask that contains the new cpumask informations. | 95 | to a struct padata_cpumask that contains the new cpumask information. |
96 | 96 | ||
97 | Actually submitting work to the padata instance requires the creation of a | 97 | Actually submitting work to the padata instance requires the creation of a |
98 | padata_priv structure: | 98 | padata_priv structure: |
@@ -104,7 +104,7 @@ padata_priv structure: | |||
104 | }; | 104 | }; |
105 | 105 | ||
106 | This structure will almost certainly be embedded within some larger | 106 | This structure will almost certainly be embedded within some larger |
107 | structure specific to the work to be done. Most its fields are private to | 107 | structure specific to the work to be done. Most of its fields are private to |
108 | padata, but the structure should be zeroed at initialisation time, and the | 108 | padata, but the structure should be zeroed at initialisation time, and the |
109 | parallel() and serial() functions should be provided. Those functions will | 109 | parallel() and serial() functions should be provided. Those functions will |
110 | be called in the process of getting the work done as we will see | 110 | be called in the process of getting the work done as we will see |
diff --git a/Documentation/pcmcia/driver-changes.txt b/Documentation/pcmcia/driver-changes.txt index 61bc4e943116..26c0f9c00545 100644 --- a/Documentation/pcmcia/driver-changes.txt +++ b/Documentation/pcmcia/driver-changes.txt | |||
@@ -1,4 +1,16 @@ | |||
1 | This file details changes in 2.6 which affect PCMCIA card driver authors: | 1 | This file details changes in 2.6 which affect PCMCIA card driver authors: |
2 | * pcmcia_request_io changes (as of 2.6.36) | ||
3 | Instead of io_req_t, drivers are now requested to fill out | ||
4 | struct pcmcia_device *p_dev->resource[0,1] for up to two ioport | ||
5 | ranges. After a call to pcmcia_request_io(), the ports found there | ||
6 | are reserved, after calling pcmcia_request_configuration(), they may | ||
7 | be used. | ||
8 | |||
9 | * No dev_info_t, no cs_types.h (as of 2.6.36) | ||
10 | dev_info_t and a few other typedefs are removed. No longer use them | ||
11 | in PCMCIA device drivers. Also, do not include pcmcia/cs_types.h, as | ||
12 | this file is gone. | ||
13 | |||
2 | * No dev_node_t (as of 2.6.35) | 14 | * No dev_node_t (as of 2.6.35) |
3 | There is no more need to fill out a "dev_node_t" structure. | 15 | There is no more need to fill out a "dev_node_t" structure. |
4 | 16 | ||
diff --git a/Documentation/powerpc/dts-bindings/fsl/diu.txt b/Documentation/powerpc/dts-bindings/fsl/diu.txt index deb35de70988..b66cb6d31d69 100644 --- a/Documentation/powerpc/dts-bindings/fsl/diu.txt +++ b/Documentation/powerpc/dts-bindings/fsl/diu.txt | |||
@@ -4,10 +4,17 @@ The Freescale DIU is a LCD controller, with proper hardware, it can also | |||
4 | drive DVI monitors. | 4 | drive DVI monitors. |
5 | 5 | ||
6 | Required properties: | 6 | Required properties: |
7 | - compatible : should be "fsl-diu". | 7 | - compatible : should be "fsl,diu" or "fsl,mpc5121-diu". |
8 | - reg : should contain at least address and length of the DIU register | 8 | - reg : should contain at least address and length of the DIU register |
9 | set. | 9 | set. |
10 | - Interrupts : one DIU interrupt should be describe here. | 10 | - interrupts : one DIU interrupt should be described here. |
11 | - interrupt-parent : the phandle for the interrupt controller that | ||
12 | services interrupts for this device. | ||
13 | |||
14 | Optional properties: | ||
15 | - edid : verbatim EDID data block describing attached display. | ||
16 | Data from the detailed timing descriptor will be used to | ||
17 | program the display controller. | ||
11 | 18 | ||
12 | Example (MPC8610HPCD): | 19 | Example (MPC8610HPCD): |
13 | display@2c000 { | 20 | display@2c000 { |
@@ -16,3 +23,12 @@ Example (MPC8610HPCD): | |||
16 | interrupts = <72 2>; | 23 | interrupts = <72 2>; |
17 | interrupt-parent = <&mpic>; | 24 | interrupt-parent = <&mpic>; |
18 | }; | 25 | }; |
26 | |||
27 | Example for MPC5121: | ||
28 | display@2100 { | ||
29 | compatible = "fsl,mpc5121-diu"; | ||
30 | reg = <0x2100 0x100>; | ||
31 | interrupts = <64 0x8>; | ||
32 | interrupt-parent = <&ipic>; | ||
33 | edid = [edid-data]; | ||
34 | }; | ||
diff --git a/Documentation/powerpc/dts-bindings/fsl/esdhc.txt b/Documentation/powerpc/dts-bindings/fsl/esdhc.txt index 8a0040738969..64bcb8be973c 100644 --- a/Documentation/powerpc/dts-bindings/fsl/esdhc.txt +++ b/Documentation/powerpc/dts-bindings/fsl/esdhc.txt | |||
@@ -14,6 +14,8 @@ Required properties: | |||
14 | reports inverted write-protect state; | 14 | reports inverted write-protect state; |
15 | - sdhci,1-bit-only : (optional) specifies that a controller can | 15 | - sdhci,1-bit-only : (optional) specifies that a controller can |
16 | only handle 1-bit data transfers. | 16 | only handle 1-bit data transfers. |
17 | - sdhci,auto-cmd12: (optional) specifies that a controller can | ||
18 | only handle auto CMD12. | ||
17 | 19 | ||
18 | Example: | 20 | Example: |
19 | 21 | ||
diff --git a/Documentation/powerpc/dts-bindings/fsl/i2c.txt b/Documentation/powerpc/dts-bindings/fsl/i2c.txt index 50da20310585..1eacd6b20ed5 100644 --- a/Documentation/powerpc/dts-bindings/fsl/i2c.txt +++ b/Documentation/powerpc/dts-bindings/fsl/i2c.txt | |||
@@ -20,6 +20,7 @@ Recommended properties : | |||
20 | - fsl,preserve-clocking : boolean; if defined, the clock settings | 20 | - fsl,preserve-clocking : boolean; if defined, the clock settings |
21 | from the bootloader are preserved (not touched). | 21 | from the bootloader are preserved (not touched). |
22 | - clock-frequency : desired I2C bus clock frequency in Hz. | 22 | - clock-frequency : desired I2C bus clock frequency in Hz. |
23 | - fsl,timeout : I2C bus timeout in microseconds. | ||
23 | 24 | ||
24 | Examples : | 25 | Examples : |
25 | 26 | ||
@@ -59,4 +60,5 @@ Examples : | |||
59 | interrupts = <43 2>; | 60 | interrupts = <43 2>; |
60 | interrupt-parent = <&mpic>; | 61 | interrupt-parent = <&mpic>; |
61 | clock-frequency = <400000>; | 62 | clock-frequency = <400000>; |
63 | fsl,timeout = <10000>; | ||
62 | }; | 64 | }; |
diff --git a/Documentation/scsi/scsi-parameters.txt b/Documentation/scsi/scsi-parameters.txt new file mode 100644 index 000000000000..21e5798526ee --- /dev/null +++ b/Documentation/scsi/scsi-parameters.txt | |||
@@ -0,0 +1,139 @@ | |||
1 | SCSI Kernel Parameters | ||
2 | ~~~~~~~~~~~~~~~~~~~~~~ | ||
3 | |||
4 | See Documentation/kernel-parameters.txt for general information on | ||
5 | specifying module parameters. | ||
6 | |||
7 | This document may not be entirely up to date and comprehensive. The command | ||
8 | "modinfo -p ${modulename}" shows a current list of all parameters of a loadable | ||
9 | module. Loadable modules, after being loaded into the running kernel, also | ||
10 | reveal their parameters in /sys/module/${modulename}/parameters/. Some of these | ||
11 | parameters may be changed at runtime by the command | ||
12 | "echo -n ${value} > /sys/module/${modulename}/parameters/${parm}". | ||
13 | |||
14 | |||
15 | advansys= [HW,SCSI] | ||
16 | See header of drivers/scsi/advansys.c. | ||
17 | |||
18 | aha152x= [HW,SCSI] | ||
19 | See Documentation/scsi/aha152x.txt. | ||
20 | |||
21 | aha1542= [HW,SCSI] | ||
22 | Format: <portbase>[,<buson>,<busoff>[,<dmaspeed>]] | ||
23 | |||
24 | aic7xxx= [HW,SCSI] | ||
25 | See Documentation/scsi/aic7xxx.txt. | ||
26 | |||
27 | aic79xx= [HW,SCSI] | ||
28 | See Documentation/scsi/aic79xx.txt. | ||
29 | |||
30 | atascsi= [HW,SCSI] Atari SCSI | ||
31 | |||
32 | BusLogic= [HW,SCSI] | ||
33 | See drivers/scsi/BusLogic.c, comment before function | ||
34 | BusLogic_ParseDriverOptions(). | ||
35 | |||
36 | dtc3181e= [HW,SCSI] | ||
37 | |||
38 | eata= [HW,SCSI] | ||
39 | |||
40 | fd_mcs= [HW,SCSI] | ||
41 | See header of drivers/scsi/fd_mcs.c. | ||
42 | |||
43 | fdomain= [HW,SCSI] | ||
44 | See header of drivers/scsi/fdomain.c. | ||
45 | |||
46 | gdth= [HW,SCSI] | ||
47 | See header of drivers/scsi/gdth.c. | ||
48 | |||
49 | gvp11= [HW,SCSI] | ||
50 | |||
51 | ibmmcascsi= [HW,MCA,SCSI] IBM MicroChannel SCSI adapter | ||
52 | See Documentation/mca.txt. | ||
53 | |||
54 | in2000= [HW,SCSI] | ||
55 | See header of drivers/scsi/in2000.c. | ||
56 | |||
57 | ips= [HW,SCSI] Adaptec / IBM ServeRAID controller | ||
58 | See header of drivers/scsi/ips.c. | ||
59 | |||
60 | mac5380= [HW,SCSI] Format: | ||
61 | <can_queue>,<cmd_per_lun>,<sg_tablesize>,<hostid>,<use_tags> | ||
62 | |||
63 | max_luns= [SCSI] Maximum number of LUNs to probe. | ||
64 | Should be between 1 and 2^32-1. | ||
65 | |||
66 | max_report_luns= | ||
67 | [SCSI] Maximum number of LUNs received. | ||
68 | Should be between 1 and 16384. | ||
69 | |||
70 | NCR_D700= [HW,SCSI] | ||
71 | See header of drivers/scsi/NCR_D700.c. | ||
72 | |||
73 | ncr5380= [HW,SCSI] | ||
74 | |||
75 | ncr53c400= [HW,SCSI] | ||
76 | |||
77 | ncr53c400a= [HW,SCSI] | ||
78 | |||
79 | ncr53c406a= [HW,SCSI] | ||
80 | |||
81 | ncr53c8xx= [HW,SCSI] | ||
82 | |||
83 | nodisconnect [HW,SCSI,M68K] Disables SCSI disconnects. | ||
84 | |||
85 | osst= [HW,SCSI] SCSI Tape Driver | ||
86 | Format: <buffer_size>,<write_threshold> | ||
87 | See also Documentation/scsi/st.txt. | ||
88 | |||
89 | pas16= [HW,SCSI] | ||
90 | See header of drivers/scsi/pas16.c. | ||
91 | |||
92 | scsi_debug_*= [SCSI] | ||
93 | See drivers/scsi/scsi_debug.c. | ||
94 | |||
95 | scsi_default_dev_flags= | ||
96 | [SCSI] SCSI default device flags | ||
97 | Format: <integer> | ||
98 | |||
99 | scsi_dev_flags= [SCSI] Black/white list entry for vendor and model | ||
100 | Format: <vendor>:<model>:<flags> | ||
101 | (flags are integer value) | ||
102 | |||
103 | scsi_logging_level= [SCSI] a bit mask of logging levels | ||
104 | See drivers/scsi/scsi_logging.h for bits. Also | ||
105 | settable via sysctl at dev.scsi.logging_level | ||
106 | (/proc/sys/dev/scsi/logging_level). | ||
107 | There is also a nice 'scsi_logging_level' script in the | ||
108 | S390-tools package, available for download at | ||
109 | http://www-128.ibm.com/developerworks/linux/linux390/s390-tools-1.5.4.html | ||
110 | |||
111 | scsi_mod.scan= [SCSI] sync (default) scans SCSI busses as they are | ||
112 | discovered. async scans them in kernel threads, | ||
113 | allowing boot to proceed. none ignores them, expecting | ||
114 | user space to do the scan. | ||
115 | |||
116 | sim710= [SCSI,HW] | ||
117 | See header of drivers/scsi/sim710.c. | ||
118 | |||
119 | st= [HW,SCSI] SCSI tape parameters (buffers, etc.) | ||
120 | See Documentation/scsi/st.txt. | ||
121 | |||
122 | sym53c416= [HW,SCSI] | ||
123 | See header of drivers/scsi/sym53c416.c. | ||
124 | |||
125 | t128= [HW,SCSI] | ||
126 | See header of drivers/scsi/t128.c. | ||
127 | |||
128 | tmscsim= [HW,SCSI] | ||
129 | See comment before function dc390_setup() in | ||
130 | drivers/scsi/tmscsim.c. | ||
131 | |||
132 | u14-34f= [HW,SCSI] UltraStor 14F/34F SCSI host adapter | ||
133 | See header of drivers/scsi/u14-34f.c. | ||
134 | |||
135 | wd33c93= [HW,SCSI] | ||
136 | See header of drivers/scsi/wd33c93.c. | ||
137 | |||
138 | wd7000= [HW,SCSI] | ||
139 | See header of drivers/scsi/wd7000.c. | ||
diff --git a/Documentation/slow-work.txt b/Documentation/slow-work.txt deleted file mode 100644 index 9dbf4470c7e1..000000000000 --- a/Documentation/slow-work.txt +++ /dev/null | |||
@@ -1,322 +0,0 @@ | |||
1 | ==================================== | ||
2 | SLOW WORK ITEM EXECUTION THREAD POOL | ||
3 | ==================================== | ||
4 | |||
5 | By: David Howells <dhowells@redhat.com> | ||
6 | |||
7 | The slow work item execution thread pool is a pool of threads for performing | ||
8 | things that take a relatively long time, such as making mkdir calls. | ||
9 | Typically, when processing something, these items will spend a lot of time | ||
10 | blocking a thread on I/O, thus making that thread unavailable for doing other | ||
11 | work. | ||
12 | |||
13 | The standard workqueue model is unsuitable for this class of work item as that | ||
14 | limits the owner to a single thread or a single thread per CPU. For some | ||
15 | tasks, however, more threads - or fewer - are required. | ||
16 | |||
17 | There is just one pool per system. It contains no threads unless something | ||
18 | wants to use it - and that something must register its interest first. When | ||
19 | the pool is active, the number of threads it contains is dynamic, varying | ||
20 | between a maximum and minimum setting, depending on the load. | ||
21 | |||
22 | |||
23 | ==================== | ||
24 | CLASSES OF WORK ITEM | ||
25 | ==================== | ||
26 | |||
27 | This pool support two classes of work items: | ||
28 | |||
29 | (*) Slow work items. | ||
30 | |||
31 | (*) Very slow work items. | ||
32 | |||
33 | The former are expected to finish much quicker than the latter. | ||
34 | |||
35 | An operation of the very slow class may do a batch combination of several | ||
36 | lookups, mkdirs, and a create for instance. | ||
37 | |||
38 | An operation of the ordinarily slow class may, for example, write stuff or | ||
39 | expand files, provided the time taken to do so isn't too long. | ||
40 | |||
41 | Operations of both types may sleep during execution, thus tying up the thread | ||
42 | loaned to it. | ||
43 | |||
44 | A further class of work item is available, based on the slow work item class: | ||
45 | |||
46 | (*) Delayed slow work items. | ||
47 | |||
48 | These are slow work items that have a timer to defer queueing of the item for | ||
49 | a while. | ||
50 | |||
51 | |||
52 | THREAD-TO-CLASS ALLOCATION | ||
53 | -------------------------- | ||
54 | |||
55 | Not all the threads in the pool are available to work on very slow work items. | ||
56 | The number will be between one and one fewer than the number of active threads. | ||
57 | This is configurable (see the "Pool Configuration" section). | ||
58 | |||
59 | All the threads are available to work on ordinarily slow work items, but a | ||
60 | percentage of the threads will prefer to work on very slow work items. | ||
61 | |||
62 | The configuration ensures that at least one thread will be available to work on | ||
63 | very slow work items, and at least one thread will be available that won't work | ||
64 | on very slow work items at all. | ||
65 | |||
66 | |||
67 | ===================== | ||
68 | USING SLOW WORK ITEMS | ||
69 | ===================== | ||
70 | |||
71 | Firstly, a module or subsystem wanting to make use of slow work items must | ||
72 | register its interest: | ||
73 | |||
74 | int ret = slow_work_register_user(struct module *module); | ||
75 | |||
76 | This will return 0 if successful, or a -ve error upon failure. The module | ||
77 | pointer should be the module interested in using this facility (almost | ||
78 | certainly THIS_MODULE). | ||
79 | |||
80 | |||
81 | Slow work items may then be set up by: | ||
82 | |||
83 | (1) Declaring a slow_work struct type variable: | ||
84 | |||
85 | #include <linux/slow-work.h> | ||
86 | |||
87 | struct slow_work myitem; | ||
88 | |||
89 | (2) Declaring the operations to be used for this item: | ||
90 | |||
91 | struct slow_work_ops myitem_ops = { | ||
92 | .get_ref = myitem_get_ref, | ||
93 | .put_ref = myitem_put_ref, | ||
94 | .execute = myitem_execute, | ||
95 | }; | ||
96 | |||
97 | [*] For a description of the ops, see section "Item Operations". | ||
98 | |||
99 | (3) Initialising the item: | ||
100 | |||
101 | slow_work_init(&myitem, &myitem_ops); | ||
102 | |||
103 | or: | ||
104 | |||
105 | delayed_slow_work_init(&myitem, &myitem_ops); | ||
106 | |||
107 | or: | ||
108 | |||
109 | vslow_work_init(&myitem, &myitem_ops); | ||
110 | |||
111 | depending on its class. | ||
112 | |||
113 | A suitably set up work item can then be enqueued for processing: | ||
114 | |||
115 | int ret = slow_work_enqueue(&myitem); | ||
116 | |||
117 | This will return a -ve error if the thread pool is unable to gain a reference | ||
118 | on the item, 0 otherwise, or (for delayed work): | ||
119 | |||
120 | int ret = delayed_slow_work_enqueue(&myitem, my_jiffy_delay); | ||
121 | |||
122 | |||
123 | The items are reference counted, so there ought to be no need for a flush | ||
124 | operation. But as the reference counting is optional, means to cancel | ||
125 | existing work items are also included: | ||
126 | |||
127 | cancel_slow_work(&myitem); | ||
128 | cancel_delayed_slow_work(&myitem); | ||
129 | |||
130 | can be used to cancel pending work. The above cancel function waits for | ||
131 | existing work to have been executed (or prevent execution of them, depending | ||
132 | on timing). | ||
133 | |||
134 | |||
135 | When all a module's slow work items have been processed, and the | ||
136 | module has no further interest in the facility, it should unregister its | ||
137 | interest: | ||
138 | |||
139 | slow_work_unregister_user(struct module *module); | ||
140 | |||
141 | The module pointer is used to wait for all outstanding work items for that | ||
142 | module before completing the unregistration. This prevents the put_ref() code | ||
143 | from being taken away before it completes. module should almost certainly be | ||
144 | THIS_MODULE. | ||
145 | |||
146 | |||
147 | ================ | ||
148 | HELPER FUNCTIONS | ||
149 | ================ | ||
150 | |||
151 | The slow-work facility provides a function by which it can be determined | ||
152 | whether or not an item is queued for later execution: | ||
153 | |||
154 | bool queued = slow_work_is_queued(struct slow_work *work); | ||
155 | |||
156 | If it returns false, then the item is not on the queue (it may be executing | ||
157 | with a requeue pending). This can be used to work out whether an item on which | ||
158 | another depends is on the queue, thus allowing a dependent item to be queued | ||
159 | after it. | ||
160 | |||
161 | If the above shows an item on which another depends not to be queued, then the | ||
162 | owner of the dependent item might need to wait. However, to avoid locking up | ||
163 | the threads unnecessarily be sleeping in them, it can make sense under some | ||
164 | circumstances to return the work item to the queue, thus deferring it until | ||
165 | some other items have had a chance to make use of the yielded thread. | ||
166 | |||
167 | To yield a thread and defer an item, the work function should simply enqueue | ||
168 | the work item again and return. However, this doesn't work if there's nothing | ||
169 | actually on the queue, as the thread just vacated will jump straight back into | ||
170 | the item's work function, thus busy waiting on a CPU. | ||
171 | |||
172 | Instead, the item should use the thread to wait for the dependency to go away, | ||
173 | but rather than using schedule() or schedule_timeout() to sleep, it should use | ||
174 | the following function: | ||
175 | |||
176 | bool requeue = slow_work_sleep_till_thread_needed( | ||
177 | struct slow_work *work, | ||
178 | signed long *_timeout); | ||
179 | |||
180 | This will add a second wait and then sleep, such that it will be woken up if | ||
181 | either something appears on the queue that could usefully make use of the | ||
182 | thread - and behind which this item can be queued, or if the event the caller | ||
183 | set up to wait for happens. True will be returned if something else appeared | ||
184 | on the queue and this work function should perhaps return, of false if | ||
185 | something else woke it up. The timeout is as for schedule_timeout(). | ||
186 | |||
187 | For example: | ||
188 | |||
189 | wq = bit_waitqueue(&my_flags, MY_BIT); | ||
190 | init_wait(&wait); | ||
191 | requeue = false; | ||
192 | do { | ||
193 | prepare_to_wait(wq, &wait, TASK_UNINTERRUPTIBLE); | ||
194 | if (!test_bit(MY_BIT, &my_flags)) | ||
195 | break; | ||
196 | requeue = slow_work_sleep_till_thread_needed(&my_work, | ||
197 | &timeout); | ||
198 | } while (timeout > 0 && !requeue); | ||
199 | finish_wait(wq, &wait); | ||
200 | if (!test_bit(MY_BIT, &my_flags) | ||
201 | goto do_my_thing; | ||
202 | if (requeue) | ||
203 | return; // to slow_work | ||
204 | |||
205 | |||
206 | =============== | ||
207 | ITEM OPERATIONS | ||
208 | =============== | ||
209 | |||
210 | Each work item requires a table of operations of type struct slow_work_ops. | ||
211 | Only ->execute() is required; the getting and putting of a reference and the | ||
212 | describing of an item are all optional. | ||
213 | |||
214 | (*) Get a reference on an item: | ||
215 | |||
216 | int (*get_ref)(struct slow_work *work); | ||
217 | |||
218 | This allows the thread pool to attempt to pin an item by getting a | ||
219 | reference on it. This function should return 0 if the reference was | ||
220 | granted, or a -ve error otherwise. If an error is returned, | ||
221 | slow_work_enqueue() will fail. | ||
222 | |||
223 | The reference is held whilst the item is queued and whilst it is being | ||
224 | executed. The item may then be requeued with the same reference held, or | ||
225 | the reference will be released. | ||
226 | |||
227 | (*) Release a reference on an item: | ||
228 | |||
229 | void (*put_ref)(struct slow_work *work); | ||
230 | |||
231 | This allows the thread pool to unpin an item by releasing the reference on | ||
232 | it. The thread pool will not touch the item again once this has been | ||
233 | called. | ||
234 | |||
235 | (*) Execute an item: | ||
236 | |||
237 | void (*execute)(struct slow_work *work); | ||
238 | |||
239 | This should perform the work required of the item. It may sleep, it may | ||
240 | perform disk I/O and it may wait for locks. | ||
241 | |||
242 | (*) View an item through /proc: | ||
243 | |||
244 | void (*desc)(struct slow_work *work, struct seq_file *m); | ||
245 | |||
246 | If supplied, this should print to 'm' a small string describing the work | ||
247 | the item is to do. This should be no more than about 40 characters, and | ||
248 | shouldn't include a newline character. | ||
249 | |||
250 | See the 'Viewing executing and queued items' section below. | ||
251 | |||
252 | |||
253 | ================== | ||
254 | POOL CONFIGURATION | ||
255 | ================== | ||
256 | |||
257 | The slow-work thread pool has a number of configurables: | ||
258 | |||
259 | (*) /proc/sys/kernel/slow-work/min-threads | ||
260 | |||
261 | The minimum number of threads that should be in the pool whilst it is in | ||
262 | use. This may be anywhere between 2 and max-threads. | ||
263 | |||
264 | (*) /proc/sys/kernel/slow-work/max-threads | ||
265 | |||
266 | The maximum number of threads that should in the pool. This may be | ||
267 | anywhere between min-threads and 255 or NR_CPUS * 2, whichever is greater. | ||
268 | |||
269 | (*) /proc/sys/kernel/slow-work/vslow-percentage | ||
270 | |||
271 | The percentage of active threads in the pool that may be used to execute | ||
272 | very slow work items. This may be between 1 and 99. The resultant number | ||
273 | is bounded to between 1 and one fewer than the number of active threads. | ||
274 | This ensures there is always at least one thread that can process very | ||
275 | slow work items, and always at least one thread that won't. | ||
276 | |||
277 | |||
278 | ================================== | ||
279 | VIEWING EXECUTING AND QUEUED ITEMS | ||
280 | ================================== | ||
281 | |||
282 | If CONFIG_SLOW_WORK_DEBUG is enabled, a debugfs file is made available: | ||
283 | |||
284 | /sys/kernel/debug/slow_work/runqueue | ||
285 | |||
286 | through which the list of work items being executed and the queues of items to | ||
287 | be executed may be viewed. The owner of a work item is given the chance to | ||
288 | add some information of its own. | ||
289 | |||
290 | The contents look something like the following: | ||
291 | |||
292 | THR PID ITEM ADDR FL MARK DESC | ||
293 | === ===== ================ == ===== ========== | ||
294 | 0 3005 ffff880023f52348 a 952ms FSC: OBJ17d3: LOOK | ||
295 | 1 3006 ffff880024e33668 2 160ms FSC: OBJ17e5 OP60d3b: Write1/Store fl=2 | ||
296 | 2 3165 ffff8800296dd180 a 424ms FSC: OBJ17e4: LOOK | ||
297 | 3 4089 ffff8800262c8d78 a 212ms FSC: OBJ17ea: CRTN | ||
298 | 4 4090 ffff88002792bed8 2 388ms FSC: OBJ17e8 OP60d36: Write1/Store fl=2 | ||
299 | 5 4092 ffff88002a0ef308 2 388ms FSC: OBJ17e7 OP60d2e: Write1/Store fl=2 | ||
300 | 6 4094 ffff88002abaf4b8 2 132ms FSC: OBJ17e2 OP60d4e: Write1/Store fl=2 | ||
301 | 7 4095 ffff88002bb188e0 a 388ms FSC: OBJ17e9: CRTN | ||
302 | vsq - ffff880023d99668 1 308ms FSC: OBJ17e0 OP60f91: Write1/EnQ fl=2 | ||
303 | vsq - ffff8800295d1740 1 212ms FSC: OBJ16be OP4d4b6: Write1/EnQ fl=2 | ||
304 | vsq - ffff880025ba3308 1 160ms FSC: OBJ179a OP58dec: Write1/EnQ fl=2 | ||
305 | vsq - ffff880024ec83e0 1 160ms FSC: OBJ17ae OP599f2: Write1/EnQ fl=2 | ||
306 | vsq - ffff880026618e00 1 160ms FSC: OBJ17e6 OP60d33: Write1/EnQ fl=2 | ||
307 | vsq - ffff880025a2a4b8 1 132ms FSC: OBJ16a2 OP4d583: Write1/EnQ fl=2 | ||
308 | vsq - ffff880023cbe6d8 9 212ms FSC: OBJ17eb: LOOK | ||
309 | vsq - ffff880024d37590 9 212ms FSC: OBJ17ec: LOOK | ||
310 | vsq - ffff880027746cb0 9 212ms FSC: OBJ17ed: LOOK | ||
311 | vsq - ffff880024d37ae8 9 212ms FSC: OBJ17ee: LOOK | ||
312 | vsq - ffff880024d37cb0 9 212ms FSC: OBJ17ef: LOOK | ||
313 | vsq - ffff880025036550 9 212ms FSC: OBJ17f0: LOOK | ||
314 | vsq - ffff8800250368e0 9 212ms FSC: OBJ17f1: LOOK | ||
315 | vsq - ffff880025036aa8 9 212ms FSC: OBJ17f2: LOOK | ||
316 | |||
317 | In the 'THR' column, executing items show the thread they're occupying and | ||
318 | queued threads indicate which queue they're on. 'PID' shows the process ID of | ||
319 | a slow-work thread that's executing something. 'FL' shows the work item flags. | ||
320 | 'MARK' indicates how long since an item was queued or began executing. Lastly, | ||
321 | the 'DESC' column permits the owner of an item to give some information. | ||
322 | |||
diff --git a/Documentation/sound/alsa/HD-Audio-Models.txt b/Documentation/sound/alsa/HD-Audio-Models.txt index 1d38b0dfba95..ce46fa1e643e 100644 --- a/Documentation/sound/alsa/HD-Audio-Models.txt +++ b/Documentation/sound/alsa/HD-Audio-Models.txt | |||
@@ -83,8 +83,8 @@ ALC269 | |||
83 | ====== | 83 | ====== |
84 | basic Basic preset | 84 | basic Basic preset |
85 | quanta Quanta FL1 | 85 | quanta Quanta FL1 |
86 | eeepc-p703 ASUS Eeepc P703 P900A | 86 | laptop-amic Laptops with analog-mic input |
87 | eeepc-p901 ASUS Eeepc P901 S101 | 87 | laptop-dmic Laptops with digital-mic input |
88 | fujitsu FSC Amilo | 88 | fujitsu FSC Amilo |
89 | lifebook Fujitsu Lifebook S6420 | 89 | lifebook Fujitsu Lifebook S6420 |
90 | auto auto-config reading BIOS (default) | 90 | auto auto-config reading BIOS (default) |
@@ -109,11 +109,18 @@ ALC662/663/272 | |||
109 | asus-mode4 ASUS | 109 | asus-mode4 ASUS |
110 | asus-mode5 ASUS | 110 | asus-mode5 ASUS |
111 | asus-mode6 ASUS | 111 | asus-mode6 ASUS |
112 | asus-mode7 ASUS | ||
113 | asus-mode8 ASUS | ||
112 | dell Dell with ALC272 | 114 | dell Dell with ALC272 |
113 | dell-zm1 Dell ZM1 with ALC272 | 115 | dell-zm1 Dell ZM1 with ALC272 |
114 | samsung-nc10 Samsung NC10 mini notebook | 116 | samsung-nc10 Samsung NC10 mini notebook |
115 | auto auto-config reading BIOS (default) | 117 | auto auto-config reading BIOS (default) |
116 | 118 | ||
119 | ALC680 | ||
120 | ====== | ||
121 | base Base model (ASUS NX90) | ||
122 | auto auto-config reading BIOS (default) | ||
123 | |||
117 | ALC882/883/885/888/889 | 124 | ALC882/883/885/888/889 |
118 | ====================== | 125 | ====================== |
119 | 3stack-dig 3-jack with SPDIF I/O | 126 | 3stack-dig 3-jack with SPDIF I/O |
@@ -282,6 +289,7 @@ Conexant 5051 | |||
282 | hp HP Spartan laptop | 289 | hp HP Spartan laptop |
283 | hp-dv6736 HP dv6736 | 290 | hp-dv6736 HP dv6736 |
284 | hp-f700 HP Compaq Presario F700 | 291 | hp-f700 HP Compaq Presario F700 |
292 | ideapad Lenovo IdeaPad laptop | ||
285 | lenovo-x200 Lenovo X200 laptop | 293 | lenovo-x200 Lenovo X200 laptop |
286 | toshiba Toshiba Satellite M300 | 294 | toshiba Toshiba Satellite M300 |
287 | 295 | ||
@@ -289,8 +297,10 @@ Conexant 5066 | |||
289 | ============= | 297 | ============= |
290 | laptop Basic Laptop config (default) | 298 | laptop Basic Laptop config (default) |
291 | dell-laptop Dell laptops | 299 | dell-laptop Dell laptops |
300 | dell-vostro Dell Vostro | ||
292 | olpc-xo-1_5 OLPC XO 1.5 | 301 | olpc-xo-1_5 OLPC XO 1.5 |
293 | ideapad Lenovo IdeaPad U150 | 302 | ideapad Lenovo IdeaPad U150 |
303 | thinkpad Lenovo Thinkpad | ||
294 | 304 | ||
295 | STAC9200 | 305 | STAC9200 |
296 | ======== | 306 | ======== |
@@ -398,6 +408,7 @@ STAC92HD83* | |||
398 | mic-ref Reference board with power management for ports | 408 | mic-ref Reference board with power management for ports |
399 | dell-s14 Dell laptop | 409 | dell-s14 Dell laptop |
400 | hp HP laptops with (inverted) mute-LED | 410 | hp HP laptops with (inverted) mute-LED |
411 | hp-dv7-4000 HP dv-7 4000 | ||
401 | auto BIOS setup (default) | 412 | auto BIOS setup (default) |
402 | 413 | ||
403 | STAC9872 | 414 | STAC9872 |
@@ -410,3 +421,7 @@ Cirrus Logic CS4206/4207 | |||
410 | mbp55 MacBook Pro 5,5 | 421 | mbp55 MacBook Pro 5,5 |
411 | imac27 IMac 27 Inch | 422 | imac27 IMac 27 Inch |
412 | auto BIOS setup (default) | 423 | auto BIOS setup (default) |
424 | |||
425 | VIA VT17xx/VT18xx/VT20xx | ||
426 | ======================== | ||
427 | auto BIOS setup (default) | ||
diff --git a/Documentation/sound/alsa/Procfile.txt b/Documentation/sound/alsa/Procfile.txt index 07301de12cc4..7fcd1ad96fcc 100644 --- a/Documentation/sound/alsa/Procfile.txt +++ b/Documentation/sound/alsa/Procfile.txt | |||
@@ -103,6 +103,8 @@ card*/pcm*/xrun_debug | |||
103 | bit 2 = Enable additional jiffies check | 103 | bit 2 = Enable additional jiffies check |
104 | bit 3 = Log hwptr update at each period interrupt | 104 | bit 3 = Log hwptr update at each period interrupt |
105 | bit 4 = Log hwptr update at each snd_pcm_update_hw_ptr() | 105 | bit 4 = Log hwptr update at each snd_pcm_update_hw_ptr() |
106 | bit 5 = Show last 10 positions on error | ||
107 | bit 6 = Do above only once | ||
106 | 108 | ||
107 | When the bit 0 is set, the driver will show the messages to | 109 | When the bit 0 is set, the driver will show the messages to |
108 | kernel log when an xrun is detected. The debug message is | 110 | kernel log when an xrun is detected. The debug message is |
@@ -122,6 +124,12 @@ card*/pcm*/xrun_debug | |||
122 | Bits 3 and 4 are for logging the hwptr records. Note that | 124 | Bits 3 and 4 are for logging the hwptr records. Note that |
123 | these will give flood of kernel messages. | 125 | these will give flood of kernel messages. |
124 | 126 | ||
127 | When bit 5 is set, the driver logs the last 10 xrun errors and | ||
128 | the proc file shows each jiffies, position, period_size, | ||
129 | buffer_size, old_hw_ptr, and hw_ptr_base values. | ||
130 | |||
131 | When bit 6 is set, the full xrun log is shown only once. | ||
132 | |||
125 | card*/pcm*/sub*/info | 133 | card*/pcm*/sub*/info |
126 | The general information of this PCM sub-stream. | 134 | The general information of this PCM sub-stream. |
127 | 135 | ||
diff --git a/Documentation/sound/alsa/alsa-parameters.txt b/Documentation/sound/alsa/alsa-parameters.txt new file mode 100644 index 000000000000..0fa40679b080 --- /dev/null +++ b/Documentation/sound/alsa/alsa-parameters.txt | |||
@@ -0,0 +1,135 @@ | |||
1 | ALSA Kernel Parameters | ||
2 | ~~~~~~~~~~~~~~~~~~~~~~ | ||
3 | |||
4 | See Documentation/kernel-parameters.txt for general information on | ||
5 | specifying module parameters. | ||
6 | |||
7 | This document may not be entirely up to date and comprehensive. The command | ||
8 | "modinfo -p ${modulename}" shows a current list of all parameters of a loadable | ||
9 | module. Loadable modules, after being loaded into the running kernel, also | ||
10 | reveal their parameters in /sys/module/${modulename}/parameters/. Some of these | ||
11 | parameters may be changed at runtime by the command | ||
12 | "echo -n ${value} > /sys/module/${modulename}/parameters/${parm}". | ||
13 | |||
14 | |||
15 | snd-ad1816a= [HW,ALSA] | ||
16 | |||
17 | snd-ad1848= [HW,ALSA] | ||
18 | |||
19 | snd-ali5451= [HW,ALSA] | ||
20 | |||
21 | snd-als100= [HW,ALSA] | ||
22 | |||
23 | snd-als4000= [HW,ALSA] | ||
24 | |||
25 | snd-azt2320= [HW,ALSA] | ||
26 | |||
27 | snd-cmi8330= [HW,ALSA] | ||
28 | |||
29 | snd-cmipci= [HW,ALSA] | ||
30 | |||
31 | snd-cs4231= [HW,ALSA] | ||
32 | |||
33 | snd-cs4232= [HW,ALSA] | ||
34 | |||
35 | snd-cs4236= [HW,ALSA] | ||
36 | |||
37 | snd-cs4281= [HW,ALSA] | ||
38 | |||
39 | snd-cs46xx= [HW,ALSA] | ||
40 | |||
41 | snd-dt019x= [HW,ALSA] | ||
42 | |||
43 | snd-dummy= [HW,ALSA] | ||
44 | |||
45 | snd-emu10k1= [HW,ALSA] | ||
46 | |||
47 | snd-ens1370= [HW,ALSA] | ||
48 | |||
49 | snd-ens1371= [HW,ALSA] | ||
50 | |||
51 | snd-es968= [HW,ALSA] | ||
52 | |||
53 | snd-es1688= [HW,ALSA] | ||
54 | |||
55 | snd-es18xx= [HW,ALSA] | ||
56 | |||
57 | snd-es1938= [HW,ALSA] | ||
58 | |||
59 | snd-es1968= [HW,ALSA] | ||
60 | |||
61 | snd-fm801= [HW,ALSA] | ||
62 | |||
63 | snd-gusclassic= [HW,ALSA] | ||
64 | |||
65 | snd-gusextreme= [HW,ALSA] | ||
66 | |||
67 | snd-gusmax= [HW,ALSA] | ||
68 | |||
69 | snd-hdsp= [HW,ALSA] | ||
70 | |||
71 | snd-ice1712= [HW,ALSA] | ||
72 | |||
73 | snd-intel8x0= [HW,ALSA] | ||
74 | |||
75 | snd-interwave= [HW,ALSA] | ||
76 | |||
77 | snd-interwave-stb= | ||
78 | [HW,ALSA] | ||
79 | |||
80 | snd-korg1212= [HW,ALSA] | ||
81 | |||
82 | snd-maestro3= [HW,ALSA] | ||
83 | |||
84 | snd-mpu401= [HW,ALSA] | ||
85 | |||
86 | snd-mtpav= [HW,ALSA] | ||
87 | |||
88 | snd-nm256= [HW,ALSA] | ||
89 | |||
90 | snd-opl3sa2= [HW,ALSA] | ||
91 | |||
92 | snd-opti92x-ad1848= | ||
93 | [HW,ALSA] | ||
94 | |||
95 | snd-opti92x-cs4231= | ||
96 | [HW,ALSA] | ||
97 | |||
98 | snd-opti93x= [HW,ALSA] | ||
99 | |||
100 | snd-pmac= [HW,ALSA] | ||
101 | |||
102 | snd-rme32= [HW,ALSA] | ||
103 | |||
104 | snd-rme96= [HW,ALSA] | ||
105 | |||
106 | snd-rme9652= [HW,ALSA] | ||
107 | |||
108 | snd-sb8= [HW,ALSA] | ||
109 | |||
110 | snd-sb16= [HW,ALSA] | ||
111 | |||
112 | snd-sbawe= [HW,ALSA] | ||
113 | |||
114 | snd-serial= [HW,ALSA] | ||
115 | |||
116 | snd-sgalaxy= [HW,ALSA] | ||
117 | |||
118 | snd-sonicvibes= [HW,ALSA] | ||
119 | |||
120 | snd-sun-amd7930= | ||
121 | [HW,ALSA] | ||
122 | |||
123 | snd-sun-cs4231= [HW,ALSA] | ||
124 | |||
125 | snd-trident= [HW,ALSA] | ||
126 | |||
127 | snd-usb-audio= [HW,ALSA,USB] | ||
128 | |||
129 | snd-via82xx= [HW,ALSA] | ||
130 | |||
131 | snd-virmidi= [HW,ALSA] | ||
132 | |||
133 | snd-wavefront= [HW,ALSA] | ||
134 | |||
135 | snd-ymfpci= [HW,ALSA] | ||
diff --git a/Documentation/sound/oss/oss-parameters.txt b/Documentation/sound/oss/oss-parameters.txt new file mode 100644 index 000000000000..3ab391e7c295 --- /dev/null +++ b/Documentation/sound/oss/oss-parameters.txt | |||
@@ -0,0 +1,51 @@ | |||
1 | OSS Kernel Parameters | ||
2 | ~~~~~~~~~~~~~~~~~~~~~ | ||
3 | |||
4 | See Documentation/kernel-parameters.txt for general information on | ||
5 | specifying module parameters. | ||
6 | |||
7 | This document may not be entirely up to date and comprehensive. The command | ||
8 | "modinfo -p ${modulename}" shows a current list of all parameters of a loadable | ||
9 | module. Loadable modules, after being loaded into the running kernel, also | ||
10 | reveal their parameters in /sys/module/${modulename}/parameters/. Some of these | ||
11 | parameters may be changed at runtime by the command | ||
12 | "echo -n ${value} > /sys/module/${modulename}/parameters/${parm}". | ||
13 | |||
14 | |||
15 | ad1848= [HW,OSS] | ||
16 | Format: <io>,<irq>,<dma>,<dma2>,<type> | ||
17 | |||
18 | aedsp16= [HW,OSS] Audio Excel DSP 16 | ||
19 | Format: <io>,<irq>,<dma>,<mss_io>,<mpu_io>,<mpu_irq> | ||
20 | See also header of sound/oss/aedsp16.c. | ||
21 | |||
22 | dmasound= [HW,OSS] Sound subsystem buffers | ||
23 | |||
24 | mpu401= [HW,OSS] | ||
25 | Format: <io>,<irq> | ||
26 | |||
27 | opl3= [HW,OSS] | ||
28 | Format: <io> | ||
29 | |||
30 | pas2= [HW,OSS] Format: | ||
31 | <io>,<irq>,<dma>,<dma16>,<sb_io>,<sb_irq>,<sb_dma>,<sb_dma16> | ||
32 | |||
33 | pss= [HW,OSS] Personal Sound System (ECHO ESC614) | ||
34 | Format: | ||
35 | <io>,<mss_io>,<mss_irq>,<mss_dma>,<mpu_io>,<mpu_irq> | ||
36 | |||
37 | sscape= [HW,OSS] | ||
38 | Format: <io>,<irq>,<dma>,<mpu_io>,<mpu_irq> | ||
39 | |||
40 | trix= [HW,OSS] MediaTrix AudioTrix Pro | ||
41 | Format: | ||
42 | <io>,<irq>,<dma>,<dma2>,<sb_io>,<sb_irq>,<sb_dma>,<mpu_io>,<mpu_irq> | ||
43 | |||
44 | uart401= [HW,OSS] | ||
45 | Format: <io>,<irq> | ||
46 | |||
47 | uart6850= [HW,OSS] | ||
48 | Format: <io>,<irq> | ||
49 | |||
50 | waveartist= [HW,OSS] | ||
51 | Format: <io>,<irq>,<dma>,<dma2> | ||
diff --git a/Documentation/sysctl/vm.txt b/Documentation/sysctl/vm.txt index 82b2da18c45d..b606c2c4dd37 100644 --- a/Documentation/sysctl/vm.txt +++ b/Documentation/sysctl/vm.txt | |||
@@ -511,7 +511,7 @@ information may not be desired. | |||
511 | If this is set to non-zero, this information is shown whenever the | 511 | If this is set to non-zero, this information is shown whenever the |
512 | OOM killer actually kills a memory-hogging task. | 512 | OOM killer actually kills a memory-hogging task. |
513 | 513 | ||
514 | The default value is 0. | 514 | The default value is 1 (enabled). |
515 | 515 | ||
516 | ============================================================== | 516 | ============================================================== |
517 | 517 | ||
diff --git a/Documentation/timers/timers-howto.txt b/Documentation/timers/timers-howto.txt new file mode 100644 index 000000000000..c9ef29d2ede3 --- /dev/null +++ b/Documentation/timers/timers-howto.txt | |||
@@ -0,0 +1,105 @@ | |||
1 | delays - Information on the various kernel delay / sleep mechanisms | ||
2 | ------------------------------------------------------------------- | ||
3 | |||
4 | This document seeks to answer the common question: "What is the | ||
5 | RightWay (TM) to insert a delay?" | ||
6 | |||
7 | This question is most often faced by driver writers who have to | ||
8 | deal with hardware delays and who may not be the most intimately | ||
9 | familiar with the inner workings of the Linux Kernel. | ||
10 | |||
11 | |||
12 | Inserting Delays | ||
13 | ---------------- | ||
14 | |||
15 | The first, and most important, question you need to ask is "Is my | ||
16 | code in an atomic context?" This should be followed closely by "Does | ||
17 | it really need to delay in atomic context?" If so... | ||
18 | |||
19 | ATOMIC CONTEXT: | ||
20 | You must use the *delay family of functions. These | ||
21 | functions use the jiffie estimation of clock speed | ||
22 | and will busy wait for enough loop cycles to achieve | ||
23 | the desired delay: | ||
24 | |||
25 | ndelay(unsigned long nsecs) | ||
26 | udelay(unsigned long usecs) | ||
27 | mdelay(unsgined long msecs) | ||
28 | |||
29 | udelay is the generally preferred API; ndelay-level | ||
30 | precision may not actually exist on many non-PC devices. | ||
31 | |||
32 | mdelay is macro wrapper around udelay, to account for | ||
33 | possible overflow when passing large arguments to udelay. | ||
34 | In general, use of mdelay is discouraged and code should | ||
35 | be refactored to allow for the use of msleep. | ||
36 | |||
37 | NON-ATOMIC CONTEXT: | ||
38 | You should use the *sleep[_range] family of functions. | ||
39 | There are a few more options here, while any of them may | ||
40 | work correctly, using the "right" sleep function will | ||
41 | help the scheduler, power management, and just make your | ||
42 | driver better :) | ||
43 | |||
44 | -- Backed by busy-wait loop: | ||
45 | udelay(unsigned long usecs) | ||
46 | -- Backed by hrtimers: | ||
47 | usleep_range(unsigned long min, unsigned long max) | ||
48 | -- Backed by jiffies / legacy_timers | ||
49 | msleep(unsigned long msecs) | ||
50 | msleep_interruptible(unsigned long msecs) | ||
51 | |||
52 | Unlike the *delay family, the underlying mechanism | ||
53 | driving each of these calls varies, thus there are | ||
54 | quirks you should be aware of. | ||
55 | |||
56 | |||
57 | SLEEPING FOR "A FEW" USECS ( < ~10us? ): | ||
58 | * Use udelay | ||
59 | |||
60 | - Why not usleep? | ||
61 | On slower systems, (embedded, OR perhaps a speed- | ||
62 | stepped PC!) the overhead of setting up the hrtimers | ||
63 | for usleep *may* not be worth it. Such an evaluation | ||
64 | will obviously depend on your specific situation, but | ||
65 | it is something to be aware of. | ||
66 | |||
67 | SLEEPING FOR ~USECS OR SMALL MSECS ( 10us - 20ms): | ||
68 | * Use usleep_range | ||
69 | |||
70 | - Why not msleep for (1ms - 20ms)? | ||
71 | Explained originally here: | ||
72 | http://lkml.org/lkml/2007/8/3/250 | ||
73 | msleep(1~20) may not do what the caller intends, and | ||
74 | will often sleep longer (~20 ms actual sleep for any | ||
75 | value given in the 1~20ms range). In many cases this | ||
76 | is not the desired behavior. | ||
77 | |||
78 | - Why is there no "usleep" / What is a good range? | ||
79 | Since usleep_range is built on top of hrtimers, the | ||
80 | wakeup will be very precise (ish), thus a simple | ||
81 | usleep function would likely introduce a large number | ||
82 | of undesired interrupts. | ||
83 | |||
84 | With the introduction of a range, the scheduler is | ||
85 | free to coalesce your wakeup with any other wakeup | ||
86 | that may have happened for other reasons, or at the | ||
87 | worst case, fire an interrupt for your upper bound. | ||
88 | |||
89 | The larger a range you supply, the greater a chance | ||
90 | that you will not trigger an interrupt; this should | ||
91 | be balanced with what is an acceptable upper bound on | ||
92 | delay / performance for your specific code path. Exact | ||
93 | tolerances here are very situation specific, thus it | ||
94 | is left to the caller to determine a reasonable range. | ||
95 | |||
96 | SLEEPING FOR LARGER MSECS ( 10ms+ ) | ||
97 | * Use msleep or possibly msleep_interruptible | ||
98 | |||
99 | - What's the difference? | ||
100 | msleep sets the current task to TASK_UNINTERRUPTIBLE | ||
101 | whereas msleep_interruptible sets the current task to | ||
102 | TASK_INTERRUPTIBLE before scheduling the sleep. In | ||
103 | short, the difference is whether the sleep can be ended | ||
104 | early by a signal. In general, just use msleep unless | ||
105 | you know you have a need for the interruptible variant. | ||
diff --git a/Documentation/trace/ftrace-design.txt b/Documentation/trace/ftrace-design.txt index f1f81afee8a0..dc52bd442c92 100644 --- a/Documentation/trace/ftrace-design.txt +++ b/Documentation/trace/ftrace-design.txt | |||
@@ -13,6 +13,9 @@ Note that this focuses on architecture implementation details only. If you | |||
13 | want more explanation of a feature in terms of common code, review the common | 13 | want more explanation of a feature in terms of common code, review the common |
14 | ftrace.txt file. | 14 | ftrace.txt file. |
15 | 15 | ||
16 | Ideally, everyone who wishes to retain performance while supporting tracing in | ||
17 | their kernel should make it all the way to dynamic ftrace support. | ||
18 | |||
16 | 19 | ||
17 | Prerequisites | 20 | Prerequisites |
18 | ------------- | 21 | ------------- |
@@ -215,7 +218,7 @@ An arch may pass in a unique value (frame pointer) to both the entering and | |||
215 | exiting of a function. On exit, the value is compared and if it does not | 218 | exiting of a function. On exit, the value is compared and if it does not |
216 | match, then it will panic the kernel. This is largely a sanity check for bad | 219 | match, then it will panic the kernel. This is largely a sanity check for bad |
217 | code generation with gcc. If gcc for your port sanely updates the frame | 220 | code generation with gcc. If gcc for your port sanely updates the frame |
218 | pointer under different opitmization levels, then ignore this option. | 221 | pointer under different optimization levels, then ignore this option. |
219 | 222 | ||
220 | However, adding support for it isn't terribly difficult. In your assembly code | 223 | However, adding support for it isn't terribly difficult. In your assembly code |
221 | that calls prepare_ftrace_return(), pass the frame pointer as the 3rd argument. | 224 | that calls prepare_ftrace_return(), pass the frame pointer as the 3rd argument. |
@@ -234,7 +237,7 @@ If you can't trace NMI functions, then skip this option. | |||
234 | 237 | ||
235 | 238 | ||
236 | HAVE_SYSCALL_TRACEPOINTS | 239 | HAVE_SYSCALL_TRACEPOINTS |
237 | --------------------- | 240 | ------------------------ |
238 | 241 | ||
239 | You need very few things to get the syscalls tracing in an arch. | 242 | You need very few things to get the syscalls tracing in an arch. |
240 | 243 | ||
@@ -250,12 +253,152 @@ You need very few things to get the syscalls tracing in an arch. | |||
250 | HAVE_FTRACE_MCOUNT_RECORD | 253 | HAVE_FTRACE_MCOUNT_RECORD |
251 | ------------------------- | 254 | ------------------------- |
252 | 255 | ||
253 | See scripts/recordmcount.pl for more info. | 256 | See scripts/recordmcount.pl for more info. Just fill in the arch-specific |
257 | details for how to locate the addresses of mcount call sites via objdump. | ||
258 | This option doesn't make much sense without also implementing dynamic ftrace. | ||
254 | 259 | ||
260 | |||
261 | HAVE_DYNAMIC_FTRACE | ||
262 | ------------------- | ||
263 | |||
264 | You will first need HAVE_FTRACE_MCOUNT_RECORD and HAVE_FUNCTION_TRACER, so | ||
265 | scroll your reader back up if you got over eager. | ||
266 | |||
267 | Once those are out of the way, you will need to implement: | ||
268 | - asm/ftrace.h: | ||
269 | - MCOUNT_ADDR | ||
270 | - ftrace_call_adjust() | ||
271 | - struct dyn_arch_ftrace{} | ||
272 | - asm code: | ||
273 | - mcount() (new stub) | ||
274 | - ftrace_caller() | ||
275 | - ftrace_call() | ||
276 | - ftrace_stub() | ||
277 | - C code: | ||
278 | - ftrace_dyn_arch_init() | ||
279 | - ftrace_make_nop() | ||
280 | - ftrace_make_call() | ||
281 | - ftrace_update_ftrace_func() | ||
282 | |||
283 | First you will need to fill out some arch details in your asm/ftrace.h. | ||
284 | |||
285 | Define MCOUNT_ADDR as the address of your mcount symbol similar to: | ||
286 | #define MCOUNT_ADDR ((unsigned long)mcount) | ||
287 | Since no one else will have a decl for that function, you will need to: | ||
288 | extern void mcount(void); | ||
289 | |||
290 | You will also need the helper function ftrace_call_adjust(). Most people | ||
291 | will be able to stub it out like so: | ||
292 | static inline unsigned long ftrace_call_adjust(unsigned long addr) | ||
293 | { | ||
294 | return addr; | ||
295 | } | ||
255 | <details to be filled> | 296 | <details to be filled> |
256 | 297 | ||
298 | Lastly you will need the custom dyn_arch_ftrace structure. If you need | ||
299 | some extra state when runtime patching arbitrary call sites, this is the | ||
300 | place. For now though, create an empty struct: | ||
301 | struct dyn_arch_ftrace { | ||
302 | /* No extra data needed */ | ||
303 | }; | ||
304 | |||
305 | With the header out of the way, we can fill out the assembly code. While we | ||
306 | did already create a mcount() function earlier, dynamic ftrace only wants a | ||
307 | stub function. This is because the mcount() will only be used during boot | ||
308 | and then all references to it will be patched out never to return. Instead, | ||
309 | the guts of the old mcount() will be used to create a new ftrace_caller() | ||
310 | function. Because the two are hard to merge, it will most likely be a lot | ||
311 | easier to have two separate definitions split up by #ifdefs. Same goes for | ||
312 | the ftrace_stub() as that will now be inlined in ftrace_caller(). | ||
313 | |||
314 | Before we get confused anymore, let's check out some pseudo code so you can | ||
315 | implement your own stuff in assembly: | ||
257 | 316 | ||
258 | HAVE_DYNAMIC_FTRACE | 317 | void mcount(void) |
259 | --------------------- | 318 | { |
319 | return; | ||
320 | } | ||
321 | |||
322 | void ftrace_caller(void) | ||
323 | { | ||
324 | /* implement HAVE_FUNCTION_TRACE_MCOUNT_TEST if you desire */ | ||
325 | |||
326 | /* save all state needed by the ABI (see paragraph above) */ | ||
327 | |||
328 | unsigned long frompc = ...; | ||
329 | unsigned long selfpc = <return address> - MCOUNT_INSN_SIZE; | ||
330 | |||
331 | ftrace_call: | ||
332 | ftrace_stub(frompc, selfpc); | ||
333 | |||
334 | /* restore all state needed by the ABI */ | ||
335 | |||
336 | ftrace_stub: | ||
337 | return; | ||
338 | } | ||
339 | |||
340 | This might look a little odd at first, but keep in mind that we will be runtime | ||
341 | patching multiple things. First, only functions that we actually want to trace | ||
342 | will be patched to call ftrace_caller(). Second, since we only have one tracer | ||
343 | active at a time, we will patch the ftrace_caller() function itself to call the | ||
344 | specific tracer in question. That is the point of the ftrace_call label. | ||
345 | |||
346 | With that in mind, let's move on to the C code that will actually be doing the | ||
347 | runtime patching. You'll need a little knowledge of your arch's opcodes in | ||
348 | order to make it through the next section. | ||
349 | |||
350 | Every arch has an init callback function. If you need to do something early on | ||
351 | to initialize some state, this is the time to do that. Otherwise, this simple | ||
352 | function below should be sufficient for most people: | ||
353 | |||
354 | int __init ftrace_dyn_arch_init(void *data) | ||
355 | { | ||
356 | /* return value is done indirectly via data */ | ||
357 | *(unsigned long *)data = 0; | ||
358 | |||
359 | return 0; | ||
360 | } | ||
361 | |||
362 | There are two functions that are used to do runtime patching of arbitrary | ||
363 | functions. The first is used to turn the mcount call site into a nop (which | ||
364 | is what helps us retain runtime performance when not tracing). The second is | ||
365 | used to turn the mcount call site into a call to an arbitrary location (but | ||
366 | typically that is ftracer_caller()). See the general function definition in | ||
367 | linux/ftrace.h for the functions: | ||
368 | ftrace_make_nop() | ||
369 | ftrace_make_call() | ||
370 | The rec->ip value is the address of the mcount call site that was collected | ||
371 | by the scripts/recordmcount.pl during build time. | ||
372 | |||
373 | The last function is used to do runtime patching of the active tracer. This | ||
374 | will be modifying the assembly code at the location of the ftrace_call symbol | ||
375 | inside of the ftrace_caller() function. So you should have sufficient padding | ||
376 | at that location to support the new function calls you'll be inserting. Some | ||
377 | people will be using a "call" type instruction while others will be using a | ||
378 | "branch" type instruction. Specifically, the function is: | ||
379 | ftrace_update_ftrace_func() | ||
380 | |||
381 | |||
382 | HAVE_DYNAMIC_FTRACE + HAVE_FUNCTION_GRAPH_TRACER | ||
383 | ------------------------------------------------ | ||
384 | |||
385 | The function grapher needs a few tweaks in order to work with dynamic ftrace. | ||
386 | Basically, you will need to: | ||
387 | - update: | ||
388 | - ftrace_caller() | ||
389 | - ftrace_graph_call() | ||
390 | - ftrace_graph_caller() | ||
391 | - implement: | ||
392 | - ftrace_enable_ftrace_graph_caller() | ||
393 | - ftrace_disable_ftrace_graph_caller() | ||
260 | 394 | ||
261 | <details to be filled> | 395 | <details to be filled> |
396 | Quick notes: | ||
397 | - add a nop stub after the ftrace_call location named ftrace_graph_call; | ||
398 | stub needs to be large enough to support a call to ftrace_graph_caller() | ||
399 | - update ftrace_graph_caller() to work with being called by the new | ||
400 | ftrace_caller() since some semantics may have changed | ||
401 | - ftrace_enable_ftrace_graph_caller() will runtime patch the | ||
402 | ftrace_graph_call location with a call to ftrace_graph_caller() | ||
403 | - ftrace_disable_ftrace_graph_caller() will runtime patch the | ||
404 | ftrace_graph_call location with nops | ||
diff --git a/Documentation/trace/kmemtrace.txt b/Documentation/trace/kmemtrace.txt deleted file mode 100644 index 6308735e58ca..000000000000 --- a/Documentation/trace/kmemtrace.txt +++ /dev/null | |||
@@ -1,126 +0,0 @@ | |||
1 | kmemtrace - Kernel Memory Tracer | ||
2 | |||
3 | by Eduard - Gabriel Munteanu | ||
4 | <eduard.munteanu@linux360.ro> | ||
5 | |||
6 | I. Introduction | ||
7 | =============== | ||
8 | |||
9 | kmemtrace helps kernel developers figure out two things: | ||
10 | 1) how different allocators (SLAB, SLUB etc.) perform | ||
11 | 2) how kernel code allocates memory and how much | ||
12 | |||
13 | To do this, we trace every allocation and export information to the userspace | ||
14 | through the relay interface. We export things such as the number of requested | ||
15 | bytes, the number of bytes actually allocated (i.e. including internal | ||
16 | fragmentation), whether this is a slab allocation or a plain kmalloc() and so | ||
17 | on. | ||
18 | |||
19 | The actual analysis is performed by a userspace tool (see section III for | ||
20 | details on where to get it from). It logs the data exported by the kernel, | ||
21 | processes it and (as of writing this) can provide the following information: | ||
22 | - the total amount of memory allocated and fragmentation per call-site | ||
23 | - the amount of memory allocated and fragmentation per allocation | ||
24 | - total memory allocated and fragmentation in the collected dataset | ||
25 | - number of cross-CPU allocation and frees (makes sense in NUMA environments) | ||
26 | |||
27 | Moreover, it can potentially find inconsistent and erroneous behavior in | ||
28 | kernel code, such as using slab free functions on kmalloc'ed memory or | ||
29 | allocating less memory than requested (but not truly failed allocations). | ||
30 | |||
31 | kmemtrace also makes provisions for tracing on some arch and analysing the | ||
32 | data on another. | ||
33 | |||
34 | II. Design and goals | ||
35 | ==================== | ||
36 | |||
37 | kmemtrace was designed to handle rather large amounts of data. Thus, it uses | ||
38 | the relay interface to export whatever is logged to userspace, which then | ||
39 | stores it. Analysis and reporting is done asynchronously, that is, after the | ||
40 | data is collected and stored. By design, it allows one to log and analyse | ||
41 | on different machines and different arches. | ||
42 | |||
43 | As of writing this, the ABI is not considered stable, though it might not | ||
44 | change much. However, no guarantees are made about compatibility yet. When | ||
45 | deemed stable, the ABI should still allow easy extension while maintaining | ||
46 | backward compatibility. This is described further in Documentation/ABI. | ||
47 | |||
48 | Summary of design goals: | ||
49 | - allow logging and analysis to be done across different machines | ||
50 | - be fast and anticipate usage in high-load environments (*) | ||
51 | - be reasonably extensible | ||
52 | - make it possible for GNU/Linux distributions to have kmemtrace | ||
53 | included in their repositories | ||
54 | |||
55 | (*) - one of the reasons Pekka Enberg's original userspace data analysis | ||
56 | tool's code was rewritten from Perl to C (although this is more than a | ||
57 | simple conversion) | ||
58 | |||
59 | |||
60 | III. Quick usage guide | ||
61 | ====================== | ||
62 | |||
63 | 1) Get a kernel that supports kmemtrace and build it accordingly (i.e. enable | ||
64 | CONFIG_KMEMTRACE). | ||
65 | |||
66 | 2) Get the userspace tool and build it: | ||
67 | $ git clone git://repo.or.cz/kmemtrace-user.git # current repository | ||
68 | $ cd kmemtrace-user/ | ||
69 | $ ./autogen.sh | ||
70 | $ ./configure | ||
71 | $ make | ||
72 | |||
73 | 3) Boot the kmemtrace-enabled kernel if you haven't, preferably in the | ||
74 | 'single' runlevel (so that relay buffers don't fill up easily), and run | ||
75 | kmemtrace: | ||
76 | # '$' does not mean user, but root here. | ||
77 | $ mount -t debugfs none /sys/kernel/debug | ||
78 | $ mount -t proc none /proc | ||
79 | $ cd path/to/kmemtrace-user/ | ||
80 | $ ./kmemtraced | ||
81 | Wait a bit, then stop it with CTRL+C. | ||
82 | $ cat /sys/kernel/debug/kmemtrace/total_overruns # Check if we didn't | ||
83 | # overrun, should | ||
84 | # be zero. | ||
85 | $ (Optionally) [Run kmemtrace_check separately on each cpu[0-9]*.out file to | ||
86 | check its correctness] | ||
87 | $ ./kmemtrace-report | ||
88 | |||
89 | Now you should have a nice and short summary of how the allocator performs. | ||
90 | |||
91 | IV. FAQ and known issues | ||
92 | ======================== | ||
93 | |||
94 | Q: 'cat /sys/kernel/debug/kmemtrace/total_overruns' is non-zero, how do I fix | ||
95 | this? Should I worry? | ||
96 | A: If it's non-zero, this affects kmemtrace's accuracy, depending on how | ||
97 | large the number is. You can fix it by supplying a higher | ||
98 | 'kmemtrace.subbufs=N' kernel parameter. | ||
99 | --- | ||
100 | |||
101 | Q: kmemtrace_check reports errors, how do I fix this? Should I worry? | ||
102 | A: This is a bug and should be reported. It can occur for a variety of | ||
103 | reasons: | ||
104 | - possible bugs in relay code | ||
105 | - possible misuse of relay by kmemtrace | ||
106 | - timestamps being collected unorderly | ||
107 | Or you may fix it yourself and send us a patch. | ||
108 | --- | ||
109 | |||
110 | Q: kmemtrace_report shows many errors, how do I fix this? Should I worry? | ||
111 | A: This is a known issue and I'm working on it. These might be true errors | ||
112 | in kernel code, which may have inconsistent behavior (e.g. allocating memory | ||
113 | with kmem_cache_alloc() and freeing it with kfree()). Pekka Enberg pointed | ||
114 | out this behavior may work with SLAB, but may fail with other allocators. | ||
115 | |||
116 | It may also be due to lack of tracing in some unusual allocator functions. | ||
117 | |||
118 | We don't want bug reports regarding this issue yet. | ||
119 | --- | ||
120 | |||
121 | V. See also | ||
122 | =========== | ||
123 | |||
124 | Documentation/kernel-parameters.txt | ||
125 | Documentation/ABI/testing/debugfs-kmemtrace | ||
126 | |||
diff --git a/Documentation/trace/kprobetrace.txt b/Documentation/trace/kprobetrace.txt index ec94748ae65b..5f77d94598dd 100644 --- a/Documentation/trace/kprobetrace.txt +++ b/Documentation/trace/kprobetrace.txt | |||
@@ -42,7 +42,7 @@ Synopsis of kprobe_events | |||
42 | +|-offs(FETCHARG) : Fetch memory at FETCHARG +|- offs address.(**) | 42 | +|-offs(FETCHARG) : Fetch memory at FETCHARG +|- offs address.(**) |
43 | NAME=FETCHARG : Set NAME as the argument name of FETCHARG. | 43 | NAME=FETCHARG : Set NAME as the argument name of FETCHARG. |
44 | FETCHARG:TYPE : Set TYPE as the type of FETCHARG. Currently, basic types | 44 | FETCHARG:TYPE : Set TYPE as the type of FETCHARG. Currently, basic types |
45 | (u8/u16/u32/u64/s8/s16/s32/s64) are supported. | 45 | (u8/u16/u32/u64/s8/s16/s32/s64) and string are supported. |
46 | 46 | ||
47 | (*) only for return probe. | 47 | (*) only for return probe. |
48 | (**) this is useful for fetching a field of data structures. | 48 | (**) this is useful for fetching a field of data structures. |
diff --git a/Documentation/trace/postprocess/trace-vmscan-postprocess.pl b/Documentation/trace/postprocess/trace-vmscan-postprocess.pl new file mode 100644 index 000000000000..1b55146d1c8d --- /dev/null +++ b/Documentation/trace/postprocess/trace-vmscan-postprocess.pl | |||
@@ -0,0 +1,686 @@ | |||
1 | #!/usr/bin/perl | ||
2 | # This is a POC for reading the text representation of trace output related to | ||
3 | # page reclaim. It makes an attempt to extract some high-level information on | ||
4 | # what is going on. The accuracy of the parser may vary | ||
5 | # | ||
6 | # Example usage: trace-vmscan-postprocess.pl < /sys/kernel/debug/tracing/trace_pipe | ||
7 | # other options | ||
8 | # --read-procstat If the trace lacks process info, get it from /proc | ||
9 | # --ignore-pid Aggregate processes of the same name together | ||
10 | # | ||
11 | # Copyright (c) IBM Corporation 2009 | ||
12 | # Author: Mel Gorman <mel@csn.ul.ie> | ||
13 | use strict; | ||
14 | use Getopt::Long; | ||
15 | |||
16 | # Tracepoint events | ||
17 | use constant MM_VMSCAN_DIRECT_RECLAIM_BEGIN => 1; | ||
18 | use constant MM_VMSCAN_DIRECT_RECLAIM_END => 2; | ||
19 | use constant MM_VMSCAN_KSWAPD_WAKE => 3; | ||
20 | use constant MM_VMSCAN_KSWAPD_SLEEP => 4; | ||
21 | use constant MM_VMSCAN_LRU_SHRINK_ACTIVE => 5; | ||
22 | use constant MM_VMSCAN_LRU_SHRINK_INACTIVE => 6; | ||
23 | use constant MM_VMSCAN_LRU_ISOLATE => 7; | ||
24 | use constant MM_VMSCAN_WRITEPAGE_FILE_SYNC => 8; | ||
25 | use constant MM_VMSCAN_WRITEPAGE_ANON_SYNC => 9; | ||
26 | use constant MM_VMSCAN_WRITEPAGE_FILE_ASYNC => 10; | ||
27 | use constant MM_VMSCAN_WRITEPAGE_ANON_ASYNC => 11; | ||
28 | use constant MM_VMSCAN_WRITEPAGE_ASYNC => 12; | ||
29 | use constant EVENT_UNKNOWN => 13; | ||
30 | |||
31 | # Per-order events | ||
32 | use constant MM_VMSCAN_DIRECT_RECLAIM_BEGIN_PERORDER => 11; | ||
33 | use constant MM_VMSCAN_WAKEUP_KSWAPD_PERORDER => 12; | ||
34 | use constant MM_VMSCAN_KSWAPD_WAKE_PERORDER => 13; | ||
35 | use constant HIGH_KSWAPD_REWAKEUP_PERORDER => 14; | ||
36 | |||
37 | # Constants used to track state | ||
38 | use constant STATE_DIRECT_BEGIN => 15; | ||
39 | use constant STATE_DIRECT_ORDER => 16; | ||
40 | use constant STATE_KSWAPD_BEGIN => 17; | ||
41 | use constant STATE_KSWAPD_ORDER => 18; | ||
42 | |||
43 | # High-level events extrapolated from tracepoints | ||
44 | use constant HIGH_DIRECT_RECLAIM_LATENCY => 19; | ||
45 | use constant HIGH_KSWAPD_LATENCY => 20; | ||
46 | use constant HIGH_KSWAPD_REWAKEUP => 21; | ||
47 | use constant HIGH_NR_SCANNED => 22; | ||
48 | use constant HIGH_NR_TAKEN => 23; | ||
49 | use constant HIGH_NR_RECLAIM => 24; | ||
50 | use constant HIGH_NR_CONTIG_DIRTY => 25; | ||
51 | |||
52 | my %perprocesspid; | ||
53 | my %perprocess; | ||
54 | my %last_procmap; | ||
55 | my $opt_ignorepid; | ||
56 | my $opt_read_procstat; | ||
57 | |||
58 | my $total_wakeup_kswapd; | ||
59 | my ($total_direct_reclaim, $total_direct_nr_scanned); | ||
60 | my ($total_direct_latency, $total_kswapd_latency); | ||
61 | my ($total_direct_writepage_file_sync, $total_direct_writepage_file_async); | ||
62 | my ($total_direct_writepage_anon_sync, $total_direct_writepage_anon_async); | ||
63 | my ($total_kswapd_nr_scanned, $total_kswapd_wake); | ||
64 | my ($total_kswapd_writepage_file_sync, $total_kswapd_writepage_file_async); | ||
65 | my ($total_kswapd_writepage_anon_sync, $total_kswapd_writepage_anon_async); | ||
66 | |||
67 | # Catch sigint and exit on request | ||
68 | my $sigint_report = 0; | ||
69 | my $sigint_exit = 0; | ||
70 | my $sigint_pending = 0; | ||
71 | my $sigint_received = 0; | ||
72 | sub sigint_handler { | ||
73 | my $current_time = time; | ||
74 | if ($current_time - 2 > $sigint_received) { | ||
75 | print "SIGINT received, report pending. Hit ctrl-c again to exit\n"; | ||
76 | $sigint_report = 1; | ||
77 | } else { | ||
78 | if (!$sigint_exit) { | ||
79 | print "Second SIGINT received quickly, exiting\n"; | ||
80 | } | ||
81 | $sigint_exit++; | ||
82 | } | ||
83 | |||
84 | if ($sigint_exit > 3) { | ||
85 | print "Many SIGINTs received, exiting now without report\n"; | ||
86 | exit; | ||
87 | } | ||
88 | |||
89 | $sigint_received = $current_time; | ||
90 | $sigint_pending = 1; | ||
91 | } | ||
92 | $SIG{INT} = "sigint_handler"; | ||
93 | |||
94 | # Parse command line options | ||
95 | GetOptions( | ||
96 | 'ignore-pid' => \$opt_ignorepid, | ||
97 | 'read-procstat' => \$opt_read_procstat, | ||
98 | ); | ||
99 | |||
100 | # Defaults for dynamically discovered regex's | ||
101 | my $regex_direct_begin_default = 'order=([0-9]*) may_writepage=([0-9]*) gfp_flags=([A-Z_|]*)'; | ||
102 | my $regex_direct_end_default = 'nr_reclaimed=([0-9]*)'; | ||
103 | my $regex_kswapd_wake_default = 'nid=([0-9]*) order=([0-9]*)'; | ||
104 | my $regex_kswapd_sleep_default = 'nid=([0-9]*)'; | ||
105 | my $regex_wakeup_kswapd_default = 'nid=([0-9]*) zid=([0-9]*) order=([0-9]*)'; | ||
106 | my $regex_lru_isolate_default = 'isolate_mode=([0-9]*) order=([0-9]*) nr_requested=([0-9]*) nr_scanned=([0-9]*) nr_taken=([0-9]*) contig_taken=([0-9]*) contig_dirty=([0-9]*) contig_failed=([0-9]*)'; | ||
107 | my $regex_lru_shrink_inactive_default = 'lru=([A-Z_]*) nr_scanned=([0-9]*) nr_reclaimed=([0-9]*) priority=([0-9]*)'; | ||
108 | my $regex_lru_shrink_active_default = 'lru=([A-Z_]*) nr_scanned=([0-9]*) nr_rotated=([0-9]*) priority=([0-9]*)'; | ||
109 | my $regex_writepage_default = 'page=([0-9a-f]*) pfn=([0-9]*) flags=([A-Z_|]*)'; | ||
110 | |||
111 | # Dyanically discovered regex | ||
112 | my $regex_direct_begin; | ||
113 | my $regex_direct_end; | ||
114 | my $regex_kswapd_wake; | ||
115 | my $regex_kswapd_sleep; | ||
116 | my $regex_wakeup_kswapd; | ||
117 | my $regex_lru_isolate; | ||
118 | my $regex_lru_shrink_inactive; | ||
119 | my $regex_lru_shrink_active; | ||
120 | my $regex_writepage; | ||
121 | |||
122 | # Static regex used. Specified like this for readability and for use with /o | ||
123 | # (process_pid) (cpus ) ( time ) (tpoint ) (details) | ||
124 | my $regex_traceevent = '\s*([a-zA-Z0-9-]*)\s*(\[[0-9]*\])\s*([0-9.]*):\s*([a-zA-Z_]*):\s*(.*)'; | ||
125 | my $regex_statname = '[-0-9]*\s\((.*)\).*'; | ||
126 | my $regex_statppid = '[-0-9]*\s\(.*\)\s[A-Za-z]\s([0-9]*).*'; | ||
127 | |||
128 | sub generate_traceevent_regex { | ||
129 | my $event = shift; | ||
130 | my $default = shift; | ||
131 | my $regex; | ||
132 | |||
133 | # Read the event format or use the default | ||
134 | if (!open (FORMAT, "/sys/kernel/debug/tracing/events/$event/format")) { | ||
135 | print("WARNING: Event $event format string not found\n"); | ||
136 | return $default; | ||
137 | } else { | ||
138 | my $line; | ||
139 | while (!eof(FORMAT)) { | ||
140 | $line = <FORMAT>; | ||
141 | $line =~ s/, REC->.*//; | ||
142 | if ($line =~ /^print fmt:\s"(.*)".*/) { | ||
143 | $regex = $1; | ||
144 | $regex =~ s/%s/\([0-9a-zA-Z|_]*\)/g; | ||
145 | $regex =~ s/%p/\([0-9a-f]*\)/g; | ||
146 | $regex =~ s/%d/\([-0-9]*\)/g; | ||
147 | $regex =~ s/%ld/\([-0-9]*\)/g; | ||
148 | $regex =~ s/%lu/\([0-9]*\)/g; | ||
149 | } | ||
150 | } | ||
151 | } | ||
152 | |||
153 | # Can't handle the print_flags stuff but in the context of this | ||
154 | # script, it really doesn't matter | ||
155 | $regex =~ s/\(REC.*\) \? __print_flags.*//; | ||
156 | |||
157 | # Verify fields are in the right order | ||
158 | my $tuple; | ||
159 | foreach $tuple (split /\s/, $regex) { | ||
160 | my ($key, $value) = split(/=/, $tuple); | ||
161 | my $expected = shift; | ||
162 | if ($key ne $expected) { | ||
163 | print("WARNING: Format not as expected for event $event '$key' != '$expected'\n"); | ||
164 | $regex =~ s/$key=\((.*)\)/$key=$1/; | ||
165 | } | ||
166 | } | ||
167 | |||
168 | if (defined shift) { | ||
169 | die("Fewer fields than expected in format"); | ||
170 | } | ||
171 | |||
172 | return $regex; | ||
173 | } | ||
174 | |||
175 | $regex_direct_begin = generate_traceevent_regex( | ||
176 | "vmscan/mm_vmscan_direct_reclaim_begin", | ||
177 | $regex_direct_begin_default, | ||
178 | "order", "may_writepage", | ||
179 | "gfp_flags"); | ||
180 | $regex_direct_end = generate_traceevent_regex( | ||
181 | "vmscan/mm_vmscan_direct_reclaim_end", | ||
182 | $regex_direct_end_default, | ||
183 | "nr_reclaimed"); | ||
184 | $regex_kswapd_wake = generate_traceevent_regex( | ||
185 | "vmscan/mm_vmscan_kswapd_wake", | ||
186 | $regex_kswapd_wake_default, | ||
187 | "nid", "order"); | ||
188 | $regex_kswapd_sleep = generate_traceevent_regex( | ||
189 | "vmscan/mm_vmscan_kswapd_sleep", | ||
190 | $regex_kswapd_sleep_default, | ||
191 | "nid"); | ||
192 | $regex_wakeup_kswapd = generate_traceevent_regex( | ||
193 | "vmscan/mm_vmscan_wakeup_kswapd", | ||
194 | $regex_wakeup_kswapd_default, | ||
195 | "nid", "zid", "order"); | ||
196 | $regex_lru_isolate = generate_traceevent_regex( | ||
197 | "vmscan/mm_vmscan_lru_isolate", | ||
198 | $regex_lru_isolate_default, | ||
199 | "isolate_mode", "order", | ||
200 | "nr_requested", "nr_scanned", "nr_taken", | ||
201 | "contig_taken", "contig_dirty", "contig_failed"); | ||
202 | $regex_lru_shrink_inactive = generate_traceevent_regex( | ||
203 | "vmscan/mm_vmscan_lru_shrink_inactive", | ||
204 | $regex_lru_shrink_inactive_default, | ||
205 | "nid", "zid", | ||
206 | "lru", | ||
207 | "nr_scanned", "nr_reclaimed", "priority"); | ||
208 | $regex_lru_shrink_active = generate_traceevent_regex( | ||
209 | "vmscan/mm_vmscan_lru_shrink_active", | ||
210 | $regex_lru_shrink_active_default, | ||
211 | "nid", "zid", | ||
212 | "lru", | ||
213 | "nr_scanned", "nr_rotated", "priority"); | ||
214 | $regex_writepage = generate_traceevent_regex( | ||
215 | "vmscan/mm_vmscan_writepage", | ||
216 | $regex_writepage_default, | ||
217 | "page", "pfn", "flags"); | ||
218 | |||
219 | sub read_statline($) { | ||
220 | my $pid = $_[0]; | ||
221 | my $statline; | ||
222 | |||
223 | if (open(STAT, "/proc/$pid/stat")) { | ||
224 | $statline = <STAT>; | ||
225 | close(STAT); | ||
226 | } | ||
227 | |||
228 | if ($statline eq '') { | ||
229 | $statline = "-1 (UNKNOWN_PROCESS_NAME) R 0"; | ||
230 | } | ||
231 | |||
232 | return $statline; | ||
233 | } | ||
234 | |||
235 | sub guess_process_pid($$) { | ||
236 | my $pid = $_[0]; | ||
237 | my $statline = $_[1]; | ||
238 | |||
239 | if ($pid == 0) { | ||
240 | return "swapper-0"; | ||
241 | } | ||
242 | |||
243 | if ($statline !~ /$regex_statname/o) { | ||
244 | die("Failed to math stat line for process name :: $statline"); | ||
245 | } | ||
246 | return "$1-$pid"; | ||
247 | } | ||
248 | |||
249 | # Convert sec.usec timestamp format | ||
250 | sub timestamp_to_ms($) { | ||
251 | my $timestamp = $_[0]; | ||
252 | |||
253 | my ($sec, $usec) = split (/\./, $timestamp); | ||
254 | return ($sec * 1000) + ($usec / 1000); | ||
255 | } | ||
256 | |||
257 | sub process_events { | ||
258 | my $traceevent; | ||
259 | my $process_pid; | ||
260 | my $cpus; | ||
261 | my $timestamp; | ||
262 | my $tracepoint; | ||
263 | my $details; | ||
264 | my $statline; | ||
265 | |||
266 | # Read each line of the event log | ||
267 | EVENT_PROCESS: | ||
268 | while ($traceevent = <STDIN>) { | ||
269 | if ($traceevent =~ /$regex_traceevent/o) { | ||
270 | $process_pid = $1; | ||
271 | $timestamp = $3; | ||
272 | $tracepoint = $4; | ||
273 | |||
274 | $process_pid =~ /(.*)-([0-9]*)$/; | ||
275 | my $process = $1; | ||
276 | my $pid = $2; | ||
277 | |||
278 | if ($process eq "") { | ||
279 | $process = $last_procmap{$pid}; | ||
280 | $process_pid = "$process-$pid"; | ||
281 | } | ||
282 | $last_procmap{$pid} = $process; | ||
283 | |||
284 | if ($opt_read_procstat) { | ||
285 | $statline = read_statline($pid); | ||
286 | if ($opt_read_procstat && $process eq '') { | ||
287 | $process_pid = guess_process_pid($pid, $statline); | ||
288 | } | ||
289 | } | ||
290 | } else { | ||
291 | next; | ||
292 | } | ||
293 | |||
294 | # Perl Switch() sucks majorly | ||
295 | if ($tracepoint eq "mm_vmscan_direct_reclaim_begin") { | ||
296 | $timestamp = timestamp_to_ms($timestamp); | ||
297 | $perprocesspid{$process_pid}->{MM_VMSCAN_DIRECT_RECLAIM_BEGIN}++; | ||
298 | $perprocesspid{$process_pid}->{STATE_DIRECT_BEGIN} = $timestamp; | ||
299 | |||
300 | $details = $5; | ||
301 | if ($details !~ /$regex_direct_begin/o) { | ||
302 | print "WARNING: Failed to parse mm_vmscan_direct_reclaim_begin as expected\n"; | ||
303 | print " $details\n"; | ||
304 | print " $regex_direct_begin\n"; | ||
305 | next; | ||
306 | } | ||
307 | my $order = $1; | ||
308 | $perprocesspid{$process_pid}->{MM_VMSCAN_DIRECT_RECLAIM_BEGIN_PERORDER}[$order]++; | ||
309 | $perprocesspid{$process_pid}->{STATE_DIRECT_ORDER} = $order; | ||
310 | } elsif ($tracepoint eq "mm_vmscan_direct_reclaim_end") { | ||
311 | # Count the event itself | ||
312 | my $index = $perprocesspid{$process_pid}->{MM_VMSCAN_DIRECT_RECLAIM_END}; | ||
313 | $perprocesspid{$process_pid}->{MM_VMSCAN_DIRECT_RECLAIM_END}++; | ||
314 | |||
315 | # Record how long direct reclaim took this time | ||
316 | if (defined $perprocesspid{$process_pid}->{STATE_DIRECT_BEGIN}) { | ||
317 | $timestamp = timestamp_to_ms($timestamp); | ||
318 | my $order = $perprocesspid{$process_pid}->{STATE_DIRECT_ORDER}; | ||
319 | my $latency = ($timestamp - $perprocesspid{$process_pid}->{STATE_DIRECT_BEGIN}); | ||
320 | $perprocesspid{$process_pid}->{HIGH_DIRECT_RECLAIM_LATENCY}[$index] = "$order-$latency"; | ||
321 | } | ||
322 | } elsif ($tracepoint eq "mm_vmscan_kswapd_wake") { | ||
323 | $details = $5; | ||
324 | if ($details !~ /$regex_kswapd_wake/o) { | ||
325 | print "WARNING: Failed to parse mm_vmscan_kswapd_wake as expected\n"; | ||
326 | print " $details\n"; | ||
327 | print " $regex_kswapd_wake\n"; | ||
328 | next; | ||
329 | } | ||
330 | |||
331 | my $order = $2; | ||
332 | $perprocesspid{$process_pid}->{STATE_KSWAPD_ORDER} = $order; | ||
333 | if (!$perprocesspid{$process_pid}->{STATE_KSWAPD_BEGIN}) { | ||
334 | $timestamp = timestamp_to_ms($timestamp); | ||
335 | $perprocesspid{$process_pid}->{MM_VMSCAN_KSWAPD_WAKE}++; | ||
336 | $perprocesspid{$process_pid}->{STATE_KSWAPD_BEGIN} = $timestamp; | ||
337 | $perprocesspid{$process_pid}->{MM_VMSCAN_KSWAPD_WAKE_PERORDER}[$order]++; | ||
338 | } else { | ||
339 | $perprocesspid{$process_pid}->{HIGH_KSWAPD_REWAKEUP}++; | ||
340 | $perprocesspid{$process_pid}->{HIGH_KSWAPD_REWAKEUP_PERORDER}[$order]++; | ||
341 | } | ||
342 | } elsif ($tracepoint eq "mm_vmscan_kswapd_sleep") { | ||
343 | |||
344 | # Count the event itself | ||
345 | my $index = $perprocesspid{$process_pid}->{MM_VMSCAN_KSWAPD_SLEEP}; | ||
346 | $perprocesspid{$process_pid}->{MM_VMSCAN_KSWAPD_SLEEP}++; | ||
347 | |||
348 | # Record how long kswapd was awake | ||
349 | $timestamp = timestamp_to_ms($timestamp); | ||
350 | my $order = $perprocesspid{$process_pid}->{STATE_KSWAPD_ORDER}; | ||
351 | my $latency = ($timestamp - $perprocesspid{$process_pid}->{STATE_KSWAPD_BEGIN}); | ||
352 | $perprocesspid{$process_pid}->{HIGH_KSWAPD_LATENCY}[$index] = "$order-$latency"; | ||
353 | $perprocesspid{$process_pid}->{STATE_KSWAPD_BEGIN} = 0; | ||
354 | } elsif ($tracepoint eq "mm_vmscan_wakeup_kswapd") { | ||
355 | $perprocesspid{$process_pid}->{MM_VMSCAN_WAKEUP_KSWAPD}++; | ||
356 | |||
357 | $details = $5; | ||
358 | if ($details !~ /$regex_wakeup_kswapd/o) { | ||
359 | print "WARNING: Failed to parse mm_vmscan_wakeup_kswapd as expected\n"; | ||
360 | print " $details\n"; | ||
361 | print " $regex_wakeup_kswapd\n"; | ||
362 | next; | ||
363 | } | ||
364 | my $order = $3; | ||
365 | $perprocesspid{$process_pid}->{MM_VMSCAN_WAKEUP_KSWAPD_PERORDER}[$order]++; | ||
366 | } elsif ($tracepoint eq "mm_vmscan_lru_isolate") { | ||
367 | $details = $5; | ||
368 | if ($details !~ /$regex_lru_isolate/o) { | ||
369 | print "WARNING: Failed to parse mm_vmscan_lru_isolate as expected\n"; | ||
370 | print " $details\n"; | ||
371 | print " $regex_lru_isolate/o\n"; | ||
372 | next; | ||
373 | } | ||
374 | my $nr_scanned = $4; | ||
375 | my $nr_contig_dirty = $7; | ||
376 | $perprocesspid{$process_pid}->{HIGH_NR_SCANNED} += $nr_scanned; | ||
377 | $perprocesspid{$process_pid}->{HIGH_NR_CONTIG_DIRTY} += $nr_contig_dirty; | ||
378 | } elsif ($tracepoint eq "mm_vmscan_writepage") { | ||
379 | $details = $5; | ||
380 | if ($details !~ /$regex_writepage/o) { | ||
381 | print "WARNING: Failed to parse mm_vmscan_writepage as expected\n"; | ||
382 | print " $details\n"; | ||
383 | print " $regex_writepage\n"; | ||
384 | next; | ||
385 | } | ||
386 | |||
387 | my $flags = $3; | ||
388 | my $file = 0; | ||
389 | my $sync_io = 0; | ||
390 | if ($flags =~ /RECLAIM_WB_FILE/) { | ||
391 | $file = 1; | ||
392 | } | ||
393 | if ($flags =~ /RECLAIM_WB_SYNC/) { | ||
394 | $sync_io = 1; | ||
395 | } | ||
396 | if ($sync_io) { | ||
397 | if ($file) { | ||
398 | $perprocesspid{$process_pid}->{MM_VMSCAN_WRITEPAGE_FILE_SYNC}++; | ||
399 | } else { | ||
400 | $perprocesspid{$process_pid}->{MM_VMSCAN_WRITEPAGE_ANON_SYNC}++; | ||
401 | } | ||
402 | } else { | ||
403 | if ($file) { | ||
404 | $perprocesspid{$process_pid}->{MM_VMSCAN_WRITEPAGE_FILE_ASYNC}++; | ||
405 | } else { | ||
406 | $perprocesspid{$process_pid}->{MM_VMSCAN_WRITEPAGE_ANON_ASYNC}++; | ||
407 | } | ||
408 | } | ||
409 | } else { | ||
410 | $perprocesspid{$process_pid}->{EVENT_UNKNOWN}++; | ||
411 | } | ||
412 | |||
413 | if ($sigint_pending) { | ||
414 | last EVENT_PROCESS; | ||
415 | } | ||
416 | } | ||
417 | } | ||
418 | |||
419 | sub dump_stats { | ||
420 | my $hashref = shift; | ||
421 | my %stats = %$hashref; | ||
422 | |||
423 | # Dump per-process stats | ||
424 | my $process_pid; | ||
425 | my $max_strlen = 0; | ||
426 | |||
427 | # Get the maximum process name | ||
428 | foreach $process_pid (keys %perprocesspid) { | ||
429 | my $len = length($process_pid); | ||
430 | if ($len > $max_strlen) { | ||
431 | $max_strlen = $len; | ||
432 | } | ||
433 | } | ||
434 | $max_strlen += 2; | ||
435 | |||
436 | # Work out latencies | ||
437 | printf("\n") if !$opt_ignorepid; | ||
438 | printf("Reclaim latencies expressed as order-latency_in_ms\n") if !$opt_ignorepid; | ||
439 | foreach $process_pid (keys %stats) { | ||
440 | |||
441 | if (!$stats{$process_pid}->{HIGH_DIRECT_RECLAIM_LATENCY}[0] && | ||
442 | !$stats{$process_pid}->{HIGH_KSWAPD_LATENCY}[0]) { | ||
443 | next; | ||
444 | } | ||
445 | |||
446 | printf "%-" . $max_strlen . "s ", $process_pid if !$opt_ignorepid; | ||
447 | my $index = 0; | ||
448 | while (defined $stats{$process_pid}->{HIGH_DIRECT_RECLAIM_LATENCY}[$index] || | ||
449 | defined $stats{$process_pid}->{HIGH_KSWAPD_LATENCY}[$index]) { | ||
450 | |||
451 | if ($stats{$process_pid}->{HIGH_DIRECT_RECLAIM_LATENCY}[$index]) { | ||
452 | printf("%s ", $stats{$process_pid}->{HIGH_DIRECT_RECLAIM_LATENCY}[$index]) if !$opt_ignorepid; | ||
453 | my ($dummy, $latency) = split(/-/, $stats{$process_pid}->{HIGH_DIRECT_RECLAIM_LATENCY}[$index]); | ||
454 | $total_direct_latency += $latency; | ||
455 | } else { | ||
456 | printf("%s ", $stats{$process_pid}->{HIGH_KSWAPD_LATENCY}[$index]) if !$opt_ignorepid; | ||
457 | my ($dummy, $latency) = split(/-/, $stats{$process_pid}->{HIGH_KSWAPD_LATENCY}[$index]); | ||
458 | $total_kswapd_latency += $latency; | ||
459 | } | ||
460 | $index++; | ||
461 | } | ||
462 | print "\n" if !$opt_ignorepid; | ||
463 | } | ||
464 | |||
465 | # Print out process activity | ||
466 | printf("\n"); | ||
467 | printf("%-" . $max_strlen . "s %8s %10s %8s %8s %8s %8s %8s\n", "Process", "Direct", "Wokeup", "Pages", "Pages", "Pages", "Time"); | ||
468 | printf("%-" . $max_strlen . "s %8s %10s %8s %8s %8s %8s %8s\n", "details", "Rclms", "Kswapd", "Scanned", "Sync-IO", "ASync-IO", "Stalled"); | ||
469 | foreach $process_pid (keys %stats) { | ||
470 | |||
471 | if (!$stats{$process_pid}->{MM_VMSCAN_DIRECT_RECLAIM_BEGIN}) { | ||
472 | next; | ||
473 | } | ||
474 | |||
475 | $total_direct_reclaim += $stats{$process_pid}->{MM_VMSCAN_DIRECT_RECLAIM_BEGIN}; | ||
476 | $total_wakeup_kswapd += $stats{$process_pid}->{MM_VMSCAN_WAKEUP_KSWAPD}; | ||
477 | $total_direct_nr_scanned += $stats{$process_pid}->{HIGH_NR_SCANNED}; | ||
478 | $total_direct_writepage_file_sync += $stats{$process_pid}->{MM_VMSCAN_WRITEPAGE_FILE_SYNC}; | ||
479 | $total_direct_writepage_anon_sync += $stats{$process_pid}->{MM_VMSCAN_WRITEPAGE_ANON_SYNC}; | ||
480 | $total_direct_writepage_file_async += $stats{$process_pid}->{MM_VMSCAN_WRITEPAGE_FILE_ASYNC}; | ||
481 | |||
482 | $total_direct_writepage_anon_async += $stats{$process_pid}->{MM_VMSCAN_WRITEPAGE_ANON_ASYNC}; | ||
483 | |||
484 | my $index = 0; | ||
485 | my $this_reclaim_delay = 0; | ||
486 | while (defined $stats{$process_pid}->{HIGH_DIRECT_RECLAIM_LATENCY}[$index]) { | ||
487 | my ($dummy, $latency) = split(/-/, $stats{$process_pid}->{HIGH_DIRECT_RECLAIM_LATENCY}[$index]); | ||
488 | $this_reclaim_delay += $latency; | ||
489 | $index++; | ||
490 | } | ||
491 | |||
492 | printf("%-" . $max_strlen . "s %8d %10d %8u %8u %8u %8.3f", | ||
493 | $process_pid, | ||
494 | $stats{$process_pid}->{MM_VMSCAN_DIRECT_RECLAIM_BEGIN}, | ||
495 | $stats{$process_pid}->{MM_VMSCAN_WAKEUP_KSWAPD}, | ||
496 | $stats{$process_pid}->{HIGH_NR_SCANNED}, | ||
497 | $stats{$process_pid}->{MM_VMSCAN_WRITEPAGE_FILE_SYNC} + $stats{$process_pid}->{MM_VMSCAN_WRITEPAGE_ANON_SYNC}, | ||
498 | $stats{$process_pid}->{MM_VMSCAN_WRITEPAGE_FILE_ASYNC} + $stats{$process_pid}->{MM_VMSCAN_WRITEPAGE_ANON_ASYNC}, | ||
499 | $this_reclaim_delay / 1000); | ||
500 | |||
501 | if ($stats{$process_pid}->{MM_VMSCAN_DIRECT_RECLAIM_BEGIN}) { | ||
502 | print " "; | ||
503 | for (my $order = 0; $order < 20; $order++) { | ||
504 | my $count = $stats{$process_pid}->{MM_VMSCAN_DIRECT_RECLAIM_BEGIN_PERORDER}[$order]; | ||
505 | if ($count != 0) { | ||
506 | print "direct-$order=$count "; | ||
507 | } | ||
508 | } | ||
509 | } | ||
510 | if ($stats{$process_pid}->{MM_VMSCAN_WAKEUP_KSWAPD}) { | ||
511 | print " "; | ||
512 | for (my $order = 0; $order < 20; $order++) { | ||
513 | my $count = $stats{$process_pid}->{MM_VMSCAN_WAKEUP_KSWAPD_PERORDER}[$order]; | ||
514 | if ($count != 0) { | ||
515 | print "wakeup-$order=$count "; | ||
516 | } | ||
517 | } | ||
518 | } | ||
519 | if ($stats{$process_pid}->{HIGH_NR_CONTIG_DIRTY}) { | ||
520 | print " "; | ||
521 | my $count = $stats{$process_pid}->{HIGH_NR_CONTIG_DIRTY}; | ||
522 | if ($count != 0) { | ||
523 | print "contig-dirty=$count "; | ||
524 | } | ||
525 | } | ||
526 | |||
527 | print "\n"; | ||
528 | } | ||
529 | |||
530 | # Print out kswapd activity | ||
531 | printf("\n"); | ||
532 | printf("%-" . $max_strlen . "s %8s %10s %8s %8s %8s %8s\n", "Kswapd", "Kswapd", "Order", "Pages", "Pages", "Pages"); | ||
533 | printf("%-" . $max_strlen . "s %8s %10s %8s %8s %8s %8s\n", "Instance", "Wakeups", "Re-wakeup", "Scanned", "Sync-IO", "ASync-IO"); | ||
534 | foreach $process_pid (keys %stats) { | ||
535 | |||
536 | if (!$stats{$process_pid}->{MM_VMSCAN_KSWAPD_WAKE}) { | ||
537 | next; | ||
538 | } | ||
539 | |||
540 | $total_kswapd_wake += $stats{$process_pid}->{MM_VMSCAN_KSWAPD_WAKE}; | ||
541 | $total_kswapd_nr_scanned += $stats{$process_pid}->{HIGH_NR_SCANNED}; | ||
542 | $total_kswapd_writepage_file_sync += $stats{$process_pid}->{MM_VMSCAN_WRITEPAGE_FILE_SYNC}; | ||
543 | $total_kswapd_writepage_anon_sync += $stats{$process_pid}->{MM_VMSCAN_WRITEPAGE_ANON_SYNC}; | ||
544 | $total_kswapd_writepage_file_async += $stats{$process_pid}->{MM_VMSCAN_WRITEPAGE_FILE_ASYNC}; | ||
545 | $total_kswapd_writepage_anon_async += $stats{$process_pid}->{MM_VMSCAN_WRITEPAGE_ANON_ASYNC}; | ||
546 | |||
547 | printf("%-" . $max_strlen . "s %8d %10d %8u %8i %8u", | ||
548 | $process_pid, | ||
549 | $stats{$process_pid}->{MM_VMSCAN_KSWAPD_WAKE}, | ||
550 | $stats{$process_pid}->{HIGH_KSWAPD_REWAKEUP}, | ||
551 | $stats{$process_pid}->{HIGH_NR_SCANNED}, | ||
552 | $stats{$process_pid}->{MM_VMSCAN_WRITEPAGE_FILE_SYNC} + $stats{$process_pid}->{MM_VMSCAN_WRITEPAGE_ANON_SYNC}, | ||
553 | $stats{$process_pid}->{MM_VMSCAN_WRITEPAGE_FILE_ASYNC} + $stats{$process_pid}->{MM_VMSCAN_WRITEPAGE_ANON_ASYNC}); | ||
554 | |||
555 | if ($stats{$process_pid}->{MM_VMSCAN_KSWAPD_WAKE}) { | ||
556 | print " "; | ||
557 | for (my $order = 0; $order < 20; $order++) { | ||
558 | my $count = $stats{$process_pid}->{MM_VMSCAN_KSWAPD_WAKE_PERORDER}[$order]; | ||
559 | if ($count != 0) { | ||
560 | print "wake-$order=$count "; | ||
561 | } | ||
562 | } | ||
563 | } | ||
564 | if ($stats{$process_pid}->{HIGH_KSWAPD_REWAKEUP}) { | ||
565 | print " "; | ||
566 | for (my $order = 0; $order < 20; $order++) { | ||
567 | my $count = $stats{$process_pid}->{HIGH_KSWAPD_REWAKEUP_PERORDER}[$order]; | ||
568 | if ($count != 0) { | ||
569 | print "rewake-$order=$count "; | ||
570 | } | ||
571 | } | ||
572 | } | ||
573 | printf("\n"); | ||
574 | } | ||
575 | |||
576 | # Print out summaries | ||
577 | $total_direct_latency /= 1000; | ||
578 | $total_kswapd_latency /= 1000; | ||
579 | print "\nSummary\n"; | ||
580 | print "Direct reclaims: $total_direct_reclaim\n"; | ||
581 | print "Direct reclaim pages scanned: $total_direct_nr_scanned\n"; | ||
582 | print "Direct reclaim write file sync I/O: $total_direct_writepage_file_sync\n"; | ||
583 | print "Direct reclaim write anon sync I/O: $total_direct_writepage_anon_sync\n"; | ||
584 | print "Direct reclaim write file async I/O: $total_direct_writepage_file_async\n"; | ||
585 | print "Direct reclaim write anon async I/O: $total_direct_writepage_anon_async\n"; | ||
586 | print "Wake kswapd requests: $total_wakeup_kswapd\n"; | ||
587 | printf "Time stalled direct reclaim: %-1.2f seconds\n", $total_direct_latency; | ||
588 | print "\n"; | ||
589 | print "Kswapd wakeups: $total_kswapd_wake\n"; | ||
590 | print "Kswapd pages scanned: $total_kswapd_nr_scanned\n"; | ||
591 | print "Kswapd reclaim write file sync I/O: $total_kswapd_writepage_file_sync\n"; | ||
592 | print "Kswapd reclaim write anon sync I/O: $total_kswapd_writepage_anon_sync\n"; | ||
593 | print "Kswapd reclaim write file async I/O: $total_kswapd_writepage_file_async\n"; | ||
594 | print "Kswapd reclaim write anon async I/O: $total_kswapd_writepage_anon_async\n"; | ||
595 | printf "Time kswapd awake: %-1.2f seconds\n", $total_kswapd_latency; | ||
596 | } | ||
597 | |||
598 | sub aggregate_perprocesspid() { | ||
599 | my $process_pid; | ||
600 | my $process; | ||
601 | undef %perprocess; | ||
602 | |||
603 | foreach $process_pid (keys %perprocesspid) { | ||
604 | $process = $process_pid; | ||
605 | $process =~ s/-([0-9])*$//; | ||
606 | if ($process eq '') { | ||
607 | $process = "NO_PROCESS_NAME"; | ||
608 | } | ||
609 | |||
610 | $perprocess{$process}->{MM_VMSCAN_DIRECT_RECLAIM_BEGIN} += $perprocesspid{$process_pid}->{MM_VMSCAN_DIRECT_RECLAIM_BEGIN}; | ||
611 | $perprocess{$process}->{MM_VMSCAN_KSWAPD_WAKE} += $perprocesspid{$process_pid}->{MM_VMSCAN_KSWAPD_WAKE}; | ||
612 | $perprocess{$process}->{MM_VMSCAN_WAKEUP_KSWAPD} += $perprocesspid{$process_pid}->{MM_VMSCAN_WAKEUP_KSWAPD}; | ||
613 | $perprocess{$process}->{HIGH_KSWAPD_REWAKEUP} += $perprocesspid{$process_pid}->{HIGH_KSWAPD_REWAKEUP}; | ||
614 | $perprocess{$process}->{HIGH_NR_SCANNED} += $perprocesspid{$process_pid}->{HIGH_NR_SCANNED}; | ||
615 | $perprocess{$process}->{MM_VMSCAN_WRITEPAGE_FILE_SYNC} += $perprocesspid{$process_pid}->{MM_VMSCAN_WRITEPAGE_FILE_SYNC}; | ||
616 | $perprocess{$process}->{MM_VMSCAN_WRITEPAGE_ANON_SYNC} += $perprocesspid{$process_pid}->{MM_VMSCAN_WRITEPAGE_ANON_SYNC}; | ||
617 | $perprocess{$process}->{MM_VMSCAN_WRITEPAGE_FILE_ASYNC} += $perprocesspid{$process_pid}->{MM_VMSCAN_WRITEPAGE_FILE_ASYNC}; | ||
618 | $perprocess{$process}->{MM_VMSCAN_WRITEPAGE_ANON_ASYNC} += $perprocesspid{$process_pid}->{MM_VMSCAN_WRITEPAGE_ANON_ASYNC}; | ||
619 | |||
620 | for (my $order = 0; $order < 20; $order++) { | ||
621 | $perprocess{$process}->{MM_VMSCAN_DIRECT_RECLAIM_BEGIN_PERORDER}[$order] += $perprocesspid{$process_pid}->{MM_VMSCAN_DIRECT_RECLAIM_BEGIN_PERORDER}[$order]; | ||
622 | $perprocess{$process}->{MM_VMSCAN_WAKEUP_KSWAPD_PERORDER}[$order] += $perprocesspid{$process_pid}->{MM_VMSCAN_WAKEUP_KSWAPD_PERORDER}[$order]; | ||
623 | $perprocess{$process}->{MM_VMSCAN_KSWAPD_WAKE_PERORDER}[$order] += $perprocesspid{$process_pid}->{MM_VMSCAN_KSWAPD_WAKE_PERORDER}[$order]; | ||
624 | |||
625 | } | ||
626 | |||
627 | # Aggregate direct reclaim latencies | ||
628 | my $wr_index = $perprocess{$process}->{MM_VMSCAN_DIRECT_RECLAIM_END}; | ||
629 | my $rd_index = 0; | ||
630 | while (defined $perprocesspid{$process_pid}->{HIGH_DIRECT_RECLAIM_LATENCY}[$rd_index]) { | ||
631 | $perprocess{$process}->{HIGH_DIRECT_RECLAIM_LATENCY}[$wr_index] = $perprocesspid{$process_pid}->{HIGH_DIRECT_RECLAIM_LATENCY}[$rd_index]; | ||
632 | $rd_index++; | ||
633 | $wr_index++; | ||
634 | } | ||
635 | $perprocess{$process}->{MM_VMSCAN_DIRECT_RECLAIM_END} = $wr_index; | ||
636 | |||
637 | # Aggregate kswapd latencies | ||
638 | my $wr_index = $perprocess{$process}->{MM_VMSCAN_KSWAPD_SLEEP}; | ||
639 | my $rd_index = 0; | ||
640 | while (defined $perprocesspid{$process_pid}->{HIGH_KSWAPD_LATENCY}[$rd_index]) { | ||
641 | $perprocess{$process}->{HIGH_KSWAPD_LATENCY}[$wr_index] = $perprocesspid{$process_pid}->{HIGH_KSWAPD_LATENCY}[$rd_index]; | ||
642 | $rd_index++; | ||
643 | $wr_index++; | ||
644 | } | ||
645 | $perprocess{$process}->{MM_VMSCAN_DIRECT_RECLAIM_END} = $wr_index; | ||
646 | } | ||
647 | } | ||
648 | |||
649 | sub report() { | ||
650 | if (!$opt_ignorepid) { | ||
651 | dump_stats(\%perprocesspid); | ||
652 | } else { | ||
653 | aggregate_perprocesspid(); | ||
654 | dump_stats(\%perprocess); | ||
655 | } | ||
656 | } | ||
657 | |||
658 | # Process events or signals until neither is available | ||
659 | sub signal_loop() { | ||
660 | my $sigint_processed; | ||
661 | do { | ||
662 | $sigint_processed = 0; | ||
663 | process_events(); | ||
664 | |||
665 | # Handle pending signals if any | ||
666 | if ($sigint_pending) { | ||
667 | my $current_time = time; | ||
668 | |||
669 | if ($sigint_exit) { | ||
670 | print "Received exit signal\n"; | ||
671 | $sigint_pending = 0; | ||
672 | } | ||
673 | if ($sigint_report) { | ||
674 | if ($current_time >= $sigint_received + 2) { | ||
675 | report(); | ||
676 | $sigint_report = 0; | ||
677 | $sigint_pending = 0; | ||
678 | $sigint_processed = 1; | ||
679 | } | ||
680 | } | ||
681 | } | ||
682 | } while ($sigint_pending || $sigint_processed); | ||
683 | } | ||
684 | |||
685 | signal_loop(); | ||
686 | report(); | ||
diff --git a/Documentation/usb/ehci.txt b/Documentation/usb/ehci.txt index 1536b7e75134..9dcafa7d930d 100644 --- a/Documentation/usb/ehci.txt +++ b/Documentation/usb/ehci.txt | |||
@@ -9,7 +9,7 @@ compatible with the USB 1.1 standard. It defines three transfer speeds: | |||
9 | - "Low Speed" 1.5 Mbit/sec | 9 | - "Low Speed" 1.5 Mbit/sec |
10 | 10 | ||
11 | USB 1.1 only addressed full speed and low speed. High speed devices | 11 | USB 1.1 only addressed full speed and low speed. High speed devices |
12 | can be used on USB 1.1 systems, but they slow down to USB 1.1 speeds. | 12 | can be used on USB 1.1 systems, but they slow down to USB 1.1 speeds. |
13 | 13 | ||
14 | USB 1.1 devices may also be used on USB 2.0 systems. When plugged | 14 | USB 1.1 devices may also be used on USB 2.0 systems. When plugged |
15 | into an EHCI controller, they are given to a USB 1.1 "companion" | 15 | into an EHCI controller, they are given to a USB 1.1 "companion" |
diff --git a/Documentation/usb/gadget_multi.txt b/Documentation/usb/gadget_multi.txt new file mode 100644 index 000000000000..80f4ef0eb75b --- /dev/null +++ b/Documentation/usb/gadget_multi.txt | |||
@@ -0,0 +1,150 @@ | |||
1 | -*- org -*- | ||
2 | |||
3 | * Overview | ||
4 | |||
5 | The Multifunction Composite Gadget (or g_multi) is a composite gadget | ||
6 | that makes extensive use of the composite framework to provide | ||
7 | a... multifunction gadget. | ||
8 | |||
9 | In it's standard configuration it provides a single USB configuration | ||
10 | with RNDIS[1] (that is Ethernet), USB CDC[2] ACM (that is serial) and | ||
11 | USB Mass Storage functions. | ||
12 | |||
13 | A CDC ECM (Ethernet) function may be turned on via a Kconfig option | ||
14 | and RNDIS can be turned off. If they are both enabled the gadget will | ||
15 | have two configurations -- one with RNDIS and another with CDC ECM[3]. | ||
16 | |||
17 | Please not that if you use non-standard configuration (that is enable | ||
18 | CDC ECM) you may need to change vendor and/or product ID. | ||
19 | |||
20 | * Host drivers | ||
21 | |||
22 | To make use of the gadget one needs to make it work on host side -- | ||
23 | without that there's no hope of achieving anything with the gadget. | ||
24 | As one might expect, things one need to do very from system to system. | ||
25 | |||
26 | ** Linux host drivers | ||
27 | |||
28 | Since the gadget uses standard composite framework and appears as such | ||
29 | to Linux host it does not need any additional drivers on Linux host | ||
30 | side. All the functions are handled by respective drivers developed | ||
31 | for them. | ||
32 | |||
33 | This is also true for two configuration set-up with RNDIS | ||
34 | configuration being the first one. Linux host will use the second | ||
35 | configuration with CDC ECM which should work better under Linux. | ||
36 | |||
37 | ** Windows host drivers | ||
38 | |||
39 | For the gadget two work under Windows two conditions have to be met: | ||
40 | |||
41 | *** Detecting as composite gadget | ||
42 | |||
43 | First of all, Windows need to detect the gadget as an USB composite | ||
44 | gadget which on its own have some conditions[4]. If they are met, | ||
45 | Windows lets USB Generic Parent Driver[5] handle the device which then | ||
46 | tries to much drivers for each individual interface (sort of, don't | ||
47 | get into too many details). | ||
48 | |||
49 | The good news is: you do not have to worry about most of the | ||
50 | conditions! | ||
51 | |||
52 | The only thing to worry is that the gadget has to have a single | ||
53 | configuration so a dual RNDIS and CDC ECM gadget won't work unless you | ||
54 | create a proper INF -- and of course, if you do submit it! | ||
55 | |||
56 | *** Installing drivers for each function | ||
57 | |||
58 | The other, trickier thing is making Windows install drivers for each | ||
59 | individual function. | ||
60 | |||
61 | For mass storage it is trivial since Windows detect it's an interface | ||
62 | implementing USB Mass Storage class and selects appropriate driver. | ||
63 | |||
64 | Things are harder with RDNIS and CDC ACM. | ||
65 | |||
66 | **** RNDIS | ||
67 | |||
68 | To make Windows select RNDIS drivers for the first function in the | ||
69 | gadget, one needs to use the [[file:linux.inf]] file provided with this | ||
70 | document. It "attaches" Window's RNDIS driver to the first interface | ||
71 | of the gadget. | ||
72 | |||
73 | Please note, that while testing we encountered some issues[6] when | ||
74 | RNDIS was not the first interface. You do not need to worry abut it | ||
75 | unless you are trying to develop your own gadget in which case watch | ||
76 | out for this bug. | ||
77 | |||
78 | **** CDC ACM | ||
79 | |||
80 | Similarly, [[file:linux-cdc-acm.inf]] is provided for CDC ACM. | ||
81 | |||
82 | **** Customising the gadget | ||
83 | |||
84 | If you intend to hack the g_multi gadget be advised that rearranging | ||
85 | functions will obviously change interface numbers for each of the | ||
86 | functionality. As an effect provided INFs won't work since they have | ||
87 | interface numbers hard-coded in them (it's not hard to change those | ||
88 | though[7]). | ||
89 | |||
90 | This also means, that after experimenting with g_multi and changing | ||
91 | provided functions one should change gadget's vendor and/or product ID | ||
92 | so there will be no collision with other customised gadgets or the | ||
93 | original gadget. | ||
94 | |||
95 | Failing to comply may cause brain damage after wondering for hours why | ||
96 | things don't work as intended before realising Windows have cached | ||
97 | some drivers information (changing USB port may sometimes help plus | ||
98 | you might try using USBDeview[8] to remove the phantom device). | ||
99 | |||
100 | **** INF testing | ||
101 | |||
102 | Provided INF files have been tested on Windows XP SP3, Windows Vista | ||
103 | and Windows 7, all 32-bit versions. It should work on 64-bit versions | ||
104 | as well. It most likely won't work on Windows prior to Windows XP | ||
105 | SP2. | ||
106 | |||
107 | ** Other systems | ||
108 | |||
109 | At this moment, drivers for any other systems have not been tested. | ||
110 | Knowing how MacOS is based on BSD and BSD is an Open Source it is | ||
111 | believed that it should (read: "I have no idea whether it will") work | ||
112 | out-of-the-box. | ||
113 | |||
114 | For more exotic systems I have even less to say... | ||
115 | |||
116 | Any testing and drivers *are* *welcome*! | ||
117 | |||
118 | * Authors | ||
119 | |||
120 | This document has been written by Michal Nazarewicz | ||
121 | ([[mailto:mina86@mina86.com]]). INF files have been hacked with | ||
122 | support of Marek Szyprowski ([[mailto:m.szyprowski@samsung.com]]) and | ||
123 | Xiaofan Chen ([[mailto:xiaofanc@gmail.com]]) basing on the MS RNDIS | ||
124 | template[9], Microchip's CDC ACM INF file and David Brownell's | ||
125 | ([[mailto:dbrownell@users.sourceforge.net]]) original INF files. | ||
126 | |||
127 | * Footnotes | ||
128 | |||
129 | [1] Remote Network Driver Interface Specification, | ||
130 | [[http://msdn.microsoft.com/en-us/library/ee484414.aspx]]. | ||
131 | |||
132 | [2] Communications Device Class Abstract Control Model, spec for this | ||
133 | and other USB classes can be found at | ||
134 | [[http://www.usb.org/developers/devclass_docs/]]. | ||
135 | |||
136 | [3] CDC Ethernet Control Model. | ||
137 | |||
138 | [4] [[http://msdn.microsoft.com/en-us/library/ff537109(v=VS.85).aspx]] | ||
139 | |||
140 | [5] [[http://msdn.microsoft.com/en-us/library/ff539234(v=VS.85).aspx]] | ||
141 | |||
142 | [6] To put it in some other nice words, Windows failed to respond to | ||
143 | any user input. | ||
144 | |||
145 | [7] You may find [[http://www.cygnal.org/ubb/Forum9/HTML/001050.html]] | ||
146 | useful. | ||
147 | |||
148 | [8] http://www.nirsoft.net/utils/usb_devices_view.html | ||
149 | |||
150 | [9] [[http://msdn.microsoft.com/en-us/library/ff570620.aspx]] | ||
diff --git a/Documentation/usb/gadget_serial.txt b/Documentation/usb/gadget_serial.txt index eac7df94d8e3..61e67f6a20a0 100644 --- a/Documentation/usb/gadget_serial.txt +++ b/Documentation/usb/gadget_serial.txt | |||
@@ -151,88 +151,23 @@ instructions below to install the host side driver. | |||
151 | 151 | ||
152 | Installing the Windows Host ACM Driver | 152 | Installing the Windows Host ACM Driver |
153 | -------------------------------------- | 153 | -------------------------------------- |
154 | To use the Windows ACM driver you must have the files "gserial.inf" | 154 | To use the Windows ACM driver you must have the "linux-cdc-acm.inf" |
155 | and "usbser.sys" together in a folder on the Windows machine. | 155 | file (provided along this document) which supports all recent versions |
156 | 156 | of Windows. | |
157 | The "gserial.inf" file is given here. | ||
158 | |||
159 | -------------------- CUT HERE -------------------- | ||
160 | [Version] | ||
161 | Signature="$Windows NT$" | ||
162 | Class=Ports | ||
163 | ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} | ||
164 | Provider=%LINUX% | ||
165 | DriverVer=08/17/2004,0.0.2.0 | ||
166 | ; Copyright (C) 2004 Al Borchers (alborchers@steinerpoint.com) | ||
167 | |||
168 | [Manufacturer] | ||
169 | %LINUX%=GSerialDeviceList | ||
170 | |||
171 | [GSerialDeviceList] | ||
172 | %GSERIAL%=GSerialInstall, USB\VID_0525&PID_A4A7 | ||
173 | |||
174 | [DestinationDirs] | ||
175 | DefaultDestDir=10,System32\Drivers | ||
176 | |||
177 | [GSerialInstall] | ||
178 | CopyFiles=GSerialCopyFiles | ||
179 | AddReg=GSerialAddReg | ||
180 | |||
181 | [GSerialCopyFiles] | ||
182 | usbser.sys | ||
183 | |||
184 | [GSerialAddReg] | ||
185 | HKR,,DevLoader,,*ntkern | ||
186 | HKR,,NTMPDriver,,usbser.sys | ||
187 | HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" | ||
188 | |||
189 | [GSerialInstall.Services] | ||
190 | AddService = usbser,0x0002,GSerialService | ||
191 | |||
192 | [GSerialService] | ||
193 | DisplayName = %GSERIAL_DISPLAY_NAME% | ||
194 | ServiceType = 1 ; SERVICE_KERNEL_DRIVER | ||
195 | StartType = 3 ; SERVICE_DEMAND_START | ||
196 | ErrorControl = 1 ; SERVICE_ERROR_NORMAL | ||
197 | ServiceBinary = %10%\System32\Drivers\usbser.sys | ||
198 | LoadOrderGroup = Base | ||
199 | |||
200 | [Strings] | ||
201 | LINUX = "Linux" | ||
202 | GSERIAL = "Gadget Serial" | ||
203 | GSERIAL_DISPLAY_NAME = "USB Gadget Serial Driver" | ||
204 | -------------------- CUT HERE -------------------- | ||
205 | |||
206 | The "usbser.sys" file comes with various versions of Windows. | ||
207 | For example, it can be found on Windows XP typically in | ||
208 | |||
209 | C:\WINDOWS\Driver Cache\i386\driver.cab | ||
210 | |||
211 | Or it can be found on the Windows 98SE CD in the "win98" folder | ||
212 | in the "DRIVER11.CAB" through "DRIVER20.CAB" cab files. You will | ||
213 | need the DOS "expand" program, the Cygwin "cabextract" program, or | ||
214 | a similar program to unpack these cab files and extract "usbser.sys". | ||
215 | |||
216 | For example, to extract "usbser.sys" into the current directory | ||
217 | on Windows XP, open a DOS window and run a command like | ||
218 | |||
219 | expand C:\WINDOWS\Driver~1\i386\driver.cab -F:usbser.sys . | ||
220 | |||
221 | (Thanks to Nishant Kamat for pointing out this DOS command.) | ||
222 | 157 | ||
223 | When the gadget serial driver is loaded and the USB device connected | 158 | When the gadget serial driver is loaded and the USB device connected |
224 | to the Windows host with a USB cable, Windows should recognize the | 159 | to the Windows host with a USB cable, Windows should recognize the |
225 | gadget serial device and ask for a driver. Tell Windows to find the | 160 | gadget serial device and ask for a driver. Tell Windows to find the |
226 | driver in the folder that contains "gserial.inf" and "usbser.sys". | 161 | driver in the folder that contains the "linux-cdc-acm.inf" file. |
227 | 162 | ||
228 | For example, on Windows XP, when the gadget serial device is first | 163 | For example, on Windows XP, when the gadget serial device is first |
229 | plugged in, the "Found New Hardware Wizard" starts up. Select | 164 | plugged in, the "Found New Hardware Wizard" starts up. Select |
230 | "Install from a list or specific location (Advanced)", then on | 165 | "Install from a list or specific location (Advanced)", then on the |
231 | the next screen select "Include this location in the search" and | 166 | next screen select "Include this location in the search" and enter the |
232 | enter the path or browse to the folder containing "gserial.inf" and | 167 | path or browse to the folder containing the "linux-cdc-acm.inf" file. |
233 | "usbser.sys". Windows will complain that the Gadget Serial driver | 168 | Windows will complain that the Gadget Serial driver has not passed |
234 | has not passed Windows Logo testing, but select "Continue anyway" | 169 | Windows Logo testing, but select "Continue anyway" and finish the |
235 | and finish the driver installation. | 170 | driver installation. |
236 | 171 | ||
237 | On Windows XP, in the "Device Manager" (under "Control Panel", | 172 | On Windows XP, in the "Device Manager" (under "Control Panel", |
238 | "System", "Hardware") expand the "Ports (COM & LPT)" entry and you | 173 | "System", "Hardware") expand the "Ports (COM & LPT)" entry and you |
@@ -345,5 +280,3 @@ you should be able to send data back and forth between the gadget | |||
345 | side and host side systems. Anything you type on the terminal | 280 | side and host side systems. Anything you type on the terminal |
346 | window on the gadget side should appear in the terminal window on | 281 | window on the gadget side should appear in the terminal window on |
347 | the host side and vice versa. | 282 | the host side and vice versa. |
348 | |||
349 | |||
diff --git a/Documentation/usb/hotplug.txt b/Documentation/usb/hotplug.txt index f53170665f37..4c945716a660 100644 --- a/Documentation/usb/hotplug.txt +++ b/Documentation/usb/hotplug.txt | |||
@@ -10,7 +10,7 @@ immediately usable. That means the system must do many things, including: | |||
10 | 10 | ||
11 | - Bind a driver to that device. Bus frameworks do that using a | 11 | - Bind a driver to that device. Bus frameworks do that using a |
12 | device driver's probe() routine. | 12 | device driver's probe() routine. |
13 | 13 | ||
14 | - Tell other subsystems to configure the new device. Print | 14 | - Tell other subsystems to configure the new device. Print |
15 | queues may need to be enabled, networks brought up, disk | 15 | queues may need to be enabled, networks brought up, disk |
16 | partitions mounted, and so on. In some cases these will | 16 | partitions mounted, and so on. In some cases these will |
@@ -84,7 +84,7 @@ USB MODUTILS SUPPORT | |||
84 | Current versions of module-init-tools will create a "modules.usbmap" file | 84 | Current versions of module-init-tools will create a "modules.usbmap" file |
85 | which contains the entries from each driver's MODULE_DEVICE_TABLE. Such | 85 | which contains the entries from each driver's MODULE_DEVICE_TABLE. Such |
86 | files can be used by various user mode policy agents to make sure all the | 86 | files can be used by various user mode policy agents to make sure all the |
87 | right driver modules get loaded, either at boot time or later. | 87 | right driver modules get loaded, either at boot time or later. |
88 | 88 | ||
89 | See <linux/usb.h> for full information about such table entries; or look | 89 | See <linux/usb.h> for full information about such table entries; or look |
90 | at existing drivers. Each table entry describes one or more criteria to | 90 | at existing drivers. Each table entry describes one or more criteria to |
diff --git a/Documentation/usb/linux-cdc-acm.inf b/Documentation/usb/linux-cdc-acm.inf new file mode 100644 index 000000000000..612e7220fb29 --- /dev/null +++ b/Documentation/usb/linux-cdc-acm.inf | |||
@@ -0,0 +1,107 @@ | |||
1 | ; Windows USB CDC ACM Setup File | ||
2 | |||
3 | ; Based on INF template which was: | ||
4 | ; Copyright (c) 2000 Microsoft Corporation | ||
5 | ; Copyright (c) 2007 Microchip Technology Inc. | ||
6 | ; likely to be covered by the MLPL as found at: | ||
7 | ; <http://msdn.microsoft.com/en-us/cc300389.aspx#MLPL>. | ||
8 | ; For use only on Windows operating systems. | ||
9 | |||
10 | [Version] | ||
11 | Signature="$Windows NT$" | ||
12 | Class=Ports | ||
13 | ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} | ||
14 | Provider=%Linux% | ||
15 | DriverVer=11/15/2007,5.1.2600.0 | ||
16 | |||
17 | [Manufacturer] | ||
18 | %Linux%=DeviceList, NTamd64 | ||
19 | |||
20 | [DestinationDirs] | ||
21 | DefaultDestDir=12 | ||
22 | |||
23 | |||
24 | ;------------------------------------------------------------------------------ | ||
25 | ; Windows 2000/XP/Vista-32bit Sections | ||
26 | ;------------------------------------------------------------------------------ | ||
27 | |||
28 | [DriverInstall.nt] | ||
29 | include=mdmcpq.inf | ||
30 | CopyFiles=DriverCopyFiles.nt | ||
31 | AddReg=DriverInstall.nt.AddReg | ||
32 | |||
33 | [DriverCopyFiles.nt] | ||
34 | usbser.sys,,,0x20 | ||
35 | |||
36 | [DriverInstall.nt.AddReg] | ||
37 | HKR,,DevLoader,,*ntkern | ||
38 | HKR,,NTMPDriver,,USBSER.sys | ||
39 | HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" | ||
40 | |||
41 | [DriverInstall.nt.Services] | ||
42 | AddService=usbser, 0x00000002, DriverService.nt | ||
43 | |||
44 | [DriverService.nt] | ||
45 | DisplayName=%SERVICE% | ||
46 | ServiceType=1 | ||
47 | StartType=3 | ||
48 | ErrorControl=1 | ||
49 | ServiceBinary=%12%\USBSER.sys | ||
50 | |||
51 | ;------------------------------------------------------------------------------ | ||
52 | ; Vista-64bit Sections | ||
53 | ;------------------------------------------------------------------------------ | ||
54 | |||
55 | [DriverInstall.NTamd64] | ||
56 | include=mdmcpq.inf | ||
57 | CopyFiles=DriverCopyFiles.NTamd64 | ||
58 | AddReg=DriverInstall.NTamd64.AddReg | ||
59 | |||
60 | [DriverCopyFiles.NTamd64] | ||
61 | USBSER.sys,,,0x20 | ||
62 | |||
63 | [DriverInstall.NTamd64.AddReg] | ||
64 | HKR,,DevLoader,,*ntkern | ||
65 | HKR,,NTMPDriver,,USBSER.sys | ||
66 | HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" | ||
67 | |||
68 | [DriverInstall.NTamd64.Services] | ||
69 | AddService=usbser, 0x00000002, DriverService.NTamd64 | ||
70 | |||
71 | [DriverService.NTamd64] | ||
72 | DisplayName=%SERVICE% | ||
73 | ServiceType=1 | ||
74 | StartType=3 | ||
75 | ErrorControl=1 | ||
76 | ServiceBinary=%12%\USBSER.sys | ||
77 | |||
78 | |||
79 | ;------------------------------------------------------------------------------ | ||
80 | ; Vendor and Product ID Definitions | ||
81 | ;------------------------------------------------------------------------------ | ||
82 | ; When developing your USB device, the VID and PID used in the PC side | ||
83 | ; application program and the firmware on the microcontroller must match. | ||
84 | ; Modify the below line to use your VID and PID. Use the format as shown | ||
85 | ; below. | ||
86 | ; Note: One INF file can be used for multiple devices with different | ||
87 | ; VID and PIDs. For each supported device, append | ||
88 | ; ",USB\VID_xxxx&PID_yyyy" to the end of the line. | ||
89 | ;------------------------------------------------------------------------------ | ||
90 | [SourceDisksFiles] | ||
91 | [SourceDisksNames] | ||
92 | [DeviceList] | ||
93 | %DESCRIPTION%=DriverInstall, USB\VID_0525&PID_A4A7, USB\VID_0525&PID_A4AB&MI_02 | ||
94 | |||
95 | [DeviceList.NTamd64] | ||
96 | %DESCRIPTION%=DriverInstall, USB\VID_0525&PID_A4A7, USB\VID_0525&PID_A4AB&MI_02 | ||
97 | |||
98 | |||
99 | ;------------------------------------------------------------------------------ | ||
100 | ; String Definitions | ||
101 | ;------------------------------------------------------------------------------ | ||
102 | ;Modify these strings to customize your device | ||
103 | ;------------------------------------------------------------------------------ | ||
104 | [Strings] | ||
105 | Linux = "Linux Developer Community" | ||
106 | DESCRIPTION = "Gadget Serial" | ||
107 | SERVICE = "USB RS-232 Emulation Driver" | ||
diff --git a/Documentation/usb/linux.inf b/Documentation/usb/linux.inf index af71d87d9e94..4dee95851224 100644 --- a/Documentation/usb/linux.inf +++ b/Documentation/usb/linux.inf | |||
@@ -1,200 +1,66 @@ | |||
1 | ; MS-Windows driver config matching some basic modes of the | 1 | ; Based on template INF file found at |
2 | ; Linux-USB Ethernet/RNDIS gadget firmware: | 2 | ; <http://msdn.microsoft.com/en-us/library/ff570620.aspx> |
3 | ; | 3 | ; which was: |
4 | ; - RNDIS plus CDC Ethernet ... this may be familiar as a DOCSIS | 4 | ; Copyright (c) Microsoft Corporation |
5 | ; cable modem profile, and supports most non-Microsoft USB hosts | 5 | ; and released under the MLPL as found at: |
6 | ; | 6 | ; <http://msdn.microsoft.com/en-us/cc300389.aspx#MLPL>. |
7 | ; - RNDIS plus CDC Subset ... used by hardware that incapable of | 7 | ; For use only on Windows operating systems. |
8 | ; full CDC Ethernet support. | ||
9 | ; | ||
10 | ; Microsoft only directly supports RNDIS drivers, and bundled them into XP. | ||
11 | ; The Microsoft "Remote NDIS USB Driver Kit" is currently found at: | ||
12 | ; http://www.microsoft.com/whdc/device/network/ndis/rmndis.mspx | ||
13 | |||
14 | 8 | ||
15 | [Version] | 9 | [Version] |
16 | Signature = "$CHICAGO$" | 10 | Signature = "$Windows NT$" |
17 | Class = Net | 11 | Class = Net |
18 | ClassGUID = {4d36e972-e325-11ce-bfc1-08002be10318} | 12 | ClassGUID = {4d36e972-e325-11ce-bfc1-08002be10318} |
19 | Provider = %Linux% | 13 | Provider = %Linux% |
20 | Compatible = 1 | 14 | DriverVer = 06/21/2006,6.0.6000.16384 |
21 | MillenniumPreferred = .ME | ||
22 | DriverVer = 03/30/2004,0.0.0.0 | ||
23 | ; catalog file would be used by WHQL | ||
24 | ;CatalogFile = Linux.cat | ||
25 | 15 | ||
26 | [Manufacturer] | 16 | [Manufacturer] |
27 | %Linux% = LinuxDevices,NT.5.1 | 17 | %Linux% = LinuxDevices,NTx86,NTamd64,NTia64 |
18 | |||
19 | ; Decoration for x86 architecture | ||
20 | [LinuxDevices.NTx86] | ||
21 | %LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2, USB\VID_0525&PID_a4ab&MI_00 | ||
28 | 22 | ||
29 | [LinuxDevices] | 23 | ; Decoration for x64 architecture |
30 | ; NetChip IDs, used by both firmware modes | 24 | [LinuxDevices.NTamd64] |
31 | %LinuxDevice% = RNDIS, USB\VID_0525&PID_a4a2 | 25 | %LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2, USB\VID_0525&PID_a4ab&MI_00 |
32 | 26 | ||
33 | [LinuxDevices.NT.5.1] | 27 | ; Decoration for ia64 architecture |
34 | %LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2 | 28 | [LinuxDevices.NTia64] |
29 | %LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2, USB\VID_0525&PID_a4ab&MI_00 | ||
35 | 30 | ||
31 | ;@@@ This is the common setting for setup | ||
36 | [ControlFlags] | 32 | [ControlFlags] |
37 | ExcludeFromSelect=* | 33 | ExcludeFromSelect=* |
38 | 34 | ||
39 | ; Windows 98, Windows 98 Second Edition specific sections -------- | 35 | ; DDInstall section |
40 | 36 | ; References the in-build Netrndis.inf | |
41 | [RNDIS] | ||
42 | DeviceID = usb8023 | ||
43 | MaxInstance = 512 | ||
44 | DriverVer = 03/30/2004,0.0.0.0 | ||
45 | AddReg = RNDIS_AddReg_98, RNDIS_AddReg_Common | ||
46 | |||
47 | [RNDIS_AddReg_98] | ||
48 | HKR, , DevLoader, 0, *ndis | ||
49 | HKR, , DeviceVxDs, 0, usb8023.sys | ||
50 | HKR, NDIS, LogDriverName, 0, "usb8023" | ||
51 | HKR, NDIS, MajorNdisVersion, 1, 5 | ||
52 | HKR, NDIS, MinorNdisVersion, 1, 0 | ||
53 | HKR, Ndi\Interfaces, DefUpper, 0, "ndis3,ndis4,ndis5" | ||
54 | HKR, Ndi\Interfaces, DefLower, 0, "ethernet" | ||
55 | HKR, Ndi\Interfaces, UpperRange, 0, "ndis3,ndis4,ndis5" | ||
56 | HKR, Ndi\Interfaces, LowerRange, 0, "ethernet" | ||
57 | HKR, Ndi\Install, ndis3, 0, "RNDIS_Install_98" | ||
58 | HKR, Ndi\Install, ndis4, 0, "RNDIS_Install_98" | ||
59 | HKR, Ndi\Install, ndis5, 0, "RNDIS_Install_98" | ||
60 | HKR, Ndi, DeviceId, 0, "USB\VID_0525&PID_a4a2" | ||
61 | |||
62 | [RNDIS_Install_98] | ||
63 | CopyFiles=RNDIS_CopyFiles_98 | ||
64 | |||
65 | [RNDIS_CopyFiles_98] | ||
66 | usb8023.sys, usb8023w.sys, , 0 | ||
67 | rndismp.sys, rndismpw.sys, , 0 | ||
68 | |||
69 | ; Windows Millennium Edition specific sections -------------------- | ||
70 | |||
71 | [RNDIS.ME] | ||
72 | DeviceID = usb8023 | ||
73 | MaxInstance = 512 | ||
74 | DriverVer = 03/30/2004,0.0.0.0 | ||
75 | AddReg = RNDIS_AddReg_ME, RNDIS_AddReg_Common | ||
76 | Characteristics = 0x84 ; NCF_PHYSICAL + NCF_HAS_UI | ||
77 | BusType = 15 | ||
78 | |||
79 | [RNDIS_AddReg_ME] | ||
80 | HKR, , DevLoader, 0, *ndis | ||
81 | HKR, , DeviceVxDs, 0, usb8023.sys | ||
82 | HKR, NDIS, LogDriverName, 0, "usb8023" | ||
83 | HKR, NDIS, MajorNdisVersion, 1, 5 | ||
84 | HKR, NDIS, MinorNdisVersion, 1, 0 | ||
85 | HKR, Ndi\Interfaces, DefUpper, 0, "ndis3,ndis4,ndis5" | ||
86 | HKR, Ndi\Interfaces, DefLower, 0, "ethernet" | ||
87 | HKR, Ndi\Interfaces, UpperRange, 0, "ndis3,ndis4,ndis5" | ||
88 | HKR, Ndi\Interfaces, LowerRange, 0, "ethernet" | ||
89 | HKR, Ndi\Install, ndis3, 0, "RNDIS_Install_ME" | ||
90 | HKR, Ndi\Install, ndis4, 0, "RNDIS_Install_ME" | ||
91 | HKR, Ndi\Install, ndis5, 0, "RNDIS_Install_ME" | ||
92 | HKR, Ndi, DeviceId, 0, "USB\VID_0525&PID_a4a2" | ||
93 | |||
94 | [RNDIS_Install_ME] | ||
95 | CopyFiles=RNDIS_CopyFiles_ME | ||
96 | |||
97 | [RNDIS_CopyFiles_ME] | ||
98 | usb8023.sys, usb8023m.sys, , 0 | ||
99 | rndismp.sys, rndismpm.sys, , 0 | ||
100 | |||
101 | ; Windows 2000 specific sections --------------------------------- | ||
102 | |||
103 | [RNDIS.NT] | ||
104 | Characteristics = 0x84 ; NCF_PHYSICAL + NCF_HAS_UI | ||
105 | BusType = 15 | ||
106 | DriverVer = 03/30/2004,0.0.0.0 | ||
107 | AddReg = RNDIS_AddReg_NT, RNDIS_AddReg_Common | ||
108 | CopyFiles = RNDIS_CopyFiles_NT | ||
109 | |||
110 | [RNDIS.NT.Services] | ||
111 | AddService = USB_RNDIS, 2, RNDIS_ServiceInst_NT, RNDIS_EventLog | ||
112 | |||
113 | [RNDIS_CopyFiles_NT] | ||
114 | ; no rename of files on Windows 2000, use the 'k' names as is | ||
115 | usb8023k.sys, , , 0 | ||
116 | rndismpk.sys, , , 0 | ||
117 | |||
118 | [RNDIS_ServiceInst_NT] | ||
119 | DisplayName = %ServiceDisplayName% | ||
120 | ServiceType = 1 | ||
121 | StartType = 3 | ||
122 | ErrorControl = 1 | ||
123 | ServiceBinary = %12%\usb8023k.sys | ||
124 | LoadOrderGroup = NDIS | ||
125 | AddReg = RNDIS_WMI_AddReg_NT | ||
126 | |||
127 | [RNDIS_WMI_AddReg_NT] | ||
128 | HKR, , MofImagePath, 0x00020000, "System32\drivers\rndismpk.sys" | ||
129 | |||
130 | ; Windows XP specific sections ----------------------------------- | ||
131 | |||
132 | [RNDIS.NT.5.1] | 37 | [RNDIS.NT.5.1] |
133 | Characteristics = 0x84 ; NCF_PHYSICAL + NCF_HAS_UI | 38 | Characteristics = 0x84 ; NCF_PHYSICAL + NCF_HAS_UI |
134 | BusType = 15 | 39 | BusType = 15 |
135 | DriverVer = 03/30/2004,0.0.0.0 | 40 | ; NEVER REMOVE THE FOLLOWING REFERENCE FOR NETRNDIS.INF |
136 | AddReg = RNDIS_AddReg_NT, RNDIS_AddReg_Common | 41 | include = netrndis.inf |
137 | ; no copyfiles - the files are already in place | 42 | needs = Usb_Rndis.ndi |
138 | 43 | AddReg = Rndis_AddReg_Vista | |
44 | |||
45 | ; DDInstal.Services section | ||
139 | [RNDIS.NT.5.1.Services] | 46 | [RNDIS.NT.5.1.Services] |
140 | AddService = USB_RNDIS, 2, RNDIS_ServiceInst_51, RNDIS_EventLog | 47 | include = netrndis.inf |
141 | 48 | needs = Usb_Rndis.ndi.Services | |
142 | [RNDIS_ServiceInst_51] | 49 | |
143 | DisplayName = %ServiceDisplayName% | 50 | ; Optional registry settings. You can modify as needed. |
144 | ServiceType = 1 | 51 | [RNDIS_AddReg_Vista] |
145 | StartType = 3 | 52 | HKR, NDI\params\VistaProperty, ParamDesc, 0, %Vista_Property% |
146 | ErrorControl = 1 | 53 | HKR, NDI\params\VistaProperty, type, 0, "edit" |
147 | ServiceBinary = %12%\usb8023.sys | 54 | HKR, NDI\params\VistaProperty, LimitText, 0, "12" |
148 | LoadOrderGroup = NDIS | 55 | HKR, NDI\params\VistaProperty, UpperCase, 0, "1" |
149 | AddReg = RNDIS_WMI_AddReg_51 | 56 | HKR, NDI\params\VistaProperty, default, 0, " " |
150 | 57 | HKR, NDI\params\VistaProperty, optional, 0, "1" | |
151 | [RNDIS_WMI_AddReg_51] | 58 | |
152 | HKR, , MofImagePath, 0x00020000, "System32\drivers\rndismp.sys" | 59 | ; No sys copyfiles - the sys files are already in-build |
153 | 60 | ; (part of the operating system). | |
154 | ; Windows 2000 and Windows XP common sections -------------------- | 61 | ; We do not support XP SP1-, 2003 SP1-, ME, 9x. |
155 | |||
156 | [RNDIS_AddReg_NT] | ||
157 | HKR, Ndi, Service, 0, "USB_RNDIS" | ||
158 | HKR, Ndi\Interfaces, UpperRange, 0, "ndis5" | ||
159 | HKR, Ndi\Interfaces, LowerRange, 0, "ethernet" | ||
160 | |||
161 | [RNDIS_EventLog] | ||
162 | AddReg = RNDIS_EventLog_AddReg | ||
163 | |||
164 | [RNDIS_EventLog_AddReg] | ||
165 | HKR, , EventMessageFile, 0x00020000, "%%SystemRoot%%\System32\netevent.dll" | ||
166 | HKR, , TypesSupported, 0x00010001, 7 | ||
167 | |||
168 | ; Common Sections ------------------------------------------------- | ||
169 | |||
170 | [RNDIS_AddReg_Common] | ||
171 | HKR, NDI\params\NetworkAddress, ParamDesc, 0, %NetworkAddress% | ||
172 | HKR, NDI\params\NetworkAddress, type, 0, "edit" | ||
173 | HKR, NDI\params\NetworkAddress, LimitText, 0, "12" | ||
174 | HKR, NDI\params\NetworkAddress, UpperCase, 0, "1" | ||
175 | HKR, NDI\params\NetworkAddress, default, 0, " " | ||
176 | HKR, NDI\params\NetworkAddress, optional, 0, "1" | ||
177 | |||
178 | [SourceDisksNames] | ||
179 | 1=%SourceDisk%,,1 | ||
180 | |||
181 | [SourceDisksFiles] | ||
182 | usb8023m.sys=1 | ||
183 | rndismpm.sys=1 | ||
184 | usb8023w.sys=1 | ||
185 | rndismpw.sys=1 | ||
186 | usb8023k.sys=1 | ||
187 | rndismpk.sys=1 | ||
188 | |||
189 | [DestinationDirs] | ||
190 | RNDIS_CopyFiles_98 = 10, system32/drivers | ||
191 | RNDIS_CopyFiles_ME = 10, system32/drivers | ||
192 | RNDIS_CopyFiles_NT = 12 | ||
193 | 62 | ||
194 | [Strings] | 63 | [Strings] |
195 | ServiceDisplayName = "USB Remote NDIS Network Device Driver" | ||
196 | NetworkAddress = "Network Address" | ||
197 | Linux = "Linux Developer Community" | 64 | Linux = "Linux Developer Community" |
198 | LinuxDevice = "Linux USB Ethernet/RNDIS Gadget" | 65 | LinuxDevice = "Linux USB Ethernet/RNDIS Gadget" |
199 | SourceDisk = "Ethernet/RNDIS Gadget Driver Install Disk" | 66 | Vista_Property = "Optional Vista Property" |
200 | |||
diff --git a/Documentation/video4linux/v4l2-controls.txt b/Documentation/video4linux/v4l2-controls.txt new file mode 100644 index 000000000000..8773778d23fc --- /dev/null +++ b/Documentation/video4linux/v4l2-controls.txt | |||
@@ -0,0 +1,648 @@ | |||
1 | Introduction | ||
2 | ============ | ||
3 | |||
4 | The V4L2 control API seems simple enough, but quickly becomes very hard to | ||
5 | implement correctly in drivers. But much of the code needed to handle controls | ||
6 | is actually not driver specific and can be moved to the V4L core framework. | ||
7 | |||
8 | After all, the only part that a driver developer is interested in is: | ||
9 | |||
10 | 1) How do I add a control? | ||
11 | 2) How do I set the control's value? (i.e. s_ctrl) | ||
12 | |||
13 | And occasionally: | ||
14 | |||
15 | 3) How do I get the control's value? (i.e. g_volatile_ctrl) | ||
16 | 4) How do I validate the user's proposed control value? (i.e. try_ctrl) | ||
17 | |||
18 | All the rest is something that can be done centrally. | ||
19 | |||
20 | The control framework was created in order to implement all the rules of the | ||
21 | V4L2 specification with respect to controls in a central place. And to make | ||
22 | life as easy as possible for the driver developer. | ||
23 | |||
24 | Note that the control framework relies on the presence of a struct v4l2_device | ||
25 | for V4L2 drivers and struct v4l2_subdev for sub-device drivers. | ||
26 | |||
27 | |||
28 | Objects in the framework | ||
29 | ======================== | ||
30 | |||
31 | There are two main objects: | ||
32 | |||
33 | The v4l2_ctrl object describes the control properties and keeps track of the | ||
34 | control's value (both the current value and the proposed new value). | ||
35 | |||
36 | v4l2_ctrl_handler is the object that keeps track of controls. It maintains a | ||
37 | list of v4l2_ctrl objects that it owns and another list of references to | ||
38 | controls, possibly to controls owned by other handlers. | ||
39 | |||
40 | |||
41 | Basic usage for V4L2 and sub-device drivers | ||
42 | =========================================== | ||
43 | |||
44 | 1) Prepare the driver: | ||
45 | |||
46 | 1.1) Add the handler to your driver's top-level struct: | ||
47 | |||
48 | struct foo_dev { | ||
49 | ... | ||
50 | struct v4l2_ctrl_handler ctrl_handler; | ||
51 | ... | ||
52 | }; | ||
53 | |||
54 | struct foo_dev *foo; | ||
55 | |||
56 | 1.2) Initialize the handler: | ||
57 | |||
58 | v4l2_ctrl_handler_init(&foo->ctrl_handler, nr_of_controls); | ||
59 | |||
60 | The second argument is a hint telling the function how many controls this | ||
61 | handler is expected to handle. It will allocate a hashtable based on this | ||
62 | information. It is a hint only. | ||
63 | |||
64 | 1.3) Hook the control handler into the driver: | ||
65 | |||
66 | 1.3.1) For V4L2 drivers do this: | ||
67 | |||
68 | struct foo_dev { | ||
69 | ... | ||
70 | struct v4l2_device v4l2_dev; | ||
71 | ... | ||
72 | struct v4l2_ctrl_handler ctrl_handler; | ||
73 | ... | ||
74 | }; | ||
75 | |||
76 | foo->v4l2_dev.ctrl_handler = &foo->ctrl_handler; | ||
77 | |||
78 | Where foo->v4l2_dev is of type struct v4l2_device. | ||
79 | |||
80 | Finally, remove all control functions from your v4l2_ioctl_ops: | ||
81 | vidioc_queryctrl, vidioc_querymenu, vidioc_g_ctrl, vidioc_s_ctrl, | ||
82 | vidioc_g_ext_ctrls, vidioc_try_ext_ctrls and vidioc_s_ext_ctrls. | ||
83 | Those are now no longer needed. | ||
84 | |||
85 | 1.3.2) For sub-device drivers do this: | ||
86 | |||
87 | struct foo_dev { | ||
88 | ... | ||
89 | struct v4l2_subdev sd; | ||
90 | ... | ||
91 | struct v4l2_ctrl_handler ctrl_handler; | ||
92 | ... | ||
93 | }; | ||
94 | |||
95 | foo->sd.ctrl_handler = &foo->ctrl_handler; | ||
96 | |||
97 | Where foo->sd is of type struct v4l2_subdev. | ||
98 | |||
99 | And set all core control ops in your struct v4l2_subdev_core_ops to these | ||
100 | helpers: | ||
101 | |||
102 | .queryctrl = v4l2_subdev_queryctrl, | ||
103 | .querymenu = v4l2_subdev_querymenu, | ||
104 | .g_ctrl = v4l2_subdev_g_ctrl, | ||
105 | .s_ctrl = v4l2_subdev_s_ctrl, | ||
106 | .g_ext_ctrls = v4l2_subdev_g_ext_ctrls, | ||
107 | .try_ext_ctrls = v4l2_subdev_try_ext_ctrls, | ||
108 | .s_ext_ctrls = v4l2_subdev_s_ext_ctrls, | ||
109 | |||
110 | Note: this is a temporary solution only. Once all V4L2 drivers that depend | ||
111 | on subdev drivers are converted to the control framework these helpers will | ||
112 | no longer be needed. | ||
113 | |||
114 | 1.4) Clean up the handler at the end: | ||
115 | |||
116 | v4l2_ctrl_handler_free(&foo->ctrl_handler); | ||
117 | |||
118 | |||
119 | 2) Add controls: | ||
120 | |||
121 | You add non-menu controls by calling v4l2_ctrl_new_std: | ||
122 | |||
123 | struct v4l2_ctrl *v4l2_ctrl_new_std(struct v4l2_ctrl_handler *hdl, | ||
124 | const struct v4l2_ctrl_ops *ops, | ||
125 | u32 id, s32 min, s32 max, u32 step, s32 def); | ||
126 | |||
127 | Menu controls are added by calling v4l2_ctrl_new_std_menu: | ||
128 | |||
129 | struct v4l2_ctrl *v4l2_ctrl_new_std_menu(struct v4l2_ctrl_handler *hdl, | ||
130 | const struct v4l2_ctrl_ops *ops, | ||
131 | u32 id, s32 max, s32 skip_mask, s32 def); | ||
132 | |||
133 | These functions are typically called right after the v4l2_ctrl_handler_init: | ||
134 | |||
135 | v4l2_ctrl_handler_init(&foo->ctrl_handler, nr_of_controls); | ||
136 | v4l2_ctrl_new_std(&foo->ctrl_handler, &foo_ctrl_ops, | ||
137 | V4L2_CID_BRIGHTNESS, 0, 255, 1, 128); | ||
138 | v4l2_ctrl_new_std(&foo->ctrl_handler, &foo_ctrl_ops, | ||
139 | V4L2_CID_CONTRAST, 0, 255, 1, 128); | ||
140 | v4l2_ctrl_new_std_menu(&foo->ctrl_handler, &foo_ctrl_ops, | ||
141 | V4L2_CID_POWER_LINE_FREQUENCY, | ||
142 | V4L2_CID_POWER_LINE_FREQUENCY_60HZ, 0, | ||
143 | V4L2_CID_POWER_LINE_FREQUENCY_DISABLED); | ||
144 | ... | ||
145 | if (foo->ctrl_handler.error) { | ||
146 | int err = foo->ctrl_handler.error; | ||
147 | |||
148 | v4l2_ctrl_handler_free(&foo->ctrl_handler); | ||
149 | return err; | ||
150 | } | ||
151 | |||
152 | The v4l2_ctrl_new_std function returns the v4l2_ctrl pointer to the new | ||
153 | control, but if you do not need to access the pointer outside the control ops, | ||
154 | then there is no need to store it. | ||
155 | |||
156 | The v4l2_ctrl_new_std function will fill in most fields based on the control | ||
157 | ID except for the min, max, step and default values. These are passed in the | ||
158 | last four arguments. These values are driver specific while control attributes | ||
159 | like type, name, flags are all global. The control's current value will be set | ||
160 | to the default value. | ||
161 | |||
162 | The v4l2_ctrl_new_std_menu function is very similar but it is used for menu | ||
163 | controls. There is no min argument since that is always 0 for menu controls, | ||
164 | and instead of a step there is a skip_mask argument: if bit X is 1, then menu | ||
165 | item X is skipped. | ||
166 | |||
167 | Note that if something fails, the function will return NULL or an error and | ||
168 | set ctrl_handler->error to the error code. If ctrl_handler->error was already | ||
169 | set, then it will just return and do nothing. This is also true for | ||
170 | v4l2_ctrl_handler_init if it cannot allocate the internal data structure. | ||
171 | |||
172 | This makes it easy to init the handler and just add all controls and only check | ||
173 | the error code at the end. Saves a lot of repetitive error checking. | ||
174 | |||
175 | It is recommended to add controls in ascending control ID order: it will be | ||
176 | a bit faster that way. | ||
177 | |||
178 | 3) Optionally force initial control setup: | ||
179 | |||
180 | v4l2_ctrl_handler_setup(&foo->ctrl_handler); | ||
181 | |||
182 | This will call s_ctrl for all controls unconditionally. Effectively this | ||
183 | initializes the hardware to the default control values. It is recommended | ||
184 | that you do this as this ensures that both the internal data structures and | ||
185 | the hardware are in sync. | ||
186 | |||
187 | 4) Finally: implement the v4l2_ctrl_ops | ||
188 | |||
189 | static const struct v4l2_ctrl_ops foo_ctrl_ops = { | ||
190 | .s_ctrl = foo_s_ctrl, | ||
191 | }; | ||
192 | |||
193 | Usually all you need is s_ctrl: | ||
194 | |||
195 | static int foo_s_ctrl(struct v4l2_ctrl *ctrl) | ||
196 | { | ||
197 | struct foo *state = container_of(ctrl->handler, struct foo, ctrl_handler); | ||
198 | |||
199 | switch (ctrl->id) { | ||
200 | case V4L2_CID_BRIGHTNESS: | ||
201 | write_reg(0x123, ctrl->val); | ||
202 | break; | ||
203 | case V4L2_CID_CONTRAST: | ||
204 | write_reg(0x456, ctrl->val); | ||
205 | break; | ||
206 | } | ||
207 | return 0; | ||
208 | } | ||
209 | |||
210 | The control ops are called with the v4l2_ctrl pointer as argument. | ||
211 | The new control value has already been validated, so all you need to do is | ||
212 | to actually update the hardware registers. | ||
213 | |||
214 | You're done! And this is sufficient for most of the drivers we have. No need | ||
215 | to do any validation of control values, or implement QUERYCTRL/QUERYMENU. And | ||
216 | G/S_CTRL as well as G/TRY/S_EXT_CTRLS are automatically supported. | ||
217 | |||
218 | |||
219 | ============================================================================== | ||
220 | |||
221 | The remainder of this document deals with more advanced topics and scenarios. | ||
222 | In practice the basic usage as described above is sufficient for most drivers. | ||
223 | |||
224 | =============================================================================== | ||
225 | |||
226 | |||
227 | Inheriting Controls | ||
228 | =================== | ||
229 | |||
230 | When a sub-device is registered with a V4L2 driver by calling | ||
231 | v4l2_device_register_subdev() and the ctrl_handler fields of both v4l2_subdev | ||
232 | and v4l2_device are set, then the controls of the subdev will become | ||
233 | automatically available in the V4L2 driver as well. If the subdev driver | ||
234 | contains controls that already exist in the V4L2 driver, then those will be | ||
235 | skipped (so a V4L2 driver can always override a subdev control). | ||
236 | |||
237 | What happens here is that v4l2_device_register_subdev() calls | ||
238 | v4l2_ctrl_add_handler() adding the controls of the subdev to the controls | ||
239 | of v4l2_device. | ||
240 | |||
241 | |||
242 | Accessing Control Values | ||
243 | ======================== | ||
244 | |||
245 | The v4l2_ctrl struct contains these two unions: | ||
246 | |||
247 | /* The current control value. */ | ||
248 | union { | ||
249 | s32 val; | ||
250 | s64 val64; | ||
251 | char *string; | ||
252 | } cur; | ||
253 | |||
254 | /* The new control value. */ | ||
255 | union { | ||
256 | s32 val; | ||
257 | s64 val64; | ||
258 | char *string; | ||
259 | }; | ||
260 | |||
261 | Within the control ops you can freely use these. The val and val64 speak for | ||
262 | themselves. The string pointers point to character buffers of length | ||
263 | ctrl->maximum + 1, and are always 0-terminated. | ||
264 | |||
265 | In most cases 'cur' contains the current cached control value. When you create | ||
266 | a new control this value is made identical to the default value. After calling | ||
267 | v4l2_ctrl_handler_setup() this value is passed to the hardware. It is generally | ||
268 | a good idea to call this function. | ||
269 | |||
270 | Whenever a new value is set that new value is automatically cached. This means | ||
271 | that most drivers do not need to implement the g_volatile_ctrl() op. The | ||
272 | exception is for controls that return a volatile register such as a signal | ||
273 | strength read-out that changes continuously. In that case you will need to | ||
274 | implement g_volatile_ctrl like this: | ||
275 | |||
276 | static int foo_g_volatile_ctrl(struct v4l2_ctrl *ctrl) | ||
277 | { | ||
278 | switch (ctrl->id) { | ||
279 | case V4L2_CID_BRIGHTNESS: | ||
280 | ctrl->cur.val = read_reg(0x123); | ||
281 | break; | ||
282 | } | ||
283 | } | ||
284 | |||
285 | The 'new value' union is not used in g_volatile_ctrl. In general controls | ||
286 | that need to implement g_volatile_ctrl are read-only controls. | ||
287 | |||
288 | To mark a control as volatile you have to set the is_volatile flag: | ||
289 | |||
290 | ctrl = v4l2_ctrl_new_std(&sd->ctrl_handler, ...); | ||
291 | if (ctrl) | ||
292 | ctrl->is_volatile = 1; | ||
293 | |||
294 | For try/s_ctrl the new values (i.e. as passed by the user) are filled in and | ||
295 | you can modify them in try_ctrl or set them in s_ctrl. The 'cur' union | ||
296 | contains the current value, which you can use (but not change!) as well. | ||
297 | |||
298 | If s_ctrl returns 0 (OK), then the control framework will copy the new final | ||
299 | values to the 'cur' union. | ||
300 | |||
301 | While in g_volatile/s/try_ctrl you can access the value of all controls owned | ||
302 | by the same handler since the handler's lock is held. If you need to access | ||
303 | the value of controls owned by other handlers, then you have to be very careful | ||
304 | not to introduce deadlocks. | ||
305 | |||
306 | Outside of the control ops you have to go through to helper functions to get | ||
307 | or set a single control value safely in your driver: | ||
308 | |||
309 | s32 v4l2_ctrl_g_ctrl(struct v4l2_ctrl *ctrl); | ||
310 | int v4l2_ctrl_s_ctrl(struct v4l2_ctrl *ctrl, s32 val); | ||
311 | |||
312 | These functions go through the control framework just as VIDIOC_G/S_CTRL ioctls | ||
313 | do. Don't use these inside the control ops g_volatile/s/try_ctrl, though, that | ||
314 | will result in a deadlock since these helpers lock the handler as well. | ||
315 | |||
316 | You can also take the handler lock yourself: | ||
317 | |||
318 | mutex_lock(&state->ctrl_handler.lock); | ||
319 | printk(KERN_INFO "String value is '%s'\n", ctrl1->cur.string); | ||
320 | printk(KERN_INFO "Integer value is '%s'\n", ctrl2->cur.val); | ||
321 | mutex_unlock(&state->ctrl_handler.lock); | ||
322 | |||
323 | |||
324 | Menu Controls | ||
325 | ============= | ||
326 | |||
327 | The v4l2_ctrl struct contains this union: | ||
328 | |||
329 | union { | ||
330 | u32 step; | ||
331 | u32 menu_skip_mask; | ||
332 | }; | ||
333 | |||
334 | For menu controls menu_skip_mask is used. What it does is that it allows you | ||
335 | to easily exclude certain menu items. This is used in the VIDIOC_QUERYMENU | ||
336 | implementation where you can return -EINVAL if a certain menu item is not | ||
337 | present. Note that VIDIOC_QUERYCTRL always returns a step value of 1 for | ||
338 | menu controls. | ||
339 | |||
340 | A good example is the MPEG Audio Layer II Bitrate menu control where the | ||
341 | menu is a list of standardized possible bitrates. But in practice hardware | ||
342 | implementations will only support a subset of those. By setting the skip | ||
343 | mask you can tell the framework which menu items should be skipped. Setting | ||
344 | it to 0 means that all menu items are supported. | ||
345 | |||
346 | You set this mask either through the v4l2_ctrl_config struct for a custom | ||
347 | control, or by calling v4l2_ctrl_new_std_menu(). | ||
348 | |||
349 | |||
350 | Custom Controls | ||
351 | =============== | ||
352 | |||
353 | Driver specific controls can be created using v4l2_ctrl_new_custom(): | ||
354 | |||
355 | static const struct v4l2_ctrl_config ctrl_filter = { | ||
356 | .ops = &ctrl_custom_ops, | ||
357 | .id = V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER, | ||
358 | .name = "Spatial Filter", | ||
359 | .type = V4L2_CTRL_TYPE_INTEGER, | ||
360 | .flags = V4L2_CTRL_FLAG_SLIDER, | ||
361 | .max = 15, | ||
362 | .step = 1, | ||
363 | }; | ||
364 | |||
365 | ctrl = v4l2_ctrl_new_custom(&foo->ctrl_handler, &ctrl_filter, NULL); | ||
366 | |||
367 | The last argument is the priv pointer which can be set to driver-specific | ||
368 | private data. | ||
369 | |||
370 | The v4l2_ctrl_config struct also has fields to set the is_private and is_volatile | ||
371 | flags. | ||
372 | |||
373 | If the name field is not set, then the framework will assume this is a standard | ||
374 | control and will fill in the name, type and flags fields accordingly. | ||
375 | |||
376 | |||
377 | Active and Grabbed Controls | ||
378 | =========================== | ||
379 | |||
380 | If you get more complex relationships between controls, then you may have to | ||
381 | activate and deactivate controls. For example, if the Chroma AGC control is | ||
382 | on, then the Chroma Gain control is inactive. That is, you may set it, but | ||
383 | the value will not be used by the hardware as long as the automatic gain | ||
384 | control is on. Typically user interfaces can disable such input fields. | ||
385 | |||
386 | You can set the 'active' status using v4l2_ctrl_activate(). By default all | ||
387 | controls are active. Note that the framework does not check for this flag. | ||
388 | It is meant purely for GUIs. The function is typically called from within | ||
389 | s_ctrl. | ||
390 | |||
391 | The other flag is the 'grabbed' flag. A grabbed control means that you cannot | ||
392 | change it because it is in use by some resource. Typical examples are MPEG | ||
393 | bitrate controls that cannot be changed while capturing is in progress. | ||
394 | |||
395 | If a control is set to 'grabbed' using v4l2_ctrl_grab(), then the framework | ||
396 | will return -EBUSY if an attempt is made to set this control. The | ||
397 | v4l2_ctrl_grab() function is typically called from the driver when it | ||
398 | starts or stops streaming. | ||
399 | |||
400 | |||
401 | Control Clusters | ||
402 | ================ | ||
403 | |||
404 | By default all controls are independent from the others. But in more | ||
405 | complex scenarios you can get dependencies from one control to another. | ||
406 | In that case you need to 'cluster' them: | ||
407 | |||
408 | struct foo { | ||
409 | struct v4l2_ctrl_handler ctrl_handler; | ||
410 | #define AUDIO_CL_VOLUME (0) | ||
411 | #define AUDIO_CL_MUTE (1) | ||
412 | struct v4l2_ctrl *audio_cluster[2]; | ||
413 | ... | ||
414 | }; | ||
415 | |||
416 | state->audio_cluster[AUDIO_CL_VOLUME] = | ||
417 | v4l2_ctrl_new_std(&state->ctrl_handler, ...); | ||
418 | state->audio_cluster[AUDIO_CL_MUTE] = | ||
419 | v4l2_ctrl_new_std(&state->ctrl_handler, ...); | ||
420 | v4l2_ctrl_cluster(ARRAY_SIZE(state->audio_cluster), state->audio_cluster); | ||
421 | |||
422 | From now on whenever one or more of the controls belonging to the same | ||
423 | cluster is set (or 'gotten', or 'tried'), only the control ops of the first | ||
424 | control ('volume' in this example) is called. You effectively create a new | ||
425 | composite control. Similar to how a 'struct' works in C. | ||
426 | |||
427 | So when s_ctrl is called with V4L2_CID_AUDIO_VOLUME as argument, you should set | ||
428 | all two controls belonging to the audio_cluster: | ||
429 | |||
430 | static int foo_s_ctrl(struct v4l2_ctrl *ctrl) | ||
431 | { | ||
432 | struct foo *state = container_of(ctrl->handler, struct foo, ctrl_handler); | ||
433 | |||
434 | switch (ctrl->id) { | ||
435 | case V4L2_CID_AUDIO_VOLUME: { | ||
436 | struct v4l2_ctrl *mute = ctrl->cluster[AUDIO_CL_MUTE]; | ||
437 | |||
438 | write_reg(0x123, mute->val ? 0 : ctrl->val); | ||
439 | break; | ||
440 | } | ||
441 | case V4L2_CID_CONTRAST: | ||
442 | write_reg(0x456, ctrl->val); | ||
443 | break; | ||
444 | } | ||
445 | return 0; | ||
446 | } | ||
447 | |||
448 | In the example above the following are equivalent for the VOLUME case: | ||
449 | |||
450 | ctrl == ctrl->cluster[AUDIO_CL_VOLUME] == state->audio_cluster[AUDIO_CL_VOLUME] | ||
451 | ctrl->cluster[AUDIO_CL_MUTE] == state->audio_cluster[AUDIO_CL_MUTE] | ||
452 | |||
453 | Note that controls in a cluster may be NULL. For example, if for some | ||
454 | reason mute was never added (because the hardware doesn't support that | ||
455 | particular feature), then mute will be NULL. So in that case we have a | ||
456 | cluster of 2 controls, of which only 1 is actually instantiated. The | ||
457 | only restriction is that the first control of the cluster must always be | ||
458 | present, since that is the 'master' control of the cluster. The master | ||
459 | control is the one that identifies the cluster and that provides the | ||
460 | pointer to the v4l2_ctrl_ops struct that is used for that cluster. | ||
461 | |||
462 | Obviously, all controls in the cluster array must be initialized to either | ||
463 | a valid control or to NULL. | ||
464 | |||
465 | |||
466 | VIDIOC_LOG_STATUS Support | ||
467 | ========================= | ||
468 | |||
469 | This ioctl allow you to dump the current status of a driver to the kernel log. | ||
470 | The v4l2_ctrl_handler_log_status(ctrl_handler, prefix) can be used to dump the | ||
471 | value of the controls owned by the given handler to the log. You can supply a | ||
472 | prefix as well. If the prefix didn't end with a space, then ': ' will be added | ||
473 | for you. | ||
474 | |||
475 | |||
476 | Different Handlers for Different Video Nodes | ||
477 | ============================================ | ||
478 | |||
479 | Usually the V4L2 driver has just one control handler that is global for | ||
480 | all video nodes. But you can also specify different control handlers for | ||
481 | different video nodes. You can do that by manually setting the ctrl_handler | ||
482 | field of struct video_device. | ||
483 | |||
484 | That is no problem if there are no subdevs involved but if there are, then | ||
485 | you need to block the automatic merging of subdev controls to the global | ||
486 | control handler. You do that by simply setting the ctrl_handler field in | ||
487 | struct v4l2_device to NULL. Now v4l2_device_register_subdev() will no longer | ||
488 | merge subdev controls. | ||
489 | |||
490 | After each subdev was added, you will then have to call v4l2_ctrl_add_handler | ||
491 | manually to add the subdev's control handler (sd->ctrl_handler) to the desired | ||
492 | control handler. This control handler may be specific to the video_device or | ||
493 | for a subset of video_device's. For example: the radio device nodes only have | ||
494 | audio controls, while the video and vbi device nodes share the same control | ||
495 | handler for the audio and video controls. | ||
496 | |||
497 | If you want to have one handler (e.g. for a radio device node) have a subset | ||
498 | of another handler (e.g. for a video device node), then you should first add | ||
499 | the controls to the first handler, add the other controls to the second | ||
500 | handler and finally add the first handler to the second. For example: | ||
501 | |||
502 | v4l2_ctrl_new_std(&radio_ctrl_handler, &radio_ops, V4L2_CID_AUDIO_VOLUME, ...); | ||
503 | v4l2_ctrl_new_std(&radio_ctrl_handler, &radio_ops, V4L2_CID_AUDIO_MUTE, ...); | ||
504 | v4l2_ctrl_new_std(&video_ctrl_handler, &video_ops, V4L2_CID_BRIGHTNESS, ...); | ||
505 | v4l2_ctrl_new_std(&video_ctrl_handler, &video_ops, V4L2_CID_CONTRAST, ...); | ||
506 | v4l2_ctrl_add_handler(&video_ctrl_handler, &radio_ctrl_handler); | ||
507 | |||
508 | Or you can add specific controls to a handler: | ||
509 | |||
510 | volume = v4l2_ctrl_new_std(&video_ctrl_handler, &ops, V4L2_CID_AUDIO_VOLUME, ...); | ||
511 | v4l2_ctrl_new_std(&video_ctrl_handler, &ops, V4L2_CID_BRIGHTNESS, ...); | ||
512 | v4l2_ctrl_new_std(&video_ctrl_handler, &ops, V4L2_CID_CONTRAST, ...); | ||
513 | v4l2_ctrl_add_ctrl(&radio_ctrl_handler, volume); | ||
514 | |||
515 | What you should not do is make two identical controls for two handlers. | ||
516 | For example: | ||
517 | |||
518 | v4l2_ctrl_new_std(&radio_ctrl_handler, &radio_ops, V4L2_CID_AUDIO_MUTE, ...); | ||
519 | v4l2_ctrl_new_std(&video_ctrl_handler, &video_ops, V4L2_CID_AUDIO_MUTE, ...); | ||
520 | |||
521 | This would be bad since muting the radio would not change the video mute | ||
522 | control. The rule is to have one control for each hardware 'knob' that you | ||
523 | can twiddle. | ||
524 | |||
525 | |||
526 | Finding Controls | ||
527 | ================ | ||
528 | |||
529 | Normally you have created the controls yourself and you can store the struct | ||
530 | v4l2_ctrl pointer into your own struct. | ||
531 | |||
532 | But sometimes you need to find a control from another handler that you do | ||
533 | not own. For example, if you have to find a volume control from a subdev. | ||
534 | |||
535 | You can do that by calling v4l2_ctrl_find: | ||
536 | |||
537 | struct v4l2_ctrl *volume; | ||
538 | |||
539 | volume = v4l2_ctrl_find(sd->ctrl_handler, V4L2_CID_AUDIO_VOLUME); | ||
540 | |||
541 | Since v4l2_ctrl_find will lock the handler you have to be careful where you | ||
542 | use it. For example, this is not a good idea: | ||
543 | |||
544 | struct v4l2_ctrl_handler ctrl_handler; | ||
545 | |||
546 | v4l2_ctrl_new_std(&ctrl_handler, &video_ops, V4L2_CID_BRIGHTNESS, ...); | ||
547 | v4l2_ctrl_new_std(&ctrl_handler, &video_ops, V4L2_CID_CONTRAST, ...); | ||
548 | |||
549 | ...and in video_ops.s_ctrl: | ||
550 | |||
551 | case V4L2_CID_BRIGHTNESS: | ||
552 | contrast = v4l2_find_ctrl(&ctrl_handler, V4L2_CID_CONTRAST); | ||
553 | ... | ||
554 | |||
555 | When s_ctrl is called by the framework the ctrl_handler.lock is already taken, so | ||
556 | attempting to find another control from the same handler will deadlock. | ||
557 | |||
558 | It is recommended not to use this function from inside the control ops. | ||
559 | |||
560 | |||
561 | Inheriting Controls | ||
562 | =================== | ||
563 | |||
564 | When one control handler is added to another using v4l2_ctrl_add_handler, then | ||
565 | by default all controls from one are merged to the other. But a subdev might | ||
566 | have low-level controls that make sense for some advanced embedded system, but | ||
567 | not when it is used in consumer-level hardware. In that case you want to keep | ||
568 | those low-level controls local to the subdev. You can do this by simply | ||
569 | setting the 'is_private' flag of the control to 1: | ||
570 | |||
571 | static const struct v4l2_ctrl_config ctrl_private = { | ||
572 | .ops = &ctrl_custom_ops, | ||
573 | .id = V4L2_CID_..., | ||
574 | .name = "Some Private Control", | ||
575 | .type = V4L2_CTRL_TYPE_INTEGER, | ||
576 | .max = 15, | ||
577 | .step = 1, | ||
578 | .is_private = 1, | ||
579 | }; | ||
580 | |||
581 | ctrl = v4l2_ctrl_new_custom(&foo->ctrl_handler, &ctrl_private, NULL); | ||
582 | |||
583 | These controls will now be skipped when v4l2_ctrl_add_handler is called. | ||
584 | |||
585 | |||
586 | V4L2_CTRL_TYPE_CTRL_CLASS Controls | ||
587 | ================================== | ||
588 | |||
589 | Controls of this type can be used by GUIs to get the name of the control class. | ||
590 | A fully featured GUI can make a dialog with multiple tabs with each tab | ||
591 | containing the controls belonging to a particular control class. The name of | ||
592 | each tab can be found by querying a special control with ID <control class | 1>. | ||
593 | |||
594 | Drivers do not have to care about this. The framework will automatically add | ||
595 | a control of this type whenever the first control belonging to a new control | ||
596 | class is added. | ||
597 | |||
598 | |||
599 | Differences from the Spec | ||
600 | ========================= | ||
601 | |||
602 | There are a few places where the framework acts slightly differently from the | ||
603 | V4L2 Specification. Those differences are described in this section. We will | ||
604 | have to see whether we need to adjust the spec or not. | ||
605 | |||
606 | 1) It is no longer required to have all controls contained in a | ||
607 | v4l2_ext_control array be from the same control class. The framework will be | ||
608 | able to handle any type of control in the array. You need to set ctrl_class | ||
609 | to 0 in order to enable this. If ctrl_class is non-zero, then it will still | ||
610 | check that all controls belong to that control class. | ||
611 | |||
612 | If you set ctrl_class to 0 and count to 0, then it will only return an error | ||
613 | if there are no controls at all. | ||
614 | |||
615 | 2) Clarified the way error_idx works. For get and set it will be equal to | ||
616 | count if nothing was done yet. If it is less than count then only the controls | ||
617 | up to error_idx-1 were successfully applied. | ||
618 | |||
619 | 3) When attempting to read a button control the framework will return -EACCES | ||
620 | instead of -EINVAL as stated in the spec. It seems to make more sense since | ||
621 | button controls are write-only controls. | ||
622 | |||
623 | 4) Attempting to write to a read-only control will return -EACCES instead of | ||
624 | -EINVAL as the spec says. | ||
625 | |||
626 | 5) The spec does not mention what should happen when you try to set/get a | ||
627 | control class controls. ivtv currently returns -EINVAL (indicating that the | ||
628 | control ID does not exist) while the framework will return -EACCES, which | ||
629 | makes more sense. | ||
630 | |||
631 | |||
632 | Proposals for Extensions | ||
633 | ======================== | ||
634 | |||
635 | Some ideas for future extensions to the spec: | ||
636 | |||
637 | 1) Add a V4L2_CTRL_FLAG_HEX to have values shown as hexadecimal instead of | ||
638 | decimal. Useful for e.g. video_mute_yuv. | ||
639 | |||
640 | 2) It is possible to mark in the controls array which controls have been | ||
641 | successfully written and which failed by for example adding a bit to the | ||
642 | control ID. Not sure if it is worth the effort, though. | ||
643 | |||
644 | 3) Trying to set volatile inactive controls should result in -EACCESS. | ||
645 | |||
646 | 4) Add a new flag to mark volatile controls. Any application that wants | ||
647 | to store the state of the controls can then skip volatile inactive controls. | ||
648 | Currently it is not possible to detect such controls. | ||
diff --git a/Documentation/vm/page-types.c b/Documentation/vm/page-types.c index 66e9358e2144..ccd951fa94ee 100644 --- a/Documentation/vm/page-types.c +++ b/Documentation/vm/page-types.c | |||
@@ -694,7 +694,7 @@ static void usage(void) | |||
694 | #endif | 694 | #endif |
695 | " -l|--list Show page details in ranges\n" | 695 | " -l|--list Show page details in ranges\n" |
696 | " -L|--list-each Show page details one by one\n" | 696 | " -L|--list-each Show page details one by one\n" |
697 | " -N|--no-summary Don't show summay info\n" | 697 | " -N|--no-summary Don't show summary info\n" |
698 | " -X|--hwpoison hwpoison pages\n" | 698 | " -X|--hwpoison hwpoison pages\n" |
699 | " -x|--unpoison unpoison pages\n" | 699 | " -x|--unpoison unpoison pages\n" |
700 | " -h|--help Show this usage message\n" | 700 | " -h|--help Show this usage message\n" |
diff --git a/Documentation/x86/zero-page.txt b/Documentation/x86/zero-page.txt index feb37e177010..cf5437deda81 100644 --- a/Documentation/x86/zero-page.txt +++ b/Documentation/x86/zero-page.txt | |||
@@ -18,6 +18,7 @@ Offset Proto Name Meaning | |||
18 | 080/010 ALL hd0_info hd0 disk parameter, OBSOLETE!! | 18 | 080/010 ALL hd0_info hd0 disk parameter, OBSOLETE!! |
19 | 090/010 ALL hd1_info hd1 disk parameter, OBSOLETE!! | 19 | 090/010 ALL hd1_info hd1 disk parameter, OBSOLETE!! |
20 | 0A0/010 ALL sys_desc_table System description table (struct sys_desc_table) | 20 | 0A0/010 ALL sys_desc_table System description table (struct sys_desc_table) |
21 | 0B0/010 ALL olpc_ofw_header OLPC's OpenFirmware CIF and friends | ||
21 | 140/080 ALL edid_info Video mode setup (struct edid_info) | 22 | 140/080 ALL edid_info Video mode setup (struct edid_info) |
22 | 1C0/020 ALL efi_info EFI 32 information (struct efi_info) | 23 | 1C0/020 ALL efi_info EFI 32 information (struct efi_info) |
23 | 1E0/004 ALL alk_mem_k Alternative mem check, in KB | 24 | 1E0/004 ALL alk_mem_k Alternative mem check, in KB |