diff options
Diffstat (limited to 'Documentation')
68 files changed, 3368 insertions, 933 deletions
diff --git a/Documentation/Changes b/Documentation/Changes index 783ddc3ce4e8..86b86399d61d 100644 --- a/Documentation/Changes +++ b/Documentation/Changes | |||
@@ -139,9 +139,14 @@ You'll probably want to upgrade. | |||
139 | Ksymoops | 139 | Ksymoops |
140 | -------- | 140 | -------- |
141 | 141 | ||
142 | If the unthinkable happens and your kernel oopses, you'll need a 2.4 | 142 | If the unthinkable happens and your kernel oopses, you may need the |
143 | version of ksymoops to decode the report; see REPORTING-BUGS in the | 143 | ksymoops tool to decode it, but in most cases you don't. |
144 | root of the Linux source for more information. | 144 | In the 2.6 kernel it is generally preferred to build the kernel with |
145 | CONFIG_KALLSYMS so that it produces readable dumps that can be used as-is | ||
146 | (this also produces better output than ksymoops). | ||
147 | If for some reason your kernel is not build with CONFIG_KALLSYMS and | ||
148 | you have no way to rebuild and reproduce the Oops with that option, then | ||
149 | you can still decode that Oops with ksymoops. | ||
145 | 150 | ||
146 | Module-Init-Tools | 151 | Module-Init-Tools |
147 | ----------------- | 152 | ----------------- |
diff --git a/Documentation/DocBook/Makefile b/Documentation/DocBook/Makefile index fa3e29ad8a46..1c955883cf58 100644 --- a/Documentation/DocBook/Makefile +++ b/Documentation/DocBook/Makefile | |||
@@ -10,7 +10,7 @@ DOCBOOKS := wanbook.xml z8530book.xml mcabook.xml videobook.xml \ | |||
10 | kernel-hacking.xml kernel-locking.xml deviceiobook.xml \ | 10 | kernel-hacking.xml kernel-locking.xml deviceiobook.xml \ |
11 | procfs-guide.xml writing_usb_driver.xml \ | 11 | procfs-guide.xml writing_usb_driver.xml \ |
12 | sis900.xml kernel-api.xml journal-api.xml lsm.xml usb.xml \ | 12 | sis900.xml kernel-api.xml journal-api.xml lsm.xml usb.xml \ |
13 | gadget.xml libata.xml mtdnand.xml librs.xml | 13 | gadget.xml libata.xml mtdnand.xml librs.xml rapidio.xml |
14 | 14 | ||
15 | ### | 15 | ### |
16 | # The build process is as follows (targets): | 16 | # The build process is as follows (targets): |
@@ -20,6 +20,12 @@ DOCBOOKS := wanbook.xml z8530book.xml mcabook.xml videobook.xml \ | |||
20 | # +--> DIR=file (htmldocs) | 20 | # +--> DIR=file (htmldocs) |
21 | # +--> man/ (mandocs) | 21 | # +--> man/ (mandocs) |
22 | 22 | ||
23 | |||
24 | # for PDF and PS output you can choose between xmlto and docbook-utils tools | ||
25 | PDF_METHOD = $(prefer-db2x) | ||
26 | PS_METHOD = $(prefer-db2x) | ||
27 | |||
28 | |||
23 | ### | 29 | ### |
24 | # The targets that may be used. | 30 | # The targets that may be used. |
25 | .PHONY: xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs | 31 | .PHONY: xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs |
@@ -93,27 +99,39 @@ C-procfs-example = procfs_example.xml | |||
93 | C-procfs-example2 = $(addprefix $(obj)/,$(C-procfs-example)) | 99 | C-procfs-example2 = $(addprefix $(obj)/,$(C-procfs-example)) |
94 | $(obj)/procfs-guide.xml: $(C-procfs-example2) | 100 | $(obj)/procfs-guide.xml: $(C-procfs-example2) |
95 | 101 | ||
96 | ### | 102 | notfoundtemplate = echo "*** You have to install docbook-utils or xmlto ***"; \ |
97 | # Rules to generate postscript, PDF and HTML | 103 | exit 1 |
98 | # db2html creates a directory. Generate a html file used for timestamp | 104 | db2xtemplate = db2TYPE -o $(dir $@) $< |
105 | xmltotemplate = xmlto TYPE $(XMLTOFLAGS) -o $(dir $@) $< | ||
106 | |||
107 | # determine which methods are available | ||
108 | ifeq ($(shell which db2ps >/dev/null 2>&1 && echo found),found) | ||
109 | use-db2x = db2x | ||
110 | prefer-db2x = db2x | ||
111 | else | ||
112 | use-db2x = notfound | ||
113 | prefer-db2x = $(use-xmlto) | ||
114 | endif | ||
115 | ifeq ($(shell which xmlto >/dev/null 2>&1 && echo found),found) | ||
116 | use-xmlto = xmlto | ||
117 | prefer-xmlto = xmlto | ||
118 | else | ||
119 | use-xmlto = notfound | ||
120 | prefer-xmlto = $(use-db2x) | ||
121 | endif | ||
99 | 122 | ||
100 | quiet_cmd_db2ps = XMLTO $@ | 123 | # the commands, generated from the chosen template |
101 | cmd_db2ps = xmlto ps $(XMLTOFLAGS) -o $(dir $@) $< | 124 | quiet_cmd_db2ps = PS $@ |
125 | cmd_db2ps = $(subst TYPE,ps, $($(PS_METHOD)template)) | ||
102 | %.ps : %.xml | 126 | %.ps : %.xml |
103 | @(which xmlto > /dev/null 2>&1) || \ | ||
104 | (echo "*** You need to install xmlto ***"; \ | ||
105 | exit 1) | ||
106 | $(call cmd,db2ps) | 127 | $(call cmd,db2ps) |
107 | 128 | ||
108 | quiet_cmd_db2pdf = XMLTO $@ | 129 | quiet_cmd_db2pdf = PDF $@ |
109 | cmd_db2pdf = xmlto pdf $(XMLTOFLAGS) -o $(dir $@) $< | 130 | cmd_db2pdf = $(subst TYPE,pdf, $($(PDF_METHOD)template)) |
110 | %.pdf : %.xml | 131 | %.pdf : %.xml |
111 | @(which xmlto > /dev/null 2>&1) || \ | ||
112 | (echo "*** You need to install xmlto ***"; \ | ||
113 | exit 1) | ||
114 | $(call cmd,db2pdf) | 132 | $(call cmd,db2pdf) |
115 | 133 | ||
116 | quiet_cmd_db2html = XMLTO $@ | 134 | quiet_cmd_db2html = HTML $@ |
117 | cmd_db2html = xmlto xhtml $(XMLTOFLAGS) -o $(patsubst %.html,%,$@) $< && \ | 135 | cmd_db2html = xmlto xhtml $(XMLTOFLAGS) -o $(patsubst %.html,%,$@) $< && \ |
118 | echo '<a HREF="$(patsubst %.html,%,$(notdir $@))/index.html"> \ | 136 | echo '<a HREF="$(patsubst %.html,%,$(notdir $@))/index.html"> \ |
119 | Goto $(patsubst %.html,%,$(notdir $@))</a><p>' > $@ | 137 | Goto $(patsubst %.html,%,$(notdir $@))</a><p>' > $@ |
@@ -127,7 +145,7 @@ quiet_cmd_db2html = XMLTO $@ | |||
127 | @if [ ! -z "$(PNG-$(basename $(notdir $@)))" ]; then \ | 145 | @if [ ! -z "$(PNG-$(basename $(notdir $@)))" ]; then \ |
128 | cp $(PNG-$(basename $(notdir $@))) $(patsubst %.html,%,$@); fi | 146 | cp $(PNG-$(basename $(notdir $@))) $(patsubst %.html,%,$@); fi |
129 | 147 | ||
130 | quiet_cmd_db2man = XMLTO $@ | 148 | quiet_cmd_db2man = MAN $@ |
131 | cmd_db2man = if grep -q refentry $<; then xmlto man $(XMLTOFLAGS) -o $(obj)/man $< ; gzip -f $(obj)/man/*.9; fi | 149 | cmd_db2man = if grep -q refentry $<; then xmlto man $(XMLTOFLAGS) -o $(obj)/man $< ; gzip -f $(obj)/man/*.9; fi |
132 | %.9 : %.xml | 150 | %.9 : %.xml |
133 | @(which xmlto > /dev/null 2>&1) || \ | 151 | @(which xmlto > /dev/null 2>&1) || \ |
diff --git a/Documentation/DocBook/journal-api.tmpl b/Documentation/DocBook/journal-api.tmpl index 341aaa4ce481..2077f9a28c19 100644 --- a/Documentation/DocBook/journal-api.tmpl +++ b/Documentation/DocBook/journal-api.tmpl | |||
@@ -306,7 +306,7 @@ an example. | |||
306 | </para> | 306 | </para> |
307 | <sect1><title>Journal Level</title> | 307 | <sect1><title>Journal Level</title> |
308 | !Efs/jbd/journal.c | 308 | !Efs/jbd/journal.c |
309 | !Efs/jbd/recovery.c | 309 | !Ifs/jbd/recovery.c |
310 | </sect1> | 310 | </sect1> |
311 | <sect1><title>Transasction Level</title> | 311 | <sect1><title>Transasction Level</title> |
312 | !Efs/jbd/transaction.c | 312 | !Efs/jbd/transaction.c |
diff --git a/Documentation/DocBook/kernel-api.tmpl b/Documentation/DocBook/kernel-api.tmpl index ec474e5a25ed..0519c9dc0065 100644 --- a/Documentation/DocBook/kernel-api.tmpl +++ b/Documentation/DocBook/kernel-api.tmpl | |||
@@ -68,9 +68,7 @@ X!Iinclude/linux/kobject.h | |||
68 | 68 | ||
69 | <sect1><title>Kernel utility functions</title> | 69 | <sect1><title>Kernel utility functions</title> |
70 | !Iinclude/linux/kernel.h | 70 | !Iinclude/linux/kernel.h |
71 | <!-- This needs to clean up to make kernel-doc happy | 71 | !Ekernel/printk.c |
72 | X!Ekernel/printk.c | ||
73 | --> | ||
74 | !Ekernel/panic.c | 72 | !Ekernel/panic.c |
75 | !Ekernel/sys.c | 73 | !Ekernel/sys.c |
76 | !Ekernel/rcupdate.c | 74 | !Ekernel/rcupdate.c |
@@ -118,7 +116,7 @@ X!Ilib/string.c | |||
118 | </sect1> | 116 | </sect1> |
119 | <sect1><title>User Space Memory Access</title> | 117 | <sect1><title>User Space Memory Access</title> |
120 | !Iinclude/asm-i386/uaccess.h | 118 | !Iinclude/asm-i386/uaccess.h |
121 | !Iarch/i386/lib/usercopy.c | 119 | !Earch/i386/lib/usercopy.c |
122 | </sect1> | 120 | </sect1> |
123 | <sect1><title>More Memory Management Functions</title> | 121 | <sect1><title>More Memory Management Functions</title> |
124 | !Iinclude/linux/rmap.h | 122 | !Iinclude/linux/rmap.h |
@@ -174,7 +172,6 @@ X!Ilib/string.c | |||
174 | <title>The Linux VFS</title> | 172 | <title>The Linux VFS</title> |
175 | <sect1><title>The Filesystem types</title> | 173 | <sect1><title>The Filesystem types</title> |
176 | !Iinclude/linux/fs.h | 174 | !Iinclude/linux/fs.h |
177 | !Einclude/linux/fs.h | ||
178 | </sect1> | 175 | </sect1> |
179 | <sect1><title>The Directory Cache</title> | 176 | <sect1><title>The Directory Cache</title> |
180 | !Efs/dcache.c | 177 | !Efs/dcache.c |
@@ -266,7 +263,7 @@ X!Ekernel/module.c | |||
266 | <chapter id="hardware"> | 263 | <chapter id="hardware"> |
267 | <title>Hardware Interfaces</title> | 264 | <title>Hardware Interfaces</title> |
268 | <sect1><title>Interrupt Handling</title> | 265 | <sect1><title>Interrupt Handling</title> |
269 | !Ikernel/irq/manage.c | 266 | !Ekernel/irq/manage.c |
270 | </sect1> | 267 | </sect1> |
271 | 268 | ||
272 | <sect1><title>Resources Management</title> | 269 | <sect1><title>Resources Management</title> |
@@ -501,7 +498,7 @@ KAO --> | |||
501 | !Edrivers/video/modedb.c | 498 | !Edrivers/video/modedb.c |
502 | </sect1> | 499 | </sect1> |
503 | <sect1><title>Frame Buffer Macintosh Video Mode Database</title> | 500 | <sect1><title>Frame Buffer Macintosh Video Mode Database</title> |
504 | !Idrivers/video/macmodes.c | 501 | !Edrivers/video/macmodes.c |
505 | </sect1> | 502 | </sect1> |
506 | <sect1><title>Frame Buffer Fonts</title> | 503 | <sect1><title>Frame Buffer Fonts</title> |
507 | <para> | 504 | <para> |
diff --git a/Documentation/DocBook/rapidio.tmpl b/Documentation/DocBook/rapidio.tmpl new file mode 100644 index 000000000000..1becf27ba27e --- /dev/null +++ b/Documentation/DocBook/rapidio.tmpl | |||
@@ -0,0 +1,160 @@ | |||
1 | <?xml version="1.0" encoding="UTF-8"?> | ||
2 | <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" | ||
3 | "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [ | ||
4 | <!ENTITY rapidio SYSTEM "rapidio.xml"> | ||
5 | ]> | ||
6 | |||
7 | <book id="RapidIO-Guide"> | ||
8 | <bookinfo> | ||
9 | <title>RapidIO Subsystem Guide</title> | ||
10 | |||
11 | <authorgroup> | ||
12 | <author> | ||
13 | <firstname>Matt</firstname> | ||
14 | <surname>Porter</surname> | ||
15 | <affiliation> | ||
16 | <address> | ||
17 | <email>mporter@kernel.crashing.org</email> | ||
18 | <email>mporter@mvista.com</email> | ||
19 | </address> | ||
20 | </affiliation> | ||
21 | </author> | ||
22 | </authorgroup> | ||
23 | |||
24 | <copyright> | ||
25 | <year>2005</year> | ||
26 | <holder>MontaVista Software, Inc.</holder> | ||
27 | </copyright> | ||
28 | |||
29 | <legalnotice> | ||
30 | <para> | ||
31 | This documentation is free software; you can redistribute | ||
32 | it and/or modify it under the terms of the GNU General Public | ||
33 | License version 2 as published by the Free Software Foundation. | ||
34 | </para> | ||
35 | |||
36 | <para> | ||
37 | This program is distributed in the hope that it will be | ||
38 | useful, but WITHOUT ANY WARRANTY; without even the implied | ||
39 | warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | ||
40 | See the GNU General Public License for more details. | ||
41 | </para> | ||
42 | |||
43 | <para> | ||
44 | You should have received a copy of the GNU General Public | ||
45 | License along with this program; if not, write to the Free | ||
46 | Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, | ||
47 | MA 02111-1307 USA | ||
48 | </para> | ||
49 | |||
50 | <para> | ||
51 | For more details see the file COPYING in the source | ||
52 | distribution of Linux. | ||
53 | </para> | ||
54 | </legalnotice> | ||
55 | </bookinfo> | ||
56 | |||
57 | <toc></toc> | ||
58 | |||
59 | <chapter id="intro"> | ||
60 | <title>Introduction</title> | ||
61 | <para> | ||
62 | RapidIO is a high speed switched fabric interconnect with | ||
63 | features aimed at the embedded market. RapidIO provides | ||
64 | support for memory-mapped I/O as well as message-based | ||
65 | transactions over the switched fabric network. RapidIO has | ||
66 | a standardized discovery mechanism not unlike the PCI bus | ||
67 | standard that allows simple detection of devices in a | ||
68 | network. | ||
69 | </para> | ||
70 | <para> | ||
71 | This documentation is provided for developers intending | ||
72 | to support RapidIO on new architectures, write new drivers, | ||
73 | or to understand the subsystem internals. | ||
74 | </para> | ||
75 | </chapter> | ||
76 | |||
77 | <chapter id="bugs"> | ||
78 | <title>Known Bugs and Limitations</title> | ||
79 | |||
80 | <sect1> | ||
81 | <title>Bugs</title> | ||
82 | <para>None. ;)</para> | ||
83 | </sect1> | ||
84 | <sect1> | ||
85 | <title>Limitations</title> | ||
86 | <para> | ||
87 | <orderedlist> | ||
88 | <listitem><para>Access/management of RapidIO memory regions is not supported</para></listitem> | ||
89 | <listitem><para>Multiple host enumeration is not supported</para></listitem> | ||
90 | </orderedlist> | ||
91 | </para> | ||
92 | </sect1> | ||
93 | </chapter> | ||
94 | |||
95 | <chapter id="drivers"> | ||
96 | <title>RapidIO driver interface</title> | ||
97 | <para> | ||
98 | Drivers are provided a set of calls in order | ||
99 | to interface with the subsystem to gather info | ||
100 | on devices, request/map memory region resources, | ||
101 | and manage mailboxes/doorbells. | ||
102 | </para> | ||
103 | <sect1> | ||
104 | <title>Functions</title> | ||
105 | !Iinclude/linux/rio_drv.h | ||
106 | !Edrivers/rapidio/rio-driver.c | ||
107 | !Edrivers/rapidio/rio.c | ||
108 | </sect1> | ||
109 | </chapter> | ||
110 | |||
111 | <chapter id="internals"> | ||
112 | <title>Internals</title> | ||
113 | |||
114 | <para> | ||
115 | This chapter contains the autogenerated documentation of the RapidIO | ||
116 | subsystem. | ||
117 | </para> | ||
118 | |||
119 | <sect1><title>Structures</title> | ||
120 | !Iinclude/linux/rio.h | ||
121 | </sect1> | ||
122 | <sect1><title>Enumeration and Discovery</title> | ||
123 | !Idrivers/rapidio/rio-scan.c | ||
124 | </sect1> | ||
125 | <sect1><title>Driver functionality</title> | ||
126 | !Idrivers/rapidio/rio.c | ||
127 | !Idrivers/rapidio/rio-access.c | ||
128 | </sect1> | ||
129 | <sect1><title>Device model support</title> | ||
130 | !Idrivers/rapidio/rio-driver.c | ||
131 | </sect1> | ||
132 | <sect1><title>Sysfs support</title> | ||
133 | !Idrivers/rapidio/rio-sysfs.c | ||
134 | </sect1> | ||
135 | <sect1><title>PPC32 support</title> | ||
136 | !Iarch/ppc/kernel/rio.c | ||
137 | !Earch/ppc/syslib/ppc85xx_rio.c | ||
138 | !Iarch/ppc/syslib/ppc85xx_rio.c | ||
139 | </sect1> | ||
140 | </chapter> | ||
141 | |||
142 | <chapter id="credits"> | ||
143 | <title>Credits</title> | ||
144 | <para> | ||
145 | The following people have contributed to the RapidIO | ||
146 | subsystem directly or indirectly: | ||
147 | <orderedlist> | ||
148 | <listitem><para>Matt Porter<email>mporter@kernel.crashing.org</email></para></listitem> | ||
149 | <listitem><para>Randy Vinson<email>rvinson@mvista.com</email></para></listitem> | ||
150 | <listitem><para>Dan Malek<email>dan@embeddedalley.com</email></para></listitem> | ||
151 | </orderedlist> | ||
152 | </para> | ||
153 | <para> | ||
154 | The following people have contributed to this document: | ||
155 | <orderedlist> | ||
156 | <listitem><para>Matt Porter<email>mporter@kernel.crashing.org</email></para></listitem> | ||
157 | </orderedlist> | ||
158 | </para> | ||
159 | </chapter> | ||
160 | </book> | ||
diff --git a/Documentation/DocBook/stylesheet.xsl b/Documentation/DocBook/stylesheet.xsl index 64be9f7ee3bb..3ccce886c349 100644 --- a/Documentation/DocBook/stylesheet.xsl +++ b/Documentation/DocBook/stylesheet.xsl | |||
@@ -3,4 +3,5 @@ | |||
3 | <param name="chunk.quietly">1</param> | 3 | <param name="chunk.quietly">1</param> |
4 | <param name="funcsynopsis.style">ansi</param> | 4 | <param name="funcsynopsis.style">ansi</param> |
5 | <param name="funcsynopsis.tabular.threshold">80</param> | 5 | <param name="funcsynopsis.tabular.threshold">80</param> |
6 | <!-- <param name="paper.type">A4</param> --> | ||
6 | </stylesheet> | 7 | </stylesheet> |
diff --git a/Documentation/MSI-HOWTO.txt b/Documentation/MSI-HOWTO.txt index 63edc5f847c4..3ec6c720b016 100644 --- a/Documentation/MSI-HOWTO.txt +++ b/Documentation/MSI-HOWTO.txt | |||
@@ -10,14 +10,22 @@ | |||
10 | This guide describes the basics of Message Signaled Interrupts (MSI), | 10 | This guide describes the basics of Message Signaled Interrupts (MSI), |
11 | the advantages of using MSI over traditional interrupt mechanisms, | 11 | the advantages of using MSI over traditional interrupt mechanisms, |
12 | and how to enable your driver to use MSI or MSI-X. Also included is | 12 | and how to enable your driver to use MSI or MSI-X. Also included is |
13 | a Frequently Asked Questions. | 13 | a Frequently Asked Questions (FAQ) section. |
14 | |||
15 | 1.1 Terminology | ||
16 | |||
17 | PCI devices can be single-function or multi-function. In either case, | ||
18 | when this text talks about enabling or disabling MSI on a "device | ||
19 | function," it is referring to one specific PCI device and function and | ||
20 | not to all functions on a PCI device (unless the PCI device has only | ||
21 | one function). | ||
14 | 22 | ||
15 | 2. Copyright 2003 Intel Corporation | 23 | 2. Copyright 2003 Intel Corporation |
16 | 24 | ||
17 | 3. What is MSI/MSI-X? | 25 | 3. What is MSI/MSI-X? |
18 | 26 | ||
19 | Message Signaled Interrupt (MSI), as described in the PCI Local Bus | 27 | Message Signaled Interrupt (MSI), as described in the PCI Local Bus |
20 | Specification Revision 2.3 or latest, is an optional feature, and a | 28 | Specification Revision 2.3 or later, is an optional feature, and a |
21 | required feature for PCI Express devices. MSI enables a device function | 29 | required feature for PCI Express devices. MSI enables a device function |
22 | to request service by sending an Inbound Memory Write on its PCI bus to | 30 | to request service by sending an Inbound Memory Write on its PCI bus to |
23 | the FSB as a Message Signal Interrupt transaction. Because MSI is | 31 | the FSB as a Message Signal Interrupt transaction. Because MSI is |
@@ -27,7 +35,7 @@ supported. | |||
27 | 35 | ||
28 | A PCI device that supports MSI must also support pin IRQ assertion | 36 | A PCI device that supports MSI must also support pin IRQ assertion |
29 | interrupt mechanism to provide backward compatibility for systems that | 37 | interrupt mechanism to provide backward compatibility for systems that |
30 | do not support MSI. In Systems, which support MSI, the bus driver is | 38 | do not support MSI. In systems which support MSI, the bus driver is |
31 | responsible for initializing the message address and message data of | 39 | responsible for initializing the message address and message data of |
32 | the device function's MSI/MSI-X capability structure during device | 40 | the device function's MSI/MSI-X capability structure during device |
33 | initial configuration. | 41 | initial configuration. |
@@ -61,17 +69,17 @@ over the MSI capability structure as described below. | |||
61 | 69 | ||
62 | - MSI and MSI-X both support per-vector masking. Per-vector | 70 | - MSI and MSI-X both support per-vector masking. Per-vector |
63 | masking is an optional extension of MSI but a required | 71 | masking is an optional extension of MSI but a required |
64 | feature for MSI-X. Per-vector masking provides the kernel | 72 | feature for MSI-X. Per-vector masking provides the kernel the |
65 | the ability to mask/unmask MSI when servicing its software | 73 | ability to mask/unmask a single MSI while running its |
66 | interrupt service routing handler. If per-vector masking is | 74 | interrupt service routine. If per-vector masking is |
67 | not supported, then the device driver should provide the | 75 | not supported, then the device driver should provide the |
68 | hardware/software synchronization to ensure that the device | 76 | hardware/software synchronization to ensure that the device |
69 | generates MSI when the driver wants it to do so. | 77 | generates MSI when the driver wants it to do so. |
70 | 78 | ||
71 | 4. Why use MSI? | 79 | 4. Why use MSI? |
72 | 80 | ||
73 | As a benefit the simplification of board design, MSI allows board | 81 | As a benefit to the simplification of board design, MSI allows board |
74 | designers to remove out of band interrupt routing. MSI is another | 82 | designers to remove out-of-band interrupt routing. MSI is another |
75 | step towards a legacy-free environment. | 83 | step towards a legacy-free environment. |
76 | 84 | ||
77 | Due to increasing pressure on chipset and processor packages to | 85 | Due to increasing pressure on chipset and processor packages to |
@@ -87,7 +95,7 @@ support. As a result, the PCI Express technology requires MSI | |||
87 | support for better interrupt performance. | 95 | support for better interrupt performance. |
88 | 96 | ||
89 | Using MSI enables the device functions to support two or more | 97 | Using MSI enables the device functions to support two or more |
90 | vectors, which can be configured to target different CPU's to | 98 | vectors, which can be configured to target different CPUs to |
91 | increase scalability. | 99 | increase scalability. |
92 | 100 | ||
93 | 5. Configuring a driver to use MSI/MSI-X | 101 | 5. Configuring a driver to use MSI/MSI-X |
@@ -119,13 +127,13 @@ pci_enable_msi() explicitly. | |||
119 | 127 | ||
120 | int pci_enable_msi(struct pci_dev *dev) | 128 | int pci_enable_msi(struct pci_dev *dev) |
121 | 129 | ||
122 | With this new API, any existing device driver, which like to have | 130 | With this new API, a device driver that wants to have MSI |
123 | MSI enabled on its device function, must call this API to enable MSI | 131 | enabled on its device function must call this API to enable MSI. |
124 | A successful call will initialize the MSI capability structure | 132 | A successful call will initialize the MSI capability structure |
125 | with ONE vector, regardless of whether a device function is | 133 | with ONE vector, regardless of whether a device function is |
126 | capable of supporting multiple messages. This vector replaces the | 134 | capable of supporting multiple messages. This vector replaces the |
127 | pre-assigned dev->irq with a new MSI vector. To avoid the conflict | 135 | pre-assigned dev->irq with a new MSI vector. To avoid a conflict |
128 | of new assigned vector with existing pre-assigned vector requires | 136 | of the new assigned vector with existing pre-assigned vector requires |
129 | a device driver to call this API before calling request_irq(). | 137 | a device driver to call this API before calling request_irq(). |
130 | 138 | ||
131 | 5.2.2 API pci_disable_msi | 139 | 5.2.2 API pci_disable_msi |
@@ -137,14 +145,14 @@ when a device driver is unloading. This API restores dev->irq with | |||
137 | the pre-assigned IOAPIC vector and switches a device's interrupt | 145 | the pre-assigned IOAPIC vector and switches a device's interrupt |
138 | mode to PCI pin-irq assertion/INTx emulation mode. | 146 | mode to PCI pin-irq assertion/INTx emulation mode. |
139 | 147 | ||
140 | Note that a device driver should always call free_irq() on MSI vector | 148 | Note that a device driver should always call free_irq() on the MSI vector |
141 | it has done request_irq() on before calling this API. Failure to do | 149 | that it has done request_irq() on before calling this API. Failure to do |
142 | so results a BUG_ON() and a device will be left with MSI enabled and | 150 | so results in a BUG_ON() and a device will be left with MSI enabled and |
143 | leaks its vector. | 151 | leaks its vector. |
144 | 152 | ||
145 | 5.2.3 MSI mode vs. legacy mode diagram | 153 | 5.2.3 MSI mode vs. legacy mode diagram |
146 | 154 | ||
147 | The below diagram shows the events, which switches the interrupt | 155 | The below diagram shows the events which switch the interrupt |
148 | mode on the MSI-capable device function between MSI mode and | 156 | mode on the MSI-capable device function between MSI mode and |
149 | PIN-IRQ assertion mode. | 157 | PIN-IRQ assertion mode. |
150 | 158 | ||
@@ -155,9 +163,9 @@ PIN-IRQ assertion mode. | |||
155 | ------------ pci_disable_msi ------------------------ | 163 | ------------ pci_disable_msi ------------------------ |
156 | 164 | ||
157 | 165 | ||
158 | Figure 1.0 MSI Mode vs. Legacy Mode | 166 | Figure 1. MSI Mode vs. Legacy Mode |
159 | 167 | ||
160 | In Figure 1.0, a device operates by default in legacy mode. Legacy | 168 | In Figure 1, a device operates by default in legacy mode. Legacy |
161 | in this context means PCI pin-irq assertion or PCI-Express INTx | 169 | in this context means PCI pin-irq assertion or PCI-Express INTx |
162 | emulation. A successful MSI request (using pci_enable_msi()) switches | 170 | emulation. A successful MSI request (using pci_enable_msi()) switches |
163 | a device's interrupt mode to MSI mode. A pre-assigned IOAPIC vector | 171 | a device's interrupt mode to MSI mode. A pre-assigned IOAPIC vector |
@@ -166,11 +174,11 @@ assigned MSI vector will replace dev->irq. | |||
166 | 174 | ||
167 | To return back to its default mode, a device driver should always call | 175 | To return back to its default mode, a device driver should always call |
168 | pci_disable_msi() to undo the effect of pci_enable_msi(). Note that a | 176 | pci_disable_msi() to undo the effect of pci_enable_msi(). Note that a |
169 | device driver should always call free_irq() on MSI vector it has done | 177 | device driver should always call free_irq() on the MSI vector it has |
170 | request_irq() on before calling pci_disable_msi(). Failure to do so | 178 | done request_irq() on before calling pci_disable_msi(). Failure to do |
171 | results a BUG_ON() and a device will be left with MSI enabled and | 179 | so results in a BUG_ON() and a device will be left with MSI enabled and |
172 | leaks its vector. Otherwise, the PCI subsystem restores a device's | 180 | leaks its vector. Otherwise, the PCI subsystem restores a device's |
173 | dev->irq with a pre-assigned IOAPIC vector and marks released | 181 | dev->irq with a pre-assigned IOAPIC vector and marks the released |
174 | MSI vector as unused. | 182 | MSI vector as unused. |
175 | 183 | ||
176 | Once being marked as unused, there is no guarantee that the PCI | 184 | Once being marked as unused, there is no guarantee that the PCI |
@@ -178,8 +186,8 @@ subsystem will reserve this MSI vector for a device. Depending on | |||
178 | the availability of current PCI vector resources and the number of | 186 | the availability of current PCI vector resources and the number of |
179 | MSI/MSI-X requests from other drivers, this MSI may be re-assigned. | 187 | MSI/MSI-X requests from other drivers, this MSI may be re-assigned. |
180 | 188 | ||
181 | For the case where the PCI subsystem re-assigned this MSI vector | 189 | For the case where the PCI subsystem re-assigns this MSI vector to |
182 | another driver, a request to switching back to MSI mode may result | 190 | another driver, a request to switch back to MSI mode may result |
183 | in being assigned a different MSI vector or a failure if no more | 191 | in being assigned a different MSI vector or a failure if no more |
184 | vectors are available. | 192 | vectors are available. |
185 | 193 | ||
@@ -208,12 +216,12 @@ Unlike the function pci_enable_msi(), the function pci_enable_msix() | |||
208 | does not replace the pre-assigned IOAPIC dev->irq with a new MSI | 216 | does not replace the pre-assigned IOAPIC dev->irq with a new MSI |
209 | vector because the PCI subsystem writes the 1:1 vector-to-entry mapping | 217 | vector because the PCI subsystem writes the 1:1 vector-to-entry mapping |
210 | into the field vector of each element contained in a second argument. | 218 | into the field vector of each element contained in a second argument. |
211 | Note that the pre-assigned IO-APIC dev->irq is valid only if the device | 219 | Note that the pre-assigned IOAPIC dev->irq is valid only if the device |
212 | operates in PIN-IRQ assertion mode. In MSI-X mode, any attempt of | 220 | operates in PIN-IRQ assertion mode. In MSI-X mode, any attempt at |
213 | using dev->irq by the device driver to request for interrupt service | 221 | using dev->irq by the device driver to request for interrupt service |
214 | may result unpredictabe behavior. | 222 | may result unpredictabe behavior. |
215 | 223 | ||
216 | For each MSI-X vector granted, a device driver is responsible to call | 224 | For each MSI-X vector granted, a device driver is responsible for calling |
217 | other functions like request_irq(), enable_irq(), etc. to enable | 225 | other functions like request_irq(), enable_irq(), etc. to enable |
218 | this vector with its corresponding interrupt service handler. It is | 226 | this vector with its corresponding interrupt service handler. It is |
219 | a device driver's choice to assign all vectors with the same | 227 | a device driver's choice to assign all vectors with the same |
@@ -224,13 +232,13 @@ service handler. | |||
224 | 232 | ||
225 | The PCI 3.0 specification has implementation notes that MMIO address | 233 | The PCI 3.0 specification has implementation notes that MMIO address |
226 | space for a device's MSI-X structure should be isolated so that the | 234 | space for a device's MSI-X structure should be isolated so that the |
227 | software system can set different page for controlling accesses to | 235 | software system can set different pages for controlling accesses to the |
228 | the MSI-X structure. The implementation of MSI patch requires the PCI | 236 | MSI-X structure. The implementation of MSI support requires the PCI |
229 | subsystem, not a device driver, to maintain full control of the MSI-X | 237 | subsystem, not a device driver, to maintain full control of the MSI-X |
230 | table/MSI-X PBA and MMIO address space of the MSI-X table/MSI-X PBA. | 238 | table/MSI-X PBA (Pending Bit Array) and MMIO address space of the MSI-X |
231 | A device driver is prohibited from requesting the MMIO address space | 239 | table/MSI-X PBA. A device driver is prohibited from requesting the MMIO |
232 | of the MSI-X table/MSI-X PBA. Otherwise, the PCI subsystem will fail | 240 | address space of the MSI-X table/MSI-X PBA. Otherwise, the PCI subsystem |
233 | enabling MSI-X on its hardware device when it calls the function | 241 | will fail enabling MSI-X on its hardware device when it calls the function |
234 | pci_enable_msix(). | 242 | pci_enable_msix(). |
235 | 243 | ||
236 | 5.3.2 Handling MSI-X allocation | 244 | 5.3.2 Handling MSI-X allocation |
@@ -274,9 +282,9 @@ For the case where fewer MSI-X vectors are allocated to a function | |||
274 | than requested, the function pci_enable_msix() will return the | 282 | than requested, the function pci_enable_msix() will return the |
275 | maximum number of MSI-X vectors available to the caller. A device | 283 | maximum number of MSI-X vectors available to the caller. A device |
276 | driver may re-send its request with fewer or equal vectors indicated | 284 | driver may re-send its request with fewer or equal vectors indicated |
277 | in a return. For example, if a device driver requests 5 vectors, but | 285 | in the return. For example, if a device driver requests 5 vectors, but |
278 | the number of available vectors is 3 vectors, a value of 3 will be a | 286 | the number of available vectors is 3 vectors, a value of 3 will be |
279 | return as a result of pci_enable_msix() call. A function could be | 287 | returned as a result of pci_enable_msix() call. A function could be |
280 | designed for its driver to use only 3 MSI-X table entries as | 288 | designed for its driver to use only 3 MSI-X table entries as |
281 | different combinations as ABC--, A-B-C, A--CB, etc. Note that this | 289 | different combinations as ABC--, A-B-C, A--CB, etc. Note that this |
282 | patch does not support multiple entries with the same vector. Such | 290 | patch does not support multiple entries with the same vector. Such |
@@ -285,49 +293,46 @@ as ABBCC, AABCC, BCCBA, etc will result as a failure by the function | |||
285 | pci_enable_msix(). Below are the reasons why supporting multiple | 293 | pci_enable_msix(). Below are the reasons why supporting multiple |
286 | entries with the same vector is an undesirable solution. | 294 | entries with the same vector is an undesirable solution. |
287 | 295 | ||
288 | - The PCI subsystem can not determine which entry, which | 296 | - The PCI subsystem cannot determine the entry that |
289 | generated the message, to mask/unmask MSI while handling | 297 | generated the message to mask/unmask MSI while handling |
290 | software driver ISR. Attempting to walk through all MSI-X | 298 | software driver ISR. Attempting to walk through all MSI-X |
291 | table entries (2048 max) to mask/unmask any match vector | 299 | table entries (2048 max) to mask/unmask any match vector |
292 | is an undesirable solution. | 300 | is an undesirable solution. |
293 | 301 | ||
294 | - Walk through all MSI-X table entries (2048 max) to handle | 302 | - Walking through all MSI-X table entries (2048 max) to handle |
295 | SMP affinity of any match vector is an undesirable solution. | 303 | SMP affinity of any match vector is an undesirable solution. |
296 | 304 | ||
297 | 5.3.4 API pci_enable_msix | 305 | 5.3.4 API pci_enable_msix |
298 | 306 | ||
299 | int pci_enable_msix(struct pci_dev *dev, u32 *entries, int nvec) | 307 | int pci_enable_msix(struct pci_dev *dev, struct msix_entry *entries, int nvec) |
300 | 308 | ||
301 | This API enables a device driver to request the PCI subsystem | 309 | This API enables a device driver to request the PCI subsystem |
302 | for enabling MSI-X messages on its hardware device. Depending on | 310 | to enable MSI-X messages on its hardware device. Depending on |
303 | the availability of PCI vectors resources, the PCI subsystem enables | 311 | the availability of PCI vectors resources, the PCI subsystem enables |
304 | either all or nothing. | 312 | either all or none of the requested vectors. |
305 | 313 | ||
306 | Argument dev points to the device (pci_dev) structure. | 314 | Argument 'dev' points to the device (pci_dev) structure. |
307 | 315 | ||
308 | Argument entries is a pointer of unsigned integer type. The number of | 316 | Argument 'entries' is a pointer to an array of msix_entry structs. |
309 | elements is indicated in argument nvec. The content of each element | 317 | The number of entries is indicated in argument 'nvec'. |
310 | will be mapped to the following struct defined in /driver/pci/msi.h. | 318 | struct msix_entry is defined in /driver/pci/msi.h: |
311 | 319 | ||
312 | struct msix_entry { | 320 | struct msix_entry { |
313 | u16 vector; /* kernel uses to write alloc vector */ | 321 | u16 vector; /* kernel uses to write alloc vector */ |
314 | u16 entry; /* driver uses to specify entry */ | 322 | u16 entry; /* driver uses to specify entry */ |
315 | }; | 323 | }; |
316 | 324 | ||
317 | A device driver is responsible for initializing the field entry of | 325 | A device driver is responsible for initializing the field 'entry' of |
318 | each element with unique entry supported by MSI-X table. Otherwise, | 326 | each element with a unique entry supported by MSI-X table. Otherwise, |
319 | -EINVAL will be returned as a result. A successful return of zero | 327 | -EINVAL will be returned as a result. A successful return of zero |
320 | indicates the PCI subsystem completes initializing each of requested | 328 | indicates the PCI subsystem completed initializing each of the requested |
321 | entries of the MSI-X table with message address and message data. | 329 | entries of the MSI-X table with message address and message data. |
322 | Last but not least, the PCI subsystem will write the 1:1 | 330 | Last but not least, the PCI subsystem will write the 1:1 |
323 | vector-to-entry mapping into the field vector of each element. A | 331 | vector-to-entry mapping into the field 'vector' of each element. A |
324 | device driver is responsible of keeping track of allocated MSI-X | 332 | device driver is responsible for keeping track of allocated MSI-X |
325 | vectors in its internal data structure. | 333 | vectors in its internal data structure. |
326 | 334 | ||
327 | Argument nvec is an integer indicating the number of messages | 335 | A return of zero indicates that the number of MSI-X vectors was |
328 | requested. | ||
329 | |||
330 | A return of zero indicates that the number of MSI-X vectors is | ||
331 | successfully allocated. A return of greater than zero indicates | 336 | successfully allocated. A return of greater than zero indicates |
332 | MSI-X vector shortage. Or a return of less than zero indicates | 337 | MSI-X vector shortage. Or a return of less than zero indicates |
333 | a failure. This failure may be a result of duplicate entries | 338 | a failure. This failure may be a result of duplicate entries |
@@ -341,12 +346,12 @@ void pci_disable_msix(struct pci_dev *dev) | |||
341 | This API should always be used to undo the effect of pci_enable_msix() | 346 | This API should always be used to undo the effect of pci_enable_msix() |
342 | when a device driver is unloading. Note that a device driver should | 347 | when a device driver is unloading. Note that a device driver should |
343 | always call free_irq() on all MSI-X vectors it has done request_irq() | 348 | always call free_irq() on all MSI-X vectors it has done request_irq() |
344 | on before calling this API. Failure to do so results a BUG_ON() and | 349 | on before calling this API. Failure to do so results in a BUG_ON() and |
345 | a device will be left with MSI-X enabled and leaks its vectors. | 350 | a device will be left with MSI-X enabled and leaks its vectors. |
346 | 351 | ||
347 | 5.3.6 MSI-X mode vs. legacy mode diagram | 352 | 5.3.6 MSI-X mode vs. legacy mode diagram |
348 | 353 | ||
349 | The below diagram shows the events, which switches the interrupt | 354 | The below diagram shows the events which switch the interrupt |
350 | mode on the MSI-X capable device function between MSI-X mode and | 355 | mode on the MSI-X capable device function between MSI-X mode and |
351 | PIN-IRQ assertion mode (legacy). | 356 | PIN-IRQ assertion mode (legacy). |
352 | 357 | ||
@@ -356,22 +361,22 @@ PIN-IRQ assertion mode (legacy). | |||
356 | | | ===============> | | | 361 | | | ===============> | | |
357 | ------------ pci_disable_msix ------------------------ | 362 | ------------ pci_disable_msix ------------------------ |
358 | 363 | ||
359 | Figure 2.0 MSI-X Mode vs. Legacy Mode | 364 | Figure 2. MSI-X Mode vs. Legacy Mode |
360 | 365 | ||
361 | In Figure 2.0, a device operates by default in legacy mode. A | 366 | In Figure 2, a device operates by default in legacy mode. A |
362 | successful MSI-X request (using pci_enable_msix()) switches a | 367 | successful MSI-X request (using pci_enable_msix()) switches a |
363 | device's interrupt mode to MSI-X mode. A pre-assigned IOAPIC vector | 368 | device's interrupt mode to MSI-X mode. A pre-assigned IOAPIC vector |
364 | stored in dev->irq will be saved by the PCI subsystem; however, | 369 | stored in dev->irq will be saved by the PCI subsystem; however, |
365 | unlike MSI mode, the PCI subsystem will not replace dev->irq with | 370 | unlike MSI mode, the PCI subsystem will not replace dev->irq with |
366 | assigned MSI-X vector because the PCI subsystem already writes the 1:1 | 371 | assigned MSI-X vector because the PCI subsystem already writes the 1:1 |
367 | vector-to-entry mapping into the field vector of each element | 372 | vector-to-entry mapping into the field 'vector' of each element |
368 | specified in second argument. | 373 | specified in second argument. |
369 | 374 | ||
370 | To return back to its default mode, a device driver should always call | 375 | To return back to its default mode, a device driver should always call |
371 | pci_disable_msix() to undo the effect of pci_enable_msix(). Note that | 376 | pci_disable_msix() to undo the effect of pci_enable_msix(). Note that |
372 | a device driver should always call free_irq() on all MSI-X vectors it | 377 | a device driver should always call free_irq() on all MSI-X vectors it |
373 | has done request_irq() on before calling pci_disable_msix(). Failure | 378 | has done request_irq() on before calling pci_disable_msix(). Failure |
374 | to do so results a BUG_ON() and a device will be left with MSI-X | 379 | to do so results in a BUG_ON() and a device will be left with MSI-X |
375 | enabled and leaks its vectors. Otherwise, the PCI subsystem switches a | 380 | enabled and leaks its vectors. Otherwise, the PCI subsystem switches a |
376 | device function's interrupt mode from MSI-X mode to legacy mode and | 381 | device function's interrupt mode from MSI-X mode to legacy mode and |
377 | marks all allocated MSI-X vectors as unused. | 382 | marks all allocated MSI-X vectors as unused. |
@@ -383,53 +388,56 @@ MSI/MSI-X requests from other drivers, these MSI-X vectors may be | |||
383 | re-assigned. | 388 | re-assigned. |
384 | 389 | ||
385 | For the case where the PCI subsystem re-assigned these MSI-X vectors | 390 | For the case where the PCI subsystem re-assigned these MSI-X vectors |
386 | to other driver, a request to switching back to MSI-X mode may result | 391 | to other drivers, a request to switch back to MSI-X mode may result |
387 | being assigned with another set of MSI-X vectors or a failure if no | 392 | being assigned with another set of MSI-X vectors or a failure if no |
388 | more vectors are available. | 393 | more vectors are available. |
389 | 394 | ||
390 | 5.4 Handling function implementng both MSI and MSI-X capabilities | 395 | 5.4 Handling function implementing both MSI and MSI-X capabilities |
391 | 396 | ||
392 | For the case where a function implements both MSI and MSI-X | 397 | For the case where a function implements both MSI and MSI-X |
393 | capabilities, the PCI subsystem enables a device to run either in MSI | 398 | capabilities, the PCI subsystem enables a device to run either in MSI |
394 | mode or MSI-X mode but not both. A device driver determines whether it | 399 | mode or MSI-X mode but not both. A device driver determines whether it |
395 | wants MSI or MSI-X enabled on its hardware device. Once a device | 400 | wants MSI or MSI-X enabled on its hardware device. Once a device |
396 | driver requests for MSI, for example, it is prohibited to request for | 401 | driver requests for MSI, for example, it is prohibited from requesting |
397 | MSI-X; in other words, a device driver is not permitted to ping-pong | 402 | MSI-X; in other words, a device driver is not permitted to ping-pong |
398 | between MSI mod MSI-X mode during a run-time. | 403 | between MSI mod MSI-X mode during a run-time. |
399 | 404 | ||
400 | 5.5 Hardware requirements for MSI/MSI-X support | 405 | 5.5 Hardware requirements for MSI/MSI-X support |
406 | |||
401 | MSI/MSI-X support requires support from both system hardware and | 407 | MSI/MSI-X support requires support from both system hardware and |
402 | individual hardware device functions. | 408 | individual hardware device functions. |
403 | 409 | ||
404 | 5.5.1 System hardware support | 410 | 5.5.1 System hardware support |
411 | |||
405 | Since the target of MSI address is the local APIC CPU, enabling | 412 | Since the target of MSI address is the local APIC CPU, enabling |
406 | MSI/MSI-X support in Linux kernel is dependent on whether existing | 413 | MSI/MSI-X support in the Linux kernel is dependent on whether existing |
407 | system hardware supports local APIC. Users should verify their | 414 | system hardware supports local APIC. Users should verify that their |
408 | system whether it runs when CONFIG_X86_LOCAL_APIC=y. | 415 | system supports local APIC operation by testing that it runs when |
416 | CONFIG_X86_LOCAL_APIC=y. | ||
409 | 417 | ||
410 | In SMP environment, CONFIG_X86_LOCAL_APIC is automatically set; | 418 | In SMP environment, CONFIG_X86_LOCAL_APIC is automatically set; |
411 | however, in UP environment, users must manually set | 419 | however, in UP environment, users must manually set |
412 | CONFIG_X86_LOCAL_APIC. Once CONFIG_X86_LOCAL_APIC=y, setting | 420 | CONFIG_X86_LOCAL_APIC. Once CONFIG_X86_LOCAL_APIC=y, setting |
413 | CONFIG_PCI_MSI enables the VECTOR based scheme and | 421 | CONFIG_PCI_MSI enables the VECTOR based scheme and the option for |
414 | the option for MSI-capable device drivers to selectively enable | 422 | MSI-capable device drivers to selectively enable MSI/MSI-X. |
415 | MSI/MSI-X. | ||
416 | 423 | ||
417 | Note that CONFIG_X86_IO_APIC setting is irrelevant because MSI/MSI-X | 424 | Note that CONFIG_X86_IO_APIC setting is irrelevant because MSI/MSI-X |
418 | vector is allocated new during runtime and MSI/MSI-X support does not | 425 | vector is allocated new during runtime and MSI/MSI-X support does not |
419 | depend on BIOS support. This key independency enables MSI/MSI-X | 426 | depend on BIOS support. This key independency enables MSI/MSI-X |
420 | support on future IOxAPIC free platform. | 427 | support on future IOxAPIC free platforms. |
421 | 428 | ||
422 | 5.5.2 Device hardware support | 429 | 5.5.2 Device hardware support |
430 | |||
423 | The hardware device function supports MSI by indicating the | 431 | The hardware device function supports MSI by indicating the |
424 | MSI/MSI-X capability structure on its PCI capability list. By | 432 | MSI/MSI-X capability structure on its PCI capability list. By |
425 | default, this capability structure will not be initialized by | 433 | default, this capability structure will not be initialized by |
426 | the kernel to enable MSI during the system boot. In other words, | 434 | the kernel to enable MSI during the system boot. In other words, |
427 | the device function is running on its default pin assertion mode. | 435 | the device function is running on its default pin assertion mode. |
428 | Note that in many cases the hardware supporting MSI have bugs, | 436 | Note that in many cases the hardware supporting MSI have bugs, |
429 | which may result in system hang. The software driver of specific | 437 | which may result in system hangs. The software driver of specific |
430 | MSI-capable hardware is responsible for whether calling | 438 | MSI-capable hardware is responsible for deciding whether to call |
431 | pci_enable_msi or not. A return of zero indicates the kernel | 439 | pci_enable_msi or not. A return of zero indicates the kernel |
432 | successfully initializes the MSI/MSI-X capability structure of the | 440 | successfully initialized the MSI/MSI-X capability structure of the |
433 | device function. The device function is now running on MSI/MSI-X mode. | 441 | device function. The device function is now running on MSI/MSI-X mode. |
434 | 442 | ||
435 | 5.6 How to tell whether MSI/MSI-X is enabled on device function | 443 | 5.6 How to tell whether MSI/MSI-X is enabled on device function |
@@ -439,10 +447,10 @@ pci_enable_msi()/pci_enable_msix() indicates to a device driver that | |||
439 | its device function is initialized successfully and ready to run in | 447 | its device function is initialized successfully and ready to run in |
440 | MSI/MSI-X mode. | 448 | MSI/MSI-X mode. |
441 | 449 | ||
442 | At the user level, users can use command 'cat /proc/interrupts' | 450 | At the user level, users can use the command 'cat /proc/interrupts' |
443 | to display the vector allocated for a device and its interrupt | 451 | to display the vectors allocated for devices and their interrupt |
444 | MSI/MSI-X mode ("PCI MSI"/"PCI MSIX"). Below shows below MSI mode is | 452 | MSI/MSI-X modes ("PCI-MSI"/"PCI-MSI-X"). Below shows MSI mode is |
445 | enabled on a SCSI Adaptec 39320D Ultra320. | 453 | enabled on a SCSI Adaptec 39320D Ultra320 controller. |
446 | 454 | ||
447 | CPU0 CPU1 | 455 | CPU0 CPU1 |
448 | 0: 324639 0 IO-APIC-edge timer | 456 | 0: 324639 0 IO-APIC-edge timer |
@@ -453,8 +461,8 @@ enabled on a SCSI Adaptec 39320D Ultra320. | |||
453 | 15: 1 0 IO-APIC-edge ide1 | 461 | 15: 1 0 IO-APIC-edge ide1 |
454 | 169: 0 0 IO-APIC-level uhci-hcd | 462 | 169: 0 0 IO-APIC-level uhci-hcd |
455 | 185: 0 0 IO-APIC-level uhci-hcd | 463 | 185: 0 0 IO-APIC-level uhci-hcd |
456 | 193: 138 10 PCI MSI aic79xx | 464 | 193: 138 10 PCI-MSI aic79xx |
457 | 201: 30 0 PCI MSI aic79xx | 465 | 201: 30 0 PCI-MSI aic79xx |
458 | 225: 30 0 IO-APIC-level aic7xxx | 466 | 225: 30 0 IO-APIC-level aic7xxx |
459 | 233: 30 0 IO-APIC-level aic7xxx | 467 | 233: 30 0 IO-APIC-level aic7xxx |
460 | NMI: 0 0 | 468 | NMI: 0 0 |
@@ -490,8 +498,8 @@ target address set as 0xfeexxxxx, as conformed to PCI | |||
490 | specification 2.3 or latest, then it should work. | 498 | specification 2.3 or latest, then it should work. |
491 | 499 | ||
492 | Q4. From the driver point of view, if the MSI is lost because | 500 | Q4. From the driver point of view, if the MSI is lost because |
493 | of the errors occur during inbound memory write, then it may | 501 | of errors occurring during inbound memory write, then it may |
494 | wait for ever. Is there a mechanism for it to recover? | 502 | wait forever. Is there a mechanism for it to recover? |
495 | 503 | ||
496 | A4. Since the target of the transaction is an inbound memory | 504 | A4. Since the target of the transaction is an inbound memory |
497 | write, all transaction termination conditions (Retry, | 505 | write, all transaction termination conditions (Retry, |
diff --git a/Documentation/RCU/whatisRCU.txt b/Documentation/RCU/whatisRCU.txt index 354d89c78377..15da16861fa3 100644 --- a/Documentation/RCU/whatisRCU.txt +++ b/Documentation/RCU/whatisRCU.txt | |||
@@ -772,8 +772,6 @@ RCU pointer/list traversal: | |||
772 | list_for_each_entry_rcu | 772 | list_for_each_entry_rcu |
773 | list_for_each_continue_rcu (to be deprecated in favor of new | 773 | list_for_each_continue_rcu (to be deprecated in favor of new |
774 | list_for_each_entry_continue_rcu) | 774 | list_for_each_entry_continue_rcu) |
775 | hlist_for_each_rcu (to be deprecated in favor of | ||
776 | hlist_for_each_entry_rcu) | ||
777 | hlist_for_each_entry_rcu | 775 | hlist_for_each_entry_rcu |
778 | 776 | ||
779 | RCU pointer update: | 777 | RCU pointer update: |
diff --git a/Documentation/arm/README b/Documentation/arm/README index a6f718e90a86..5ed6f3530b86 100644 --- a/Documentation/arm/README +++ b/Documentation/arm/README | |||
@@ -8,10 +8,9 @@ Compilation of kernel | |||
8 | --------------------- | 8 | --------------------- |
9 | 9 | ||
10 | In order to compile ARM Linux, you will need a compiler capable of | 10 | In order to compile ARM Linux, you will need a compiler capable of |
11 | generating ARM ELF code with GNU extensions. GCC 2.95.1, EGCS | 11 | generating ARM ELF code with GNU extensions. GCC 3.3 is known to be |
12 | 1.1.2, and GCC 3.3 are known to be good compilers. Fortunately, you | 12 | a good compiler. Fortunately, you needn't guess. The kernel will report |
13 | needn't guess. The kernel will report an error if your compiler is | 13 | an error if your compiler is a recognized offender. |
14 | a recognized offender. | ||
15 | 14 | ||
16 | To build ARM Linux natively, you shouldn't have to alter the ARCH = line | 15 | To build ARM Linux natively, you shouldn't have to alter the ARCH = line |
17 | in the top level Makefile. However, if you don't have the ARM Linux ELF | 16 | in the top level Makefile. However, if you don't have the ARM Linux ELF |
diff --git a/Documentation/atomic_ops.txt b/Documentation/atomic_ops.txt index 8eedaa24f5e2..23a1c2402bcc 100644 --- a/Documentation/atomic_ops.txt +++ b/Documentation/atomic_ops.txt | |||
@@ -115,6 +115,33 @@ boolean is return which indicates whether the resulting counter value | |||
115 | is negative. It requires explicit memory barrier semantics around the | 115 | is negative. It requires explicit memory barrier semantics around the |
116 | operation. | 116 | operation. |
117 | 117 | ||
118 | Then: | ||
119 | |||
120 | int atomic_cmpxchg(atomic_t *v, int old, int new); | ||
121 | |||
122 | This performs an atomic compare exchange operation on the atomic value v, | ||
123 | with the given old and new values. Like all atomic_xxx operations, | ||
124 | atomic_cmpxchg will only satisfy its atomicity semantics as long as all | ||
125 | other accesses of *v are performed through atomic_xxx operations. | ||
126 | |||
127 | atomic_cmpxchg requires explicit memory barriers around the operation. | ||
128 | |||
129 | The semantics for atomic_cmpxchg are the same as those defined for 'cas' | ||
130 | below. | ||
131 | |||
132 | Finally: | ||
133 | |||
134 | int atomic_add_unless(atomic_t *v, int a, int u); | ||
135 | |||
136 | If the atomic value v is not equal to u, this function adds a to v, and | ||
137 | returns non zero. If v is equal to u then it returns zero. This is done as | ||
138 | an atomic operation. | ||
139 | |||
140 | atomic_add_unless requires explicit memory barriers around the operation. | ||
141 | |||
142 | atomic_inc_not_zero, equivalent to atomic_add_unless(v, 1, 0) | ||
143 | |||
144 | |||
118 | If a caller requires memory barrier semantics around an atomic_t | 145 | If a caller requires memory barrier semantics around an atomic_t |
119 | operation which does not return a value, a set of interfaces are | 146 | operation which does not return a value, a set of interfaces are |
120 | defined which accomplish this: | 147 | defined which accomplish this: |
diff --git a/Documentation/cciss.txt b/Documentation/cciss.txt index 68a711fb82cf..15378422fc46 100644 --- a/Documentation/cciss.txt +++ b/Documentation/cciss.txt | |||
@@ -133,3 +133,32 @@ hardware and it is important to prevent the kernel from attempting to directly | |||
133 | access these devices too, as if the array controller were merely a SCSI | 133 | access these devices too, as if the array controller were merely a SCSI |
134 | controller in the same way that we are allowing it to access SCSI tape drives. | 134 | controller in the same way that we are allowing it to access SCSI tape drives. |
135 | 135 | ||
136 | SCSI error handling for tape drives and medium changers | ||
137 | ------------------------------------------------------- | ||
138 | |||
139 | The linux SCSI mid layer provides an error handling protocol which | ||
140 | kicks into gear whenever a SCSI command fails to complete within a | ||
141 | certain amount of time (which can vary depending on the command). | ||
142 | The cciss driver participates in this protocol to some extent. The | ||
143 | normal protocol is a four step process. First the device is told | ||
144 | to abort the command. If that doesn't work, the device is reset. | ||
145 | If that doesn't work, the SCSI bus is reset. If that doesn't work | ||
146 | the host bus adapter is reset. Because the cciss driver is a block | ||
147 | driver as well as a SCSI driver and only the tape drives and medium | ||
148 | changers are presented to the SCSI mid layer, and unlike more | ||
149 | straightforward SCSI drivers, disk i/o continues through the block | ||
150 | side during the SCSI error recovery process, the cciss driver only | ||
151 | implements the first two of these actions, aborting the command, and | ||
152 | resetting the device. Additionally, most tape drives will not oblige | ||
153 | in aborting commands, and sometimes it appears they will not even | ||
154 | obey a reset coommand, though in most circumstances they will. In | ||
155 | the case that the command cannot be aborted and the device cannot be | ||
156 | reset, the device will be set offline. | ||
157 | |||
158 | In the event the error handling code is triggered and a tape drive is | ||
159 | successfully reset or the tardy command is successfully aborted, the | ||
160 | tape drive may still not allow i/o to continue until some command | ||
161 | is issued which positions the tape to a known position. Typically you | ||
162 | must rewind the tape (by issuing "mt -f /dev/st0 rewind" for example) | ||
163 | before i/o can proceed again to a tape drive which was reset. | ||
164 | |||
diff --git a/Documentation/connector/cn_test.c b/Documentation/connector/cn_test.c index b7de82e9c0e0..3e73231695b3 100644 --- a/Documentation/connector/cn_test.c +++ b/Documentation/connector/cn_test.c | |||
@@ -25,7 +25,7 @@ | |||
25 | #include <linux/skbuff.h> | 25 | #include <linux/skbuff.h> |
26 | #include <linux/timer.h> | 26 | #include <linux/timer.h> |
27 | 27 | ||
28 | #include "connector.h" | 28 | #include <linux/connector.h> |
29 | 29 | ||
30 | static struct cb_id cn_test_id = { 0x123, 0x456 }; | 30 | static struct cb_id cn_test_id = { 0x123, 0x456 }; |
31 | static char cn_test_name[] = "cn_test"; | 31 | static char cn_test_name[] = "cn_test"; |
@@ -104,7 +104,7 @@ static int cn_test_want_notify(void) | |||
104 | req->first = cn_test_id.val + 20; | 104 | req->first = cn_test_id.val + 20; |
105 | req->range = 10; | 105 | req->range = 10; |
106 | 106 | ||
107 | NETLINK_CB(skb).dst_groups = ctl->group; | 107 | NETLINK_CB(skb).dst_group = ctl->group; |
108 | //netlink_broadcast(nls, skb, 0, ctl->group, GFP_ATOMIC); | 108 | //netlink_broadcast(nls, skb, 0, ctl->group, GFP_ATOMIC); |
109 | netlink_unicast(nls, skb, 0, 0); | 109 | netlink_unicast(nls, skb, 0, 0); |
110 | 110 | ||
diff --git a/Documentation/device-mapper/snapshot.txt b/Documentation/device-mapper/snapshot.txt index dca274ff4005..a5009c8300f3 100644 --- a/Documentation/device-mapper/snapshot.txt +++ b/Documentation/device-mapper/snapshot.txt | |||
@@ -19,7 +19,6 @@ There are two dm targets available: snapshot and snapshot-origin. | |||
19 | *) snapshot-origin <origin> | 19 | *) snapshot-origin <origin> |
20 | 20 | ||
21 | which will normally have one or more snapshots based on it. | 21 | which will normally have one or more snapshots based on it. |
22 | You must create the snapshot-origin device before you can create snapshots. | ||
23 | Reads will be mapped directly to the backing device. For each write, the | 22 | Reads will be mapped directly to the backing device. For each write, the |
24 | original data will be saved in the <COW device> of each snapshot to keep | 23 | original data will be saved in the <COW device> of each snapshot to keep |
25 | its visible content unchanged, at least until the <COW device> fills up. | 24 | its visible content unchanged, at least until the <COW device> fills up. |
@@ -27,7 +26,7 @@ its visible content unchanged, at least until the <COW device> fills up. | |||
27 | 26 | ||
28 | *) snapshot <origin> <COW device> <persistent?> <chunksize> | 27 | *) snapshot <origin> <COW device> <persistent?> <chunksize> |
29 | 28 | ||
30 | A snapshot is created of the <origin> block device. Changed chunks of | 29 | A snapshot of the <origin> block device is created. Changed chunks of |
31 | <chunksize> sectors will be stored on the <COW device>. Writes will | 30 | <chunksize> sectors will be stored on the <COW device>. Writes will |
32 | only go to the <COW device>. Reads will come from the <COW device> or | 31 | only go to the <COW device>. Reads will come from the <COW device> or |
33 | from <origin> for unchanged data. <COW device> will often be | 32 | from <origin> for unchanged data. <COW device> will often be |
@@ -37,6 +36,8 @@ the amount of free space and expand the <COW device> before it fills up. | |||
37 | 36 | ||
38 | <persistent?> is P (Persistent) or N (Not persistent - will not survive | 37 | <persistent?> is P (Persistent) or N (Not persistent - will not survive |
39 | after reboot). | 38 | after reboot). |
39 | The difference is that for transient snapshots less metadata must be | ||
40 | saved on disk - they can be kept in memory by the kernel. | ||
40 | 41 | ||
41 | 42 | ||
42 | How this is used by LVM2 | 43 | How this is used by LVM2 |
diff --git a/Documentation/dvb/bt8xx.txt b/Documentation/dvb/bt8xx.txt index cb63b7a93c82..df6c05453cb5 100644 --- a/Documentation/dvb/bt8xx.txt +++ b/Documentation/dvb/bt8xx.txt | |||
@@ -1,5 +1,5 @@ | |||
1 | How to get the Nebula, PCTV and Twinhan DST cards working | 1 | How to get the Nebula, PCTV, FusionHDTV Lite and Twinhan DST cards working |
2 | ========================================================= | 2 | ========================================================================== |
3 | 3 | ||
4 | This class of cards has a bt878a as the PCI interface, and | 4 | This class of cards has a bt878a as the PCI interface, and |
5 | require the bttv driver. | 5 | require the bttv driver. |
@@ -26,27 +26,31 @@ Furthermore you need to enable | |||
26 | 26 | ||
27 | In general you need to load the bttv driver, which will handle the gpio and | 27 | In general you need to load the bttv driver, which will handle the gpio and |
28 | i2c communication for us, plus the common dvb-bt8xx device driver. | 28 | i2c communication for us, plus the common dvb-bt8xx device driver. |
29 | The frontends for Nebula (nxt6000), Pinnacle PCTV (cx24110) and | 29 | The frontends for Nebula (nxt6000), Pinnacle PCTV (cx24110), TwinHan (dst), |
30 | TwinHan (dst) are loaded automatically by the dvb-bt8xx device driver. | 30 | FusionHDTV DVB-T Lite (mt352) and FusionHDTV5 Lite (lgdt330x) are loaded |
31 | automatically by the dvb-bt8xx device driver. | ||
31 | 32 | ||
32 | 3a) Nebula / Pinnacle PCTV | 33 | 3a) Nebula / Pinnacle PCTV / FusionHDTV Lite |
33 | -------------------------- | 34 | --------------------------------------------- |
34 | 35 | ||
35 | $ modprobe bttv (normally bttv is being loaded automatically by kmod) | 36 | $ modprobe bttv (normally bttv is being loaded automatically by kmod) |
36 | $ modprobe dvb-bt8xx (or just place dvb-bt8xx in /etc/modules for automatic loading) | 37 | $ modprobe dvb-bt8xx |
38 | |||
39 | (or just place dvb-bt8xx in /etc/modules for automatic loading) | ||
37 | 40 | ||
38 | 41 | ||
39 | 3b) TwinHan and Clones | 42 | 3b) TwinHan and Clones |
40 | -------------------------- | 43 | -------------------------- |
41 | 44 | ||
42 | $ modprobe bttv i2c_hw=1 card=0x71 | 45 | $ modprobe bttv card=0x71 |
43 | $ modprobe dvb-bt8xx | 46 | $ modprobe dvb-bt8xx |
44 | $ modprobe dst | 47 | $ modprobe dst |
45 | 48 | ||
46 | The value 0x71 will override the PCI type detection for dvb-bt8xx, | 49 | The value 0x71 will override the PCI type detection for dvb-bt8xx, |
47 | which is necessary for TwinHan cards. | 50 | which is necessary for TwinHan cards. Omission of this parameter might result |
51 | in a system lockup. | ||
48 | 52 | ||
49 | If you're having an older card (blue color circuit) and card=0x71 locks | 53 | If you're having an older card (blue color PCB) and card=0x71 locks up |
50 | your machine, try using 0x68, too. If that does not work, ask on the | 54 | your machine, try using 0x68, too. If that does not work, ask on the |
51 | mailing list. | 55 | mailing list. |
52 | 56 | ||
@@ -64,11 +68,47 @@ verbose=0 means complete disabling of messages | |||
64 | dst_addons takes values 0 and 0x20. A value of 0 means it is a FTA card. | 68 | dst_addons takes values 0 and 0x20. A value of 0 means it is a FTA card. |
65 | 0x20 means it has a Conditional Access slot. | 69 | 0x20 means it has a Conditional Access slot. |
66 | 70 | ||
67 | The autodected values are determined bythe cards 'response | 71 | The autodetected values are determined by the cards 'response string' |
68 | string' which you can see in your logs e.g. | 72 | which you can see in your logs e.g. |
69 | 73 | ||
70 | dst_get_device_id: Recognise [DSTMCI] | 74 | dst_get_device_id: Recognise [DSTMCI] |
71 | 75 | ||
76 | If you need to sent in bug reports on the dst, please do send in a complete | ||
77 | log with the verbose=4 module parameter. For general usage, the default setting | ||
78 | of verbose=1 is ideal. | ||
79 | |||
80 | |||
81 | 4) Multiple cards | ||
82 | -------------------------- | ||
83 | |||
84 | If you happen to be running multiple cards, it would be advisable to load | ||
85 | the bttv module with the card id. This would help to solve any module loading | ||
86 | problems that you might face. | ||
87 | |||
88 | For example, if you have a Twinhan and Clones card along with a FusionHDTV5 Lite | ||
89 | |||
90 | $ modprobe bttv card=0x71 card=0x87 | ||
91 | |||
92 | Here the order of the card id is important and should be the same as that of the | ||
93 | physical order of the cards. Here card=0x71 represents the Twinhan and clones | ||
94 | and card=0x87 represents Fusion HDTV5 Lite. These arguments can also be | ||
95 | specified in decimal, rather than hex: | ||
96 | |||
97 | $ modprobe bttv card=113 card=135 | ||
98 | |||
99 | Some examples of card-id's | ||
100 | |||
101 | Pinnacle Sat 0x5e (94) | ||
102 | Nebula Digi TV 0x68 (104) | ||
103 | PC HDTV 0x70 (112) | ||
104 | Twinhan 0x71 (113) | ||
105 | FusionHDTV DVB-T Lite 0x80 (128) | ||
106 | FusionHDTV5 Lite 0x87 (135) | ||
107 | |||
108 | For a full list of card-id's, see the V4L Documentation within the kernel | ||
109 | source: linux/Documentation/video4linux/CARDLIST.bttv | ||
110 | |||
111 | If you have problems with this please do ask on the mailing list. | ||
72 | 112 | ||
73 | -- | 113 | -- |
74 | Authors: Richard Walker, Jamie Honan, Michael Hunold, Manu Abraham | 114 | Authors: Richard Walker, Jamie Honan, Michael Hunold, Manu Abraham |
diff --git a/Documentation/dvb/cards.txt b/Documentation/dvb/cards.txt index efdc4ee9d40c..19329cf7b097 100644 --- a/Documentation/dvb/cards.txt +++ b/Documentation/dvb/cards.txt | |||
@@ -41,6 +41,12 @@ o Frontends drivers: | |||
41 | - dib3000mb : DiBcom 3000-MB demodulator | 41 | - dib3000mb : DiBcom 3000-MB demodulator |
42 | DVB-S/C/T: | 42 | DVB-S/C/T: |
43 | - dst : TwinHan DST Frontend | 43 | - dst : TwinHan DST Frontend |
44 | ATSC: | ||
45 | - nxt200x : Nxtwave NXT2002 & NXT2004 | ||
46 | - or51211 : or51211 based (pcHDTV HD2000 card) | ||
47 | - or51132 : or51132 based (pcHDTV HD3000 card) | ||
48 | - bcm3510 : Broadcom BCM3510 | ||
49 | - lgdt330x : LG Electronics DT3302 & DT3303 | ||
44 | 50 | ||
45 | 51 | ||
46 | o Cards based on the Phillips saa7146 multimedia PCI bridge chip: | 52 | o Cards based on the Phillips saa7146 multimedia PCI bridge chip: |
@@ -62,6 +68,10 @@ o Cards based on the Conexant Bt8xx PCI bridge: | |||
62 | - Nebula Electronics DigiTV | 68 | - Nebula Electronics DigiTV |
63 | - TwinHan DST | 69 | - TwinHan DST |
64 | - Avermedia DVB-T | 70 | - Avermedia DVB-T |
71 | - ChainTech digitop DST-1000 DVB-S | ||
72 | - pcHDTV HD-2000 TV | ||
73 | - DViCO FusionHDTV DVB-T Lite | ||
74 | - DViCO FusionHDTV5 Lite | ||
65 | 75 | ||
66 | o Technotrend / Hauppauge DVB USB devices: | 76 | o Technotrend / Hauppauge DVB USB devices: |
67 | - Nova USB | 77 | - Nova USB |
@@ -83,3 +93,30 @@ o DiBcom DVB-T USB based devices: | |||
83 | - DiBcom USB2.0 DVB-T reference device (non-public) | 93 | - DiBcom USB2.0 DVB-T reference device (non-public) |
84 | 94 | ||
85 | o Experimental support for the analog module of the Siemens DVB-C PCI card | 95 | o Experimental support for the analog module of the Siemens DVB-C PCI card |
96 | |||
97 | o Cards based on the Conexant cx2388x PCI bridge: | ||
98 | - ADS Tech Instant TV DVB-T PCI | ||
99 | - ATI HDTV Wonder | ||
100 | - digitalnow DNTV Live! DVB-T | ||
101 | - DViCO FusionHDTV DVB-T1 | ||
102 | - DViCO FusionHDTV DVB-T Plus | ||
103 | - DViCO FusionHDTV3 Gold-Q | ||
104 | - DViCO FusionHDTV3 Gold-T | ||
105 | - DViCO FusionHDTV5 Gold | ||
106 | - Hauppauge Nova-T DVB-T | ||
107 | - KWorld/VStream XPert DVB-T | ||
108 | - pcHDTV HD3000 HDTV | ||
109 | - TerraTec Cinergy 1400 DVB-T | ||
110 | - WinFast DTV1000-T | ||
111 | |||
112 | o Cards based on the Phillips saa7134 PCI bridge: | ||
113 | - Medion 7134 | ||
114 | - Pinnacle PCTV 300i DVB-T + PAL | ||
115 | - LifeView FlyDVB-T DUO | ||
116 | - Typhoon DVB-T Duo Digital/Analog Cardbus | ||
117 | - Philips TOUGH DVB-T reference design | ||
118 | - Philips EUROPA V3 reference design | ||
119 | - Compro Videomate DVB-T300 | ||
120 | - Compro Videomate DVB-T200 | ||
121 | - AVerMedia AVerTVHD MCE A180 | ||
122 | |||
diff --git a/Documentation/dvb/contributors.txt b/Documentation/dvb/contributors.txt index c9d5ce370701..2cbd2d0f6fdf 100644 --- a/Documentation/dvb/contributors.txt +++ b/Documentation/dvb/contributors.txt | |||
@@ -75,5 +75,22 @@ Ernst Peinlich <e.peinlich@inode.at> | |||
75 | Peter Beutner <p.beutner@gmx.net> | 75 | Peter Beutner <p.beutner@gmx.net> |
76 | for the IR code for the ttusb-dec driver | 76 | for the IR code for the ttusb-dec driver |
77 | 77 | ||
78 | Wilson Michaels <wilsonmichaels@earthlink.net> | ||
79 | for the lgdt330x frontend driver, and various bugfixes | ||
80 | |||
81 | Michael Krufky <mkrufky@m1k.net> | ||
82 | for maintaining v4l/dvb inter-tree dependencies | ||
83 | |||
84 | Taylor Jacob <rtjacob@earthlink.net> | ||
85 | for the nxt2002 frontend driver | ||
86 | |||
87 | Jean-Francois Thibert <jeanfrancois@sagetv.com> | ||
88 | for the nxt2004 frontend driver | ||
89 | |||
90 | Kirk Lapray <kirk.lapray@gmail.com> | ||
91 | for the or51211 and or51132 frontend drivers, and | ||
92 | for merging the nxt2002 and nxt2004 modules into a | ||
93 | single nxt200x frontend driver. | ||
94 | |||
78 | (If you think you should be in this list, but you are not, drop a | 95 | (If you think you should be in this list, but you are not, drop a |
79 | line to the DVB mailing list) | 96 | line to the DVB mailing list) |
diff --git a/Documentation/dvb/get_dvb_firmware b/Documentation/dvb/get_dvb_firmware index a750f0101d9d..be6eb4c75991 100644 --- a/Documentation/dvb/get_dvb_firmware +++ b/Documentation/dvb/get_dvb_firmware | |||
@@ -22,7 +22,7 @@ use File::Temp qw/ tempdir /; | |||
22 | use IO::Handle; | 22 | use IO::Handle; |
23 | 23 | ||
24 | @components = ( "sp8870", "sp887x", "tda10045", "tda10046", "av7110", "dec2000t", | 24 | @components = ( "sp8870", "sp887x", "tda10045", "tda10046", "av7110", "dec2000t", |
25 | "dec2540t", "dec3000s", "vp7041", "dibusb", "nxt2002", | 25 | "dec2540t", "dec3000s", "vp7041", "dibusb", "nxt2002", "nxt2004", |
26 | "or51211", "or51132_qam", "or51132_vsb"); | 26 | "or51211", "or51132_qam", "or51132_vsb"); |
27 | 27 | ||
28 | # Check args | 28 | # Check args |
@@ -252,6 +252,23 @@ sub nxt2002 { | |||
252 | $outfile; | 252 | $outfile; |
253 | } | 253 | } |
254 | 254 | ||
255 | sub nxt2004 { | ||
256 | my $sourcefile = "AVerTVHD_MCE_A180_Drv_v1.2.2.16.zip"; | ||
257 | my $url = "http://www.aver.com/support/Drivers/$sourcefile"; | ||
258 | my $hash = "111cb885b1e009188346d72acfed024c"; | ||
259 | my $outfile = "dvb-fe-nxt2004.fw"; | ||
260 | my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1); | ||
261 | |||
262 | checkstandard(); | ||
263 | |||
264 | wgetfile($sourcefile, $url); | ||
265 | unzip($sourcefile, $tmpdir); | ||
266 | verify("$tmpdir/3xHybrid.sys", $hash); | ||
267 | extract("$tmpdir/3xHybrid.sys", 465304, 9584, $outfile); | ||
268 | |||
269 | $outfile; | ||
270 | } | ||
271 | |||
255 | sub or51211 { | 272 | sub or51211 { |
256 | my $fwfile = "dvb-fe-or51211.fw"; | 273 | my $fwfile = "dvb-fe-or51211.fw"; |
257 | my $url = "http://linuxtv.org/downloads/firmware/$fwfile"; | 274 | my $url = "http://linuxtv.org/downloads/firmware/$fwfile"; |
diff --git a/Documentation/early-userspace/README b/Documentation/early-userspace/README index 270a88e22fb9..cddbac456c29 100644 --- a/Documentation/early-userspace/README +++ b/Documentation/early-userspace/README | |||
@@ -28,7 +28,7 @@ the image from specifications. | |||
28 | CPIO ARCHIVE method | 28 | CPIO ARCHIVE method |
29 | 29 | ||
30 | You can create a cpio archive that contains the early userspace image. | 30 | You can create a cpio archive that contains the early userspace image. |
31 | Youre cpio archive should be specified in CONFIG_INITRAMFS_SOURCE and it | 31 | Your cpio archive should be specified in CONFIG_INITRAMFS_SOURCE and it |
32 | will be used directly. Only a single cpio file may be specified in | 32 | will be used directly. Only a single cpio file may be specified in |
33 | CONFIG_INITRAMFS_SOURCE and directory and file names are not allowed in | 33 | CONFIG_INITRAMFS_SOURCE and directory and file names are not allowed in |
34 | combination with a cpio archive. | 34 | combination with a cpio archive. |
diff --git a/Documentation/fb/fbcon.txt b/Documentation/fb/fbcon.txt new file mode 100644 index 000000000000..08dce0f631bf --- /dev/null +++ b/Documentation/fb/fbcon.txt | |||
@@ -0,0 +1,152 @@ | |||
1 | The Framebuffer Console | ||
2 | ======================= | ||
3 | |||
4 | The framebuffer console (fbcon), as its name implies, is a text | ||
5 | console running on top of the framebuffer device. It has the functionality of | ||
6 | any standard text console driver, such as the VGA console, with the added | ||
7 | features that can be attributed to the graphical nature of the framebuffer. | ||
8 | |||
9 | In the x86 architecture, the framebuffer console is optional, and | ||
10 | some even treat it as a toy. For other architectures, it is the only available | ||
11 | display device, text or graphical. | ||
12 | |||
13 | What are the features of fbcon? The framebuffer console supports | ||
14 | high resolutions, varying font types, display rotation, primitive multihead, | ||
15 | etc. Theoretically, multi-colored fonts, blending, aliasing, and any feature | ||
16 | made available by the underlying graphics card are also possible. | ||
17 | |||
18 | A. Configuration | ||
19 | |||
20 | The framebuffer console can be enabled by using your favorite kernel | ||
21 | configuration tool. It is under Device Drivers->Graphics Support->Support for | ||
22 | framebuffer devices->Framebuffer Console Support. Select 'y' to compile | ||
23 | support statically, or 'm' for module support. The module will be fbcon. | ||
24 | |||
25 | In order for fbcon to activate, at least one framebuffer driver is | ||
26 | required, so choose from any of the numerous drivers available. For x86 | ||
27 | systems, they almost universally have VGA cards, so vga16fb and vesafb will | ||
28 | always be available. However, using a chipset-specific driver will give you | ||
29 | more speed and features, such as the ability to change the video mode | ||
30 | dynamically. | ||
31 | |||
32 | To display the penguin logo, choose any logo available in Logo | ||
33 | Configuration->Boot up logo. | ||
34 | |||
35 | Also, you will need to select at least one compiled-in fonts, but if | ||
36 | you don't do anything, the kernel configuration tool will select one for you, | ||
37 | usually an 8x16 font. | ||
38 | |||
39 | GOTCHA: A common bug report is enabling the framebuffer without enabling the | ||
40 | framebuffer console. Depending on the driver, you may get a blanked or | ||
41 | garbled display, but the system still boots to completion. If you are | ||
42 | fortunate to have a driver that does not alter the graphics chip, then you | ||
43 | will still get a VGA console. | ||
44 | |||
45 | B. Loading | ||
46 | |||
47 | Possible scenarios: | ||
48 | |||
49 | 1. Driver and fbcon are compiled statically | ||
50 | |||
51 | Usually, fbcon will automatically take over your console. The notable | ||
52 | exception is vesafb. It needs to be explicitly activated with the | ||
53 | vga= boot option parameter. | ||
54 | |||
55 | 2. Driver is compiled statically, fbcon is compiled as a module | ||
56 | |||
57 | Depending on the driver, you either get a standard console, or a | ||
58 | garbled display, as mentioned above. To get a framebuffer console, | ||
59 | do a 'modprobe fbcon'. | ||
60 | |||
61 | 3. Driver is compiled as a module, fbcon is compiled statically | ||
62 | |||
63 | You get your standard console. Once the driver is loaded with | ||
64 | 'modprobe xxxfb', fbcon automatically takes over the console with | ||
65 | the possible exception of using the fbcon=map:n option. See below. | ||
66 | |||
67 | 4. Driver and fbcon are compiled as a module. | ||
68 | |||
69 | You can load them in any order. Once both are loaded, fbcon will take | ||
70 | over the console. | ||
71 | |||
72 | C. Boot options | ||
73 | |||
74 | The framebuffer console has several, largely unknown, boot options | ||
75 | that can change its behavior. | ||
76 | |||
77 | 1. fbcon=font:<name> | ||
78 | |||
79 | Select the initial font to use. The value 'name' can be any of the | ||
80 | compiled-in fonts: VGA8x16, 7x14, 10x18, VGA8x8, MINI4x6, RomanLarge, | ||
81 | SUN8x16, SUN12x22, ProFont6x11, Acorn8x8, PEARL8x8. | ||
82 | |||
83 | Note, not all drivers can handle font with widths not divisible by 8, | ||
84 | such as vga16fb. | ||
85 | |||
86 | 2. fbcon=scrollback:<value>[k] | ||
87 | |||
88 | The scrollback buffer is memory that is used to preserve display | ||
89 | contents that has already scrolled past your view. This is accessed | ||
90 | by using the Shift-PageUp key combination. The value 'value' is any | ||
91 | integer. It defaults to 32KB. The 'k' suffix is optional, and will | ||
92 | multiply the 'value' by 1024. | ||
93 | |||
94 | 3. fbcon=map:<0123> | ||
95 | |||
96 | This is an interesting option. It tells which driver gets mapped to | ||
97 | which console. The value '0123' is a sequence that gets repeated until | ||
98 | the total length is 64 which is the number of consoles available. In | ||
99 | the above example, it is expanded to 012301230123... and the mapping | ||
100 | will be: | ||
101 | |||
102 | tty | 1 2 3 4 5 6 7 8 9 ... | ||
103 | fb | 0 1 2 3 0 1 2 3 0 ... | ||
104 | |||
105 | ('cat /proc/fb' should tell you what the fb numbers are) | ||
106 | |||
107 | One side effect that may be useful is using a map value that exceeds | ||
108 | the number of loaded fb drivers. For example, if only one driver is | ||
109 | available, fb0, adding fbcon=map:1 tells fbcon not to take over the | ||
110 | console. | ||
111 | |||
112 | Later on, when you want to map the console the to the framebuffer | ||
113 | device, you can use the con2fbmap utility. | ||
114 | |||
115 | 4. fbcon=vc:<n1>-<n2> | ||
116 | |||
117 | This option tells fbcon to take over only a range of consoles as | ||
118 | specified by the values 'n1' and 'n2'. The rest of the consoles | ||
119 | outside the given range will still be controlled by the standard | ||
120 | console driver. | ||
121 | |||
122 | NOTE: For x86 machines, the standard console is the VGA console which | ||
123 | is typically located on the same video card. Thus, the consoles that | ||
124 | are controlled by the VGA console will be garbled. | ||
125 | |||
126 | 4. fbcon=rotate:<n> | ||
127 | |||
128 | This option changes the orientation angle of the console display. The | ||
129 | value 'n' accepts the following: | ||
130 | |||
131 | 0 - normal orientation (0 degree) | ||
132 | 1 - clockwise orientation (90 degrees) | ||
133 | 2 - upside down orientation (180 degrees) | ||
134 | 3 - counterclockwise orientation (270 degrees) | ||
135 | |||
136 | The angle can be changed anytime afterwards by 'echoing' the same | ||
137 | numbers to any one of the 2 attributes found in | ||
138 | /sys/class/graphics/fb{x} | ||
139 | |||
140 | con_rotate - rotate the display of the active console | ||
141 | con_rotate_all - rotate the display of all consoles | ||
142 | |||
143 | Console rotation will only become available if Console Rotation | ||
144 | Support is compiled in your kernel. | ||
145 | |||
146 | NOTE: This is purely console rotation. Any other applications that | ||
147 | use the framebuffer will remain at their 'normal'orientation. | ||
148 | Actually, the underlying fb driver is totally ignorant of console | ||
149 | rotation. | ||
150 | |||
151 | --- | ||
152 | Antonino Daplas <adaplas@pol.net> | ||
diff --git a/Documentation/fb/vesafb.txt b/Documentation/fb/vesafb.txt index 62db6758d1c1..ee277dd204b0 100644 --- a/Documentation/fb/vesafb.txt +++ b/Documentation/fb/vesafb.txt | |||
@@ -146,10 +146,10 @@ pmipal Use the protected mode interface for palette changes. | |||
146 | 146 | ||
147 | mtrr:n setup memory type range registers for the vesafb framebuffer | 147 | mtrr:n setup memory type range registers for the vesafb framebuffer |
148 | where n: | 148 | where n: |
149 | 0 - disabled (equivalent to nomtrr) | 149 | 0 - disabled (equivalent to nomtrr) (default) |
150 | 1 - uncachable | 150 | 1 - uncachable |
151 | 2 - write-back | 151 | 2 - write-back |
152 | 3 - write-combining (default) | 152 | 3 - write-combining |
153 | 4 - write-through | 153 | 4 - write-through |
154 | 154 | ||
155 | If you see the following in dmesg, choose the type that matches the | 155 | If you see the following in dmesg, choose the type that matches the |
diff --git a/Documentation/feature-removal-schedule.txt b/Documentation/feature-removal-schedule.txt index b67189a8d8d4..429db4bf98ec 100644 --- a/Documentation/feature-removal-schedule.txt +++ b/Documentation/feature-removal-schedule.txt | |||
@@ -25,6 +25,13 @@ Who: Adrian Bunk <bunk@stusta.de> | |||
25 | 25 | ||
26 | --------------------------- | 26 | --------------------------- |
27 | 27 | ||
28 | What: drivers depending on OBSOLETE_OSS_DRIVER | ||
29 | When: January 2006 | ||
30 | Why: OSS drivers with ALSA replacements | ||
31 | Who: Adrian Bunk <bunk@stusta.de> | ||
32 | |||
33 | --------------------------- | ||
34 | |||
28 | What: RCU API moves to EXPORT_SYMBOL_GPL | 35 | What: RCU API moves to EXPORT_SYMBOL_GPL |
29 | When: April 2006 | 36 | When: April 2006 |
30 | Files: include/linux/rcupdate.h, kernel/rcupdate.c | 37 | Files: include/linux/rcupdate.h, kernel/rcupdate.c |
@@ -60,6 +67,21 @@ Who: Jody McIntyre <scjody@steamballoon.com> | |||
60 | 67 | ||
61 | --------------------------- | 68 | --------------------------- |
62 | 69 | ||
70 | What: Video4Linux API 1 ioctls and video_decoder.h from Video devices. | ||
71 | When: July 2006 | ||
72 | Why: V4L1 AP1 was replaced by V4L2 API. during migration from 2.4 to 2.6 | ||
73 | series. The old API have lots of drawbacks and don't provide enough | ||
74 | means to work with all video and audio standards. The newer API is | ||
75 | already available on the main drivers and should be used instead. | ||
76 | Newer drivers should use v4l_compat_translate_ioctl function to handle | ||
77 | old calls, replacing to newer ones. | ||
78 | Decoder iocts are using internally to allow video drivers to | ||
79 | communicate with video decoders. This should also be improved to allow | ||
80 | V4L2 calls being translated into compatible internal ioctls. | ||
81 | Who: Mauro Carvalho Chehab <mchehab@brturbo.com.br> | ||
82 | |||
83 | --------------------------- | ||
84 | |||
63 | What: i2c sysfs name change: in1_ref, vid deprecated in favour of cpu0_vid | 85 | What: i2c sysfs name change: in1_ref, vid deprecated in favour of cpu0_vid |
64 | When: November 2005 | 86 | When: November 2005 |
65 | Files: drivers/i2c/chips/adm1025.c, drivers/i2c/chips/adm1026.c | 87 | Files: drivers/i2c/chips/adm1025.c, drivers/i2c/chips/adm1026.c |
@@ -69,6 +91,22 @@ Who: Grant Coady <gcoady@gmail.com> | |||
69 | 91 | ||
70 | --------------------------- | 92 | --------------------------- |
71 | 93 | ||
94 | What: remove EXPORT_SYMBOL(panic_timeout) | ||
95 | When: April 2006 | ||
96 | Files: kernel/panic.c | ||
97 | Why: No modular usage in the kernel. | ||
98 | Who: Adrian Bunk <bunk@stusta.de> | ||
99 | |||
100 | --------------------------- | ||
101 | |||
102 | What: remove EXPORT_SYMBOL(insert_resource) | ||
103 | When: April 2006 | ||
104 | Files: kernel/resource.c | ||
105 | Why: No modular usage in the kernel. | ||
106 | Who: Adrian Bunk <bunk@stusta.de> | ||
107 | |||
108 | --------------------------- | ||
109 | |||
72 | What: PCMCIA control ioctl (needed for pcmcia-cs [cardmgr, cardctl]) | 110 | What: PCMCIA control ioctl (needed for pcmcia-cs [cardmgr, cardctl]) |
73 | When: November 2005 | 111 | When: November 2005 |
74 | Files: drivers/pcmcia/: pcmcia_ioctl.c | 112 | Files: drivers/pcmcia/: pcmcia_ioctl.c |
@@ -95,3 +133,10 @@ Why: This interface has been obsoleted by the new layer3-independent | |||
95 | to link against API-compatible library on top of libnfnetlink_queue | 133 | to link against API-compatible library on top of libnfnetlink_queue |
96 | instead of the current 'libipq'. | 134 | instead of the current 'libipq'. |
97 | Who: Harald Welte <laforge@netfilter.org> | 135 | Who: Harald Welte <laforge@netfilter.org> |
136 | |||
137 | --------------------------- | ||
138 | |||
139 | What: EXPORT_SYMBOL(lookup_hash) | ||
140 | When: January 2006 | ||
141 | Why: Too low-level interface. Use lookup_one_len or lookup_create instead. | ||
142 | Who: Christoph Hellwig <hch@lst.de> | ||
diff --git a/Documentation/filesystems/dentry-locking.txt b/Documentation/filesystems/dentry-locking.txt new file mode 100644 index 000000000000..4c0c575a4012 --- /dev/null +++ b/Documentation/filesystems/dentry-locking.txt | |||
@@ -0,0 +1,173 @@ | |||
1 | RCU-based dcache locking model | ||
2 | ============================== | ||
3 | |||
4 | On many workloads, the most common operation on dcache is to look up a | ||
5 | dentry, given a parent dentry and the name of the child. Typically, | ||
6 | for every open(), stat() etc., the dentry corresponding to the | ||
7 | pathname will be looked up by walking the tree starting with the first | ||
8 | component of the pathname and using that dentry along with the next | ||
9 | component to look up the next level and so on. Since it is a frequent | ||
10 | operation for workloads like multiuser environments and web servers, | ||
11 | it is important to optimize this path. | ||
12 | |||
13 | Prior to 2.5.10, dcache_lock was acquired in d_lookup and thus in | ||
14 | every component during path look-up. Since 2.5.10 onwards, fast-walk | ||
15 | algorithm changed this by holding the dcache_lock at the beginning and | ||
16 | walking as many cached path component dentries as possible. This | ||
17 | significantly decreases the number of acquisition of | ||
18 | dcache_lock. However it also increases the lock hold time | ||
19 | significantly and affects performance in large SMP machines. Since | ||
20 | 2.5.62 kernel, dcache has been using a new locking model that uses RCU | ||
21 | to make dcache look-up lock-free. | ||
22 | |||
23 | The current dcache locking model is not very different from the | ||
24 | existing dcache locking model. Prior to 2.5.62 kernel, dcache_lock | ||
25 | protected the hash chain, d_child, d_alias, d_lru lists as well as | ||
26 | d_inode and several other things like mount look-up. RCU-based changes | ||
27 | affect only the way the hash chain is protected. For everything else | ||
28 | the dcache_lock must be taken for both traversing as well as | ||
29 | updating. The hash chain updates too take the dcache_lock. The | ||
30 | significant change is the way d_lookup traverses the hash chain, it | ||
31 | doesn't acquire the dcache_lock for this and rely on RCU to ensure | ||
32 | that the dentry has not been *freed*. | ||
33 | |||
34 | |||
35 | Dcache locking details | ||
36 | ====================== | ||
37 | |||
38 | For many multi-user workloads, open() and stat() on files are very | ||
39 | frequently occurring operations. Both involve walking of path names to | ||
40 | find the dentry corresponding to the concerned file. In 2.4 kernel, | ||
41 | dcache_lock was held during look-up of each path component. Contention | ||
42 | and cache-line bouncing of this global lock caused significant | ||
43 | scalability problems. With the introduction of RCU in Linux kernel, | ||
44 | this was worked around by making the look-up of path components during | ||
45 | path walking lock-free. | ||
46 | |||
47 | |||
48 | Safe lock-free look-up of dcache hash table | ||
49 | =========================================== | ||
50 | |||
51 | Dcache is a complex data structure with the hash table entries also | ||
52 | linked together in other lists. In 2.4 kernel, dcache_lock protected | ||
53 | all the lists. We applied RCU only on hash chain walking. The rest of | ||
54 | the lists are still protected by dcache_lock. Some of the important | ||
55 | changes are : | ||
56 | |||
57 | 1. The deletion from hash chain is done using hlist_del_rcu() macro | ||
58 | which doesn't initialize next pointer of the deleted dentry and | ||
59 | this allows us to walk safely lock-free while a deletion is | ||
60 | happening. | ||
61 | |||
62 | 2. Insertion of a dentry into the hash table is done using | ||
63 | hlist_add_head_rcu() which take care of ordering the writes - the | ||
64 | writes to the dentry must be visible before the dentry is | ||
65 | inserted. This works in conjunction with hlist_for_each_rcu() while | ||
66 | walking the hash chain. The only requirement is that all | ||
67 | initialization to the dentry must be done before | ||
68 | hlist_add_head_rcu() since we don't have dcache_lock protection | ||
69 | while traversing the hash chain. This isn't different from the | ||
70 | existing code. | ||
71 | |||
72 | 3. The dentry looked up without holding dcache_lock by cannot be | ||
73 | returned for walking if it is unhashed. It then may have a NULL | ||
74 | d_inode or other bogosity since RCU doesn't protect the other | ||
75 | fields in the dentry. We therefore use a flag DCACHE_UNHASHED to | ||
76 | indicate unhashed dentries and use this in conjunction with a | ||
77 | per-dentry lock (d_lock). Once looked up without the dcache_lock, | ||
78 | we acquire the per-dentry lock (d_lock) and check if the dentry is | ||
79 | unhashed. If so, the look-up is failed. If not, the reference count | ||
80 | of the dentry is increased and the dentry is returned. | ||
81 | |||
82 | 4. Once a dentry is looked up, it must be ensured during the path walk | ||
83 | for that component it doesn't go away. In pre-2.5.10 code, this was | ||
84 | done holding a reference to the dentry. dcache_rcu does the same. | ||
85 | In some sense, dcache_rcu path walking looks like the pre-2.5.10 | ||
86 | version. | ||
87 | |||
88 | 5. All dentry hash chain updates must take the dcache_lock as well as | ||
89 | the per-dentry lock in that order. dput() does this to ensure that | ||
90 | a dentry that has just been looked up in another CPU doesn't get | ||
91 | deleted before dget() can be done on it. | ||
92 | |||
93 | 6. There are several ways to do reference counting of RCU protected | ||
94 | objects. One such example is in ipv4 route cache where deferred | ||
95 | freeing (using call_rcu()) is done as soon as the reference count | ||
96 | goes to zero. This cannot be done in the case of dentries because | ||
97 | tearing down of dentries require blocking (dentry_iput()) which | ||
98 | isn't supported from RCU callbacks. Instead, tearing down of | ||
99 | dentries happen synchronously in dput(), but actual freeing happens | ||
100 | later when RCU grace period is over. This allows safe lock-free | ||
101 | walking of the hash chains, but a matched dentry may have been | ||
102 | partially torn down. The checking of DCACHE_UNHASHED flag with | ||
103 | d_lock held detects such dentries and prevents them from being | ||
104 | returned from look-up. | ||
105 | |||
106 | |||
107 | Maintaining POSIX rename semantics | ||
108 | ================================== | ||
109 | |||
110 | Since look-up of dentries is lock-free, it can race against a | ||
111 | concurrent rename operation. For example, during rename of file A to | ||
112 | B, look-up of either A or B must succeed. So, if look-up of B happens | ||
113 | after A has been removed from the hash chain but not added to the new | ||
114 | hash chain, it may fail. Also, a comparison while the name is being | ||
115 | written concurrently by a rename may result in false positive matches | ||
116 | violating rename semantics. Issues related to race with rename are | ||
117 | handled as described below : | ||
118 | |||
119 | 1. Look-up can be done in two ways - d_lookup() which is safe from | ||
120 | simultaneous renames and __d_lookup() which is not. If | ||
121 | __d_lookup() fails, it must be followed up by a d_lookup() to | ||
122 | correctly determine whether a dentry is in the hash table or | ||
123 | not. d_lookup() protects look-ups using a sequence lock | ||
124 | (rename_lock). | ||
125 | |||
126 | 2. The name associated with a dentry (d_name) may be changed if a | ||
127 | rename is allowed to happen simultaneously. To avoid memcmp() in | ||
128 | __d_lookup() go out of bounds due to a rename and false positive | ||
129 | comparison, the name comparison is done while holding the | ||
130 | per-dentry lock. This prevents concurrent renames during this | ||
131 | operation. | ||
132 | |||
133 | 3. Hash table walking during look-up may move to a different bucket as | ||
134 | the current dentry is moved to a different bucket due to rename. | ||
135 | But we use hlists in dcache hash table and they are | ||
136 | null-terminated. So, even if a dentry moves to a different bucket, | ||
137 | hash chain walk will terminate. [with a list_head list, it may not | ||
138 | since termination is when the list_head in the original bucket is | ||
139 | reached]. Since we redo the d_parent check and compare name while | ||
140 | holding d_lock, lock-free look-up will not race against d_move(). | ||
141 | |||
142 | 4. There can be a theoretical race when a dentry keeps coming back to | ||
143 | original bucket due to double moves. Due to this look-up may | ||
144 | consider that it has never moved and can end up in a infinite loop. | ||
145 | But this is not any worse that theoretical livelocks we already | ||
146 | have in the kernel. | ||
147 | |||
148 | |||
149 | Important guidelines for filesystem developers related to dcache_rcu | ||
150 | ==================================================================== | ||
151 | |||
152 | 1. Existing dcache interfaces (pre-2.5.62) exported to filesystem | ||
153 | don't change. Only dcache internal implementation changes. However | ||
154 | filesystems *must not* delete from the dentry hash chains directly | ||
155 | using the list macros like allowed earlier. They must use dcache | ||
156 | APIs like d_drop() or __d_drop() depending on the situation. | ||
157 | |||
158 | 2. d_flags is now protected by a per-dentry lock (d_lock). All access | ||
159 | to d_flags must be protected by it. | ||
160 | |||
161 | 3. For a hashed dentry, checking of d_count needs to be protected by | ||
162 | d_lock. | ||
163 | |||
164 | |||
165 | Papers and other documentation on dcache locking | ||
166 | ================================================ | ||
167 | |||
168 | 1. Scaling dcache with RCU (http://linuxjournal.com/article.php?sid=7124). | ||
169 | |||
170 | 2. http://lse.sourceforge.net/locking/dcache/dcache.html | ||
171 | |||
172 | |||
173 | |||
diff --git a/Documentation/filesystems/devfs/README b/Documentation/filesystems/devfs/README index 54366ecc241f..aabfba24bc2e 100644 --- a/Documentation/filesystems/devfs/README +++ b/Documentation/filesystems/devfs/README | |||
@@ -1812,11 +1812,6 @@ it may overflow the messages buffer, but try to get as much of it as | |||
1812 | you can | 1812 | you can |
1813 | 1813 | ||
1814 | 1814 | ||
1815 | if you get an Oops, run ksymoops to decode it so that the | ||
1816 | names of the offending functions are provided. A non-decoded Oops is | ||
1817 | pretty useless | ||
1818 | |||
1819 | |||
1820 | send a copy of your devfsd configuration file(s) | 1815 | send a copy of your devfsd configuration file(s) |
1821 | 1816 | ||
1822 | send the bug report to me first. | 1817 | send the bug report to me first. |
diff --git a/Documentation/filesystems/ext2.txt b/Documentation/filesystems/ext2.txt index d16334ec48ba..a8edb376b041 100644 --- a/Documentation/filesystems/ext2.txt +++ b/Documentation/filesystems/ext2.txt | |||
@@ -17,8 +17,6 @@ set using tune2fs(8). Kernel-determined defaults are indicated by (*). | |||
17 | bsddf (*) Makes `df' act like BSD. | 17 | bsddf (*) Makes `df' act like BSD. |
18 | minixdf Makes `df' act like Minix. | 18 | minixdf Makes `df' act like Minix. |
19 | 19 | ||
20 | check Check block and inode bitmaps at mount time | ||
21 | (requires CONFIG_EXT2_CHECK). | ||
22 | check=none, nocheck (*) Don't do extra checking of bitmaps on mount | 20 | check=none, nocheck (*) Don't do extra checking of bitmaps on mount |
23 | (check=normal and check=strict options removed) | 21 | (check=normal and check=strict options removed) |
24 | 22 | ||
diff --git a/Documentation/filesystems/ramfs-rootfs-initramfs.txt b/Documentation/filesystems/ramfs-rootfs-initramfs.txt new file mode 100644 index 000000000000..b3404a032596 --- /dev/null +++ b/Documentation/filesystems/ramfs-rootfs-initramfs.txt | |||
@@ -0,0 +1,195 @@ | |||
1 | ramfs, rootfs and initramfs | ||
2 | October 17, 2005 | ||
3 | Rob Landley <rob@landley.net> | ||
4 | ============================= | ||
5 | |||
6 | What is ramfs? | ||
7 | -------------- | ||
8 | |||
9 | Ramfs is a very simple filesystem that exports Linux's disk caching | ||
10 | mechanisms (the page cache and dentry cache) as a dynamically resizable | ||
11 | ram-based filesystem. | ||
12 | |||
13 | Normally all files are cached in memory by Linux. Pages of data read from | ||
14 | backing store (usually the block device the filesystem is mounted on) are kept | ||
15 | around in case it's needed again, but marked as clean (freeable) in case the | ||
16 | Virtual Memory system needs the memory for something else. Similarly, data | ||
17 | written to files is marked clean as soon as it has been written to backing | ||
18 | store, but kept around for caching purposes until the VM reallocates the | ||
19 | memory. A similar mechanism (the dentry cache) greatly speeds up access to | ||
20 | directories. | ||
21 | |||
22 | With ramfs, there is no backing store. Files written into ramfs allocate | ||
23 | dentries and page cache as usual, but there's nowhere to write them to. | ||
24 | This means the pages are never marked clean, so they can't be freed by the | ||
25 | VM when it's looking to recycle memory. | ||
26 | |||
27 | The amount of code required to implement ramfs is tiny, because all the | ||
28 | work is done by the existing Linux caching infrastructure. Basically, | ||
29 | you're mounting the disk cache as a filesystem. Because of this, ramfs is not | ||
30 | an optional component removable via menuconfig, since there would be negligible | ||
31 | space savings. | ||
32 | |||
33 | ramfs and ramdisk: | ||
34 | ------------------ | ||
35 | |||
36 | The older "ram disk" mechanism created a synthetic block device out of | ||
37 | an area of ram and used it as backing store for a filesystem. This block | ||
38 | device was of fixed size, so the filesystem mounted on it was of fixed | ||
39 | size. Using a ram disk also required unnecessarily copying memory from the | ||
40 | fake block device into the page cache (and copying changes back out), as well | ||
41 | as creating and destroying dentries. Plus it needed a filesystem driver | ||
42 | (such as ext2) to format and interpret this data. | ||
43 | |||
44 | Compared to ramfs, this wastes memory (and memory bus bandwidth), creates | ||
45 | unnecessary work for the CPU, and pollutes the CPU caches. (There are tricks | ||
46 | to avoid this copying by playing with the page tables, but they're unpleasantly | ||
47 | complicated and turn out to be about as expensive as the copying anyway.) | ||
48 | More to the point, all the work ramfs is doing has to happen _anyway_, | ||
49 | since all file access goes through the page and dentry caches. The ram | ||
50 | disk is simply unnecessary, ramfs is internally much simpler. | ||
51 | |||
52 | Another reason ramdisks are semi-obsolete is that the introduction of | ||
53 | loopback devices offered a more flexible and convenient way to create | ||
54 | synthetic block devices, now from files instead of from chunks of memory. | ||
55 | See losetup (8) for details. | ||
56 | |||
57 | ramfs and tmpfs: | ||
58 | ---------------- | ||
59 | |||
60 | One downside of ramfs is you can keep writing data into it until you fill | ||
61 | up all memory, and the VM can't free it because the VM thinks that files | ||
62 | should get written to backing store (rather than swap space), but ramfs hasn't | ||
63 | got any backing store. Because of this, only root (or a trusted user) should | ||
64 | be allowed write access to a ramfs mount. | ||
65 | |||
66 | A ramfs derivative called tmpfs was created to add size limits, and the ability | ||
67 | to write the data to swap space. Normal users can be allowed write access to | ||
68 | tmpfs mounts. See Documentation/filesystems/tmpfs.txt for more information. | ||
69 | |||
70 | What is rootfs? | ||
71 | --------------- | ||
72 | |||
73 | Rootfs is a special instance of ramfs, which is always present in 2.6 systems. | ||
74 | (It's used internally as the starting and stopping point for searches of the | ||
75 | kernel's doubly-linked list of mount points.) | ||
76 | |||
77 | Most systems just mount another filesystem over it and ignore it. The | ||
78 | amount of space an empty instance of ramfs takes up is tiny. | ||
79 | |||
80 | What is initramfs? | ||
81 | ------------------ | ||
82 | |||
83 | All 2.6 Linux kernels contain a gzipped "cpio" format archive, which is | ||
84 | extracted into rootfs when the kernel boots up. After extracting, the kernel | ||
85 | checks to see if rootfs contains a file "init", and if so it executes it as PID | ||
86 | 1. If found, this init process is responsible for bringing the system the | ||
87 | rest of the way up, including locating and mounting the real root device (if | ||
88 | any). If rootfs does not contain an init program after the embedded cpio | ||
89 | archive is extracted into it, the kernel will fall through to the older code | ||
90 | to locate and mount a root partition, then exec some variant of /sbin/init | ||
91 | out of that. | ||
92 | |||
93 | All this differs from the old initrd in several ways: | ||
94 | |||
95 | - The old initrd was a separate file, while the initramfs archive is linked | ||
96 | into the linux kernel image. (The directory linux-*/usr is devoted to | ||
97 | generating this archive during the build.) | ||
98 | |||
99 | - The old initrd file was a gzipped filesystem image (in some file format, | ||
100 | such as ext2, that had to be built into the kernel), while the new | ||
101 | initramfs archive is a gzipped cpio archive (like tar only simpler, | ||
102 | see cpio(1) and Documentation/early-userspace/buffer-format.txt). | ||
103 | |||
104 | - The program run by the old initrd (which was called /initrd, not /init) did | ||
105 | some setup and then returned to the kernel, while the init program from | ||
106 | initramfs is not expected to return to the kernel. (If /init needs to hand | ||
107 | off control it can overmount / with a new root device and exec another init | ||
108 | program. See the switch_root utility, below.) | ||
109 | |||
110 | - When switching another root device, initrd would pivot_root and then | ||
111 | umount the ramdisk. But initramfs is rootfs: you can neither pivot_root | ||
112 | rootfs, nor unmount it. Instead delete everything out of rootfs to | ||
113 | free up the space (find -xdev / -exec rm '{}' ';'), overmount rootfs | ||
114 | with the new root (cd /newmount; mount --move . /; chroot .), attach | ||
115 | stdin/stdout/stderr to the new /dev/console, and exec the new init. | ||
116 | |||
117 | Since this is a remarkably persnickity process (and involves deleting | ||
118 | commands before you can run them), the klibc package introduced a helper | ||
119 | program (utils/run_init.c) to do all this for you. Most other packages | ||
120 | (such as busybox) have named this command "switch_root". | ||
121 | |||
122 | Populating initramfs: | ||
123 | --------------------- | ||
124 | |||
125 | The 2.6 kernel build process always creates a gzipped cpio format initramfs | ||
126 | archive and links it into the resulting kernel binary. By default, this | ||
127 | archive is empty (consuming 134 bytes on x86). The config option | ||
128 | CONFIG_INITRAMFS_SOURCE (for some reason buried under devices->block devices | ||
129 | in menuconfig, and living in usr/Kconfig) can be used to specify a source for | ||
130 | the initramfs archive, which will automatically be incorporated into the | ||
131 | resulting binary. This option can point to an existing gzipped cpio archive, a | ||
132 | directory containing files to be archived, or a text file specification such | ||
133 | as the following example: | ||
134 | |||
135 | dir /dev 755 0 0 | ||
136 | nod /dev/console 644 0 0 c 5 1 | ||
137 | nod /dev/loop0 644 0 0 b 7 0 | ||
138 | dir /bin 755 1000 1000 | ||
139 | slink /bin/sh busybox 777 0 0 | ||
140 | file /bin/busybox initramfs/busybox 755 0 0 | ||
141 | dir /proc 755 0 0 | ||
142 | dir /sys 755 0 0 | ||
143 | dir /mnt 755 0 0 | ||
144 | file /init initramfs/init.sh 755 0 0 | ||
145 | |||
146 | One advantage of the text file is that root access is not required to | ||
147 | set permissions or create device nodes in the new archive. (Note that those | ||
148 | two example "file" entries expect to find files named "init.sh" and "busybox" in | ||
149 | a directory called "initramfs", under the linux-2.6.* directory. See | ||
150 | Documentation/early-userspace/README for more details.) | ||
151 | |||
152 | If you don't already understand what shared libraries, devices, and paths | ||
153 | you need to get a minimal root filesystem up and running, here are some | ||
154 | references: | ||
155 | http://www.tldp.org/HOWTO/Bootdisk-HOWTO/ | ||
156 | http://www.tldp.org/HOWTO/From-PowerUp-To-Bash-Prompt-HOWTO.html | ||
157 | http://www.linuxfromscratch.org/lfs/view/stable/ | ||
158 | |||
159 | The "klibc" package (http://www.kernel.org/pub/linux/libs/klibc) is | ||
160 | designed to be a tiny C library to statically link early userspace | ||
161 | code against, along with some related utilities. It is BSD licensed. | ||
162 | |||
163 | I use uClibc (http://www.uclibc.org) and busybox (http://www.busybox.net) | ||
164 | myself. These are LGPL and GPL, respectively. | ||
165 | |||
166 | In theory you could use glibc, but that's not well suited for small embedded | ||
167 | uses like this. (A "hello world" program statically linked against glibc is | ||
168 | over 400k. With uClibc it's 7k. Also note that glibc dlopens libnss to do | ||
169 | name lookups, even when otherwise statically linked.) | ||
170 | |||
171 | Future directions: | ||
172 | ------------------ | ||
173 | |||
174 | Today (2.6.14), initramfs is always compiled in, but not always used. The | ||
175 | kernel falls back to legacy boot code that is reached only if initramfs does | ||
176 | not contain an /init program. The fallback is legacy code, there to ensure a | ||
177 | smooth transition and allowing early boot functionality to gradually move to | ||
178 | "early userspace" (I.E. initramfs). | ||
179 | |||
180 | The move to early userspace is necessary because finding and mounting the real | ||
181 | root device is complex. Root partitions can span multiple devices (raid or | ||
182 | separate journal). They can be out on the network (requiring dhcp, setting a | ||
183 | specific mac address, logging into a server, etc). They can live on removable | ||
184 | media, with dynamically allocated major/minor numbers and persistent naming | ||
185 | issues requiring a full udev implementation to sort out. They can be | ||
186 | compressed, encrypted, copy-on-write, loopback mounted, strangely partitioned, | ||
187 | and so on. | ||
188 | |||
189 | This kind of complexity (which inevitably includes policy) is rightly handled | ||
190 | in userspace. Both klibc and busybox/uClibc are working on simple initramfs | ||
191 | packages to drop into a kernel build, and when standard solutions are ready | ||
192 | and widely deployed, the kernel's legacy early boot code will become obsolete | ||
193 | and a candidate for the feature removal schedule. | ||
194 | |||
195 | But that's a while off yet. | ||
diff --git a/Documentation/filesystems/vfs.txt b/Documentation/filesystems/vfs.txt index f042c12e0ed2..ee4c0a8b8db7 100644 --- a/Documentation/filesystems/vfs.txt +++ b/Documentation/filesystems/vfs.txt | |||
@@ -3,7 +3,7 @@ | |||
3 | 3 | ||
4 | Original author: Richard Gooch <rgooch@atnf.csiro.au> | 4 | Original author: Richard Gooch <rgooch@atnf.csiro.au> |
5 | 5 | ||
6 | Last updated on August 25, 2005 | 6 | Last updated on October 28, 2005 |
7 | 7 | ||
8 | Copyright (C) 1999 Richard Gooch | 8 | Copyright (C) 1999 Richard Gooch |
9 | Copyright (C) 2005 Pekka Enberg | 9 | Copyright (C) 2005 Pekka Enberg |
@@ -11,62 +11,61 @@ | |||
11 | This file is released under the GPLv2. | 11 | This file is released under the GPLv2. |
12 | 12 | ||
13 | 13 | ||
14 | What is it? | 14 | Introduction |
15 | =========== | 15 | ============ |
16 | 16 | ||
17 | The Virtual File System (otherwise known as the Virtual Filesystem | 17 | The Virtual File System (also known as the Virtual Filesystem Switch) |
18 | Switch) is the software layer in the kernel that provides the | 18 | is the software layer in the kernel that provides the filesystem |
19 | filesystem interface to userspace programs. It also provides an | 19 | interface to userspace programs. It also provides an abstraction |
20 | abstraction within the kernel which allows different filesystem | 20 | within the kernel which allows different filesystem implementations to |
21 | implementations to coexist. | 21 | coexist. |
22 | 22 | ||
23 | VFS system calls open(2), stat(2), read(2), write(2), chmod(2) and so | ||
24 | on are called from a process context. Filesystem locking is described | ||
25 | in the document Documentation/filesystems/Locking. | ||
23 | 26 | ||
24 | A Quick Look At How It Works | ||
25 | ============================ | ||
26 | 27 | ||
27 | In this section I'll briefly describe how things work, before | 28 | Directory Entry Cache (dcache) |
28 | launching into the details. I'll start with describing what happens | 29 | ------------------------------ |
29 | when user programs open and manipulate files, and then look from the | ||
30 | other view which is how a filesystem is supported and subsequently | ||
31 | mounted. | ||
32 | |||
33 | |||
34 | Opening a File | ||
35 | -------------- | ||
36 | |||
37 | The VFS implements the open(2), stat(2), chmod(2) and similar system | ||
38 | calls. The pathname argument is used by the VFS to search through the | ||
39 | directory entry cache (dentry cache or "dcache"). This provides a very | ||
40 | fast look-up mechanism to translate a pathname (filename) into a | ||
41 | specific dentry. | ||
42 | |||
43 | An individual dentry usually has a pointer to an inode. Inodes are the | ||
44 | things that live on disc drives, and can be regular files (you know: | ||
45 | those things that you write data into), directories, FIFOs and other | ||
46 | beasts. Dentries live in RAM and are never saved to disc: they exist | ||
47 | only for performance. Inodes live on disc and are copied into memory | ||
48 | when required. Later any changes are written back to disc. The inode | ||
49 | that lives in RAM is a VFS inode, and it is this which the dentry | ||
50 | points to. A single inode can be pointed to by multiple dentries | ||
51 | (think about hardlinks). | ||
52 | |||
53 | The dcache is meant to be a view into your entire filespace. Unlike | ||
54 | Linus, most of us losers can't fit enough dentries into RAM to cover | ||
55 | all of our filespace, so the dcache has bits missing. In order to | ||
56 | resolve your pathname into a dentry, the VFS may have to resort to | ||
57 | creating dentries along the way, and then loading the inode. This is | ||
58 | done by looking up the inode. | ||
59 | |||
60 | To look up an inode (usually read from disc) requires that the VFS | ||
61 | calls the lookup() method of the parent directory inode. This method | ||
62 | is installed by the specific filesystem implementation that the inode | ||
63 | lives in. There will be more on this later. | ||
64 | 30 | ||
65 | Once the VFS has the required dentry (and hence the inode), we can do | 31 | The VFS implements the open(2), stat(2), chmod(2), and similar system |
66 | all those boring things like open(2) the file, or stat(2) it to peek | 32 | calls. The pathname argument that is passed to them is used by the VFS |
67 | at the inode data. The stat(2) operation is fairly simple: once the | 33 | to search through the directory entry cache (also known as the dentry |
68 | VFS has the dentry, it peeks at the inode data and passes some of it | 34 | cache or dcache). This provides a very fast look-up mechanism to |
69 | back to userspace. | 35 | translate a pathname (filename) into a specific dentry. Dentries live |
36 | in RAM and are never saved to disc: they exist only for performance. | ||
37 | |||
38 | The dentry cache is meant to be a view into your entire filespace. As | ||
39 | most computers cannot fit all dentries in the RAM at the same time, | ||
40 | some bits of the cache are missing. In order to resolve your pathname | ||
41 | into a dentry, the VFS may have to resort to creating dentries along | ||
42 | the way, and then loading the inode. This is done by looking up the | ||
43 | inode. | ||
44 | |||
45 | |||
46 | The Inode Object | ||
47 | ---------------- | ||
48 | |||
49 | An individual dentry usually has a pointer to an inode. Inodes are | ||
50 | filesystem objects such as regular files, directories, FIFOs and other | ||
51 | beasts. They live either on the disc (for block device filesystems) | ||
52 | or in the memory (for pseudo filesystems). Inodes that live on the | ||
53 | disc are copied into the memory when required and changes to the inode | ||
54 | are written back to disc. A single inode can be pointed to by multiple | ||
55 | dentries (hard links, for example, do this). | ||
56 | |||
57 | To look up an inode requires that the VFS calls the lookup() method of | ||
58 | the parent directory inode. This method is installed by the specific | ||
59 | filesystem implementation that the inode lives in. Once the VFS has | ||
60 | the required dentry (and hence the inode), we can do all those boring | ||
61 | things like open(2) the file, or stat(2) it to peek at the inode | ||
62 | data. The stat(2) operation is fairly simple: once the VFS has the | ||
63 | dentry, it peeks at the inode data and passes some of it back to | ||
64 | userspace. | ||
65 | |||
66 | |||
67 | The File Object | ||
68 | --------------- | ||
70 | 69 | ||
71 | Opening a file requires another operation: allocation of a file | 70 | Opening a file requires another operation: allocation of a file |
72 | structure (this is the kernel-side implementation of file | 71 | structure (this is the kernel-side implementation of file |
@@ -74,51 +73,39 @@ descriptors). The freshly allocated file structure is initialized with | |||
74 | a pointer to the dentry and a set of file operation member functions. | 73 | a pointer to the dentry and a set of file operation member functions. |
75 | These are taken from the inode data. The open() file method is then | 74 | These are taken from the inode data. The open() file method is then |
76 | called so the specific filesystem implementation can do it's work. You | 75 | called so the specific filesystem implementation can do it's work. You |
77 | can see that this is another switch performed by the VFS. | 76 | can see that this is another switch performed by the VFS. The file |
78 | 77 | structure is placed into the file descriptor table for the process. | |
79 | The file structure is placed into the file descriptor table for the | ||
80 | process. | ||
81 | 78 | ||
82 | Reading, writing and closing files (and other assorted VFS operations) | 79 | Reading, writing and closing files (and other assorted VFS operations) |
83 | is done by using the userspace file descriptor to grab the appropriate | 80 | is done by using the userspace file descriptor to grab the appropriate |
84 | file structure, and then calling the required file structure method | 81 | file structure, and then calling the required file structure method to |
85 | function to do whatever is required. | 82 | do whatever is required. For as long as the file is open, it keeps the |
86 | 83 | dentry in use, which in turn means that the VFS inode is still in use. | |
87 | For as long as the file is open, it keeps the dentry "open" (in use), | ||
88 | which in turn means that the VFS inode is still in use. | ||
89 | |||
90 | All VFS system calls (i.e. open(2), stat(2), read(2), write(2), | ||
91 | chmod(2) and so on) are called from a process context. You should | ||
92 | assume that these calls are made without any kernel locks being | ||
93 | held. This means that the processes may be executing the same piece of | ||
94 | filesystem or driver code at the same time, on different | ||
95 | processors. You should ensure that access to shared resources is | ||
96 | protected by appropriate locks. | ||
97 | 84 | ||
98 | 85 | ||
99 | Registering and Mounting a Filesystem | 86 | Registering and Mounting a Filesystem |
100 | ------------------------------------- | 87 | ===================================== |
101 | 88 | ||
102 | If you want to support a new kind of filesystem in the kernel, all you | 89 | To register and unregister a filesystem, use the following API |
103 | need to do is call register_filesystem(). You pass a structure | 90 | functions: |
104 | describing the filesystem implementation (struct file_system_type) | ||
105 | which is then added to an internal table of supported filesystems. You | ||
106 | can do: | ||
107 | 91 | ||
108 | % cat /proc/filesystems | 92 | #include <linux/fs.h> |
109 | 93 | ||
110 | to see what filesystems are currently available on your system. | 94 | extern int register_filesystem(struct file_system_type *); |
95 | extern int unregister_filesystem(struct file_system_type *); | ||
111 | 96 | ||
112 | When a request is made to mount a block device onto a directory in | 97 | The passed struct file_system_type describes your filesystem. When a |
113 | your filespace the VFS will call the appropriate method for the | 98 | request is made to mount a device onto a directory in your filespace, |
114 | specific filesystem. The dentry for the mount point will then be | 99 | the VFS will call the appropriate get_sb() method for the specific |
115 | updated to point to the root inode for the new filesystem. | 100 | filesystem. The dentry for the mount point will then be updated to |
101 | point to the root inode for the new filesystem. | ||
116 | 102 | ||
117 | It's now time to look at things in more detail. | 103 | You can see all filesystems that are registered to the kernel in the |
104 | file /proc/filesystems. | ||
118 | 105 | ||
119 | 106 | ||
120 | struct file_system_type | 107 | struct file_system_type |
121 | ======================= | 108 | ----------------------- |
122 | 109 | ||
123 | This describes the filesystem. As of kernel 2.6.13, the following | 110 | This describes the filesystem. As of kernel 2.6.13, the following |
124 | members are defined: | 111 | members are defined: |
@@ -197,8 +184,14 @@ A fill_super() method implementation has the following arguments: | |||
197 | int silent: whether or not to be silent on error | 184 | int silent: whether or not to be silent on error |
198 | 185 | ||
199 | 186 | ||
187 | The Superblock Object | ||
188 | ===================== | ||
189 | |||
190 | A superblock object represents a mounted filesystem. | ||
191 | |||
192 | |||
200 | struct super_operations | 193 | struct super_operations |
201 | ======================= | 194 | ----------------------- |
202 | 195 | ||
203 | This describes how the VFS can manipulate the superblock of your | 196 | This describes how the VFS can manipulate the superblock of your |
204 | filesystem. As of kernel 2.6.13, the following members are defined: | 197 | filesystem. As of kernel 2.6.13, the following members are defined: |
@@ -286,9 +279,9 @@ or bottom half). | |||
286 | a superblock. The second parameter indicates whether the method | 279 | a superblock. The second parameter indicates whether the method |
287 | should wait until the write out has been completed. Optional. | 280 | should wait until the write out has been completed. Optional. |
288 | 281 | ||
289 | write_super_lockfs: called when VFS is locking a filesystem and forcing | 282 | write_super_lockfs: called when VFS is locking a filesystem and |
290 | it into a consistent state. This function is currently used by the | 283 | forcing it into a consistent state. This method is currently |
291 | Logical Volume Manager (LVM). | 284 | used by the Logical Volume Manager (LVM). |
292 | 285 | ||
293 | unlockfs: called when VFS is unlocking a filesystem and making it writable | 286 | unlockfs: called when VFS is unlocking a filesystem and making it writable |
294 | again. | 287 | again. |
@@ -317,8 +310,14 @@ field. This is a pointer to a "struct inode_operations" which | |||
317 | describes the methods that can be performed on individual inodes. | 310 | describes the methods that can be performed on individual inodes. |
318 | 311 | ||
319 | 312 | ||
313 | The Inode Object | ||
314 | ================ | ||
315 | |||
316 | An inode object represents an object within the filesystem. | ||
317 | |||
318 | |||
320 | struct inode_operations | 319 | struct inode_operations |
321 | ======================= | 320 | ----------------------- |
322 | 321 | ||
323 | This describes how the VFS can manipulate an inode in your | 322 | This describes how the VFS can manipulate an inode in your |
324 | filesystem. As of kernel 2.6.13, the following members are defined: | 323 | filesystem. As of kernel 2.6.13, the following members are defined: |
@@ -394,51 +393,62 @@ otherwise noted. | |||
394 | will probably need to call d_instantiate() just as you would | 393 | will probably need to call d_instantiate() just as you would |
395 | in the create() method | 394 | in the create() method |
396 | 395 | ||
396 | rename: called by the rename(2) system call to rename the object to | ||
397 | have the parent and name given by the second inode and dentry. | ||
398 | |||
397 | readlink: called by the readlink(2) system call. Only required if | 399 | readlink: called by the readlink(2) system call. Only required if |
398 | you want to support reading symbolic links | 400 | you want to support reading symbolic links |
399 | 401 | ||
400 | follow_link: called by the VFS to follow a symbolic link to the | 402 | follow_link: called by the VFS to follow a symbolic link to the |
401 | inode it points to. Only required if you want to support | 403 | inode it points to. Only required if you want to support |
402 | symbolic links. This function returns a void pointer cookie | 404 | symbolic links. This method returns a void pointer cookie |
403 | that is passed to put_link(). | 405 | that is passed to put_link(). |
404 | 406 | ||
405 | put_link: called by the VFS to release resources allocated by | 407 | put_link: called by the VFS to release resources allocated by |
406 | follow_link(). The cookie returned by follow_link() is passed to | 408 | follow_link(). The cookie returned by follow_link() is passed |
407 | to this function as the last parameter. It is used by filesystems | 409 | to to this method as the last parameter. It is used by |
408 | such as NFS where page cache is not stable (i.e. page that was | 410 | filesystems such as NFS where page cache is not stable |
409 | installed when the symbolic link walk started might not be in the | 411 | (i.e. page that was installed when the symbolic link walk |
410 | page cache at the end of the walk). | 412 | started might not be in the page cache at the end of the |
411 | 413 | walk). | |
412 | truncate: called by the VFS to change the size of a file. The i_size | 414 | |
413 | field of the inode is set to the desired size by the VFS before | 415 | truncate: called by the VFS to change the size of a file. The |
414 | this function is called. This function is called by the truncate(2) | 416 | i_size field of the inode is set to the desired size by the |
415 | system call and related functionality. | 417 | VFS before this method is called. This method is called by |
418 | the truncate(2) system call and related functionality. | ||
416 | 419 | ||
417 | permission: called by the VFS to check for access rights on a POSIX-like | 420 | permission: called by the VFS to check for access rights on a POSIX-like |
418 | filesystem. | 421 | filesystem. |
419 | 422 | ||
420 | setattr: called by the VFS to set attributes for a file. This function is | 423 | setattr: called by the VFS to set attributes for a file. This method |
421 | called by chmod(2) and related system calls. | 424 | is called by chmod(2) and related system calls. |
422 | 425 | ||
423 | getattr: called by the VFS to get attributes of a file. This function is | 426 | getattr: called by the VFS to get attributes of a file. This method |
424 | called by stat(2) and related system calls. | 427 | is called by stat(2) and related system calls. |
425 | 428 | ||
426 | setxattr: called by the VFS to set an extended attribute for a file. | 429 | setxattr: called by the VFS to set an extended attribute for a file. |
427 | Extended attribute is a name:value pair associated with an inode. This | 430 | Extended attribute is a name:value pair associated with an |
428 | function is called by setxattr(2) system call. | 431 | inode. This method is called by setxattr(2) system call. |
432 | |||
433 | getxattr: called by the VFS to retrieve the value of an extended | ||
434 | attribute name. This method is called by getxattr(2) function | ||
435 | call. | ||
429 | 436 | ||
430 | getxattr: called by the VFS to retrieve the value of an extended attribute | 437 | listxattr: called by the VFS to list all extended attributes for a |
431 | name. This function is called by getxattr(2) function call. | 438 | given file. This method is called by listxattr(2) system call. |
432 | 439 | ||
433 | listxattr: called by the VFS to list all extended attributes for a given | 440 | removexattr: called by the VFS to remove an extended attribute from |
434 | file. This function is called by listxattr(2) system call. | 441 | a file. This method is called by removexattr(2) system call. |
435 | 442 | ||
436 | removexattr: called by the VFS to remove an extended attribute from a file. | 443 | |
437 | This function is called by removexattr(2) system call. | 444 | The Address Space Object |
445 | ======================== | ||
446 | |||
447 | The address space object is used to identify pages in the page cache. | ||
438 | 448 | ||
439 | 449 | ||
440 | struct address_space_operations | 450 | struct address_space_operations |
441 | =============================== | 451 | ------------------------------- |
442 | 452 | ||
443 | This describes how the VFS can manipulate mapping of a file to page cache in | 453 | This describes how the VFS can manipulate mapping of a file to page cache in |
444 | your filesystem. As of kernel 2.6.13, the following members are defined: | 454 | your filesystem. As of kernel 2.6.13, the following members are defined: |
@@ -502,8 +512,14 @@ struct address_space_operations { | |||
502 | it. An example implementation can be found in fs/ext2/xip.c. | 512 | it. An example implementation can be found in fs/ext2/xip.c. |
503 | 513 | ||
504 | 514 | ||
515 | The File Object | ||
516 | =============== | ||
517 | |||
518 | A file object represents a file opened by a process. | ||
519 | |||
520 | |||
505 | struct file_operations | 521 | struct file_operations |
506 | ====================== | 522 | ---------------------- |
507 | 523 | ||
508 | This describes how the VFS can manipulate an open file. As of kernel | 524 | This describes how the VFS can manipulate an open file. As of kernel |
509 | 2.6.13, the following members are defined: | 525 | 2.6.13, the following members are defined: |
@@ -661,7 +677,7 @@ of child dentries. Child dentries are basically like files in a | |||
661 | directory. | 677 | directory. |
662 | 678 | ||
663 | 679 | ||
664 | Directory Entry Cache APIs | 680 | Directory Entry Cache API |
665 | -------------------------- | 681 | -------------------------- |
666 | 682 | ||
667 | There are a number of functions defined which permit a filesystem to | 683 | There are a number of functions defined which permit a filesystem to |
@@ -705,178 +721,24 @@ manipulate dentries: | |||
705 | and the dentry is returned. The caller must use d_put() | 721 | and the dentry is returned. The caller must use d_put() |
706 | to free the dentry when it finishes using it. | 722 | to free the dentry when it finishes using it. |
707 | 723 | ||
724 | For further information on dentry locking, please refer to the document | ||
725 | Documentation/filesystems/dentry-locking.txt. | ||
708 | 726 | ||
709 | RCU-based dcache locking model | ||
710 | ------------------------------ | ||
711 | 727 | ||
712 | On many workloads, the most common operation on dcache is | 728 | Resources |
713 | to look up a dentry, given a parent dentry and the name | 729 | ========= |
714 | of the child. Typically, for every open(), stat() etc., | 730 | |
715 | the dentry corresponding to the pathname will be looked | 731 | (Note some of these resources are not up-to-date with the latest kernel |
716 | up by walking the tree starting with the first component | 732 | version.) |
717 | of the pathname and using that dentry along with the next | 733 | |
718 | component to look up the next level and so on. Since it | 734 | Creating Linux virtual filesystems. 2002 |
719 | is a frequent operation for workloads like multiuser | 735 | <http://lwn.net/Articles/13325/> |
720 | environments and web servers, it is important to optimize | 736 | |
721 | this path. | 737 | The Linux Virtual File-system Layer by Neil Brown. 1999 |
722 | 738 | <http://www.cse.unsw.edu.au/~neilb/oss/linux-commentary/vfs.html> | |
723 | Prior to 2.5.10, dcache_lock was acquired in d_lookup and thus | 739 | |
724 | in every component during path look-up. Since 2.5.10 onwards, | 740 | A tour of the Linux VFS by Michael K. Johnson. 1996 |
725 | fast-walk algorithm changed this by holding the dcache_lock | 741 | <http://www.tldp.org/LDP/khg/HyperNews/get/fs/vfstour.html> |
726 | at the beginning and walking as many cached path component | ||
727 | dentries as possible. This significantly decreases the number | ||
728 | of acquisition of dcache_lock. However it also increases the | ||
729 | lock hold time significantly and affects performance in large | ||
730 | SMP machines. Since 2.5.62 kernel, dcache has been using | ||
731 | a new locking model that uses RCU to make dcache look-up | ||
732 | lock-free. | ||
733 | |||
734 | The current dcache locking model is not very different from the existing | ||
735 | dcache locking model. Prior to 2.5.62 kernel, dcache_lock | ||
736 | protected the hash chain, d_child, d_alias, d_lru lists as well | ||
737 | as d_inode and several other things like mount look-up. RCU-based | ||
738 | changes affect only the way the hash chain is protected. For everything | ||
739 | else the dcache_lock must be taken for both traversing as well as | ||
740 | updating. The hash chain updates too take the dcache_lock. | ||
741 | The significant change is the way d_lookup traverses the hash chain, | ||
742 | it doesn't acquire the dcache_lock for this and rely on RCU to | ||
743 | ensure that the dentry has not been *freed*. | ||
744 | |||
745 | |||
746 | Dcache locking details | ||
747 | ---------------------- | ||
748 | 742 | ||
749 | For many multi-user workloads, open() and stat() on files are | 743 | A small trail through the Linux kernel by Andries Brouwer. 2001 |
750 | very frequently occurring operations. Both involve walking | 744 | <http://www.win.tue.nl/~aeb/linux/vfs/trail.html> |
751 | of path names to find the dentry corresponding to the | ||
752 | concerned file. In 2.4 kernel, dcache_lock was held | ||
753 | during look-up of each path component. Contention and | ||
754 | cache-line bouncing of this global lock caused significant | ||
755 | scalability problems. With the introduction of RCU | ||
756 | in Linux kernel, this was worked around by making | ||
757 | the look-up of path components during path walking lock-free. | ||
758 | |||
759 | |||
760 | Safe lock-free look-up of dcache hash table | ||
761 | =========================================== | ||
762 | |||
763 | Dcache is a complex data structure with the hash table entries | ||
764 | also linked together in other lists. In 2.4 kernel, dcache_lock | ||
765 | protected all the lists. We applied RCU only on hash chain | ||
766 | walking. The rest of the lists are still protected by dcache_lock. | ||
767 | Some of the important changes are : | ||
768 | |||
769 | 1. The deletion from hash chain is done using hlist_del_rcu() macro which | ||
770 | doesn't initialize next pointer of the deleted dentry and this | ||
771 | allows us to walk safely lock-free while a deletion is happening. | ||
772 | |||
773 | 2. Insertion of a dentry into the hash table is done using | ||
774 | hlist_add_head_rcu() which take care of ordering the writes - | ||
775 | the writes to the dentry must be visible before the dentry | ||
776 | is inserted. This works in conjunction with hlist_for_each_rcu() | ||
777 | while walking the hash chain. The only requirement is that | ||
778 | all initialization to the dentry must be done before hlist_add_head_rcu() | ||
779 | since we don't have dcache_lock protection while traversing | ||
780 | the hash chain. This isn't different from the existing code. | ||
781 | |||
782 | 3. The dentry looked up without holding dcache_lock by cannot be | ||
783 | returned for walking if it is unhashed. It then may have a NULL | ||
784 | d_inode or other bogosity since RCU doesn't protect the other | ||
785 | fields in the dentry. We therefore use a flag DCACHE_UNHASHED to | ||
786 | indicate unhashed dentries and use this in conjunction with a | ||
787 | per-dentry lock (d_lock). Once looked up without the dcache_lock, | ||
788 | we acquire the per-dentry lock (d_lock) and check if the | ||
789 | dentry is unhashed. If so, the look-up is failed. If not, the | ||
790 | reference count of the dentry is increased and the dentry is returned. | ||
791 | |||
792 | 4. Once a dentry is looked up, it must be ensured during the path | ||
793 | walk for that component it doesn't go away. In pre-2.5.10 code, | ||
794 | this was done holding a reference to the dentry. dcache_rcu does | ||
795 | the same. In some sense, dcache_rcu path walking looks like | ||
796 | the pre-2.5.10 version. | ||
797 | |||
798 | 5. All dentry hash chain updates must take the dcache_lock as well as | ||
799 | the per-dentry lock in that order. dput() does this to ensure | ||
800 | that a dentry that has just been looked up in another CPU | ||
801 | doesn't get deleted before dget() can be done on it. | ||
802 | |||
803 | 6. There are several ways to do reference counting of RCU protected | ||
804 | objects. One such example is in ipv4 route cache where | ||
805 | deferred freeing (using call_rcu()) is done as soon as | ||
806 | the reference count goes to zero. This cannot be done in | ||
807 | the case of dentries because tearing down of dentries | ||
808 | require blocking (dentry_iput()) which isn't supported from | ||
809 | RCU callbacks. Instead, tearing down of dentries happen | ||
810 | synchronously in dput(), but actual freeing happens later | ||
811 | when RCU grace period is over. This allows safe lock-free | ||
812 | walking of the hash chains, but a matched dentry may have | ||
813 | been partially torn down. The checking of DCACHE_UNHASHED | ||
814 | flag with d_lock held detects such dentries and prevents | ||
815 | them from being returned from look-up. | ||
816 | |||
817 | |||
818 | Maintaining POSIX rename semantics | ||
819 | ================================== | ||
820 | |||
821 | Since look-up of dentries is lock-free, it can race against | ||
822 | a concurrent rename operation. For example, during rename | ||
823 | of file A to B, look-up of either A or B must succeed. | ||
824 | So, if look-up of B happens after A has been removed from the | ||
825 | hash chain but not added to the new hash chain, it may fail. | ||
826 | Also, a comparison while the name is being written concurrently | ||
827 | by a rename may result in false positive matches violating | ||
828 | rename semantics. Issues related to race with rename are | ||
829 | handled as described below : | ||
830 | |||
831 | 1. Look-up can be done in two ways - d_lookup() which is safe | ||
832 | from simultaneous renames and __d_lookup() which is not. | ||
833 | If __d_lookup() fails, it must be followed up by a d_lookup() | ||
834 | to correctly determine whether a dentry is in the hash table | ||
835 | or not. d_lookup() protects look-ups using a sequence | ||
836 | lock (rename_lock). | ||
837 | |||
838 | 2. The name associated with a dentry (d_name) may be changed if | ||
839 | a rename is allowed to happen simultaneously. To avoid memcmp() | ||
840 | in __d_lookup() go out of bounds due to a rename and false | ||
841 | positive comparison, the name comparison is done while holding the | ||
842 | per-dentry lock. This prevents concurrent renames during this | ||
843 | operation. | ||
844 | |||
845 | 3. Hash table walking during look-up may move to a different bucket as | ||
846 | the current dentry is moved to a different bucket due to rename. | ||
847 | But we use hlists in dcache hash table and they are null-terminated. | ||
848 | So, even if a dentry moves to a different bucket, hash chain | ||
849 | walk will terminate. [with a list_head list, it may not since | ||
850 | termination is when the list_head in the original bucket is reached]. | ||
851 | Since we redo the d_parent check and compare name while holding | ||
852 | d_lock, lock-free look-up will not race against d_move(). | ||
853 | |||
854 | 4. There can be a theoretical race when a dentry keeps coming back | ||
855 | to original bucket due to double moves. Due to this look-up may | ||
856 | consider that it has never moved and can end up in a infinite loop. | ||
857 | But this is not any worse that theoretical livelocks we already | ||
858 | have in the kernel. | ||
859 | |||
860 | |||
861 | Important guidelines for filesystem developers related to dcache_rcu | ||
862 | ==================================================================== | ||
863 | |||
864 | 1. Existing dcache interfaces (pre-2.5.62) exported to filesystem | ||
865 | don't change. Only dcache internal implementation changes. However | ||
866 | filesystems *must not* delete from the dentry hash chains directly | ||
867 | using the list macros like allowed earlier. They must use dcache | ||
868 | APIs like d_drop() or __d_drop() depending on the situation. | ||
869 | |||
870 | 2. d_flags is now protected by a per-dentry lock (d_lock). All | ||
871 | access to d_flags must be protected by it. | ||
872 | |||
873 | 3. For a hashed dentry, checking of d_count needs to be protected | ||
874 | by d_lock. | ||
875 | |||
876 | |||
877 | Papers and other documentation on dcache locking | ||
878 | ================================================ | ||
879 | |||
880 | 1. Scaling dcache with RCU (http://linuxjournal.com/article.php?sid=7124). | ||
881 | |||
882 | 2. http://lse.sourceforge.net/locking/dcache/dcache.html | ||
diff --git a/Documentation/hpet.txt b/Documentation/hpet.txt index 4e7cc8d3359b..e52457581f47 100644 --- a/Documentation/hpet.txt +++ b/Documentation/hpet.txt | |||
@@ -1,18 +1,21 @@ | |||
1 | High Precision Event Timer Driver for Linux | 1 | High Precision Event Timer Driver for Linux |
2 | 2 | ||
3 | The High Precision Event Timer (HPET) hardware is the future replacement for the 8254 and Real | 3 | The High Precision Event Timer (HPET) hardware is the future replacement |
4 | Time Clock (RTC) periodic timer functionality. Each HPET can have up two 32 timers. It is possible | 4 | for the 8254 and Real Time Clock (RTC) periodic timer functionality. |
5 | to configure the first two timers as legacy replacements for 8254 and RTC periodic. A specification | 5 | Each HPET can have up two 32 timers. It is possible to configure the |
6 | done by INTEL and Microsoft can be found at http://www.intel.com/labs/platcomp/hpet/hpetspec.htm. | 6 | first two timers as legacy replacements for 8254 and RTC periodic timers. |
7 | 7 | A specification done by Intel and Microsoft can be found at | |
8 | The driver supports detection of HPET driver allocation and initialization of the HPET before the | 8 | <http://www.intel.com/hardwaredesign/hpetspec.htm>. |
9 | driver module_init routine is called. This enables platform code which uses timer 0 or 1 as the | 9 | |
10 | main timer to intercept HPET initialization. An example of this initialization can be found in | 10 | The driver supports detection of HPET driver allocation and initialization |
11 | of the HPET before the driver module_init routine is called. This enables | ||
12 | platform code which uses timer 0 or 1 as the main timer to intercept HPET | ||
13 | initialization. An example of this initialization can be found in | ||
11 | arch/i386/kernel/time_hpet.c. | 14 | arch/i386/kernel/time_hpet.c. |
12 | 15 | ||
13 | The driver provides two APIs which are very similar to the API found in the rtc.c driver. | 16 | The driver provides two APIs which are very similar to the API found in |
14 | There is a user space API and a kernel space API. An example user space program is provided | 17 | the rtc.c driver. There is a user space API and a kernel space API. |
15 | below. | 18 | An example user space program is provided below. |
16 | 19 | ||
17 | #include <stdio.h> | 20 | #include <stdio.h> |
18 | #include <stdlib.h> | 21 | #include <stdlib.h> |
@@ -290,9 +293,8 @@ The kernel API has three interfaces exported from the driver: | |||
290 | hpet_unregister(struct hpet_task *tp) | 293 | hpet_unregister(struct hpet_task *tp) |
291 | hpet_control(struct hpet_task *tp, unsigned int cmd, unsigned long arg) | 294 | hpet_control(struct hpet_task *tp, unsigned int cmd, unsigned long arg) |
292 | 295 | ||
293 | The kernel module using this interface fills in the ht_func and ht_data members of the | 296 | The kernel module using this interface fills in the ht_func and ht_data |
294 | hpet_task structure before calling hpet_register. hpet_control simply vectors to the hpet_ioctl | 297 | members of the hpet_task structure before calling hpet_register. |
295 | routine and has the same commands and respective arguments as the user API. hpet_unregister | 298 | hpet_control simply vectors to the hpet_ioctl routine and has the same |
299 | commands and respective arguments as the user API. hpet_unregister | ||
296 | is used to terminate usage of the HPET timer reserved by hpet_register. | 300 | is used to terminate usage of the HPET timer reserved by hpet_register. |
297 | |||
298 | |||
diff --git a/Documentation/i2c/busses/i2c-viapro b/Documentation/i2c/busses/i2c-viapro index 9363b8bd6109..16775663b9f5 100644 --- a/Documentation/i2c/busses/i2c-viapro +++ b/Documentation/i2c/busses/i2c-viapro | |||
@@ -7,12 +7,10 @@ Supported adapters: | |||
7 | * VIA Technologies, Inc. VT82C686A/B | 7 | * VIA Technologies, Inc. VT82C686A/B |
8 | Datasheet: Sometimes available at the VIA website | 8 | Datasheet: Sometimes available at the VIA website |
9 | 9 | ||
10 | * VIA Technologies, Inc. VT8231, VT8233, VT8233A, VT8235, VT8237 | 10 | * VIA Technologies, Inc. VT8231, VT8233, VT8233A, VT8235, VT8237R |
11 | Datasheet: available on request from Via | 11 | Datasheet: available on request from VIA |
12 | 12 | ||
13 | Authors: | 13 | Authors: |
14 | Frodo Looijaard <frodol@dds.nl>, | ||
15 | Philip Edelbrock <phil@netroedge.com>, | ||
16 | Kyösti Mälkki <kmalkki@cc.hut.fi>, | 14 | Kyösti Mälkki <kmalkki@cc.hut.fi>, |
17 | Mark D. Studebaker <mdsxyz123@yahoo.com>, | 15 | Mark D. Studebaker <mdsxyz123@yahoo.com>, |
18 | Jean Delvare <khali@linux-fr.org> | 16 | Jean Delvare <khali@linux-fr.org> |
diff --git a/Documentation/i2c/writing-clients b/Documentation/i2c/writing-clients index cff7b652588a..d19993cc0604 100644 --- a/Documentation/i2c/writing-clients +++ b/Documentation/i2c/writing-clients | |||
@@ -412,7 +412,7 @@ For now, you can ignore the `flags' parameter. It is there for future use. | |||
412 | release_region(address,FOO_EXTENT); | 412 | release_region(address,FOO_EXTENT); |
413 | /* SENSORS ONLY END */ | 413 | /* SENSORS ONLY END */ |
414 | ERROR1: | 414 | ERROR1: |
415 | kfree(new_client); | 415 | kfree(data); |
416 | ERROR0: | 416 | ERROR0: |
417 | return err; | 417 | return err; |
418 | } | 418 | } |
@@ -443,7 +443,7 @@ much simpler than the attachment code, fortunately! | |||
443 | release_region(client->addr,LM78_EXTENT); | 443 | release_region(client->addr,LM78_EXTENT); |
444 | /* HYBRID SENSORS CHIP ONLY END */ | 444 | /* HYBRID SENSORS CHIP ONLY END */ |
445 | 445 | ||
446 | kfree(data); | 446 | kfree(i2c_get_clientdata(client)); |
447 | return 0; | 447 | return 0; |
448 | } | 448 | } |
449 | 449 | ||
diff --git a/Documentation/ioctl-number.txt b/Documentation/ioctl-number.txt index 769f925c8526..87f4d052e39c 100644 --- a/Documentation/ioctl-number.txt +++ b/Documentation/ioctl-number.txt | |||
@@ -130,8 +130,6 @@ Code Seq# Include File Comments | |||
130 | <mailto:zapman@interlan.net> | 130 | <mailto:zapman@interlan.net> |
131 | 'i' 00-3F linux/i2o.h | 131 | 'i' 00-3F linux/i2o.h |
132 | 'j' 00-3F linux/joystick.h | 132 | 'j' 00-3F linux/joystick.h |
133 | 'k' all asm-sparc/kbio.h | ||
134 | asm-sparc64/kbio.h | ||
135 | 'l' 00-3F linux/tcfs_fs.h transparent cryptographic file system | 133 | 'l' 00-3F linux/tcfs_fs.h transparent cryptographic file system |
136 | <http://mikonos.dia.unisa.it/tcfs> | 134 | <http://mikonos.dia.unisa.it/tcfs> |
137 | 'l' 40-7F linux/udf_fs_i.h in development: | 135 | 'l' 40-7F linux/udf_fs_i.h in development: |
diff --git a/Documentation/magic-number.txt b/Documentation/magic-number.txt index bd8eefa17587..af67faccf4de 100644 --- a/Documentation/magic-number.txt +++ b/Documentation/magic-number.txt | |||
@@ -120,7 +120,7 @@ ISDN_NET_MAGIC 0x49344C02 isdn_net_local_s drivers/isdn/i4l/isdn_net_li | |||
120 | SAVEKMSG_MAGIC2 0x4B4D5347 savekmsg arch/*/amiga/config.c | 120 | SAVEKMSG_MAGIC2 0x4B4D5347 savekmsg arch/*/amiga/config.c |
121 | STLI_BOARDMAGIC 0x4bc6c825 stlibrd include/linux/istallion.h | 121 | STLI_BOARDMAGIC 0x4bc6c825 stlibrd include/linux/istallion.h |
122 | CS_STATE_MAGIC 0x4c4f4749 cs_state sound/oss/cs46xx.c | 122 | CS_STATE_MAGIC 0x4c4f4749 cs_state sound/oss/cs46xx.c |
123 | SLAB_C_MAGIC 0x4f17a36d kmem_cache_s mm/slab.c | 123 | SLAB_C_MAGIC 0x4f17a36d kmem_cache mm/slab.c |
124 | COW_MAGIC 0x4f4f4f4d cow_header_v1 arch/um/drivers/ubd_user.c | 124 | COW_MAGIC 0x4f4f4f4d cow_header_v1 arch/um/drivers/ubd_user.c |
125 | I810_CARD_MAGIC 0x5072696E i810_card sound/oss/i810_audio.c | 125 | I810_CARD_MAGIC 0x5072696E i810_card sound/oss/i810_audio.c |
126 | TRIDENT_CARD_MAGIC 0x5072696E trident_card sound/oss/trident.c | 126 | TRIDENT_CARD_MAGIC 0x5072696E trident_card sound/oss/trident.c |
diff --git a/Documentation/md.txt b/Documentation/md.txt index e2b536992a27..23e6cce40f9c 100644 --- a/Documentation/md.txt +++ b/Documentation/md.txt | |||
@@ -116,3 +116,122 @@ and it's role in the array. | |||
116 | 116 | ||
117 | Once started with RUN_ARRAY, uninitialized spares can be added with | 117 | Once started with RUN_ARRAY, uninitialized spares can be added with |
118 | HOT_ADD_DISK. | 118 | HOT_ADD_DISK. |
119 | |||
120 | |||
121 | |||
122 | MD devices in sysfs | ||
123 | ------------------- | ||
124 | md devices appear in sysfs (/sys) as regular block devices, | ||
125 | e.g. | ||
126 | /sys/block/md0 | ||
127 | |||
128 | Each 'md' device will contain a subdirectory called 'md' which | ||
129 | contains further md-specific information about the device. | ||
130 | |||
131 | All md devices contain: | ||
132 | level | ||
133 | a text file indicating the 'raid level'. This may be a standard | ||
134 | numerical level prefixed by "RAID-" - e.g. "RAID-5", or some | ||
135 | other name such as "linear" or "multipath". | ||
136 | If no raid level has been set yet (array is still being | ||
137 | assembled), this file will be empty. | ||
138 | |||
139 | raid_disks | ||
140 | a text file with a simple number indicating the number of devices | ||
141 | in a fully functional array. If this is not yet known, the file | ||
142 | will be empty. If an array is being resized (not currently | ||
143 | possible) this will contain the larger of the old and new sizes. | ||
144 | |||
145 | As component devices are added to an md array, they appear in the 'md' | ||
146 | directory as new directories named | ||
147 | dev-XXX | ||
148 | where XXX is a name that the kernel knows for the device, e.g. hdb1. | ||
149 | Each directory contains: | ||
150 | |||
151 | block | ||
152 | a symlink to the block device in /sys/block, e.g. | ||
153 | /sys/block/md0/md/dev-hdb1/block -> ../../../../block/hdb/hdb1 | ||
154 | |||
155 | super | ||
156 | A file containing an image of the superblock read from, or | ||
157 | written to, that device. | ||
158 | |||
159 | state | ||
160 | A file recording the current state of the device in the array | ||
161 | which can be a comma separated list of | ||
162 | faulty - device has been kicked from active use due to | ||
163 | a detected fault | ||
164 | in_sync - device is a fully in-sync member of the array | ||
165 | spare - device is working, but not a full member. | ||
166 | This includes spares that are in the process | ||
167 | of being recoverred to | ||
168 | This list make grow in future. | ||
169 | |||
170 | |||
171 | An active md device will also contain and entry for each active device | ||
172 | in the array. These are named | ||
173 | |||
174 | rdNN | ||
175 | |||
176 | where 'NN' is the possition in the array, starting from 0. | ||
177 | So for a 3 drive array there will be rd0, rd1, rd2. | ||
178 | These are symbolic links to the appropriate 'dev-XXX' entry. | ||
179 | Thus, for example, | ||
180 | cat /sys/block/md*/md/rd*/state | ||
181 | will show 'in_sync' on every line. | ||
182 | |||
183 | |||
184 | |||
185 | Active md devices for levels that support data redundancy (1,4,5,6) | ||
186 | also have | ||
187 | |||
188 | sync_action | ||
189 | a text file that can be used to monitor and control the rebuild | ||
190 | process. It contains one word which can be one of: | ||
191 | resync - redundancy is being recalculated after unclean | ||
192 | shutdown or creation | ||
193 | recover - a hot spare is being built to replace a | ||
194 | failed/missing device | ||
195 | idle - nothing is happening | ||
196 | check - A full check of redundancy was requested and is | ||
197 | happening. This reads all block and checks | ||
198 | them. A repair may also happen for some raid | ||
199 | levels. | ||
200 | repair - A full check and repair is happening. This is | ||
201 | similar to 'resync', but was requested by the | ||
202 | user, and the write-intent bitmap is NOT used to | ||
203 | optimise the process. | ||
204 | |||
205 | This file is writable, and each of the strings that could be | ||
206 | read are meaningful for writing. | ||
207 | |||
208 | 'idle' will stop an active resync/recovery etc. There is no | ||
209 | guarantee that another resync/recovery may not be automatically | ||
210 | started again, though some event will be needed to trigger | ||
211 | this. | ||
212 | 'resync' or 'recovery' can be used to restart the | ||
213 | corresponding operation if it was stopped with 'idle'. | ||
214 | 'check' and 'repair' will start the appropriate process | ||
215 | providing the current state is 'idle'. | ||
216 | |||
217 | mismatch_count | ||
218 | When performing 'check' and 'repair', and possibly when | ||
219 | performing 'resync', md will count the number of errors that are | ||
220 | found. The count in 'mismatch_cnt' is the number of sectors | ||
221 | that were re-written, or (for 'check') would have been | ||
222 | re-written. As most raid levels work in units of pages rather | ||
223 | than sectors, this my be larger than the number of actual errors | ||
224 | by a factor of the number of sectors in a page. | ||
225 | |||
226 | Each active md device may also have attributes specific to the | ||
227 | personality module that manages it. | ||
228 | These are specific to the implementation of the module and could | ||
229 | change substantially if the implementation changes. | ||
230 | |||
231 | These currently include | ||
232 | |||
233 | stripe_cache_size (currently raid5 only) | ||
234 | number of entries in the stripe cache. This is writable, but | ||
235 | there are upper and lower limits (32768, 16). Default is 128. | ||
236 | strip_cache_active (currently raid5 only) | ||
237 | number of active entries in the stripe cache | ||
diff --git a/Documentation/networking/README.ipw2100 b/Documentation/networking/README.ipw2100 index 2046948b020d..3ab40379d1cf 100644 --- a/Documentation/networking/README.ipw2100 +++ b/Documentation/networking/README.ipw2100 | |||
@@ -1,27 +1,82 @@ | |||
1 | 1 | ||
2 | =========================== | 2 | Intel(R) PRO/Wireless 2100 Driver for Linux in support of: |
3 | Intel(R) PRO/Wireless 2100 Network Connection Driver for Linux | 3 | |
4 | Intel(R) PRO/Wireless 2100 Network Connection | ||
5 | |||
6 | Copyright (C) 2003-2005, Intel Corporation | ||
7 | |||
4 | README.ipw2100 | 8 | README.ipw2100 |
5 | 9 | ||
6 | March 14, 2005 | 10 | Version: 1.1.3 |
11 | Date : October 17, 2005 | ||
7 | 12 | ||
8 | =========================== | ||
9 | Index | 13 | Index |
10 | --------------------------- | 14 | ----------------------------------------------- |
11 | 0. Introduction | 15 | 0. IMPORTANT INFORMATION BEFORE USING THIS DRIVER |
12 | 1. Release 1.1.0 Current Features | 16 | 1. Introduction |
13 | 2. Command Line Parameters | 17 | 2. Release 1.1.3 Current Features |
14 | 3. Sysfs Helper Files | 18 | 3. Command Line Parameters |
15 | 4. Radio Kill Switch | 19 | 4. Sysfs Helper Files |
16 | 5. Dynamic Firmware | 20 | 5. Radio Kill Switch |
17 | 6. Power Management | 21 | 6. Dynamic Firmware |
18 | 7. Support | 22 | 7. Power Management |
19 | 8. License | 23 | 8. Support |
20 | 24 | 9. License | |
21 | 25 | ||
22 | =========================== | 26 | |
23 | 0. Introduction | 27 | 0. IMPORTANT INFORMATION BEFORE USING THIS DRIVER |
24 | ------------ ----- ----- ---- --- -- - | 28 | ----------------------------------------------- |
29 | |||
30 | Important Notice FOR ALL USERS OR DISTRIBUTORS!!!! | ||
31 | |||
32 | Intel wireless LAN adapters are engineered, manufactured, tested, and | ||
33 | quality checked to ensure that they meet all necessary local and | ||
34 | governmental regulatory agency requirements for the regions that they | ||
35 | are designated and/or marked to ship into. Since wireless LANs are | ||
36 | generally unlicensed devices that share spectrum with radars, | ||
37 | satellites, and other licensed and unlicensed devices, it is sometimes | ||
38 | necessary to dynamically detect, avoid, and limit usage to avoid | ||
39 | interference with these devices. In many instances Intel is required to | ||
40 | provide test data to prove regional and local compliance to regional and | ||
41 | governmental regulations before certification or approval to use the | ||
42 | product is granted. Intel's wireless LAN's EEPROM, firmware, and | ||
43 | software driver are designed to carefully control parameters that affect | ||
44 | radio operation and to ensure electromagnetic compliance (EMC). These | ||
45 | parameters include, without limitation, RF power, spectrum usage, | ||
46 | channel scanning, and human exposure. | ||
47 | |||
48 | For these reasons Intel cannot permit any manipulation by third parties | ||
49 | of the software provided in binary format with the wireless WLAN | ||
50 | adapters (e.g., the EEPROM and firmware). Furthermore, if you use any | ||
51 | patches, utilities, or code with the Intel wireless LAN adapters that | ||
52 | have been manipulated by an unauthorized party (i.e., patches, | ||
53 | utilities, or code (including open source code modifications) which have | ||
54 | not been validated by Intel), (i) you will be solely responsible for | ||
55 | ensuring the regulatory compliance of the products, (ii) Intel will bear | ||
56 | no liability, under any theory of liability for any issues associated | ||
57 | with the modified products, including without limitation, claims under | ||
58 | the warranty and/or issues arising from regulatory non-compliance, and | ||
59 | (iii) Intel will not provide or be required to assist in providing | ||
60 | support to any third parties for such modified products. | ||
61 | |||
62 | Note: Many regulatory agencies consider Wireless LAN adapters to be | ||
63 | modules, and accordingly, condition system-level regulatory approval | ||
64 | upon receipt and review of test data documenting that the antennas and | ||
65 | system configuration do not cause the EMC and radio operation to be | ||
66 | non-compliant. | ||
67 | |||
68 | The drivers available for download from SourceForge are provided as a | ||
69 | part of a development project. Conformance to local regulatory | ||
70 | requirements is the responsibility of the individual developer. As | ||
71 | such, if you are interested in deploying or shipping a driver as part of | ||
72 | solution intended to be used for purposes other than development, please | ||
73 | obtain a tested driver from Intel Customer Support at: | ||
74 | |||
75 | http://support.intel.com/support/notebook/sb/CS-006408.htm | ||
76 | |||
77 | |||
78 | 1. Introduction | ||
79 | ----------------------------------------------- | ||
25 | 80 | ||
26 | This document provides a brief overview of the features supported by the | 81 | This document provides a brief overview of the features supported by the |
27 | IPW2100 driver project. The main project website, where the latest | 82 | IPW2100 driver project. The main project website, where the latest |
@@ -34,9 +89,8 @@ potential fixes and patches, as well as links to the development mailing list | |||
34 | for the driver project. | 89 | for the driver project. |
35 | 90 | ||
36 | 91 | ||
37 | =========================== | 92 | 2. Release 1.1.3 Current Supported Features |
38 | 1. Release 1.1.0 Current Supported Features | 93 | ----------------------------------------------- |
39 | --------------------------- | ||
40 | - Managed (BSS) and Ad-Hoc (IBSS) | 94 | - Managed (BSS) and Ad-Hoc (IBSS) |
41 | - WEP (shared key and open) | 95 | - WEP (shared key and open) |
42 | - Wireless Tools support | 96 | - Wireless Tools support |
@@ -51,9 +105,8 @@ on the amount of validation and interoperability testing that has been | |||
51 | performed on a given feature. | 105 | performed on a given feature. |
52 | 106 | ||
53 | 107 | ||
54 | =========================== | 108 | 3. Command Line Parameters |
55 | 2. Command Line Parameters | 109 | ----------------------------------------------- |
56 | --------------------------- | ||
57 | 110 | ||
58 | If the driver is built as a module, the following optional parameters are used | 111 | If the driver is built as a module, the following optional parameters are used |
59 | by entering them on the command line with the modprobe command using this | 112 | by entering them on the command line with the modprobe command using this |
@@ -75,9 +128,9 @@ associate boolean associate=0 /* Do NOT auto associate */ | |||
75 | disable boolean disable=1 /* Do not power the HW */ | 128 | disable boolean disable=1 /* Do not power the HW */ |
76 | 129 | ||
77 | 130 | ||
78 | =========================== | 131 | 4. Sysfs Helper Files |
79 | 3. Sysfs Helper Files | ||
80 | --------------------------- | 132 | --------------------------- |
133 | ----------------------------------------------- | ||
81 | 134 | ||
82 | There are several ways to control the behavior of the driver. Many of the | 135 | There are several ways to control the behavior of the driver. Many of the |
83 | general capabilities are exposed through the Wireless Tools (iwconfig). There | 136 | general capabilities are exposed through the Wireless Tools (iwconfig). There |
@@ -120,9 +173,8 @@ For the device level files, see /sys/bus/pci/drivers/ipw2100: | |||
120 | based RF kill from ON -> OFF -> ON, the radio will NOT come back on | 173 | based RF kill from ON -> OFF -> ON, the radio will NOT come back on |
121 | 174 | ||
122 | 175 | ||
123 | =========================== | 176 | 5. Radio Kill Switch |
124 | 4. Radio Kill Switch | 177 | ----------------------------------------------- |
125 | --------------------------- | ||
126 | Most laptops provide the ability for the user to physically disable the radio. | 178 | Most laptops provide the ability for the user to physically disable the radio. |
127 | Some vendors have implemented this as a physical switch that requires no | 179 | Some vendors have implemented this as a physical switch that requires no |
128 | software to turn the radio off and on. On other laptops, however, the switch | 180 | software to turn the radio off and on. On other laptops, however, the switch |
@@ -134,9 +186,8 @@ See the Sysfs helper file 'rf_kill' for determining the state of the RF switch | |||
134 | on your system. | 186 | on your system. |
135 | 187 | ||
136 | 188 | ||
137 | =========================== | 189 | 6. Dynamic Firmware |
138 | 5. Dynamic Firmware | 190 | ----------------------------------------------- |
139 | --------------------------- | ||
140 | As the firmware is licensed under a restricted use license, it can not be | 191 | As the firmware is licensed under a restricted use license, it can not be |
141 | included within the kernel sources. To enable the IPW2100 you will need a | 192 | included within the kernel sources. To enable the IPW2100 you will need a |
142 | firmware image to load into the wireless NIC's processors. | 193 | firmware image to load into the wireless NIC's processors. |
@@ -146,9 +197,8 @@ You can obtain these images from <http://ipw2100.sf.net/firmware.php>. | |||
146 | See INSTALL for instructions on installing the firmware. | 197 | See INSTALL for instructions on installing the firmware. |
147 | 198 | ||
148 | 199 | ||
149 | =========================== | 200 | 7. Power Management |
150 | 6. Power Management | 201 | ----------------------------------------------- |
151 | --------------------------- | ||
152 | The IPW2100 supports the configuration of the Power Save Protocol | 202 | The IPW2100 supports the configuration of the Power Save Protocol |
153 | through a private wireless extension interface. The IPW2100 supports | 203 | through a private wireless extension interface. The IPW2100 supports |
154 | the following different modes: | 204 | the following different modes: |
@@ -200,9 +250,8 @@ xxxx/yyyy will be replaced with 'off' -- the level reported will be the active | |||
200 | level if `iwconfig eth1 power on` is invoked. | 250 | level if `iwconfig eth1 power on` is invoked. |
201 | 251 | ||
202 | 252 | ||
203 | =========================== | 253 | 8. Support |
204 | 7. Support | 254 | ----------------------------------------------- |
205 | --------------------------- | ||
206 | 255 | ||
207 | For general development information and support, | 256 | For general development information and support, |
208 | go to: | 257 | go to: |
@@ -218,9 +267,8 @@ For installation support on the ipw2100 1.1.0 driver on Linux kernels | |||
218 | 267 | ||
219 | http://supportmail.intel.com | 268 | http://supportmail.intel.com |
220 | 269 | ||
221 | =========================== | 270 | 9. License |
222 | 8. License | 271 | ----------------------------------------------- |
223 | --------------------------- | ||
224 | 272 | ||
225 | Copyright(c) 2003 - 2005 Intel Corporation. All rights reserved. | 273 | Copyright(c) 2003 - 2005 Intel Corporation. All rights reserved. |
226 | 274 | ||
diff --git a/Documentation/networking/README.ipw2200 b/Documentation/networking/README.ipw2200 index 6916080c5f03..c6492d3839fa 100644 --- a/Documentation/networking/README.ipw2200 +++ b/Documentation/networking/README.ipw2200 | |||
@@ -1,33 +1,89 @@ | |||
1 | 1 | ||
2 | Intel(R) PRO/Wireless 2915ABG Driver for Linux in support of: | 2 | Intel(R) PRO/Wireless 2915ABG Driver for Linux in support of: |
3 | 3 | ||
4 | Intel(R) PRO/Wireless 2200BG Network Connection | 4 | Intel(R) PRO/Wireless 2200BG Network Connection |
5 | Intel(R) PRO/Wireless 2915ABG Network Connection | 5 | Intel(R) PRO/Wireless 2915ABG Network Connection |
6 | 6 | ||
7 | Note: The Intel(R) PRO/Wireless 2915ABG Driver for Linux and Intel(R) | 7 | Note: The Intel(R) PRO/Wireless 2915ABG Driver for Linux and Intel(R) |
8 | PRO/Wireless 2200BG Driver for Linux is a unified driver that works on | 8 | PRO/Wireless 2200BG Driver for Linux is a unified driver that works on |
9 | both hardware adapters listed above. In this document the Intel(R) | 9 | both hardware adapters listed above. In this document the Intel(R) |
10 | PRO/Wireless 2915ABG Driver for Linux will be used to reference the | 10 | PRO/Wireless 2915ABG Driver for Linux will be used to reference the |
11 | unified driver. | 11 | unified driver. |
12 | 12 | ||
13 | Copyright (C) 2004-2005, Intel Corporation | 13 | Copyright (C) 2004-2005, Intel Corporation |
14 | 14 | ||
15 | README.ipw2200 | 15 | README.ipw2200 |
16 | 16 | ||
17 | Version: 1.0.0 | 17 | Version: 1.0.8 |
18 | Date : January 31, 2005 | 18 | Date : October 20, 2005 |
19 | 19 | ||
20 | 20 | ||
21 | Index | 21 | Index |
22 | ----------------------------------------------- | 22 | ----------------------------------------------- |
23 | 0. IMPORTANT INFORMATION BEFORE USING THIS DRIVER | ||
23 | 1. Introduction | 24 | 1. Introduction |
24 | 1.1. Overview of features | 25 | 1.1. Overview of features |
25 | 1.2. Module parameters | 26 | 1.2. Module parameters |
26 | 1.3. Wireless Extension Private Methods | 27 | 1.3. Wireless Extension Private Methods |
27 | 1.4. Sysfs Helper Files | 28 | 1.4. Sysfs Helper Files |
28 | 2. About the Version Numbers | 29 | 2. Ad-Hoc Networking |
29 | 3. Support | 30 | 3. Interacting with Wireless Tools |
30 | 4. License | 31 | 3.1. iwconfig mode |
32 | 4. About the Version Numbers | ||
33 | 5. Firmware installation | ||
34 | 6. Support | ||
35 | 7. License | ||
36 | |||
37 | |||
38 | 0. IMPORTANT INFORMATION BEFORE USING THIS DRIVER | ||
39 | ----------------------------------------------- | ||
40 | |||
41 | Important Notice FOR ALL USERS OR DISTRIBUTORS!!!! | ||
42 | |||
43 | Intel wireless LAN adapters are engineered, manufactured, tested, and | ||
44 | quality checked to ensure that they meet all necessary local and | ||
45 | governmental regulatory agency requirements for the regions that they | ||
46 | are designated and/or marked to ship into. Since wireless LANs are | ||
47 | generally unlicensed devices that share spectrum with radars, | ||
48 | satellites, and other licensed and unlicensed devices, it is sometimes | ||
49 | necessary to dynamically detect, avoid, and limit usage to avoid | ||
50 | interference with these devices. In many instances Intel is required to | ||
51 | provide test data to prove regional and local compliance to regional and | ||
52 | governmental regulations before certification or approval to use the | ||
53 | product is granted. Intel's wireless LAN's EEPROM, firmware, and | ||
54 | software driver are designed to carefully control parameters that affect | ||
55 | radio operation and to ensure electromagnetic compliance (EMC). These | ||
56 | parameters include, without limitation, RF power, spectrum usage, | ||
57 | channel scanning, and human exposure. | ||
58 | |||
59 | For these reasons Intel cannot permit any manipulation by third parties | ||
60 | of the software provided in binary format with the wireless WLAN | ||
61 | adapters (e.g., the EEPROM and firmware). Furthermore, if you use any | ||
62 | patches, utilities, or code with the Intel wireless LAN adapters that | ||
63 | have been manipulated by an unauthorized party (i.e., patches, | ||
64 | utilities, or code (including open source code modifications) which have | ||
65 | not been validated by Intel), (i) you will be solely responsible for | ||
66 | ensuring the regulatory compliance of the products, (ii) Intel will bear | ||
67 | no liability, under any theory of liability for any issues associated | ||
68 | with the modified products, including without limitation, claims under | ||
69 | the warranty and/or issues arising from regulatory non-compliance, and | ||
70 | (iii) Intel will not provide or be required to assist in providing | ||
71 | support to any third parties for such modified products. | ||
72 | |||
73 | Note: Many regulatory agencies consider Wireless LAN adapters to be | ||
74 | modules, and accordingly, condition system-level regulatory approval | ||
75 | upon receipt and review of test data documenting that the antennas and | ||
76 | system configuration do not cause the EMC and radio operation to be | ||
77 | non-compliant. | ||
78 | |||
79 | The drivers available for download from SourceForge are provided as a | ||
80 | part of a development project. Conformance to local regulatory | ||
81 | requirements is the responsibility of the individual developer. As | ||
82 | such, if you are interested in deploying or shipping a driver as part of | ||
83 | solution intended to be used for purposes other than development, please | ||
84 | obtain a tested driver from Intel Customer Support at: | ||
85 | |||
86 | http://support.intel.com/support/notebook/sb/CS-006408.htm | ||
31 | 87 | ||
32 | 88 | ||
33 | 1. Introduction | 89 | 1. Introduction |
@@ -45,7 +101,7 @@ file. | |||
45 | 101 | ||
46 | 1.1. Overview of Features | 102 | 1.1. Overview of Features |
47 | ----------------------------------------------- | 103 | ----------------------------------------------- |
48 | The current release (1.0.0) supports the following features: | 104 | The current release (1.0.8) supports the following features: |
49 | 105 | ||
50 | + BSS mode (Infrastructure, Managed) | 106 | + BSS mode (Infrastructure, Managed) |
51 | + IBSS mode (Ad-Hoc) | 107 | + IBSS mode (Ad-Hoc) |
@@ -56,17 +112,27 @@ The current release (1.0.0) supports the following features: | |||
56 | + Full A rate support (2915 only) | 112 | + Full A rate support (2915 only) |
57 | + Transmit power control | 113 | + Transmit power control |
58 | + S state support (ACPI suspend/resume) | 114 | + S state support (ACPI suspend/resume) |
115 | |||
116 | The following features are currently enabled, but not officially | ||
117 | supported: | ||
118 | |||
119 | + WPA | ||
59 | + long/short preamble support | 120 | + long/short preamble support |
121 | + Monitor mode (aka RFMon) | ||
122 | |||
123 | The distinction between officially supported and enabled is a reflection | ||
124 | on the amount of validation and interoperability testing that has been | ||
125 | performed on a given feature. | ||
60 | 126 | ||
61 | 127 | ||
62 | 128 | ||
63 | 1.2. Command Line Parameters | 129 | 1.2. Command Line Parameters |
64 | ----------------------------------------------- | 130 | ----------------------------------------------- |
65 | 131 | ||
66 | Like many modules used in the Linux kernel, the Intel(R) PRO/Wireless | 132 | Like many modules used in the Linux kernel, the Intel(R) PRO/Wireless |
67 | 2915ABG Driver for Linux allows certain configuration options to be | 133 | 2915ABG Driver for Linux allows configuration options to be provided |
68 | provided as module parameters. The most common way to specify a module | 134 | as module parameters. The most common way to specify a module parameter |
69 | parameter is via the command line. | 135 | is via the command line. |
70 | 136 | ||
71 | The general form is: | 137 | The general form is: |
72 | 138 | ||
@@ -96,14 +162,18 @@ Where the supported parameter are: | |||
96 | 162 | ||
97 | debug | 163 | debug |
98 | If using a debug build, this is used to control the amount of debug | 164 | If using a debug build, this is used to control the amount of debug |
99 | info is logged. See the 'dval' and 'load' script for more info on | 165 | info is logged. See the 'dvals' and 'load' script for more info on |
100 | how to use this (the dval and load scripts are provided as part | 166 | how to use this (the dvals and load scripts are provided as part |
101 | of the ipw2200 development snapshot releases available from the | 167 | of the ipw2200 development snapshot releases available from the |
102 | SourceForge project at http://ipw2200.sf.net) | 168 | SourceForge project at http://ipw2200.sf.net) |
169 | |||
170 | led | ||
171 | Can be used to turn on experimental LED code. | ||
172 | 0 = Off, 1 = On. Default is 0. | ||
103 | 173 | ||
104 | mode | 174 | mode |
105 | Can be used to set the default mode of the adapter. | 175 | Can be used to set the default mode of the adapter. |
106 | 0 = Managed, 1 = Ad-Hoc | 176 | 0 = Managed, 1 = Ad-Hoc, 2 = Monitor |
107 | 177 | ||
108 | 178 | ||
109 | 1.3. Wireless Extension Private Methods | 179 | 1.3. Wireless Extension Private Methods |
@@ -164,8 +234,8 @@ The supported private methods are: | |||
164 | ----------------------------------------------- | 234 | ----------------------------------------------- |
165 | 235 | ||
166 | The Linux kernel provides a pseudo file system that can be used to | 236 | The Linux kernel provides a pseudo file system that can be used to |
167 | access various components of the operating system. The Intel(R) | 237 | access various components of the operating system. The Intel(R) |
168 | PRO/Wireless 2915ABG Driver for Linux exposes several configuration | 238 | PRO/Wireless 2915ABG Driver for Linux exposes several configuration |
169 | parameters through this mechanism. | 239 | parameters through this mechanism. |
170 | 240 | ||
171 | An entry in the sysfs can support reading and/or writing. You can | 241 | An entry in the sysfs can support reading and/or writing. You can |
@@ -184,13 +254,13 @@ You can set the debug level via: | |||
184 | 254 | ||
185 | Where $VALUE would be a number in the case of this sysfs entry. The | 255 | Where $VALUE would be a number in the case of this sysfs entry. The |
186 | input to sysfs files does not have to be a number. For example, the | 256 | input to sysfs files does not have to be a number. For example, the |
187 | firmware loader used by hotplug utilizes sysfs entries for transferring | 257 | firmware loader used by hotplug utilizes sysfs entries for transfering |
188 | the firmware image from user space into the driver. | 258 | the firmware image from user space into the driver. |
189 | 259 | ||
190 | The Intel(R) PRO/Wireless 2915ABG Driver for Linux exposes sysfs entries | 260 | The Intel(R) PRO/Wireless 2915ABG Driver for Linux exposes sysfs entries |
191 | at two levels -- driver level, which apply to all instances of the | 261 | at two levels -- driver level, which apply to all instances of the driver |
192 | driver (in the event that there are more than one device installed) and | 262 | (in the event that there are more than one device installed) and device |
193 | device level, which applies only to the single specific instance. | 263 | level, which applies only to the single specific instance. |
194 | 264 | ||
195 | 265 | ||
196 | 1.4.1 Driver Level Sysfs Helper Files | 266 | 1.4.1 Driver Level Sysfs Helper Files |
@@ -203,6 +273,7 @@ For the driver level files, look in /sys/bus/pci/drivers/ipw2200/ | |||
203 | This controls the same global as the 'debug' module parameter | 273 | This controls the same global as the 'debug' module parameter |
204 | 274 | ||
205 | 275 | ||
276 | |||
206 | 1.4.2 Device Level Sysfs Helper Files | 277 | 1.4.2 Device Level Sysfs Helper Files |
207 | ----------------------------------------------- | 278 | ----------------------------------------------- |
208 | 279 | ||
@@ -213,7 +284,7 @@ For the device level files, look in | |||
213 | For example: | 284 | For example: |
214 | /sys/bus/pci/drivers/ipw2200/0000:02:01.0 | 285 | /sys/bus/pci/drivers/ipw2200/0000:02:01.0 |
215 | 286 | ||
216 | For the device level files, see /sys/bus/pci/[drivers/ipw2200: | 287 | For the device level files, see /sys/bus/pci/drivers/ipw2200: |
217 | 288 | ||
218 | rf_kill | 289 | rf_kill |
219 | read - | 290 | read - |
@@ -231,8 +302,59 @@ For the device level files, see /sys/bus/pci/[drivers/ipw2200: | |||
231 | ucode | 302 | ucode |
232 | read-only access to the ucode version number | 303 | read-only access to the ucode version number |
233 | 304 | ||
305 | led | ||
306 | read - | ||
307 | 0 = LED code disabled | ||
308 | 1 = LED code enabled | ||
309 | write - | ||
310 | 0 = Disable LED code | ||
311 | 1 = Enable LED code | ||
312 | |||
313 | NOTE: The LED code has been reported to hang some systems when | ||
314 | running ifconfig and is therefore disabled by default. | ||
315 | |||
316 | |||
317 | 2. Ad-Hoc Networking | ||
318 | ----------------------------------------------- | ||
319 | |||
320 | When using a device in an Ad-Hoc network, it is useful to understand the | ||
321 | sequence and requirements for the driver to be able to create, join, or | ||
322 | merge networks. | ||
323 | |||
324 | The following attempts to provide enough information so that you can | ||
325 | have a consistent experience while using the driver as a member of an | ||
326 | Ad-Hoc network. | ||
327 | |||
328 | 2.1. Joining an Ad-Hoc Network | ||
329 | ----------------------------------------------- | ||
330 | |||
331 | The easiest way to get onto an Ad-Hoc network is to join one that | ||
332 | already exists. | ||
234 | 333 | ||
235 | 2. About the Version Numbers | 334 | 2.2. Creating an Ad-Hoc Network |
335 | ----------------------------------------------- | ||
336 | |||
337 | An Ad-Hoc networks is created using the syntax of the Wireless tool. | ||
338 | |||
339 | For Example: | ||
340 | iwconfig eth1 mode ad-hoc essid testing channel 2 | ||
341 | |||
342 | 2.3. Merging Ad-Hoc Networks | ||
343 | ----------------------------------------------- | ||
344 | |||
345 | |||
346 | 3. Interaction with Wireless Tools | ||
347 | ----------------------------------------------- | ||
348 | |||
349 | 3.1 iwconfig mode | ||
350 | ----------------------------------------------- | ||
351 | |||
352 | When configuring the mode of the adapter, all run-time configured parameters | ||
353 | are reset to the value used when the module was loaded. This includes | ||
354 | channels, rates, ESSID, etc. | ||
355 | |||
356 | |||
357 | 4. About the Version Numbers | ||
236 | ----------------------------------------------- | 358 | ----------------------------------------------- |
237 | 359 | ||
238 | Due to the nature of open source development projects, there are | 360 | Due to the nature of open source development projects, there are |
@@ -259,12 +381,23 @@ available as quickly as possible, unknown anomalies should be expected. | |||
259 | The major version number will be incremented when significant changes | 381 | The major version number will be incremented when significant changes |
260 | are made to the driver. Currently, there are no major changes planned. | 382 | are made to the driver. Currently, there are no major changes planned. |
261 | 383 | ||
384 | 5. Firmware installation | ||
385 | ---------------------------------------------- | ||
386 | |||
387 | The driver requires a firmware image, download it and extract the | ||
388 | files under /lib/firmware (or wherever your hotplug's firmware.agent | ||
389 | will look for firmware files) | ||
390 | |||
391 | The firmware can be downloaded from the following URL: | ||
262 | 392 | ||
263 | 3. Support | 393 | http://ipw2200.sf.net/ |
394 | |||
395 | |||
396 | 6. Support | ||
264 | ----------------------------------------------- | 397 | ----------------------------------------------- |
265 | 398 | ||
266 | For installation support of the 1.0.0 version, you can contact | 399 | For direct support of the 1.0.0 version, you can contact |
267 | http://supportmail.intel.com, or you can use the open source project | 400 | http://supportmail.intel.com, or you can use the open source project |
268 | support. | 401 | support. |
269 | 402 | ||
270 | For general information and support, go to: | 403 | For general information and support, go to: |
@@ -272,7 +405,7 @@ For general information and support, go to: | |||
272 | http://ipw2200.sf.net/ | 405 | http://ipw2200.sf.net/ |
273 | 406 | ||
274 | 407 | ||
275 | 4. License | 408 | 7. License |
276 | ----------------------------------------------- | 409 | ----------------------------------------------- |
277 | 410 | ||
278 | Copyright(c) 2003 - 2005 Intel Corporation. All rights reserved. | 411 | Copyright(c) 2003 - 2005 Intel Corporation. All rights reserved. |
@@ -297,4 +430,3 @@ For general information and support, go to: | |||
297 | James P. Ketrenos <ipw2100-admin@linux.intel.com> | 430 | James P. Ketrenos <ipw2100-admin@linux.intel.com> |
298 | Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 | 431 | Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
299 | 432 | ||
300 | |||
diff --git a/Documentation/networking/dccp.txt b/Documentation/networking/dccp.txt new file mode 100644 index 000000000000..c45daabd3bfe --- /dev/null +++ b/Documentation/networking/dccp.txt | |||
@@ -0,0 +1,56 @@ | |||
1 | DCCP protocol | ||
2 | ============ | ||
3 | |||
4 | Last updated: 10 November 2005 | ||
5 | |||
6 | Contents | ||
7 | ======== | ||
8 | |||
9 | - Introduction | ||
10 | - Missing features | ||
11 | - Socket options | ||
12 | - Notes | ||
13 | |||
14 | Introduction | ||
15 | ============ | ||
16 | |||
17 | Datagram Congestion Control Protocol (DCCP) is an unreliable, connection | ||
18 | based protocol designed to solve issues present in UDP and TCP particularly | ||
19 | for real time and multimedia traffic. | ||
20 | |||
21 | It has a base protocol and pluggable congestion control IDs (CCIDs). | ||
22 | |||
23 | It is at draft RFC status and the homepage for DCCP as a protocol is at: | ||
24 | http://www.icir.org/kohler/dcp/ | ||
25 | |||
26 | Missing features | ||
27 | ================ | ||
28 | |||
29 | The DCCP implementation does not currently have all the features that are in | ||
30 | the draft RFC. | ||
31 | |||
32 | In particular the following are missing: | ||
33 | - CCID2 support | ||
34 | - feature negotiation | ||
35 | |||
36 | When testing against other implementations it appears that elapsed time | ||
37 | options are not coded compliant to the specification. | ||
38 | |||
39 | Socket options | ||
40 | ============== | ||
41 | |||
42 | DCCP_SOCKOPT_PACKET_SIZE is used for CCID3 to set default packet size for | ||
43 | calculations. | ||
44 | |||
45 | DCCP_SOCKOPT_SERVICE sets the service. This is compulsory as per the | ||
46 | specification. If you don't set it you will get EPROTO. | ||
47 | |||
48 | Notes | ||
49 | ===== | ||
50 | |||
51 | SELinux does not yet have support for DCCP. You will need to turn it off or | ||
52 | else you will get EACCES. | ||
53 | |||
54 | DCCP does not travel through NAT successfully at present. This is because | ||
55 | the checksum covers the psuedo-header as per TCP and UDP. It should be | ||
56 | relatively trivial to add Linux NAT support for DCCP. | ||
diff --git a/Documentation/networking/decnet.txt b/Documentation/networking/decnet.txt index c6bd25f5d61d..e6c39c5831f5 100644 --- a/Documentation/networking/decnet.txt +++ b/Documentation/networking/decnet.txt | |||
@@ -176,8 +176,6 @@ information (_most_ of which _is_ _essential_) includes: | |||
176 | - Which client caused the problem ? | 176 | - Which client caused the problem ? |
177 | - How much data was being transferred ? | 177 | - How much data was being transferred ? |
178 | - Was the network congested ? | 178 | - Was the network congested ? |
179 | - If there was a kernel panic, please run the output through ksymoops | ||
180 | before sending it to me, otherwise its _useless_. | ||
181 | - How can the problem be reproduced ? | 179 | - How can the problem be reproduced ? |
182 | - Can you use tcpdump to get a trace ? (N.B. Most (all?) versions of | 180 | - Can you use tcpdump to get a trace ? (N.B. Most (all?) versions of |
183 | tcpdump don't understand how to dump DECnet properly, so including | 181 | tcpdump don't understand how to dump DECnet properly, so including |
diff --git a/Documentation/networking/ip-sysctl.txt b/Documentation/networking/ip-sysctl.txt index 65895bb51414..ebc09a159f62 100644 --- a/Documentation/networking/ip-sysctl.txt +++ b/Documentation/networking/ip-sysctl.txt | |||
@@ -78,6 +78,11 @@ inet_peer_gc_maxtime - INTEGER | |||
78 | 78 | ||
79 | TCP variables: | 79 | TCP variables: |
80 | 80 | ||
81 | tcp_abc - INTEGER | ||
82 | Controls Appropriate Byte Count defined in RFC3465. If set to | ||
83 | 0 then does congestion avoid once per ack. 1 is conservative | ||
84 | value, and 2 is more agressive. | ||
85 | |||
81 | tcp_syn_retries - INTEGER | 86 | tcp_syn_retries - INTEGER |
82 | Number of times initial SYNs for an active TCP connection attempt | 87 | Number of times initial SYNs for an active TCP connection attempt |
83 | will be retransmitted. Should not be higher than 255. Default value | 88 | will be retransmitted. Should not be higher than 255. Default value |
diff --git a/Documentation/networking/s2io.txt b/Documentation/networking/s2io.txt index 6726b524ec45..bd528ffbeb4b 100644 --- a/Documentation/networking/s2io.txt +++ b/Documentation/networking/s2io.txt | |||
@@ -1,48 +1,153 @@ | |||
1 | S2IO Technologies XFrame 10 Gig adapter. | 1 | Release notes for Neterion's (Formerly S2io) Xframe I/II PCI-X 10GbE driver. |
2 | ------------------------------------------- | 2 | |
3 | 3 | Contents | |
4 | I. Module loadable parameters. | 4 | ======= |
5 | When loaded as a module, the driver provides a host of Module loadable | 5 | - 1. Introduction |
6 | parameters, so the device can be tuned as per the users needs. | 6 | - 2. Identifying the adapter/interface |
7 | A list of the Module params is given below. | 7 | - 3. Features supported |
8 | (i) ring_num: This can be used to program the number of | 8 | - 4. Command line parameters |
9 | receive rings used in the driver. | 9 | - 5. Performance suggestions |
10 | (ii) ring_len: This defines the number of descriptors each ring | 10 | - 6. Available Downloads |
11 | can have. There can be a maximum of 8 rings. | 11 | |
12 | (iii) frame_len: This is an array of size 8. Using this we can | 12 | |
13 | set the maximum size of the received frame that can | 13 | 1. Introduction: |
14 | be steered into the corrsponding receive ring. | 14 | This Linux driver supports Neterion's Xframe I PCI-X 1.0 and |
15 | (iv) fifo_num: This defines the number of Tx FIFOs thats used in | 15 | Xframe II PCI-X 2.0 adapters. It supports several features |
16 | the driver. | 16 | such as jumbo frames, MSI/MSI-X, checksum offloads, TSO, UFO and so on. |
17 | (v) fifo_len: Each element defines the number of | 17 | See below for complete list of features. |
18 | Tx descriptors that can be associated with each | 18 | All features are supported for both IPv4 and IPv6. |
19 | corresponding FIFO. There are a maximum of 8 FIFOs. | 19 | |
20 | (vi) tx_prio: This is a bool, if module is loaded with a non-zero | 20 | 2. Identifying the adapter/interface: |
21 | value for tx_prio multi FIFO scheme is activated. | 21 | a. Insert the adapter(s) in your system. |
22 | (vii) rx_prio: This is a bool, if module is loaded with a non-zero | 22 | b. Build and load driver |
23 | value for tx_prio multi RING scheme is activated. | 23 | # insmod s2io.ko |
24 | (viii) latency_timer: The value given against this param will be | 24 | c. View log messages |
25 | loaded into the latency timer register in PCI Config | 25 | # dmesg | tail -40 |
26 | space, else the register is left with its reset value. | 26 | You will see messages similar to: |
27 | 27 | eth3: Neterion Xframe I 10GbE adapter (rev 3), Version 2.0.9.1, Intr type INTA | |
28 | II. Performance tuning. | 28 | eth4: Neterion Xframe II 10GbE adapter (rev 2), Version 2.0.9.1, Intr type INTA |
29 | By changing a few sysctl parameters. | 29 | eth4: Device is on 64 bit 133MHz PCIX(M1) bus |
30 | Copy the following lines into a file and run the following command, | 30 | |
31 | "sysctl -p <file_name>" | 31 | The above messages identify the adapter type(Xframe I/II), adapter revision, |
32 | ### IPV4 specific settings | 32 | driver version, interface name(eth3, eth4), Interrupt type(INTA, MSI, MSI-X). |
33 | net.ipv4.tcp_timestamps = 0 # turns TCP timestamp support off, default 1, reduces CPU use | 33 | In case of Xframe II, the PCI/PCI-X bus width and frequency are displayed |
34 | net.ipv4.tcp_sack = 0 # turn SACK support off, default on | 34 | as well. |
35 | # on systems with a VERY fast bus -> memory interface this is the big gainer | 35 | |
36 | net.ipv4.tcp_rmem = 10000000 10000000 10000000 # sets min/default/max TCP read buffer, default 4096 87380 174760 | 36 | To associate an interface with a physical adapter use "ethtool -p <ethX>". |
37 | net.ipv4.tcp_wmem = 10000000 10000000 10000000 # sets min/pressure/max TCP write buffer, default 4096 16384 131072 | 37 | The corresponding adapter's LED will blink multiple times. |
38 | net.ipv4.tcp_mem = 10000000 10000000 10000000 # sets min/pressure/max TCP buffer space, default 31744 32256 32768 | 38 | |
39 | 39 | 3. Features supported: | |
40 | ### CORE settings (mostly for socket and UDP effect) | 40 | a. Jumbo frames. Xframe I/II supports MTU upto 9600 bytes, |
41 | net.core.rmem_max = 524287 # maximum receive socket buffer size, default 131071 | 41 | modifiable using ifconfig command. |
42 | net.core.wmem_max = 524287 # maximum send socket buffer size, default 131071 | 42 | |
43 | net.core.rmem_default = 524287 # default receive socket buffer size, default 65535 | 43 | b. Offloads. Supports checksum offload(TCP/UDP/IP) on transmit |
44 | net.core.wmem_default = 524287 # default send socket buffer size, default 65535 | 44 | and receive, TSO. |
45 | net.core.optmem_max = 524287 # maximum amount of option memory buffers, default 10240 | 45 | |
46 | net.core.netdev_max_backlog = 300000 # number of unprocessed input packets before kernel starts dropping them, default 300 | 46 | c. Multi-buffer receive mode. Scattering of packet across multiple |
47 | ---End of performance tuning file--- | 47 | buffers. Currently driver supports 2-buffer mode which yields |
48 | significant performance improvement on certain platforms(SGI Altix, | ||
49 | IBM xSeries). | ||
50 | |||
51 | d. MSI/MSI-X. Can be enabled on platforms which support this feature | ||
52 | (IA64, Xeon) resulting in noticeable performance improvement(upto 7% | ||
53 | on certain platforms). | ||
54 | |||
55 | e. NAPI. Compile-time option(CONFIG_S2IO_NAPI) for better Rx interrupt | ||
56 | moderation. | ||
57 | |||
58 | f. Statistics. Comprehensive MAC-level and software statistics displayed | ||
59 | using "ethtool -S" option. | ||
60 | |||
61 | g. Multi-FIFO/Ring. Supports up to 8 transmit queues and receive rings, | ||
62 | with multiple steering options. | ||
63 | |||
64 | 4. Command line parameters | ||
65 | a. tx_fifo_num | ||
66 | Number of transmit queues | ||
67 | Valid range: 1-8 | ||
68 | Default: 1 | ||
69 | |||
70 | b. rx_ring_num | ||
71 | Number of receive rings | ||
72 | Valid range: 1-8 | ||
73 | Default: 1 | ||
74 | |||
75 | c. tx_fifo_len | ||
76 | Size of each transmit queue | ||
77 | Valid range: Total length of all queues should not exceed 8192 | ||
78 | Default: 4096 | ||
79 | |||
80 | d. rx_ring_sz | ||
81 | Size of each receive ring(in 4K blocks) | ||
82 | Valid range: Limited by memory on system | ||
83 | Default: 30 | ||
84 | |||
85 | e. intr_type | ||
86 | Specifies interrupt type. Possible values 1(INTA), 2(MSI), 3(MSI-X) | ||
87 | Valid range: 1-3 | ||
88 | Default: 1 | ||
89 | |||
90 | 5. Performance suggestions | ||
91 | General: | ||
92 | a. Set MTU to maximum(9000 for switch setup, 9600 in back-to-back configuration) | ||
93 | b. Set TCP windows size to optimal value. | ||
94 | For instance, for MTU=1500 a value of 210K has been observed to result in | ||
95 | good performance. | ||
96 | # sysctl -w net.ipv4.tcp_rmem="210000 210000 210000" | ||
97 | # sysctl -w net.ipv4.tcp_wmem="210000 210000 210000" | ||
98 | For MTU=9000, TCP window size of 10 MB is recommended. | ||
99 | # sysctl -w net.ipv4.tcp_rmem="10000000 10000000 10000000" | ||
100 | # sysctl -w net.ipv4.tcp_wmem="10000000 10000000 10000000" | ||
101 | |||
102 | Transmit performance: | ||
103 | a. By default, the driver respects BIOS settings for PCI bus parameters. | ||
104 | However, you may want to experiment with PCI bus parameters | ||
105 | max-split-transactions(MOST) and MMRBC (use setpci command). | ||
106 | A MOST value of 2 has been found optimal for Opterons and 3 for Itanium. | ||
107 | It could be different for your hardware. | ||
108 | Set MMRBC to 4K**. | ||
109 | |||
110 | For example you can set | ||
111 | For opteron | ||
112 | #setpci -d 17d5:* 62=1d | ||
113 | For Itanium | ||
114 | #setpci -d 17d5:* 62=3d | ||
115 | |||
116 | For detailed description of the PCI registers, please see Xframe User Guide. | ||
117 | |||
118 | b. Ensure Transmit Checksum offload is enabled. Use ethtool to set/verify this | ||
119 | parameter. | ||
120 | c. Turn on TSO(using "ethtool -K") | ||
121 | # ethtool -K <ethX> tso on | ||
122 | |||
123 | Receive performance: | ||
124 | a. By default, the driver respects BIOS settings for PCI bus parameters. | ||
125 | However, you may want to set PCI latency timer to 248. | ||
126 | #setpci -d 17d5:* LATENCY_TIMER=f8 | ||
127 | For detailed description of the PCI registers, please see Xframe User Guide. | ||
128 | b. Use 2-buffer mode. This results in large performance boost on | ||
129 | on certain platforms(eg. SGI Altix, IBM xSeries). | ||
130 | c. Ensure Receive Checksum offload is enabled. Use "ethtool -K ethX" command to | ||
131 | set/verify this option. | ||
132 | d. Enable NAPI feature(in kernel configuration Device Drivers ---> Network | ||
133 | device support ---> Ethernet (10000 Mbit) ---> S2IO 10Gbe Xframe NIC) to | ||
134 | bring down CPU utilization. | ||
135 | |||
136 | ** For AMD opteron platforms with 8131 chipset, MMRBC=1 and MOST=1 are | ||
137 | recommended as safe parameters. | ||
138 | For more information, please review the AMD8131 errata at | ||
139 | http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/26310.pdf | ||
140 | |||
141 | 6. Available Downloads | ||
142 | Neterion "s2io" driver in Red Hat and Suse 2.6-based distributions is kept up | ||
143 | to date, also the latest "s2io" code (including support for 2.4 kernels) is | ||
144 | available via "Support" link on the Neterion site: http://www.neterion.com. | ||
145 | |||
146 | For Xframe User Guide (Programming manual), visit ftp site ns1.s2io.com, | ||
147 | user: linuxdocs password: HALdocs | ||
148 | |||
149 | 7. Support | ||
150 | For further support please contact either your 10GbE Xframe NIC vendor (IBM, | ||
151 | HP, SGI etc.) or click on the "Support" link on the Neterion site: | ||
152 | http://www.neterion.com. | ||
48 | 153 | ||
diff --git a/Documentation/oops-tracing.txt b/Documentation/oops-tracing.txt index 66eaaab7773d..9f30ac6ca47b 100644 --- a/Documentation/oops-tracing.txt +++ b/Documentation/oops-tracing.txt | |||
@@ -1,6 +1,6 @@ | |||
1 | NOTE: ksymoops is useless on 2.6. Please use the Oops in its original format | 1 | NOTE: ksymoops is useless on 2.6. Please use the Oops in its original format |
2 | (from dmesg, etc). Ignore any references in this or other docs to "decoding | 2 | (from dmesg, etc). Ignore any references in this or other docs to "decoding |
3 | the Oops" or "running it through ksymoops". If you post an Oops fron 2.6 that | 3 | the Oops" or "running it through ksymoops". If you post an Oops from 2.6 that |
4 | has been run through ksymoops, people will just tell you to repost it. | 4 | has been run through ksymoops, people will just tell you to repost it. |
5 | 5 | ||
6 | Quick Summary | 6 | Quick Summary |
@@ -30,7 +30,9 @@ the disk is not available then you have three options :- | |||
30 | 30 | ||
31 | (1) Hand copy the text from the screen and type it in after the machine | 31 | (1) Hand copy the text from the screen and type it in after the machine |
32 | has restarted. Messy but it is the only option if you have not | 32 | has restarted. Messy but it is the only option if you have not |
33 | planned for a crash. | 33 | planned for a crash. Alternatively, you can take a picture of |
34 | the screen with a digital camera - not nice, but better than | ||
35 | nothing. | ||
34 | 36 | ||
35 | (2) Boot with a serial console (see Documentation/serial-console.txt), | 37 | (2) Boot with a serial console (see Documentation/serial-console.txt), |
36 | run a null modem to a second machine and capture the output there | 38 | run a null modem to a second machine and capture the output there |
diff --git a/Documentation/power/video.txt b/Documentation/power/video.txt index 526d6dd267ea..912bed87c758 100644 --- a/Documentation/power/video.txt +++ b/Documentation/power/video.txt | |||
@@ -11,9 +11,9 @@ boot video card. (Kernel usually does not even contain video card | |||
11 | driver -- vesafb and vgacon are widely used). | 11 | driver -- vesafb and vgacon are widely used). |
12 | 12 | ||
13 | This is not problem for swsusp, because during swsusp resume, BIOS is | 13 | This is not problem for swsusp, because during swsusp resume, BIOS is |
14 | run normally so video card is normally initialized. S3 has absolutely | 14 | run normally so video card is normally initialized. It should not be |
15 | no chance of working with SMP/HT. Be sure it to turn it off before | 15 | problem for S1 standby, because hardware should retain its state over |
16 | testing (swsusp should work ok, OTOH). | 16 | that. |
17 | 17 | ||
18 | There are a few types of systems where video works after S3 resume: | 18 | There are a few types of systems where video works after S3 resume: |
19 | 19 | ||
@@ -64,7 +64,7 @@ your video card (good luck getting docs :-(). Maybe suspending from X | |||
64 | (proper X, knowing your hardware, not XF68_FBcon) might have better | 64 | (proper X, knowing your hardware, not XF68_FBcon) might have better |
65 | chance of working. | 65 | chance of working. |
66 | 66 | ||
67 | Table of known working systems: | 67 | Table of known working notebooks: |
68 | 68 | ||
69 | Model hack (or "how to do it") | 69 | Model hack (or "how to do it") |
70 | ------------------------------------------------------------------------------ | 70 | ------------------------------------------------------------------------------ |
@@ -73,7 +73,7 @@ Acer TM 242FX vbetool (6) | |||
73 | Acer TM C110 video_post (8) | 73 | Acer TM C110 video_post (8) |
74 | Acer TM C300 vga=normal (only suspend on console, not in X), vbetool (6) or video_post (8) | 74 | Acer TM C300 vga=normal (only suspend on console, not in X), vbetool (6) or video_post (8) |
75 | Acer TM 4052LCi s3_bios (2) | 75 | Acer TM 4052LCi s3_bios (2) |
76 | Acer TM 636Lci s3_bios vga=normal (2) | 76 | Acer TM 636Lci s3_bios,s3_mode (4) |
77 | Acer TM 650 (Radeon M7) vga=normal plus boot-radeon (5) gets text console back | 77 | Acer TM 650 (Radeon M7) vga=normal plus boot-radeon (5) gets text console back |
78 | Acer TM 660 ??? (*) | 78 | Acer TM 660 ??? (*) |
79 | Acer TM 800 vga=normal, X patches, see webpage (5) or vbetool (6) | 79 | Acer TM 800 vga=normal, X patches, see webpage (5) or vbetool (6) |
@@ -137,6 +137,13 @@ Toshiba Satellite P10-554 s3_bios,s3_mode (4)(****) | |||
137 | Toshiba M30 (2) xor X with nvidia driver using internal AGP | 137 | Toshiba M30 (2) xor X with nvidia driver using internal AGP |
138 | Uniwill 244IIO ??? (*) | 138 | Uniwill 244IIO ??? (*) |
139 | 139 | ||
140 | Known working desktop systems | ||
141 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
142 | |||
143 | Mainboard Graphics card hack (or "how to do it") | ||
144 | ------------------------------------------------------------------------------ | ||
145 | Asus A7V8X nVidia RIVA TNT2 model 64 s3_bios,s3_mode (4) | ||
146 | |||
140 | 147 | ||
141 | (*) from http://www.ubuntulinux.org/wiki/HoaryPMResults, not sure | 148 | (*) from http://www.ubuntulinux.org/wiki/HoaryPMResults, not sure |
142 | which options to use. If you know, please tell me. | 149 | which options to use. If you know, please tell me. |
diff --git a/Documentation/s390/Debugging390.txt b/Documentation/s390/Debugging390.txt index adbfe620c061..844c03fe7921 100644 --- a/Documentation/s390/Debugging390.txt +++ b/Documentation/s390/Debugging390.txt | |||
@@ -871,7 +871,7 @@ by playing with the --adjust-vma parameter to objdump. | |||
871 | 871 | ||
872 | 872 | ||
873 | 873 | ||
874 | extern inline void spin_lock(spinlock_t *lp) | 874 | static inline void spin_lock(spinlock_t *lp) |
875 | { | 875 | { |
876 | a0: 18 34 lr %r3,%r4 | 876 | a0: 18 34 lr %r3,%r4 |
877 | a2: a7 3a 03 bc ahi %r3,956 | 877 | a2: a7 3a 03 bc ahi %r3,956 |
diff --git a/Documentation/s390/driver-model.txt b/Documentation/s390/driver-model.txt index 19461958e2bd..df09758bf3fe 100644 --- a/Documentation/s390/driver-model.txt +++ b/Documentation/s390/driver-model.txt | |||
@@ -8,11 +8,10 @@ All devices which can be addressed by means of ccws are called 'CCW devices' - | |||
8 | even if they aren't actually driven by ccws. | 8 | even if they aren't actually driven by ccws. |
9 | 9 | ||
10 | All ccw devices are accessed via a subchannel, this is reflected in the | 10 | All ccw devices are accessed via a subchannel, this is reflected in the |
11 | structures under root/: | 11 | structures under devices/: |
12 | 12 | ||
13 | root/ | 13 | devices/ |
14 | - sys | 14 | - system/ |
15 | - legacy | ||
16 | - css0/ | 15 | - css0/ |
17 | - 0.0.0000/0.0.0815/ | 16 | - 0.0.0000/0.0.0815/ |
18 | - 0.0.0001/0.0.4711/ | 17 | - 0.0.0001/0.0.4711/ |
@@ -36,7 +35,7 @@ availability: Can be 'good' or 'boxed'; 'no path' or 'no device' for | |||
36 | 35 | ||
37 | online: An interface to set the device online and offline. | 36 | online: An interface to set the device online and offline. |
38 | In the special case of the device being disconnected (see the | 37 | In the special case of the device being disconnected (see the |
39 | notify function under 1.2), piping 0 to online will focibly delete | 38 | notify function under 1.2), piping 0 to online will forcibly delete |
40 | the device. | 39 | the device. |
41 | 40 | ||
42 | The device drivers can add entries to export per-device data and interfaces. | 41 | The device drivers can add entries to export per-device data and interfaces. |
@@ -222,7 +221,7 @@ and are called 'chp0.<chpid>'. They have no driver and do not belong to any bus. | |||
222 | Please note, that unlike /proc/chpids in 2.4, the channel path objects reflect | 221 | Please note, that unlike /proc/chpids in 2.4, the channel path objects reflect |
223 | only the logical state and not the physical state, since we cannot track the | 222 | only the logical state and not the physical state, since we cannot track the |
224 | latter consistently due to lacking machine support (we don't need to be aware | 223 | latter consistently due to lacking machine support (we don't need to be aware |
225 | of anyway). | 224 | of it anyway). |
226 | 225 | ||
227 | status - Can be 'online' or 'offline'. | 226 | status - Can be 'online' or 'offline'. |
228 | Piping 'on' or 'off' sets the chpid logically online/offline. | 227 | Piping 'on' or 'off' sets the chpid logically online/offline. |
@@ -235,12 +234,16 @@ status - Can be 'online' or 'offline'. | |||
235 | 3. System devices | 234 | 3. System devices |
236 | ----------------- | 235 | ----------------- |
237 | 236 | ||
238 | Note: cpus may yet be added here. | ||
239 | |||
240 | 3.1 xpram | 237 | 3.1 xpram |
241 | --------- | 238 | --------- |
242 | 239 | ||
243 | xpram shows up under sys/ as 'xpram'. | 240 | xpram shows up under devices/system/ as 'xpram'. |
241 | |||
242 | 3.2 cpus | ||
243 | -------- | ||
244 | |||
245 | For each cpu, a directory is created under devices/system/cpu/. Each cpu has an | ||
246 | attribute 'online' which can be 0 or 1. | ||
244 | 247 | ||
245 | 248 | ||
246 | 4. Other devices | 249 | 4. Other devices |
diff --git a/Documentation/sched-arch.txt b/Documentation/sched-arch.txt new file mode 100644 index 000000000000..941615a9769b --- /dev/null +++ b/Documentation/sched-arch.txt | |||
@@ -0,0 +1,89 @@ | |||
1 | CPU Scheduler implementation hints for architecture specific code | ||
2 | |||
3 | Nick Piggin, 2005 | ||
4 | |||
5 | Context switch | ||
6 | ============== | ||
7 | 1. Runqueue locking | ||
8 | By default, the switch_to arch function is called with the runqueue | ||
9 | locked. This is usually not a problem unless switch_to may need to | ||
10 | take the runqueue lock. This is usually due to a wake up operation in | ||
11 | the context switch. See include/asm-ia64/system.h for an example. | ||
12 | |||
13 | To request the scheduler call switch_to with the runqueue unlocked, | ||
14 | you must `#define __ARCH_WANT_UNLOCKED_CTXSW` in a header file | ||
15 | (typically the one where switch_to is defined). | ||
16 | |||
17 | Unlocked context switches introduce only a very minor performance | ||
18 | penalty to the core scheduler implementation in the CONFIG_SMP case. | ||
19 | |||
20 | 2. Interrupt status | ||
21 | By default, the switch_to arch function is called with interrupts | ||
22 | disabled. Interrupts may be enabled over the call if it is likely to | ||
23 | introduce a significant interrupt latency by adding the line | ||
24 | `#define __ARCH_WANT_INTERRUPTS_ON_CTXSW` in the same place as for | ||
25 | unlocked context switches. This define also implies | ||
26 | `__ARCH_WANT_UNLOCKED_CTXSW`. See include/asm-arm/system.h for an | ||
27 | example. | ||
28 | |||
29 | |||
30 | CPU idle | ||
31 | ======== | ||
32 | Your cpu_idle routines need to obey the following rules: | ||
33 | |||
34 | 1. Preempt should now disabled over idle routines. Should only | ||
35 | be enabled to call schedule() then disabled again. | ||
36 | |||
37 | 2. need_resched/TIF_NEED_RESCHED is only ever set, and will never | ||
38 | be cleared until the running task has called schedule(). Idle | ||
39 | threads need only ever query need_resched, and may never set or | ||
40 | clear it. | ||
41 | |||
42 | 3. When cpu_idle finds (need_resched() == 'true'), it should call | ||
43 | schedule(). It should not call schedule() otherwise. | ||
44 | |||
45 | 4. The only time interrupts need to be disabled when checking | ||
46 | need_resched is if we are about to sleep the processor until | ||
47 | the next interrupt (this doesn't provide any protection of | ||
48 | need_resched, it prevents losing an interrupt). | ||
49 | |||
50 | 4a. Common problem with this type of sleep appears to be: | ||
51 | local_irq_disable(); | ||
52 | if (!need_resched()) { | ||
53 | local_irq_enable(); | ||
54 | *** resched interrupt arrives here *** | ||
55 | __asm__("sleep until next interrupt"); | ||
56 | } | ||
57 | |||
58 | 5. TIF_POLLING_NRFLAG can be set by idle routines that do not | ||
59 | need an interrupt to wake them up when need_resched goes high. | ||
60 | In other words, they must be periodically polling need_resched, | ||
61 | although it may be reasonable to do some background work or enter | ||
62 | a low CPU priority. | ||
63 | |||
64 | 5a. If TIF_POLLING_NRFLAG is set, and we do decide to enter | ||
65 | an interrupt sleep, it needs to be cleared then a memory | ||
66 | barrier issued (followed by a test of need_resched with | ||
67 | interrupts disabled, as explained in 3). | ||
68 | |||
69 | arch/i386/kernel/process.c has examples of both polling and | ||
70 | sleeping idle functions. | ||
71 | |||
72 | |||
73 | Possible arch/ problems | ||
74 | ======================= | ||
75 | |||
76 | Possible arch problems I found (and either tried to fix or didn't): | ||
77 | |||
78 | h8300 - Is such sleeping racy vs interrupts? (See #4a). | ||
79 | The H8/300 manual I found indicates yes, however disabling IRQs | ||
80 | over the sleep mean only NMIs can wake it up, so can't fix easily | ||
81 | without doing spin waiting. | ||
82 | |||
83 | ia64 - is safe_halt call racy vs interrupts? (does it sleep?) (See #4a) | ||
84 | |||
85 | sh64 - Is sleeping racy vs interrupts? (See #4a) | ||
86 | |||
87 | sparc - IRQs on at this point(?), change local_irq_save to _disable. | ||
88 | - TODO: needs secondary CPUs to disable preempt (See #1) | ||
89 | |||
diff --git a/Documentation/scsi/00-INDEX b/Documentation/scsi/00-INDEX index fef92ebf266f..e7da8c3a255b 100644 --- a/Documentation/scsi/00-INDEX +++ b/Documentation/scsi/00-INDEX | |||
@@ -52,8 +52,6 @@ ppa.txt | |||
52 | - info on driver for IOmega zip drive | 52 | - info on driver for IOmega zip drive |
53 | qlogicfas.txt | 53 | qlogicfas.txt |
54 | - info on driver for QLogic FASxxx based adapters | 54 | - info on driver for QLogic FASxxx based adapters |
55 | qlogicisp.txt | ||
56 | - info on driver for QLogic ISP 1020 based adapters | ||
57 | scsi-generic.txt | 55 | scsi-generic.txt |
58 | - info on the sg driver for generic (non-disk/CD/tape) SCSI devices. | 56 | - info on the sg driver for generic (non-disk/CD/tape) SCSI devices. |
59 | scsi.txt | 57 | scsi.txt |
diff --git a/Documentation/scsi/LICENSE.qla2xxx b/Documentation/scsi/LICENSE.qla2xxx new file mode 100644 index 000000000000..9e15b4f9cd28 --- /dev/null +++ b/Documentation/scsi/LICENSE.qla2xxx | |||
@@ -0,0 +1,45 @@ | |||
1 | Copyright (c) 2003-2005 QLogic Corporation | ||
2 | QLogic Linux Fibre Channel HBA Driver | ||
3 | |||
4 | This program includes a device driver for Linux 2.6 that may be | ||
5 | distributed with QLogic hardware specific firmware binary file. | ||
6 | You may modify and redistribute the device driver code under the | ||
7 | GNU General Public License as published by the Free Software | ||
8 | Foundation (version 2 or a later version). | ||
9 | |||
10 | You may redistribute the hardware specific firmware binary file | ||
11 | under the following terms: | ||
12 | |||
13 | 1. Redistribution of source code (only if applicable), | ||
14 | must retain the above copyright notice, this list of | ||
15 | conditions and the following disclaimer. | ||
16 | |||
17 | 2. Redistribution in binary form must reproduce the above | ||
18 | copyright notice, this list of conditions and the | ||
19 | following disclaimer in the documentation and/or other | ||
20 | materials provided with the distribution. | ||
21 | |||
22 | 3. The name of QLogic Corporation may not be used to | ||
23 | endorse or promote products derived from this software | ||
24 | without specific prior written permission | ||
25 | |||
26 | REGARDLESS OF WHAT LICENSING MECHANISM IS USED OR APPLICABLE, | ||
27 | THIS PROGRAM IS PROVIDED BY QLOGIC CORPORATION "AS IS'' AND ANY | ||
28 | EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | ||
29 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A | ||
30 | PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR | ||
31 | BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, | ||
32 | EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED | ||
33 | TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||
34 | DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON | ||
35 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | ||
36 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||
37 | OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | ||
38 | POSSIBILITY OF SUCH DAMAGE. | ||
39 | |||
40 | USER ACKNOWLEDGES AND AGREES THAT USE OF THIS PROGRAM WILL NOT | ||
41 | CREATE OR GIVE GROUNDS FOR A LICENSE BY IMPLICATION, ESTOPPEL, OR | ||
42 | OTHERWISE IN ANY INTELLECTUAL PROPERTY RIGHTS (PATENT, COPYRIGHT, | ||
43 | TRADE SECRET, MASK WORK, OR OTHER PROPRIETARY RIGHT) EMBODIED IN | ||
44 | ANY OTHER QLOGIC HARDWARE OR SOFTWARE EITHER SOLELY OR IN | ||
45 | COMBINATION WITH THIS PROGRAM. | ||
diff --git a/Documentation/scsi/qlogicfas.txt b/Documentation/scsi/qlogicfas.txt index 398f99168077..c211d827fef2 100644 --- a/Documentation/scsi/qlogicfas.txt +++ b/Documentation/scsi/qlogicfas.txt | |||
@@ -11,8 +11,7 @@ Qlogic boards: | |||
11 | * IQ-PCI-10 | 11 | * IQ-PCI-10 |
12 | * IQ-PCI-D | 12 | * IQ-PCI-D |
13 | 13 | ||
14 | is provided by the qlogicisp.c driver. Check README.qlogicisp for | 14 | is provided by the qla1280 driver. |
15 | details. | ||
16 | 15 | ||
17 | Nor does it support the PCI-Basic, which is supported by the | 16 | Nor does it support the PCI-Basic, which is supported by the |
18 | 'am53c974' driver. | 17 | 'am53c974' driver. |
diff --git a/Documentation/scsi/qlogicisp.txt b/Documentation/scsi/qlogicisp.txt deleted file mode 100644 index 6920f6c76a9f..000000000000 --- a/Documentation/scsi/qlogicisp.txt +++ /dev/null | |||
@@ -1,30 +0,0 @@ | |||
1 | Notes for the QLogic ISP1020 PCI SCSI Driver: | ||
2 | |||
3 | This driver works well in practice, but does not support disconnect/ | ||
4 | reconnect, which makes using it with tape drives impractical. | ||
5 | |||
6 | It should work for most host adaptors with the ISP1020 chip. The | ||
7 | QLogic Corporation produces several PCI SCSI adapters which should | ||
8 | work: | ||
9 | |||
10 | * IQ-PCI | ||
11 | * IQ-PCI-10 | ||
12 | * IQ-PCI-D | ||
13 | |||
14 | This driver may work with boards containing the ISP1020A or ISP1040A | ||
15 | chips, but that has not been tested. | ||
16 | |||
17 | This driver will NOT work with: | ||
18 | |||
19 | * ISA or VL Bus Qlogic cards (they use the 'qlogicfas' driver) | ||
20 | * PCI-basic (it uses the 'am53c974' driver) | ||
21 | |||
22 | Much thanks to QLogic's tech support for providing the latest ISP1020 | ||
23 | firmware, and for taking the time to review my code. | ||
24 | |||
25 | Erik Moe | ||
26 | ehm@cris.com | ||
27 | |||
28 | Revised: | ||
29 | Michael A. Griffith | ||
30 | grif@cs.ucr.edu | ||
diff --git a/Documentation/scsi/scsi_eh.txt b/Documentation/scsi/scsi_eh.txt index 534a50922a7b..331afd791cbb 100644 --- a/Documentation/scsi/scsi_eh.txt +++ b/Documentation/scsi/scsi_eh.txt | |||
@@ -83,11 +83,11 @@ with the command. | |||
83 | The timeout handler is scsi_times_out(). When a timeout occurs, this | 83 | The timeout handler is scsi_times_out(). When a timeout occurs, this |
84 | function | 84 | function |
85 | 85 | ||
86 | 1. invokes optional hostt->eh_timedout() callback. Return value can | 86 | 1. invokes optional hostt->eh_timed_out() callback. Return value can |
87 | be one of | 87 | be one of |
88 | 88 | ||
89 | - EH_HANDLED | 89 | - EH_HANDLED |
90 | This indicates that eh_timedout() dealt with the timeout. The | 90 | This indicates that eh_timed_out() dealt with the timeout. The |
91 | scmd is passed to __scsi_done() and thus linked into per-cpu | 91 | scmd is passed to __scsi_done() and thus linked into per-cpu |
92 | scsi_done_q. Normal command completion described in [1-2-1] | 92 | scsi_done_q. Normal command completion described in [1-2-1] |
93 | follows. | 93 | follows. |
@@ -105,7 +105,7 @@ function | |||
105 | command will time out again. | 105 | command will time out again. |
106 | 106 | ||
107 | - EH_NOT_HANDLED | 107 | - EH_NOT_HANDLED |
108 | This is the same as when eh_timedout() callback doesn't exist. | 108 | This is the same as when eh_timed_out() callback doesn't exist. |
109 | Step #2 is taken. | 109 | Step #2 is taken. |
110 | 110 | ||
111 | 2. scsi_eh_scmd_add(scmd, SCSI_EH_CANCEL_CMD) is invoked for the | 111 | 2. scsi_eh_scmd_add(scmd, SCSI_EH_CANCEL_CMD) is invoked for the |
@@ -142,7 +142,7 @@ are linked on shost->eh_cmd_q. | |||
142 | Note that this does not mean lower layers are quiescent. If a LLDD | 142 | Note that this does not mean lower layers are quiescent. If a LLDD |
143 | completed a scmd with error status, the LLDD and lower layers are | 143 | completed a scmd with error status, the LLDD and lower layers are |
144 | assumed to forget about the scmd at that point. However, if a scmd | 144 | assumed to forget about the scmd at that point. However, if a scmd |
145 | has timed out, unless hostt->eh_timedout() made lower layers forget | 145 | has timed out, unless hostt->eh_timed_out() made lower layers forget |
146 | about the scmd, which currently no LLDD does, the command is still | 146 | about the scmd, which currently no LLDD does, the command is still |
147 | active as long as lower layers are concerned and completion could | 147 | active as long as lower layers are concerned and completion could |
148 | occur at any time. Of course, all such completions are ignored as the | 148 | occur at any time. Of course, all such completions are ignored as the |
diff --git a/Documentation/scsi/scsi_mid_low_api.txt b/Documentation/scsi/scsi_mid_low_api.txt index 44df89c9c049..66565d42288f 100644 --- a/Documentation/scsi/scsi_mid_low_api.txt +++ b/Documentation/scsi/scsi_mid_low_api.txt | |||
@@ -346,7 +346,7 @@ Next, there is a movement to "outlaw" typedefs introducing synonyms for | |||
346 | struct tags. Both can be still found in the SCSI subsystem, but | 346 | struct tags. Both can be still found in the SCSI subsystem, but |
347 | the typedefs have been moved to a single file, scsi_typedefs.h to | 347 | the typedefs have been moved to a single file, scsi_typedefs.h to |
348 | make their future removal easier, for example: | 348 | make their future removal easier, for example: |
349 | "typedef struct scsi_host_template Scsi_Host_Template;" | 349 | "typedef struct scsi_cmnd Scsi_Cmnd;" |
350 | 350 | ||
351 | Also, most C99 enhancements are encouraged to the extent they are supported | 351 | Also, most C99 enhancements are encouraged to the extent they are supported |
352 | by the relevant gcc compilers. So C99 style structure and array | 352 | by the relevant gcc compilers. So C99 style structure and array |
@@ -718,7 +718,7 @@ void scsi_report_bus_reset(struct Scsi_Host * shost, int channel) | |||
718 | * | 718 | * |
719 | * Defined in: drivers/scsi/scsi.c . | 719 | * Defined in: drivers/scsi/scsi.c . |
720 | **/ | 720 | **/ |
721 | int scsi_track_queue_full(Scsi_Device *sdev, int depth) | 721 | int scsi_track_queue_full(struct scsi_device *sdev, int depth) |
722 | 722 | ||
723 | 723 | ||
724 | /** | 724 | /** |
diff --git a/Documentation/sharedsubtree.txt b/Documentation/sharedsubtree.txt new file mode 100644 index 000000000000..2d8f403eb6eb --- /dev/null +++ b/Documentation/sharedsubtree.txt | |||
@@ -0,0 +1,1060 @@ | |||
1 | Shared Subtrees | ||
2 | --------------- | ||
3 | |||
4 | Contents: | ||
5 | 1) Overview | ||
6 | 2) Features | ||
7 | 3) smount command | ||
8 | 4) Use-case | ||
9 | 5) Detailed semantics | ||
10 | 6) Quiz | ||
11 | 7) FAQ | ||
12 | 8) Implementation | ||
13 | |||
14 | |||
15 | 1) Overview | ||
16 | ----------- | ||
17 | |||
18 | Consider the following situation: | ||
19 | |||
20 | A process wants to clone its own namespace, but still wants to access the CD | ||
21 | that got mounted recently. Shared subtree semantics provide the necessary | ||
22 | mechanism to accomplish the above. | ||
23 | |||
24 | It provides the necessary building blocks for features like per-user-namespace | ||
25 | and versioned filesystem. | ||
26 | |||
27 | 2) Features | ||
28 | ----------- | ||
29 | |||
30 | Shared subtree provides four different flavors of mounts; struct vfsmount to be | ||
31 | precise | ||
32 | |||
33 | a. shared mount | ||
34 | b. slave mount | ||
35 | c. private mount | ||
36 | d. unbindable mount | ||
37 | |||
38 | |||
39 | 2a) A shared mount can be replicated to as many mountpoints and all the | ||
40 | replicas continue to be exactly same. | ||
41 | |||
42 | Here is an example: | ||
43 | |||
44 | Lets say /mnt has a mount that is shared. | ||
45 | mount --make-shared /mnt | ||
46 | |||
47 | note: mount command does not yet support the --make-shared flag. | ||
48 | I have included a small C program which does the same by executing | ||
49 | 'smount /mnt shared' | ||
50 | |||
51 | #mount --bind /mnt /tmp | ||
52 | The above command replicates the mount at /mnt to the mountpoint /tmp | ||
53 | and the contents of both the mounts remain identical. | ||
54 | |||
55 | #ls /mnt | ||
56 | a b c | ||
57 | |||
58 | #ls /tmp | ||
59 | a b c | ||
60 | |||
61 | Now lets say we mount a device at /tmp/a | ||
62 | #mount /dev/sd0 /tmp/a | ||
63 | |||
64 | #ls /tmp/a | ||
65 | t1 t2 t2 | ||
66 | |||
67 | #ls /mnt/a | ||
68 | t1 t2 t2 | ||
69 | |||
70 | Note that the mount has propagated to the mount at /mnt as well. | ||
71 | |||
72 | And the same is true even when /dev/sd0 is mounted on /mnt/a. The | ||
73 | contents will be visible under /tmp/a too. | ||
74 | |||
75 | |||
76 | 2b) A slave mount is like a shared mount except that mount and umount events | ||
77 | only propagate towards it. | ||
78 | |||
79 | All slave mounts have a master mount which is a shared. | ||
80 | |||
81 | Here is an example: | ||
82 | |||
83 | Lets say /mnt has a mount which is shared. | ||
84 | #mount --make-shared /mnt | ||
85 | |||
86 | Lets bind mount /mnt to /tmp | ||
87 | #mount --bind /mnt /tmp | ||
88 | |||
89 | the new mount at /tmp becomes a shared mount and it is a replica of | ||
90 | the mount at /mnt. | ||
91 | |||
92 | Now lets make the mount at /tmp; a slave of /mnt | ||
93 | #mount --make-slave /tmp | ||
94 | [or smount /tmp slave] | ||
95 | |||
96 | lets mount /dev/sd0 on /mnt/a | ||
97 | #mount /dev/sd0 /mnt/a | ||
98 | |||
99 | #ls /mnt/a | ||
100 | t1 t2 t3 | ||
101 | |||
102 | #ls /tmp/a | ||
103 | t1 t2 t3 | ||
104 | |||
105 | Note the mount event has propagated to the mount at /tmp | ||
106 | |||
107 | However lets see what happens if we mount something on the mount at /tmp | ||
108 | |||
109 | #mount /dev/sd1 /tmp/b | ||
110 | |||
111 | #ls /tmp/b | ||
112 | s1 s2 s3 | ||
113 | |||
114 | #ls /mnt/b | ||
115 | |||
116 | Note how the mount event has not propagated to the mount at | ||
117 | /mnt | ||
118 | |||
119 | |||
120 | 2c) A private mount does not forward or receive propagation. | ||
121 | |||
122 | This is the mount we are familiar with. Its the default type. | ||
123 | |||
124 | |||
125 | 2d) A unbindable mount is a unbindable private mount | ||
126 | |||
127 | lets say we have a mount at /mnt and we make is unbindable | ||
128 | |||
129 | #mount --make-unbindable /mnt | ||
130 | [ smount /mnt unbindable ] | ||
131 | |||
132 | Lets try to bind mount this mount somewhere else. | ||
133 | # mount --bind /mnt /tmp | ||
134 | mount: wrong fs type, bad option, bad superblock on /mnt, | ||
135 | or too many mounted file systems | ||
136 | |||
137 | Binding a unbindable mount is a invalid operation. | ||
138 | |||
139 | |||
140 | 3) smount command | ||
141 | |||
142 | Currently the mount command is not aware of shared subtree features. | ||
143 | Work is in progress to add the support in mount ( util-linux package ). | ||
144 | Till then use the following program. | ||
145 | |||
146 | ------------------------------------------------------------------------ | ||
147 | // | ||
148 | //this code was developed my Miklos Szeredi <miklos@szeredi.hu> | ||
149 | //and modified by Ram Pai <linuxram@us.ibm.com> | ||
150 | // sample usage: | ||
151 | // smount /tmp shared | ||
152 | // | ||
153 | #include <stdio.h> | ||
154 | #include <stdlib.h> | ||
155 | #include <unistd.h> | ||
156 | #include <sys/mount.h> | ||
157 | #include <sys/fsuid.h> | ||
158 | |||
159 | #ifndef MS_REC | ||
160 | #define MS_REC 0x4000 /* 16384: Recursive loopback */ | ||
161 | #endif | ||
162 | |||
163 | #ifndef MS_SHARED | ||
164 | #define MS_SHARED 1<<20 /* Shared */ | ||
165 | #endif | ||
166 | |||
167 | #ifndef MS_PRIVATE | ||
168 | #define MS_PRIVATE 1<<18 /* Private */ | ||
169 | #endif | ||
170 | |||
171 | #ifndef MS_SLAVE | ||
172 | #define MS_SLAVE 1<<19 /* Slave */ | ||
173 | #endif | ||
174 | |||
175 | #ifndef MS_UNBINDABLE | ||
176 | #define MS_UNBINDABLE 1<<17 /* Unbindable */ | ||
177 | #endif | ||
178 | |||
179 | int main(int argc, char *argv[]) | ||
180 | { | ||
181 | int type; | ||
182 | if(argc != 3) { | ||
183 | fprintf(stderr, "usage: %s dir " | ||
184 | "<rshared|rslave|rprivate|runbindable|shared|slave" | ||
185 | "|private|unbindable>\n" , argv[0]); | ||
186 | return 1; | ||
187 | } | ||
188 | |||
189 | fprintf(stdout, "%s %s %s\n", argv[0], argv[1], argv[2]); | ||
190 | |||
191 | if (strcmp(argv[2],"rshared")==0) | ||
192 | type=(MS_SHARED|MS_REC); | ||
193 | else if (strcmp(argv[2],"rslave")==0) | ||
194 | type=(MS_SLAVE|MS_REC); | ||
195 | else if (strcmp(argv[2],"rprivate")==0) | ||
196 | type=(MS_PRIVATE|MS_REC); | ||
197 | else if (strcmp(argv[2],"runbindable")==0) | ||
198 | type=(MS_UNBINDABLE|MS_REC); | ||
199 | else if (strcmp(argv[2],"shared")==0) | ||
200 | type=MS_SHARED; | ||
201 | else if (strcmp(argv[2],"slave")==0) | ||
202 | type=MS_SLAVE; | ||
203 | else if (strcmp(argv[2],"private")==0) | ||
204 | type=MS_PRIVATE; | ||
205 | else if (strcmp(argv[2],"unbindable")==0) | ||
206 | type=MS_UNBINDABLE; | ||
207 | else { | ||
208 | fprintf(stderr, "invalid operation: %s\n", argv[2]); | ||
209 | return 1; | ||
210 | } | ||
211 | setfsuid(getuid()); | ||
212 | |||
213 | if(mount("", argv[1], "dontcare", type, "") == -1) { | ||
214 | perror("mount"); | ||
215 | return 1; | ||
216 | } | ||
217 | return 0; | ||
218 | } | ||
219 | ----------------------------------------------------------------------- | ||
220 | |||
221 | Copy the above code snippet into smount.c | ||
222 | gcc -o smount smount.c | ||
223 | |||
224 | |||
225 | (i) To mark all the mounts under /mnt as shared execute the following | ||
226 | command: | ||
227 | |||
228 | smount /mnt rshared | ||
229 | the corresponding syntax planned for mount command is | ||
230 | mount --make-rshared /mnt | ||
231 | |||
232 | just to mark a mount /mnt as shared, execute the following | ||
233 | command: | ||
234 | smount /mnt shared | ||
235 | the corresponding syntax planned for mount command is | ||
236 | mount --make-shared /mnt | ||
237 | |||
238 | (ii) To mark all the shared mounts under /mnt as slave execute the | ||
239 | following | ||
240 | |||
241 | command: | ||
242 | smount /mnt rslave | ||
243 | the corresponding syntax planned for mount command is | ||
244 | mount --make-rslave /mnt | ||
245 | |||
246 | just to mark a mount /mnt as slave, execute the following | ||
247 | command: | ||
248 | smount /mnt slave | ||
249 | the corresponding syntax planned for mount command is | ||
250 | mount --make-slave /mnt | ||
251 | |||
252 | (iii) To mark all the mounts under /mnt as private execute the | ||
253 | following command: | ||
254 | |||
255 | smount /mnt rprivate | ||
256 | the corresponding syntax planned for mount command is | ||
257 | mount --make-rprivate /mnt | ||
258 | |||
259 | just to mark a mount /mnt as private, execute the following | ||
260 | command: | ||
261 | smount /mnt private | ||
262 | the corresponding syntax planned for mount command is | ||
263 | mount --make-private /mnt | ||
264 | |||
265 | NOTE: by default all the mounts are created as private. But if | ||
266 | you want to change some shared/slave/unbindable mount as | ||
267 | private at a later point in time, this command can help. | ||
268 | |||
269 | (iv) To mark all the mounts under /mnt as unbindable execute the | ||
270 | following | ||
271 | |||
272 | command: | ||
273 | smount /mnt runbindable | ||
274 | the corresponding syntax planned for mount command is | ||
275 | mount --make-runbindable /mnt | ||
276 | |||
277 | just to mark a mount /mnt as unbindable, execute the following | ||
278 | command: | ||
279 | smount /mnt unbindable | ||
280 | the corresponding syntax planned for mount command is | ||
281 | mount --make-unbindable /mnt | ||
282 | |||
283 | |||
284 | 4) Use cases | ||
285 | ------------ | ||
286 | |||
287 | A) A process wants to clone its own namespace, but still wants to | ||
288 | access the CD that got mounted recently. | ||
289 | |||
290 | Solution: | ||
291 | |||
292 | The system administrator can make the mount at /cdrom shared | ||
293 | mount --bind /cdrom /cdrom | ||
294 | mount --make-shared /cdrom | ||
295 | |||
296 | Now any process that clones off a new namespace will have a | ||
297 | mount at /cdrom which is a replica of the same mount in the | ||
298 | parent namespace. | ||
299 | |||
300 | So when a CD is inserted and mounted at /cdrom that mount gets | ||
301 | propagated to the other mount at /cdrom in all the other clone | ||
302 | namespaces. | ||
303 | |||
304 | B) A process wants its mounts invisible to any other process, but | ||
305 | still be able to see the other system mounts. | ||
306 | |||
307 | Solution: | ||
308 | |||
309 | To begin with, the administrator can mark the entire mount tree | ||
310 | as shareable. | ||
311 | |||
312 | mount --make-rshared / | ||
313 | |||
314 | A new process can clone off a new namespace. And mark some part | ||
315 | of its namespace as slave | ||
316 | |||
317 | mount --make-rslave /myprivatetree | ||
318 | |||
319 | Hence forth any mounts within the /myprivatetree done by the | ||
320 | process will not show up in any other namespace. However mounts | ||
321 | done in the parent namespace under /myprivatetree still shows | ||
322 | up in the process's namespace. | ||
323 | |||
324 | |||
325 | Apart from the above semantics this feature provides the | ||
326 | building blocks to solve the following problems: | ||
327 | |||
328 | C) Per-user namespace | ||
329 | |||
330 | The above semantics allows a way to share mounts across | ||
331 | namespaces. But namespaces are associated with processes. If | ||
332 | namespaces are made first class objects with user API to | ||
333 | associate/disassociate a namespace with userid, then each user | ||
334 | could have his/her own namespace and tailor it to his/her | ||
335 | requirements. Offcourse its needs support from PAM. | ||
336 | |||
337 | D) Versioned files | ||
338 | |||
339 | If the entire mount tree is visible at multiple locations, then | ||
340 | a underlying versioning file system can return different | ||
341 | version of the file depending on the path used to access that | ||
342 | file. | ||
343 | |||
344 | An example is: | ||
345 | |||
346 | mount --make-shared / | ||
347 | mount --rbind / /view/v1 | ||
348 | mount --rbind / /view/v2 | ||
349 | mount --rbind / /view/v3 | ||
350 | mount --rbind / /view/v4 | ||
351 | |||
352 | and if /usr has a versioning filesystem mounted, than that | ||
353 | mount appears at /view/v1/usr, /view/v2/usr, /view/v3/usr and | ||
354 | /view/v4/usr too | ||
355 | |||
356 | A user can request v3 version of the file /usr/fs/namespace.c | ||
357 | by accessing /view/v3/usr/fs/namespace.c . The underlying | ||
358 | versioning filesystem can then decipher that v3 version of the | ||
359 | filesystem is being requested and return the corresponding | ||
360 | inode. | ||
361 | |||
362 | 5) Detailed semantics: | ||
363 | ------------------- | ||
364 | The section below explains the detailed semantics of | ||
365 | bind, rbind, move, mount, umount and clone-namespace operations. | ||
366 | |||
367 | Note: the word 'vfsmount' and the noun 'mount' have been used | ||
368 | to mean the same thing, throughout this document. | ||
369 | |||
370 | 5a) Mount states | ||
371 | |||
372 | A given mount can be in one of the following states | ||
373 | 1) shared | ||
374 | 2) slave | ||
375 | 3) shared and slave | ||
376 | 4) private | ||
377 | 5) unbindable | ||
378 | |||
379 | A 'propagation event' is defined as event generated on a vfsmount | ||
380 | that leads to mount or unmount actions in other vfsmounts. | ||
381 | |||
382 | A 'peer group' is defined as a group of vfsmounts that propagate | ||
383 | events to each other. | ||
384 | |||
385 | (1) Shared mounts | ||
386 | |||
387 | A 'shared mount' is defined as a vfsmount that belongs to a | ||
388 | 'peer group'. | ||
389 | |||
390 | For example: | ||
391 | mount --make-shared /mnt | ||
392 | mount --bin /mnt /tmp | ||
393 | |||
394 | The mount at /mnt and that at /tmp are both shared and belong | ||
395 | to the same peer group. Anything mounted or unmounted under | ||
396 | /mnt or /tmp reflect in all the other mounts of its peer | ||
397 | group. | ||
398 | |||
399 | |||
400 | (2) Slave mounts | ||
401 | |||
402 | A 'slave mount' is defined as a vfsmount that receives | ||
403 | propagation events and does not forward propagation events. | ||
404 | |||
405 | A slave mount as the name implies has a master mount from which | ||
406 | mount/unmount events are received. Events do not propagate from | ||
407 | the slave mount to the master. Only a shared mount can be made | ||
408 | a slave by executing the following command | ||
409 | |||
410 | mount --make-slave mount | ||
411 | |||
412 | A shared mount that is made as a slave is no more shared unless | ||
413 | modified to become shared. | ||
414 | |||
415 | (3) Shared and Slave | ||
416 | |||
417 | A vfsmount can be both shared as well as slave. This state | ||
418 | indicates that the mount is a slave of some vfsmount, and | ||
419 | has its own peer group too. This vfsmount receives propagation | ||
420 | events from its master vfsmount, and also forwards propagation | ||
421 | events to its 'peer group' and to its slave vfsmounts. | ||
422 | |||
423 | Strictly speaking, the vfsmount is shared having its own | ||
424 | peer group, and this peer-group is a slave of some other | ||
425 | peer group. | ||
426 | |||
427 | Only a slave vfsmount can be made as 'shared and slave' by | ||
428 | either executing the following command | ||
429 | mount --make-shared mount | ||
430 | or by moving the slave vfsmount under a shared vfsmount. | ||
431 | |||
432 | (4) Private mount | ||
433 | |||
434 | A 'private mount' is defined as vfsmount that does not | ||
435 | receive or forward any propagation events. | ||
436 | |||
437 | (5) Unbindable mount | ||
438 | |||
439 | A 'unbindable mount' is defined as vfsmount that does not | ||
440 | receive or forward any propagation events and cannot | ||
441 | be bind mounted. | ||
442 | |||
443 | |||
444 | State diagram: | ||
445 | The state diagram below explains the state transition of a mount, | ||
446 | in response to various commands. | ||
447 | ------------------------------------------------------------------------ | ||
448 | | |make-shared | make-slave | make-private |make-unbindab| | ||
449 | --------------|------------|--------------|--------------|-------------| | ||
450 | |shared |shared |*slave/private| private | unbindable | | ||
451 | | | | | | | | ||
452 | |-------------|------------|--------------|--------------|-------------| | ||
453 | |slave |shared | **slave | private | unbindable | | ||
454 | | |and slave | | | | | ||
455 | |-------------|------------|--------------|--------------|-------------| | ||
456 | |shared |shared | slave | private | unbindable | | ||
457 | |and slave |and slave | | | | | ||
458 | |-------------|------------|--------------|--------------|-------------| | ||
459 | |private |shared | **private | private | unbindable | | ||
460 | |-------------|------------|--------------|--------------|-------------| | ||
461 | |unbindable |shared |**unbindable | private | unbindable | | ||
462 | ------------------------------------------------------------------------ | ||
463 | |||
464 | * if the shared mount is the only mount in its peer group, making it | ||
465 | slave, makes it private automatically. Note that there is no master to | ||
466 | which it can be slaved to. | ||
467 | |||
468 | ** slaving a non-shared mount has no effect on the mount. | ||
469 | |||
470 | Apart from the commands listed below, the 'move' operation also changes | ||
471 | the state of a mount depending on type of the destination mount. Its | ||
472 | explained in section 5d. | ||
473 | |||
474 | 5b) Bind semantics | ||
475 | |||
476 | Consider the following command | ||
477 | |||
478 | mount --bind A/a B/b | ||
479 | |||
480 | where 'A' is the source mount, 'a' is the dentry in the mount 'A', 'B' | ||
481 | is the destination mount and 'b' is the dentry in the destination mount. | ||
482 | |||
483 | The outcome depends on the type of mount of 'A' and 'B'. The table | ||
484 | below contains quick reference. | ||
485 | --------------------------------------------------------------------------- | ||
486 | | BIND MOUNT OPERATION | | ||
487 | |************************************************************************** | ||
488 | |source(A)->| shared | private | slave | unbindable | | ||
489 | | dest(B) | | | | | | ||
490 | | | | | | | | | ||
491 | | v | | | | | | ||
492 | |************************************************************************** | ||
493 | | shared | shared | shared | shared & slave | invalid | | ||
494 | | | | | | | | ||
495 | |non-shared| shared | private | slave | invalid | | ||
496 | *************************************************************************** | ||
497 | |||
498 | Details: | ||
499 | |||
500 | 1. 'A' is a shared mount and 'B' is a shared mount. A new mount 'C' | ||
501 | which is clone of 'A', is created. Its root dentry is 'a' . 'C' is | ||
502 | mounted on mount 'B' at dentry 'b'. Also new mount 'C1', 'C2', 'C3' ... | ||
503 | are created and mounted at the dentry 'b' on all mounts where 'B' | ||
504 | propagates to. A new propagation tree containing 'C1',..,'Cn' is | ||
505 | created. This propagation tree is identical to the propagation tree of | ||
506 | 'B'. And finally the peer-group of 'C' is merged with the peer group | ||
507 | of 'A'. | ||
508 | |||
509 | 2. 'A' is a private mount and 'B' is a shared mount. A new mount 'C' | ||
510 | which is clone of 'A', is created. Its root dentry is 'a'. 'C' is | ||
511 | mounted on mount 'B' at dentry 'b'. Also new mount 'C1', 'C2', 'C3' ... | ||
512 | are created and mounted at the dentry 'b' on all mounts where 'B' | ||
513 | propagates to. A new propagation tree is set containing all new mounts | ||
514 | 'C', 'C1', .., 'Cn' with exactly the same configuration as the | ||
515 | propagation tree for 'B'. | ||
516 | |||
517 | 3. 'A' is a slave mount of mount 'Z' and 'B' is a shared mount. A new | ||
518 | mount 'C' which is clone of 'A', is created. Its root dentry is 'a' . | ||
519 | 'C' is mounted on mount 'B' at dentry 'b'. Also new mounts 'C1', 'C2', | ||
520 | 'C3' ... are created and mounted at the dentry 'b' on all mounts where | ||
521 | 'B' propagates to. A new propagation tree containing the new mounts | ||
522 | 'C','C1',.. 'Cn' is created. This propagation tree is identical to the | ||
523 | propagation tree for 'B'. And finally the mount 'C' and its peer group | ||
524 | is made the slave of mount 'Z'. In other words, mount 'C' is in the | ||
525 | state 'slave and shared'. | ||
526 | |||
527 | 4. 'A' is a unbindable mount and 'B' is a shared mount. This is a | ||
528 | invalid operation. | ||
529 | |||
530 | 5. 'A' is a private mount and 'B' is a non-shared(private or slave or | ||
531 | unbindable) mount. A new mount 'C' which is clone of 'A', is created. | ||
532 | Its root dentry is 'a'. 'C' is mounted on mount 'B' at dentry 'b'. | ||
533 | |||
534 | 6. 'A' is a shared mount and 'B' is a non-shared mount. A new mount 'C' | ||
535 | which is a clone of 'A' is created. Its root dentry is 'a'. 'C' is | ||
536 | mounted on mount 'B' at dentry 'b'. 'C' is made a member of the | ||
537 | peer-group of 'A'. | ||
538 | |||
539 | 7. 'A' is a slave mount of mount 'Z' and 'B' is a non-shared mount. A | ||
540 | new mount 'C' which is a clone of 'A' is created. Its root dentry is | ||
541 | 'a'. 'C' is mounted on mount 'B' at dentry 'b'. Also 'C' is set as a | ||
542 | slave mount of 'Z'. In other words 'A' and 'C' are both slave mounts of | ||
543 | 'Z'. All mount/unmount events on 'Z' propagates to 'A' and 'C'. But | ||
544 | mount/unmount on 'A' do not propagate anywhere else. Similarly | ||
545 | mount/unmount on 'C' do not propagate anywhere else. | ||
546 | |||
547 | 8. 'A' is a unbindable mount and 'B' is a non-shared mount. This is a | ||
548 | invalid operation. A unbindable mount cannot be bind mounted. | ||
549 | |||
550 | 5c) Rbind semantics | ||
551 | |||
552 | rbind is same as bind. Bind replicates the specified mount. Rbind | ||
553 | replicates all the mounts in the tree belonging to the specified mount. | ||
554 | Rbind mount is bind mount applied to all the mounts in the tree. | ||
555 | |||
556 | If the source tree that is rbind has some unbindable mounts, | ||
557 | then the subtree under the unbindable mount is pruned in the new | ||
558 | location. | ||
559 | |||
560 | eg: lets say we have the following mount tree. | ||
561 | |||
562 | A | ||
563 | / \ | ||
564 | B C | ||
565 | / \ / \ | ||
566 | D E F G | ||
567 | |||
568 | Lets say all the mount except the mount C in the tree are | ||
569 | of a type other than unbindable. | ||
570 | |||
571 | If this tree is rbound to say Z | ||
572 | |||
573 | We will have the following tree at the new location. | ||
574 | |||
575 | Z | ||
576 | | | ||
577 | A' | ||
578 | / | ||
579 | B' Note how the tree under C is pruned | ||
580 | / \ in the new location. | ||
581 | D' E' | ||
582 | |||
583 | |||
584 | |||
585 | 5d) Move semantics | ||
586 | |||
587 | Consider the following command | ||
588 | |||
589 | mount --move A B/b | ||
590 | |||
591 | where 'A' is the source mount, 'B' is the destination mount and 'b' is | ||
592 | the dentry in the destination mount. | ||
593 | |||
594 | The outcome depends on the type of the mount of 'A' and 'B'. The table | ||
595 | below is a quick reference. | ||
596 | --------------------------------------------------------------------------- | ||
597 | | MOVE MOUNT OPERATION | | ||
598 | |************************************************************************** | ||
599 | | source(A)->| shared | private | slave | unbindable | | ||
600 | | dest(B) | | | | | | ||
601 | | | | | | | | | ||
602 | | v | | | | | | ||
603 | |************************************************************************** | ||
604 | | shared | shared | shared |shared and slave| invalid | | ||
605 | | | | | | | | ||
606 | |non-shared| shared | private | slave | unbindable | | ||
607 | *************************************************************************** | ||
608 | NOTE: moving a mount residing under a shared mount is invalid. | ||
609 | |||
610 | Details follow: | ||
611 | |||
612 | 1. 'A' is a shared mount and 'B' is a shared mount. The mount 'A' is | ||
613 | mounted on mount 'B' at dentry 'b'. Also new mounts 'A1', 'A2'...'An' | ||
614 | are created and mounted at dentry 'b' on all mounts that receive | ||
615 | propagation from mount 'B'. A new propagation tree is created in the | ||
616 | exact same configuration as that of 'B'. This new propagation tree | ||
617 | contains all the new mounts 'A1', 'A2'... 'An'. And this new | ||
618 | propagation tree is appended to the already existing propagation tree | ||
619 | of 'A'. | ||
620 | |||
621 | 2. 'A' is a private mount and 'B' is a shared mount. The mount 'A' is | ||
622 | mounted on mount 'B' at dentry 'b'. Also new mount 'A1', 'A2'... 'An' | ||
623 | are created and mounted at dentry 'b' on all mounts that receive | ||
624 | propagation from mount 'B'. The mount 'A' becomes a shared mount and a | ||
625 | propagation tree is created which is identical to that of | ||
626 | 'B'. This new propagation tree contains all the new mounts 'A1', | ||
627 | 'A2'... 'An'. | ||
628 | |||
629 | 3. 'A' is a slave mount of mount 'Z' and 'B' is a shared mount. The | ||
630 | mount 'A' is mounted on mount 'B' at dentry 'b'. Also new mounts 'A1', | ||
631 | 'A2'... 'An' are created and mounted at dentry 'b' on all mounts that | ||
632 | receive propagation from mount 'B'. A new propagation tree is created | ||
633 | in the exact same configuration as that of 'B'. This new propagation | ||
634 | tree contains all the new mounts 'A1', 'A2'... 'An'. And this new | ||
635 | propagation tree is appended to the already existing propagation tree of | ||
636 | 'A'. Mount 'A' continues to be the slave mount of 'Z' but it also | ||
637 | becomes 'shared'. | ||
638 | |||
639 | 4. 'A' is a unbindable mount and 'B' is a shared mount. The operation | ||
640 | is invalid. Because mounting anything on the shared mount 'B' can | ||
641 | create new mounts that get mounted on the mounts that receive | ||
642 | propagation from 'B'. And since the mount 'A' is unbindable, cloning | ||
643 | it to mount at other mountpoints is not possible. | ||
644 | |||
645 | 5. 'A' is a private mount and 'B' is a non-shared(private or slave or | ||
646 | unbindable) mount. The mount 'A' is mounted on mount 'B' at dentry 'b'. | ||
647 | |||
648 | 6. 'A' is a shared mount and 'B' is a non-shared mount. The mount 'A' | ||
649 | is mounted on mount 'B' at dentry 'b'. Mount 'A' continues to be a | ||
650 | shared mount. | ||
651 | |||
652 | 7. 'A' is a slave mount of mount 'Z' and 'B' is a non-shared mount. | ||
653 | The mount 'A' is mounted on mount 'B' at dentry 'b'. Mount 'A' | ||
654 | continues to be a slave mount of mount 'Z'. | ||
655 | |||
656 | 8. 'A' is a unbindable mount and 'B' is a non-shared mount. The mount | ||
657 | 'A' is mounted on mount 'B' at dentry 'b'. Mount 'A' continues to be a | ||
658 | unbindable mount. | ||
659 | |||
660 | 5e) Mount semantics | ||
661 | |||
662 | Consider the following command | ||
663 | |||
664 | mount device B/b | ||
665 | |||
666 | 'B' is the destination mount and 'b' is the dentry in the destination | ||
667 | mount. | ||
668 | |||
669 | The above operation is the same as bind operation with the exception | ||
670 | that the source mount is always a private mount. | ||
671 | |||
672 | |||
673 | 5f) Unmount semantics | ||
674 | |||
675 | Consider the following command | ||
676 | |||
677 | umount A | ||
678 | |||
679 | where 'A' is a mount mounted on mount 'B' at dentry 'b'. | ||
680 | |||
681 | If mount 'B' is shared, then all most-recently-mounted mounts at dentry | ||
682 | 'b' on mounts that receive propagation from mount 'B' and does not have | ||
683 | sub-mounts within them are unmounted. | ||
684 | |||
685 | Example: Lets say 'B1', 'B2', 'B3' are shared mounts that propagate to | ||
686 | each other. | ||
687 | |||
688 | lets say 'A1', 'A2', 'A3' are first mounted at dentry 'b' on mount | ||
689 | 'B1', 'B2' and 'B3' respectively. | ||
690 | |||
691 | lets say 'C1', 'C2', 'C3' are next mounted at the same dentry 'b' on | ||
692 | mount 'B1', 'B2' and 'B3' respectively. | ||
693 | |||
694 | if 'C1' is unmounted, all the mounts that are most-recently-mounted on | ||
695 | 'B1' and on the mounts that 'B1' propagates-to are unmounted. | ||
696 | |||
697 | 'B1' propagates to 'B2' and 'B3'. And the most recently mounted mount | ||
698 | on 'B2' at dentry 'b' is 'C2', and that of mount 'B3' is 'C3'. | ||
699 | |||
700 | So all 'C1', 'C2' and 'C3' should be unmounted. | ||
701 | |||
702 | If any of 'C2' or 'C3' has some child mounts, then that mount is not | ||
703 | unmounted, but all other mounts are unmounted. However if 'C1' is told | ||
704 | to be unmounted and 'C1' has some sub-mounts, the umount operation is | ||
705 | failed entirely. | ||
706 | |||
707 | 5g) Clone Namespace | ||
708 | |||
709 | A cloned namespace contains all the mounts as that of the parent | ||
710 | namespace. | ||
711 | |||
712 | Lets say 'A' and 'B' are the corresponding mounts in the parent and the | ||
713 | child namespace. | ||
714 | |||
715 | If 'A' is shared, then 'B' is also shared and 'A' and 'B' propagate to | ||
716 | each other. | ||
717 | |||
718 | If 'A' is a slave mount of 'Z', then 'B' is also the slave mount of | ||
719 | 'Z'. | ||
720 | |||
721 | If 'A' is a private mount, then 'B' is a private mount too. | ||
722 | |||
723 | If 'A' is unbindable mount, then 'B' is a unbindable mount too. | ||
724 | |||
725 | |||
726 | 6) Quiz | ||
727 | |||
728 | A. What is the result of the following command sequence? | ||
729 | |||
730 | mount --bind /mnt /mnt | ||
731 | mount --make-shared /mnt | ||
732 | mount --bind /mnt /tmp | ||
733 | mount --move /tmp /mnt/1 | ||
734 | |||
735 | what should be the contents of /mnt /mnt/1 /mnt/1/1 should be? | ||
736 | Should they all be identical? or should /mnt and /mnt/1 be | ||
737 | identical only? | ||
738 | |||
739 | |||
740 | B. What is the result of the following command sequence? | ||
741 | |||
742 | mount --make-rshared / | ||
743 | mkdir -p /v/1 | ||
744 | mount --rbind / /v/1 | ||
745 | |||
746 | what should be the content of /v/1/v/1 be? | ||
747 | |||
748 | |||
749 | C. What is the result of the following command sequence? | ||
750 | |||
751 | mount --bind /mnt /mnt | ||
752 | mount --make-shared /mnt | ||
753 | mkdir -p /mnt/1/2/3 /mnt/1/test | ||
754 | mount --bind /mnt/1 /tmp | ||
755 | mount --make-slave /mnt | ||
756 | mount --make-shared /mnt | ||
757 | mount --bind /mnt/1/2 /tmp1 | ||
758 | mount --make-slave /mnt | ||
759 | |||
760 | At this point we have the first mount at /tmp and | ||
761 | its root dentry is 1. Lets call this mount 'A' | ||
762 | And then we have a second mount at /tmp1 with root | ||
763 | dentry 2. Lets call this mount 'B' | ||
764 | Next we have a third mount at /mnt with root dentry | ||
765 | mnt. Lets call this mount 'C' | ||
766 | |||
767 | 'B' is the slave of 'A' and 'C' is a slave of 'B' | ||
768 | A -> B -> C | ||
769 | |||
770 | at this point if we execute the following command | ||
771 | |||
772 | mount --bind /bin /tmp/test | ||
773 | |||
774 | The mount is attempted on 'A' | ||
775 | |||
776 | will the mount propagate to 'B' and 'C' ? | ||
777 | |||
778 | what would be the contents of | ||
779 | /mnt/1/test be? | ||
780 | |||
781 | 7) FAQ | ||
782 | |||
783 | Q1. Why is bind mount needed? How is it different from symbolic links? | ||
784 | symbolic links can get stale if the destination mount gets | ||
785 | unmounted or moved. Bind mounts continue to exist even if the | ||
786 | other mount is unmounted or moved. | ||
787 | |||
788 | Q2. Why can't the shared subtree be implemented using exportfs? | ||
789 | |||
790 | exportfs is a heavyweight way of accomplishing part of what | ||
791 | shared subtree can do. I cannot imagine a way to implement the | ||
792 | semantics of slave mount using exportfs? | ||
793 | |||
794 | Q3 Why is unbindable mount needed? | ||
795 | |||
796 | Lets say we want to replicate the mount tree at multiple | ||
797 | locations within the same subtree. | ||
798 | |||
799 | if one rbind mounts a tree within the same subtree 'n' times | ||
800 | the number of mounts created is an exponential function of 'n'. | ||
801 | Having unbindable mount can help prune the unneeded bind | ||
802 | mounts. Here is a example. | ||
803 | |||
804 | step 1: | ||
805 | lets say the root tree has just two directories with | ||
806 | one vfsmount. | ||
807 | root | ||
808 | / \ | ||
809 | tmp usr | ||
810 | |||
811 | And we want to replicate the tree at multiple | ||
812 | mountpoints under /root/tmp | ||
813 | |||
814 | step2: | ||
815 | mount --make-shared /root | ||
816 | |||
817 | mkdir -p /tmp/m1 | ||
818 | |||
819 | mount --rbind /root /tmp/m1 | ||
820 | |||
821 | the new tree now looks like this: | ||
822 | |||
823 | root | ||
824 | / \ | ||
825 | tmp usr | ||
826 | / | ||
827 | m1 | ||
828 | / \ | ||
829 | tmp usr | ||
830 | / | ||
831 | m1 | ||
832 | |||
833 | it has two vfsmounts | ||
834 | |||
835 | step3: | ||
836 | mkdir -p /tmp/m2 | ||
837 | mount --rbind /root /tmp/m2 | ||
838 | |||
839 | the new tree now looks like this: | ||
840 | |||
841 | root | ||
842 | / \ | ||
843 | tmp usr | ||
844 | / \ | ||
845 | m1 m2 | ||
846 | / \ / \ | ||
847 | tmp usr tmp usr | ||
848 | / \ / | ||
849 | m1 m2 m1 | ||
850 | / \ / \ | ||
851 | tmp usr tmp usr | ||
852 | / / \ | ||
853 | m1 m1 m2 | ||
854 | / \ | ||
855 | tmp usr | ||
856 | / \ | ||
857 | m1 m2 | ||
858 | |||
859 | it has 6 vfsmounts | ||
860 | |||
861 | step 4: | ||
862 | mkdir -p /tmp/m3 | ||
863 | mount --rbind /root /tmp/m3 | ||
864 | |||
865 | I wont' draw the tree..but it has 24 vfsmounts | ||
866 | |||
867 | |||
868 | at step i the number of vfsmounts is V[i] = i*V[i-1]. | ||
869 | This is an exponential function. And this tree has way more | ||
870 | mounts than what we really needed in the first place. | ||
871 | |||
872 | One could use a series of umount at each step to prune | ||
873 | out the unneeded mounts. But there is a better solution. | ||
874 | Unclonable mounts come in handy here. | ||
875 | |||
876 | step 1: | ||
877 | lets say the root tree has just two directories with | ||
878 | one vfsmount. | ||
879 | root | ||
880 | / \ | ||
881 | tmp usr | ||
882 | |||
883 | How do we set up the same tree at multiple locations under | ||
884 | /root/tmp | ||
885 | |||
886 | step2: | ||
887 | mount --bind /root/tmp /root/tmp | ||
888 | |||
889 | mount --make-rshared /root | ||
890 | mount --make-unbindable /root/tmp | ||
891 | |||
892 | mkdir -p /tmp/m1 | ||
893 | |||
894 | mount --rbind /root /tmp/m1 | ||
895 | |||
896 | the new tree now looks like this: | ||
897 | |||
898 | root | ||
899 | / \ | ||
900 | tmp usr | ||
901 | / | ||
902 | m1 | ||
903 | / \ | ||
904 | tmp usr | ||
905 | |||
906 | step3: | ||
907 | mkdir -p /tmp/m2 | ||
908 | mount --rbind /root /tmp/m2 | ||
909 | |||
910 | the new tree now looks like this: | ||
911 | |||
912 | root | ||
913 | / \ | ||
914 | tmp usr | ||
915 | / \ | ||
916 | m1 m2 | ||
917 | / \ / \ | ||
918 | tmp usr tmp usr | ||
919 | |||
920 | step4: | ||
921 | |||
922 | mkdir -p /tmp/m3 | ||
923 | mount --rbind /root /tmp/m3 | ||
924 | |||
925 | the new tree now looks like this: | ||
926 | |||
927 | root | ||
928 | / \ | ||
929 | tmp usr | ||
930 | / \ \ | ||
931 | m1 m2 m3 | ||
932 | / \ / \ / \ | ||
933 | tmp usr tmp usr tmp usr | ||
934 | |||
935 | 8) Implementation | ||
936 | |||
937 | 8A) Datastructure | ||
938 | |||
939 | 4 new fields are introduced to struct vfsmount | ||
940 | ->mnt_share | ||
941 | ->mnt_slave_list | ||
942 | ->mnt_slave | ||
943 | ->mnt_master | ||
944 | |||
945 | ->mnt_share links togather all the mount to/from which this vfsmount | ||
946 | send/receives propagation events. | ||
947 | |||
948 | ->mnt_slave_list links all the mounts to which this vfsmount propagates | ||
949 | to. | ||
950 | |||
951 | ->mnt_slave links togather all the slaves that its master vfsmount | ||
952 | propagates to. | ||
953 | |||
954 | ->mnt_master points to the master vfsmount from which this vfsmount | ||
955 | receives propagation. | ||
956 | |||
957 | ->mnt_flags takes two more flags to indicate the propagation status of | ||
958 | the vfsmount. MNT_SHARE indicates that the vfsmount is a shared | ||
959 | vfsmount. MNT_UNCLONABLE indicates that the vfsmount cannot be | ||
960 | replicated. | ||
961 | |||
962 | All the shared vfsmounts in a peer group form a cyclic list through | ||
963 | ->mnt_share. | ||
964 | |||
965 | All vfsmounts with the same ->mnt_master form on a cyclic list anchored | ||
966 | in ->mnt_master->mnt_slave_list and going through ->mnt_slave. | ||
967 | |||
968 | ->mnt_master can point to arbitrary (and possibly different) members | ||
969 | of master peer group. To find all immediate slaves of a peer group | ||
970 | you need to go through _all_ ->mnt_slave_list of its members. | ||
971 | Conceptually it's just a single set - distribution among the | ||
972 | individual lists does not affect propagation or the way propagation | ||
973 | tree is modified by operations. | ||
974 | |||
975 | A example propagation tree looks as shown in the figure below. | ||
976 | [ NOTE: Though it looks like a forest, if we consider all the shared | ||
977 | mounts as a conceptual entity called 'pnode', it becomes a tree] | ||
978 | |||
979 | |||
980 | A <--> B <--> C <---> D | ||
981 | /|\ /| |\ | ||
982 | / F G J K H I | ||
983 | / | ||
984 | E<-->K | ||
985 | /|\ | ||
986 | M L N | ||
987 | |||
988 | In the above figure A,B,C and D all are shared and propagate to each | ||
989 | other. 'A' has got 3 slave mounts 'E' 'F' and 'G' 'C' has got 2 slave | ||
990 | mounts 'J' and 'K' and 'D' has got two slave mounts 'H' and 'I'. | ||
991 | 'E' is also shared with 'K' and they propagate to each other. And | ||
992 | 'K' has 3 slaves 'M', 'L' and 'N' | ||
993 | |||
994 | A's ->mnt_share links with the ->mnt_share of 'B' 'C' and 'D' | ||
995 | |||
996 | A's ->mnt_slave_list links with ->mnt_slave of 'E', 'K', 'F' and 'G' | ||
997 | |||
998 | E's ->mnt_share links with ->mnt_share of K | ||
999 | 'E', 'K', 'F', 'G' have their ->mnt_master point to struct | ||
1000 | vfsmount of 'A' | ||
1001 | 'M', 'L', 'N' have their ->mnt_master point to struct vfsmount of 'K' | ||
1002 | K's ->mnt_slave_list links with ->mnt_slave of 'M', 'L' and 'N' | ||
1003 | |||
1004 | C's ->mnt_slave_list links with ->mnt_slave of 'J' and 'K' | ||
1005 | J and K's ->mnt_master points to struct vfsmount of C | ||
1006 | and finally D's ->mnt_slave_list links with ->mnt_slave of 'H' and 'I' | ||
1007 | 'H' and 'I' have their ->mnt_master pointing to struct vfsmount of 'D'. | ||
1008 | |||
1009 | |||
1010 | NOTE: The propagation tree is orthogonal to the mount tree. | ||
1011 | |||
1012 | |||
1013 | 8B Algorithm: | ||
1014 | |||
1015 | The crux of the implementation resides in rbind/move operation. | ||
1016 | |||
1017 | The overall algorithm breaks the operation into 3 phases: (look at | ||
1018 | attach_recursive_mnt() and propagate_mnt()) | ||
1019 | |||
1020 | 1. prepare phase. | ||
1021 | 2. commit phases. | ||
1022 | 3. abort phases. | ||
1023 | |||
1024 | Prepare phase: | ||
1025 | |||
1026 | for each mount in the source tree: | ||
1027 | a) Create the necessary number of mount trees to | ||
1028 | be attached to each of the mounts that receive | ||
1029 | propagation from the destination mount. | ||
1030 | b) Do not attach any of the trees to its destination. | ||
1031 | However note down its ->mnt_parent and ->mnt_mountpoint | ||
1032 | c) Link all the new mounts to form a propagation tree that | ||
1033 | is identical to the propagation tree of the destination | ||
1034 | mount. | ||
1035 | |||
1036 | If this phase is successful, there should be 'n' new | ||
1037 | propagation trees; where 'n' is the number of mounts in the | ||
1038 | source tree. Go to the commit phase | ||
1039 | |||
1040 | Also there should be 'm' new mount trees, where 'm' is | ||
1041 | the number of mounts to which the destination mount | ||
1042 | propagates to. | ||
1043 | |||
1044 | if any memory allocations fail, go to the abort phase. | ||
1045 | |||
1046 | Commit phase | ||
1047 | attach each of the mount trees to their corresponding | ||
1048 | destination mounts. | ||
1049 | |||
1050 | Abort phase | ||
1051 | delete all the newly created trees. | ||
1052 | |||
1053 | NOTE: all the propagation related functionality resides in the file | ||
1054 | pnode.c | ||
1055 | |||
1056 | |||
1057 | ------------------------------------------------------------------------ | ||
1058 | |||
1059 | version 0.1 (created the initial document, Ram Pai linuxram@us.ibm.com) | ||
1060 | version 0.2 (Incorporated comments from Al Viro) | ||
diff --git a/Documentation/sound/alsa/ALSA-Configuration.txt b/Documentation/sound/alsa/ALSA-Configuration.txt index 13cba955cb5a..2f27f391c7cc 100644 --- a/Documentation/sound/alsa/ALSA-Configuration.txt +++ b/Documentation/sound/alsa/ALSA-Configuration.txt | |||
@@ -167,7 +167,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | |||
167 | spdif - Support SPDIF I/O | 167 | spdif - Support SPDIF I/O |
168 | - Default: disabled | 168 | - Default: disabled |
169 | 169 | ||
170 | Module supports autoprobe and multiple chips (max 8). | 170 | This module supports one chip and autoprobe. |
171 | 171 | ||
172 | The power-management is supported. | 172 | The power-management is supported. |
173 | 173 | ||
@@ -206,7 +206,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | |||
206 | See "AC97 Quirk Option" section below. | 206 | See "AC97 Quirk Option" section below. |
207 | spdif_aclink - S/PDIF transfer over AC-link (default = 1) | 207 | spdif_aclink - S/PDIF transfer over AC-link (default = 1) |
208 | 208 | ||
209 | This module supports up to 8 cards and autoprobe. | 209 | This module supports one card and autoprobe. |
210 | 210 | ||
211 | ATI IXP has two different methods to control SPDIF output. One is | 211 | ATI IXP has two different methods to control SPDIF output. One is |
212 | over AC-link and another is over the "direct" SPDIF output. The | 212 | over AC-link and another is over the "direct" SPDIF output. The |
@@ -218,7 +218,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | |||
218 | 218 | ||
219 | Module for ATI IXP 150/200/250 AC97 modem controllers. | 219 | Module for ATI IXP 150/200/250 AC97 modem controllers. |
220 | 220 | ||
221 | Module supports up to 8 cards. | 221 | This module supports one card and autoprobe. |
222 | 222 | ||
223 | Note: The default index value of this module is -2, i.e. the first | 223 | Note: The default index value of this module is -2, i.e. the first |
224 | slot is excluded. | 224 | slot is excluded. |
@@ -637,7 +637,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | |||
637 | model - force the model name | 637 | model - force the model name |
638 | position_fix - Fix DMA pointer (0 = auto, 1 = none, 2 = POSBUF, 3 = FIFO size) | 638 | position_fix - Fix DMA pointer (0 = auto, 1 = none, 2 = POSBUF, 3 = FIFO size) |
639 | 639 | ||
640 | Module supports up to 8 cards. | 640 | This module supports one card and autoprobe. |
641 | 641 | ||
642 | Each codec may have a model table for different configurations. | 642 | Each codec may have a model table for different configurations. |
643 | If your machine isn't listed there, the default (usually minimal) | 643 | If your machine isn't listed there, the default (usually minimal) |
@@ -663,6 +663,10 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | |||
663 | adjusted. Appearing only when compiled with | 663 | adjusted. Appearing only when compiled with |
664 | $CONFIG_SND_DEBUG=y | 664 | $CONFIG_SND_DEBUG=y |
665 | 665 | ||
666 | ALC260 | ||
667 | hp HP machines | ||
668 | fujitsu Fujitsu S7020 | ||
669 | |||
666 | CMI9880 | 670 | CMI9880 |
667 | minimal 3-jack in back | 671 | minimal 3-jack in back |
668 | min_fp 3-jack in back, 2-jack in front | 672 | min_fp 3-jack in back, 2-jack in front |
@@ -811,7 +815,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | |||
811 | semaphores (e.g. on some ASUS laptops) | 815 | semaphores (e.g. on some ASUS laptops) |
812 | (default off) | 816 | (default off) |
813 | 817 | ||
814 | Module supports autoprobe and multiple bus-master chips (max 8). | 818 | This module supports one chip and autoprobe. |
815 | 819 | ||
816 | Note: the latest driver supports auto-detection of chip clock. | 820 | Note: the latest driver supports auto-detection of chip clock. |
817 | if you still encounter too fast playback, specify the clock | 821 | if you still encounter too fast playback, specify the clock |
@@ -830,7 +834,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | |||
830 | 834 | ||
831 | ac97_clock - AC'97 codec clock base (0 = auto-detect) | 835 | ac97_clock - AC'97 codec clock base (0 = auto-detect) |
832 | 836 | ||
833 | This module supports up to 8 cards and autoprobe. | 837 | This module supports one card and autoprobe. |
834 | 838 | ||
835 | Note: The default index value of this module is -2, i.e. the first | 839 | Note: The default index value of this module is -2, i.e. the first |
836 | slot is excluded. | 840 | slot is excluded. |
@@ -950,8 +954,10 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | |||
950 | use_cache - 0 or 1 (disabled by default) | 954 | use_cache - 0 or 1 (disabled by default) |
951 | vaio_hack - alias buffer_top=0x25a800 | 955 | vaio_hack - alias buffer_top=0x25a800 |
952 | reset_workaround - enable AC97 RESET workaround for some laptops | 956 | reset_workaround - enable AC97 RESET workaround for some laptops |
957 | reset_workaround2 - enable extended AC97 RESET workaround for some | ||
958 | other laptops | ||
953 | 959 | ||
954 | Module supports autoprobe and multiple chips (max 8). | 960 | This module supports one chip and autoprobe. |
955 | 961 | ||
956 | The power-management is supported. | 962 | The power-management is supported. |
957 | 963 | ||
@@ -980,6 +986,11 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | |||
980 | workaround is enabled automatically. For other laptops with a | 986 | workaround is enabled automatically. For other laptops with a |
981 | hard freeze, you can try reset_workaround=1 option. | 987 | hard freeze, you can try reset_workaround=1 option. |
982 | 988 | ||
989 | Note: Dell Latitude CSx laptops have another problem regarding | ||
990 | AC97 RESET. On these laptops, reset_workaround2 option is | ||
991 | turned on as default. This option is worth to try if the | ||
992 | previous reset_workaround option doesn't help. | ||
993 | |||
983 | Note: This driver is really crappy. It's a porting from the | 994 | Note: This driver is really crappy. It's a porting from the |
984 | OSS driver, which is a result of black-magic reverse engineering. | 995 | OSS driver, which is a result of black-magic reverse engineering. |
985 | The detection of codec will fail if the driver is loaded *after* | 996 | The detection of codec will fail if the driver is loaded *after* |
@@ -1310,7 +1321,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | |||
1310 | ac97_quirk - AC'97 workaround for strange hardware | 1321 | ac97_quirk - AC'97 workaround for strange hardware |
1311 | See "AC97 Quirk Option" section below. | 1322 | See "AC97 Quirk Option" section below. |
1312 | 1323 | ||
1313 | Module supports autoprobe and multiple bus-master chips (max 8). | 1324 | This module supports one chip and autoprobe. |
1314 | 1325 | ||
1315 | Note: on some SMP motherboards like MSI 694D the interrupts might | 1326 | Note: on some SMP motherboards like MSI 694D the interrupts might |
1316 | not be generated properly. In such a case, please try to | 1327 | not be generated properly. In such a case, please try to |
@@ -1352,7 +1363,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | |||
1352 | 1363 | ||
1353 | ac97_clock - AC'97 codec clock base (default 48000Hz) | 1364 | ac97_clock - AC'97 codec clock base (default 48000Hz) |
1354 | 1365 | ||
1355 | Module supports up to 8 cards. | 1366 | This module supports one card and autoprobe. |
1356 | 1367 | ||
1357 | Note: The default index value of this module is -2, i.e. the first | 1368 | Note: The default index value of this module is -2, i.e. the first |
1358 | slot is excluded. | 1369 | slot is excluded. |
diff --git a/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl b/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl index 24e85520890b..260334c98d95 100644 --- a/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl +++ b/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl | |||
@@ -18,8 +18,8 @@ | |||
18 | </affiliation> | 18 | </affiliation> |
19 | </author> | 19 | </author> |
20 | 20 | ||
21 | <date>March 6, 2005</date> | 21 | <date>October 6, 2005</date> |
22 | <edition>0.3.4</edition> | 22 | <edition>0.3.5</edition> |
23 | 23 | ||
24 | <abstract> | 24 | <abstract> |
25 | <para> | 25 | <para> |
@@ -30,7 +30,7 @@ | |||
30 | 30 | ||
31 | <legalnotice> | 31 | <legalnotice> |
32 | <para> | 32 | <para> |
33 | Copyright (c) 2002-2004 Takashi Iwai <email>tiwai@suse.de</email> | 33 | Copyright (c) 2002-2005 Takashi Iwai <email>tiwai@suse.de</email> |
34 | </para> | 34 | </para> |
35 | 35 | ||
36 | <para> | 36 | <para> |
@@ -1433,25 +1433,10 @@ | |||
1433 | <informalexample> | 1433 | <informalexample> |
1434 | <programlisting> | 1434 | <programlisting> |
1435 | <![CDATA[ | 1435 | <![CDATA[ |
1436 | if (chip->res_port) { | 1436 | release_and_free_resource(chip->res_port); |
1437 | release_resource(chip->res_port); | ||
1438 | kfree_nocheck(chip->res_port); | ||
1439 | } | ||
1440 | ]]> | 1437 | ]]> |
1441 | </programlisting> | 1438 | </programlisting> |
1442 | </informalexample> | 1439 | </informalexample> |
1443 | |||
1444 | As you can see, the resource pointer is also to be freed | ||
1445 | via <function>kfree_nocheck()</function> after | ||
1446 | <function>release_resource()</function> is called. You | ||
1447 | cannot use <function>kfree()</function> here, because on ALSA, | ||
1448 | <function>kfree()</function> may be a wrapper to its own | ||
1449 | allocator with the memory debugging. Since the resource pointer | ||
1450 | is allocated externally outside the ALSA, it must be released | ||
1451 | via the native | ||
1452 | <function>kfree()</function>. | ||
1453 | <function>kfree_nocheck()</function> is used for that; it calls | ||
1454 | the native <function>kfree()</function> without wrapper. | ||
1455 | </para> | 1440 | </para> |
1456 | 1441 | ||
1457 | <para> | 1442 | <para> |
@@ -2190,8 +2175,7 @@ struct _snd_pcm_runtime { | |||
2190 | unsigned int rate_den; | 2175 | unsigned int rate_den; |
2191 | 2176 | ||
2192 | /* -- SW params -- */ | 2177 | /* -- SW params -- */ |
2193 | int tstamp_timespec; /* use timeval (0) or timespec (1) */ | 2178 | struct timespec tstamp_mode; /* mmap timestamp is updated */ |
2194 | snd_pcm_tstamp_t tstamp_mode; /* mmap timestamp is updated */ | ||
2195 | unsigned int period_step; | 2179 | unsigned int period_step; |
2196 | unsigned int sleep_min; /* min ticks to sleep */ | 2180 | unsigned int sleep_min; /* min ticks to sleep */ |
2197 | snd_pcm_uframes_t xfer_align; /* xfer size need to be a multiple */ | 2181 | snd_pcm_uframes_t xfer_align; /* xfer size need to be a multiple */ |
@@ -3709,8 +3693,7 @@ struct _snd_pcm_runtime { | |||
3709 | <para> | 3693 | <para> |
3710 | Here, the chip instance is retrieved via | 3694 | Here, the chip instance is retrieved via |
3711 | <function>snd_kcontrol_chip()</function> macro. This macro | 3695 | <function>snd_kcontrol_chip()</function> macro. This macro |
3712 | converts from kcontrol->private_data to the type defined by | 3696 | just accesses to kcontrol->private_data. The |
3713 | <type>chip_t</type>. The | ||
3714 | kcontrol->private_data field is | 3697 | kcontrol->private_data field is |
3715 | given as the argument of <function>snd_ctl_new()</function> | 3698 | given as the argument of <function>snd_ctl_new()</function> |
3716 | (see the later subsection | 3699 | (see the later subsection |
@@ -5998,32 +5981,23 @@ struct _snd_pcm_runtime { | |||
5998 | The first argument is the expression to evaluate, and the | 5981 | The first argument is the expression to evaluate, and the |
5999 | second argument is the action if it fails. When | 5982 | second argument is the action if it fails. When |
6000 | <constant>CONFIG_SND_DEBUG</constant>, is set, it will show an | 5983 | <constant>CONFIG_SND_DEBUG</constant>, is set, it will show an |
6001 | error message such as <computeroutput>BUG? (xxx) (called from | 5984 | error message such as <computeroutput>BUG? (xxx)</computeroutput> |
6002 | yyy)</computeroutput>. When no debug flag is set, this is | 5985 | together with stack trace. |
6003 | ignored. | ||
6004 | </para> | 5986 | </para> |
6005 | </section> | ||
6006 | |||
6007 | <section id="useful-functions-snd-runtime-check"> | ||
6008 | <title><function>snd_runtime_check()</function></title> | ||
6009 | <para> | 5987 | <para> |
6010 | This macro is quite similar with | 5988 | When no debug flag is set, this macro is ignored. |
6011 | <function>snd_assert()</function>. Unlike | ||
6012 | <function>snd_assert()</function>, the expression is always | ||
6013 | evaluated regardless of | ||
6014 | <constant>CONFIG_SND_DEBUG</constant>. When | ||
6015 | <constant>CONFIG_SND_DEBUG</constant> is set, the macro will | ||
6016 | show a message like <computeroutput>ERROR (xx) (called from | ||
6017 | yyy)</computeroutput>. | ||
6018 | </para> | 5989 | </para> |
6019 | </section> | 5990 | </section> |
6020 | 5991 | ||
6021 | <section id="useful-functions-snd-bug"> | 5992 | <section id="useful-functions-snd-bug"> |
6022 | <title><function>snd_BUG()</function></title> | 5993 | <title><function>snd_BUG()</function></title> |
6023 | <para> | 5994 | <para> |
6024 | It calls <function>snd_assert(0,)</function> -- that is, just | 5995 | It shows <computeroutput>BUG?</computeroutput> message and |
6025 | prints the error message at the point. It's useful to show that | 5996 | stack trace as well as <function>snd_assert</function> at the point. |
6026 | a fatal error happens there. | 5997 | It's useful to show that a fatal error happens there. |
5998 | </para> | ||
5999 | <para> | ||
6000 | When no debug flag is set, this macro is ignored. | ||
6027 | </para> | 6001 | </para> |
6028 | </section> | 6002 | </section> |
6029 | </chapter> | 6003 | </chapter> |
diff --git a/Documentation/sparse.txt b/Documentation/sparse.txt index 1829009db771..3f1c5464b1c9 100644 --- a/Documentation/sparse.txt +++ b/Documentation/sparse.txt | |||
@@ -41,9 +41,9 @@ sure that bitwise types don't get mixed up (little-endian vs big-endian | |||
41 | vs cpu-endian vs whatever), and there the constant "0" really _is_ | 41 | vs cpu-endian vs whatever), and there the constant "0" really _is_ |
42 | special. | 42 | special. |
43 | 43 | ||
44 | Modify top-level Makefile to say | 44 | Use |
45 | 45 | ||
46 | CHECK = sparse -Wbitwise | 46 | make C=[12] CF=-Wbitwise |
47 | 47 | ||
48 | or you don't get any checking at all. | 48 | or you don't get any checking at all. |
49 | 49 | ||
diff --git a/Documentation/video4linux/API.html b/Documentation/video4linux/API.html index 441407b12a9f..afbe9ae7ee96 100644 --- a/Documentation/video4linux/API.html +++ b/Documentation/video4linux/API.html | |||
@@ -8,7 +8,7 @@ V4L original API</a> | |||
8 | </td><td> | 8 | </td><td> |
9 | Obsoleted by V4L2 API | 9 | Obsoleted by V4L2 API |
10 | </td></tr><tr><td> | 10 | </td></tr><tr><td> |
11 | <A HREF=http://www.linuxtv.org/downloads/video4linux/API/V4L2_API.html> | 11 | <A HREF=http://www.linuxtv.org/downloads/video4linux/API/V4L2_API> |
12 | V4L2 API</a> | 12 | V4L2 API</a> |
13 | </td><td> | 13 | </td><td> |
14 | Should be used for new projects | 14 | Should be used for new projects |
diff --git a/Documentation/video4linux/CARDLIST.bttv b/Documentation/video4linux/CARDLIST.bttv index ec785f9f15a3..330246ac80f8 100644 --- a/Documentation/video4linux/CARDLIST.bttv +++ b/Documentation/video4linux/CARDLIST.bttv | |||
@@ -1,137 +1,143 @@ | |||
1 | card=0 - *** UNKNOWN/GENERIC *** | 1 | 0 -> *** UNKNOWN/GENERIC *** |
2 | card=1 - MIRO PCTV | 2 | 1 -> MIRO PCTV |
3 | card=2 - Hauppauge (bt848) | 3 | 2 -> Hauppauge (bt848) |
4 | card=3 - STB, Gateway P/N 6000699 (bt848) | 4 | 3 -> STB, Gateway P/N 6000699 (bt848) |
5 | card=4 - Intel Create and Share PCI/ Smart Video Recorder III | 5 | 4 -> Intel Create and Share PCI/ Smart Video Recorder III |
6 | card=5 - Diamond DTV2000 | 6 | 5 -> Diamond DTV2000 |
7 | card=6 - AVerMedia TVPhone | 7 | 6 -> AVerMedia TVPhone |
8 | card=7 - MATRIX-Vision MV-Delta | 8 | 7 -> MATRIX-Vision MV-Delta |
9 | card=8 - Lifeview FlyVideo II (Bt848) LR26 / MAXI TV Video PCI2 LR26 | 9 | 8 -> Lifeview FlyVideo II (Bt848) LR26 / MAXI TV Video PCI2 LR26 |
10 | card=9 - IMS/IXmicro TurboTV | 10 | 9 -> IMS/IXmicro TurboTV |
11 | card=10 - Hauppauge (bt878) | 11 | 10 -> Hauppauge (bt878) [0070:13eb,0070:3900,2636:10b4] |
12 | card=11 - MIRO PCTV pro | 12 | 11 -> MIRO PCTV pro |
13 | card=12 - ADS Technologies Channel Surfer TV (bt848) | 13 | 12 -> ADS Technologies Channel Surfer TV (bt848) |
14 | card=13 - AVerMedia TVCapture 98 | 14 | 13 -> AVerMedia TVCapture 98 [1461:0002,1461:0004,1461:0300] |
15 | card=14 - Aimslab Video Highway Xtreme (VHX) | 15 | 14 -> Aimslab Video Highway Xtreme (VHX) |
16 | card=15 - Zoltrix TV-Max | 16 | 15 -> Zoltrix TV-Max [a1a0:a0fc] |
17 | card=16 - Prolink Pixelview PlayTV (bt878) | 17 | 16 -> Prolink Pixelview PlayTV (bt878) |
18 | card=17 - Leadtek WinView 601 | 18 | 17 -> Leadtek WinView 601 |
19 | card=18 - AVEC Intercapture | 19 | 18 -> AVEC Intercapture |
20 | card=19 - Lifeview FlyVideo II EZ /FlyKit LR38 Bt848 (capture only) | 20 | 19 -> Lifeview FlyVideo II EZ /FlyKit LR38 Bt848 (capture only) |
21 | card=20 - CEI Raffles Card | 21 | 20 -> CEI Raffles Card |
22 | card=21 - Lifeview FlyVideo 98/ Lucky Star Image World ConferenceTV LR50 | 22 | 21 -> Lifeview FlyVideo 98/ Lucky Star Image World ConferenceTV LR50 |
23 | card=22 - Askey CPH050/ Phoebe Tv Master + FM | 23 | 22 -> Askey CPH050/ Phoebe Tv Master + FM [14ff:3002] |
24 | card=23 - Modular Technology MM201/MM202/MM205/MM210/MM215 PCTV, bt878 | 24 | 23 -> Modular Technology MM201/MM202/MM205/MM210/MM215 PCTV, bt878 [14c7:0101] |
25 | card=24 - Askey CPH05X/06X (bt878) [many vendors] | 25 | 24 -> Askey CPH05X/06X (bt878) [many vendors] [144f:3002,144f:3005,144f:5000,14ff:3000] |
26 | card=25 - Terratec TerraTV+ Version 1.0 (Bt848)/ Terra TValue Version 1.0/ Vobis TV-Boostar | 26 | 25 -> Terratec TerraTV+ Version 1.0 (Bt848)/ Terra TValue Version 1.0/ Vobis TV-Boostar |
27 | card=26 - Hauppauge WinCam newer (bt878) | 27 | 26 -> Hauppauge WinCam newer (bt878) |
28 | card=27 - Lifeview FlyVideo 98/ MAXI TV Video PCI2 LR50 | 28 | 27 -> Lifeview FlyVideo 98/ MAXI TV Video PCI2 LR50 |
29 | card=28 - Terratec TerraTV+ Version 1.1 (bt878) | 29 | 28 -> Terratec TerraTV+ Version 1.1 (bt878) [153b:1127,1852:1852] |
30 | card=29 - Imagenation PXC200 | 30 | 29 -> Imagenation PXC200 [1295:200a] |
31 | card=30 - Lifeview FlyVideo 98 LR50 | 31 | 30 -> Lifeview FlyVideo 98 LR50 [1f7f:1850] |
32 | card=31 - Formac iProTV, Formac ProTV I (bt848) | 32 | 31 -> Formac iProTV, Formac ProTV I (bt848) |
33 | card=32 - Intel Create and Share PCI/ Smart Video Recorder III | 33 | 32 -> Intel Create and Share PCI/ Smart Video Recorder III |
34 | card=33 - Terratec TerraTValue Version Bt878 | 34 | 33 -> Terratec TerraTValue Version Bt878 [153b:1117,153b:1118,153b:1119,153b:111a,153b:1134,153b:5018] |
35 | card=34 - Leadtek WinFast 2000/ WinFast 2000 XP | 35 | 34 -> Leadtek WinFast 2000/ WinFast 2000 XP [107d:6606,107d:6609,6606:217d,f6ff:fff6] |
36 | card=35 - Lifeview FlyVideo 98 LR50 / Chronos Video Shuttle II | 36 | 35 -> Lifeview FlyVideo 98 LR50 / Chronos Video Shuttle II [1851:1850,1851:a050] |
37 | card=36 - Lifeview FlyVideo 98FM LR50 / Typhoon TView TV/FM Tuner | 37 | 36 -> Lifeview FlyVideo 98FM LR50 / Typhoon TView TV/FM Tuner [1852:1852] |
38 | card=37 - Prolink PixelView PlayTV pro | 38 | 37 -> Prolink PixelView PlayTV pro |
39 | card=38 - Askey CPH06X TView99 | 39 | 38 -> Askey CPH06X TView99 [144f:3000,144f:a005,a04f:a0fc] |
40 | card=39 - Pinnacle PCTV Studio/Rave | 40 | 39 -> Pinnacle PCTV Studio/Rave [11bd:0012,bd11:1200,bd11:ff00,11bd:ff12] |
41 | card=40 - STB TV PCI FM, Gateway P/N 6000704 (bt878), 3Dfx VoodooTV 100 | 41 | 40 -> STB TV PCI FM, Gateway P/N 6000704 (bt878), 3Dfx VoodooTV 100 [10b4:2636,10b4:2645,121a:3060] |
42 | card=41 - AVerMedia TVPhone 98 | 42 | 41 -> AVerMedia TVPhone 98 [1461:0001,1461:0003] |
43 | card=42 - ProVideo PV951 | 43 | 42 -> ProVideo PV951 [aa0c:146c] |
44 | card=43 - Little OnAir TV | 44 | 43 -> Little OnAir TV |
45 | card=44 - Sigma TVII-FM | 45 | 44 -> Sigma TVII-FM |
46 | card=45 - MATRIX-Vision MV-Delta 2 | 46 | 45 -> MATRIX-Vision MV-Delta 2 |
47 | card=46 - Zoltrix Genie TV/FM | 47 | 46 -> Zoltrix Genie TV/FM [15b0:4000,15b0:400a,15b0:400d,15b0:4010,15b0:4016] |
48 | card=47 - Terratec TV/Radio+ | 48 | 47 -> Terratec TV/Radio+ [153b:1123] |
49 | card=48 - Askey CPH03x/ Dynalink Magic TView | 49 | 48 -> Askey CPH03x/ Dynalink Magic TView |
50 | card=49 - IODATA GV-BCTV3/PCI | 50 | 49 -> IODATA GV-BCTV3/PCI [10fc:4020] |
51 | card=50 - Prolink PV-BT878P+4E / PixelView PlayTV PAK / Lenco MXTV-9578 CP | 51 | 50 -> Prolink PV-BT878P+4E / PixelView PlayTV PAK / Lenco MXTV-9578 CP |
52 | card=51 - Eagle Wireless Capricorn2 (bt878A) | 52 | 51 -> Eagle Wireless Capricorn2 (bt878A) |
53 | card=52 - Pinnacle PCTV Studio Pro | 53 | 52 -> Pinnacle PCTV Studio Pro |
54 | card=53 - Typhoon TView RDS + FM Stereo / KNC1 TV Station RDS | 54 | 53 -> Typhoon TView RDS + FM Stereo / KNC1 TV Station RDS |
55 | card=54 - Lifeview FlyVideo 2000 /FlyVideo A2/ Lifetec LT 9415 TV [LR90] | 55 | 54 -> Lifeview FlyVideo 2000 /FlyVideo A2/ Lifetec LT 9415 TV [LR90] |
56 | card=55 - Askey CPH031/ BESTBUY Easy TV | 56 | 55 -> Askey CPH031/ BESTBUY Easy TV |
57 | card=56 - Lifeview FlyVideo 98FM LR50 | 57 | 56 -> Lifeview FlyVideo 98FM LR50 [a051:41a0] |
58 | card=57 - GrandTec 'Grand Video Capture' (Bt848) | 58 | 57 -> GrandTec 'Grand Video Capture' (Bt848) [4344:4142] |
59 | card=58 - Askey CPH060/ Phoebe TV Master Only (No FM) | 59 | 58 -> Askey CPH060/ Phoebe TV Master Only (No FM) |
60 | card=59 - Askey CPH03x TV Capturer | 60 | 59 -> Askey CPH03x TV Capturer |
61 | card=60 - Modular Technology MM100PCTV | 61 | 60 -> Modular Technology MM100PCTV |
62 | card=61 - AG Electronics GMV1 | 62 | 61 -> AG Electronics GMV1 [15cb:0101] |
63 | card=62 - Askey CPH061/ BESTBUY Easy TV (bt878) | 63 | 62 -> Askey CPH061/ BESTBUY Easy TV (bt878) |
64 | card=63 - ATI TV-Wonder | 64 | 63 -> ATI TV-Wonder [1002:0001] |
65 | card=64 - ATI TV-Wonder VE | 65 | 64 -> ATI TV-Wonder VE [1002:0003] |
66 | card=65 - Lifeview FlyVideo 2000S LR90 | 66 | 65 -> Lifeview FlyVideo 2000S LR90 |
67 | card=66 - Terratec TValueRadio | 67 | 66 -> Terratec TValueRadio [153b:1135,153b:ff3b] |
68 | card=67 - IODATA GV-BCTV4/PCI | 68 | 67 -> IODATA GV-BCTV4/PCI [10fc:4050] |
69 | card=68 - 3Dfx VoodooTV FM (Euro), VoodooTV 200 (USA) | 69 | 68 -> 3Dfx VoodooTV FM (Euro), VoodooTV 200 (USA) [121a:3000,10b4:2637] |
70 | card=69 - Active Imaging AIMMS | 70 | 69 -> Active Imaging AIMMS |
71 | card=70 - Prolink Pixelview PV-BT878P+ (Rev.4C,8E) | 71 | 70 -> Prolink Pixelview PV-BT878P+ (Rev.4C,8E) |
72 | card=71 - Lifeview FlyVideo 98EZ (capture only) LR51 | 72 | 71 -> Lifeview FlyVideo 98EZ (capture only) LR51 [1851:1851] |
73 | card=72 - Prolink Pixelview PV-BT878P+9B (PlayTV Pro rev.9B FM+NICAM) | 73 | 72 -> Prolink Pixelview PV-BT878P+9B (PlayTV Pro rev.9B FM+NICAM) [1554:4011] |
74 | card=73 - Sensoray 311 | 74 | 73 -> Sensoray 311 [6000:0311] |
75 | card=74 - RemoteVision MX (RV605) | 75 | 74 -> RemoteVision MX (RV605) |
76 | card=75 - Powercolor MTV878/ MTV878R/ MTV878F | 76 | 75 -> Powercolor MTV878/ MTV878R/ MTV878F |
77 | card=76 - Canopus WinDVR PCI (COMPAQ Presario 3524JP, 5112JP) | 77 | 76 -> Canopus WinDVR PCI (COMPAQ Presario 3524JP, 5112JP) [0e11:0079] |
78 | card=77 - GrandTec Multi Capture Card (Bt878) | 78 | 77 -> GrandTec Multi Capture Card (Bt878) |
79 | card=78 - Jetway TV/Capture JW-TV878-FBK, Kworld KW-TV878RF | 79 | 78 -> Jetway TV/Capture JW-TV878-FBK, Kworld KW-TV878RF [0a01:17de] |
80 | card=79 - DSP Design TCVIDEO | 80 | 79 -> DSP Design TCVIDEO |
81 | card=80 - Hauppauge WinTV PVR | 81 | 80 -> Hauppauge WinTV PVR [0070:4500] |
82 | card=81 - IODATA GV-BCTV5/PCI | 82 | 81 -> IODATA GV-BCTV5/PCI [10fc:4070,10fc:d018] |
83 | card=82 - Osprey 100/150 (878) | 83 | 82 -> Osprey 100/150 (878) [0070:ff00] |
84 | card=83 - Osprey 100/150 (848) | 84 | 83 -> Osprey 100/150 (848) |
85 | card=84 - Osprey 101 (848) | 85 | 84 -> Osprey 101 (848) |
86 | card=85 - Osprey 101/151 | 86 | 85 -> Osprey 101/151 |
87 | card=86 - Osprey 101/151 w/ svid | 87 | 86 -> Osprey 101/151 w/ svid |
88 | card=87 - Osprey 200/201/250/251 | 88 | 87 -> Osprey 200/201/250/251 |
89 | card=88 - Osprey 200/250 | 89 | 88 -> Osprey 200/250 [0070:ff01] |
90 | card=89 - Osprey 210/220 | 90 | 89 -> Osprey 210/220 |
91 | card=90 - Osprey 500 | 91 | 90 -> Osprey 500 [0070:ff02] |
92 | card=91 - Osprey 540 | 92 | 91 -> Osprey 540 [0070:ff04] |
93 | card=92 - Osprey 2000 | 93 | 92 -> Osprey 2000 [0070:ff03] |
94 | card=93 - IDS Eagle | 94 | 93 -> IDS Eagle |
95 | card=94 - Pinnacle PCTV Sat | 95 | 94 -> Pinnacle PCTV Sat [11bd:001c] |
96 | card=95 - Formac ProTV II (bt878) | 96 | 95 -> Formac ProTV II (bt878) |
97 | card=96 - MachTV | 97 | 96 -> MachTV |
98 | card=97 - Euresys Picolo | 98 | 97 -> Euresys Picolo |
99 | card=98 - ProVideo PV150 | 99 | 98 -> ProVideo PV150 [aa00:1460,aa01:1461,aa02:1462,aa03:1463,aa04:1464,aa05:1465,aa06:1466,aa07:1467] |
100 | card=99 - AD-TVK503 | 100 | 99 -> AD-TVK503 |
101 | card=100 - Hercules Smart TV Stereo | 101 | 100 -> Hercules Smart TV Stereo |
102 | card=101 - Pace TV & Radio Card | 102 | 101 -> Pace TV & Radio Card |
103 | card=102 - IVC-200 | 103 | 102 -> IVC-200 [0000:a155,0001:a155,0002:a155,0003:a155,0100:a155,0101:a155,0102:a155,0103:a155] |
104 | card=103 - Grand X-Guard / Trust 814PCI | 104 | 103 -> Grand X-Guard / Trust 814PCI [0304:0102] |
105 | card=104 - Nebula Electronics DigiTV | 105 | 104 -> Nebula Electronics DigiTV [0071:0101] |
106 | card=105 - ProVideo PV143 | 106 | 105 -> ProVideo PV143 [aa00:1430,aa00:1431,aa00:1432,aa00:1433,aa03:1433] |
107 | card=106 - PHYTEC VD-009-X1 MiniDIN (bt878) | 107 | 106 -> PHYTEC VD-009-X1 MiniDIN (bt878) |
108 | card=107 - PHYTEC VD-009-X1 Combi (bt878) | 108 | 107 -> PHYTEC VD-009-X1 Combi (bt878) |
109 | card=108 - PHYTEC VD-009 MiniDIN (bt878) | 109 | 108 -> PHYTEC VD-009 MiniDIN (bt878) |
110 | card=109 - PHYTEC VD-009 Combi (bt878) | 110 | 109 -> PHYTEC VD-009 Combi (bt878) |
111 | card=110 - IVC-100 | 111 | 110 -> IVC-100 [ff00:a132] |
112 | card=111 - IVC-120G | 112 | 111 -> IVC-120G [ff00:a182,ff01:a182,ff02:a182,ff03:a182,ff04:a182,ff05:a182,ff06:a182,ff07:a182,ff08:a182,ff09:a182,ff0a:a182,ff0b:a182,ff0c:a182,ff0d:a182,ff0e:a182,ff0f:a182] |
113 | card=112 - pcHDTV HD-2000 TV | 113 | 112 -> pcHDTV HD-2000 TV [7063:2000] |
114 | card=113 - Twinhan DST + clones | 114 | 113 -> Twinhan DST + clones [11bd:0026,1822:0001,270f:fc00] |
115 | card=114 - Winfast VC100 | 115 | 114 -> Winfast VC100 [107d:6607] |
116 | card=115 - Teppro TEV-560/InterVision IV-560 | 116 | 115 -> Teppro TEV-560/InterVision IV-560 |
117 | card=116 - SIMUS GVC1100 | 117 | 116 -> SIMUS GVC1100 [aa6a:82b2] |
118 | card=117 - NGS NGSTV+ | 118 | 117 -> NGS NGSTV+ |
119 | card=118 - LMLBT4 | 119 | 118 -> LMLBT4 |
120 | card=119 - Tekram M205 PRO | 120 | 119 -> Tekram M205 PRO |
121 | card=120 - Conceptronic CONTVFMi | 121 | 120 -> Conceptronic CONTVFMi |
122 | card=121 - Euresys Picolo Tetra | 122 | 121 -> Euresys Picolo Tetra [1805:0105,1805:0106,1805:0107,1805:0108] |
123 | card=122 - Spirit TV Tuner | 123 | 122 -> Spirit TV Tuner |
124 | card=123 - AVerMedia AVerTV DVB-T 771 | 124 | 123 -> AVerMedia AVerTV DVB-T 771 [1461:0771] |
125 | card=124 - AverMedia AverTV DVB-T 761 | 125 | 124 -> AverMedia AverTV DVB-T 761 [1461:0761] |
126 | card=125 - MATRIX Vision Sigma-SQ | 126 | 125 -> MATRIX Vision Sigma-SQ |
127 | card=126 - MATRIX Vision Sigma-SLC | 127 | 126 -> MATRIX Vision Sigma-SLC |
128 | card=127 - APAC Viewcomp 878(AMAX) | 128 | 127 -> APAC Viewcomp 878(AMAX) |
129 | card=128 - DViCO FusionHDTV DVB-T Lite | 129 | 128 -> DViCO FusionHDTV DVB-T Lite [18ac:db10] |
130 | card=129 - V-Gear MyVCD | 130 | 129 -> V-Gear MyVCD |
131 | card=130 - Super TV Tuner | 131 | 130 -> Super TV Tuner |
132 | card=131 - Tibet Systems 'Progress DVR' CS16 | 132 | 131 -> Tibet Systems 'Progress DVR' CS16 |
133 | card=132 - Kodicom 4400R (master) | 133 | 132 -> Kodicom 4400R (master) |
134 | card=133 - Kodicom 4400R (slave) | 134 | 133 -> Kodicom 4400R (slave) |
135 | card=134 - Adlink RTV24 | 135 | 134 -> Adlink RTV24 |
136 | card=135 - DViCO FusionHDTV 5 Lite | 136 | 135 -> DViCO FusionHDTV 5 Lite [18ac:d500] |
137 | card=136 - Acorp Y878F | 137 | 136 -> Acorp Y878F [9511:1540] |
138 | 137 -> Conceptronic CTVFMi v2 | ||
139 | 138 -> Prolink Pixelview PV-BT878P+ (Rev.2E) | ||
140 | 139 -> Prolink PixelView PlayTV MPEG2 PV-M4900 | ||
141 | 140 -> Osprey 440 [0070:ff07] | ||
142 | 141 -> Asound Skyeye PCTV | ||
143 | 142 -> Sabrent TV-FM (bttv version) | ||
diff --git a/Documentation/video4linux/CARDLIST.cx88 b/Documentation/video4linux/CARDLIST.cx88 index 03deb0726aa4..a1017d1a85d4 100644 --- a/Documentation/video4linux/CARDLIST.cx88 +++ b/Documentation/video4linux/CARDLIST.cx88 | |||
@@ -1,32 +1,37 @@ | |||
1 | card=0 - UNKNOWN/GENERIC | 1 | 0 -> UNKNOWN/GENERIC |
2 | card=1 - Hauppauge WinTV 34xxx models | 2 | 1 -> Hauppauge WinTV 34xxx models [0070:3400,0070:3401] |
3 | card=2 - GDI Black Gold | 3 | 2 -> GDI Black Gold [14c7:0106,14c7:0107] |
4 | card=3 - PixelView | 4 | 3 -> PixelView [1554:4811] |
5 | card=4 - ATI TV Wonder Pro | 5 | 4 -> ATI TV Wonder Pro [1002:00f8] |
6 | card=5 - Leadtek Winfast 2000XP Expert | 6 | 5 -> Leadtek Winfast 2000XP Expert [107d:6611,107d:6613] |
7 | card=6 - AverTV Studio 303 (M126) | 7 | 6 -> AverTV Studio 303 (M126) [1461:000b] |
8 | card=7 - MSI TV-@nywhere Master | 8 | 7 -> MSI TV-@nywhere Master [1462:8606] |
9 | card=8 - Leadtek Winfast DV2000 | 9 | 8 -> Leadtek Winfast DV2000 [107d:6620] |
10 | card=9 - Leadtek PVR 2000 | 10 | 9 -> Leadtek PVR 2000 [107d:663b,107d:663C] |
11 | card=10 - IODATA GV-VCP3/PCI | 11 | 10 -> IODATA GV-VCP3/PCI [10fc:d003] |
12 | card=11 - Prolink PlayTV PVR | 12 | 11 -> Prolink PlayTV PVR |
13 | card=12 - ASUS PVR-416 | 13 | 12 -> ASUS PVR-416 [1043:4823] |
14 | card=13 - MSI TV-@nywhere | 14 | 13 -> MSI TV-@nywhere |
15 | card=14 - KWorld/VStream XPert DVB-T | 15 | 14 -> KWorld/VStream XPert DVB-T [17de:08a6] |
16 | card=15 - DViCO FusionHDTV DVB-T1 | 16 | 15 -> DViCO FusionHDTV DVB-T1 [18ac:db00] |
17 | card=16 - KWorld LTV883RF | 17 | 16 -> KWorld LTV883RF |
18 | card=17 - DViCO FusionHDTV 3 Gold-Q | 18 | 17 -> DViCO FusionHDTV 3 Gold-Q [18ac:d810] |
19 | card=18 - Hauppauge Nova-T DVB-T | 19 | 18 -> Hauppauge Nova-T DVB-T [0070:9002] |
20 | card=19 - Conexant DVB-T reference design | 20 | 19 -> Conexant DVB-T reference design [14f1:0187] |
21 | card=20 - Provideo PV259 | 21 | 20 -> Provideo PV259 [1540:2580] |
22 | card=21 - DViCO FusionHDTV DVB-T Plus | 22 | 21 -> DViCO FusionHDTV DVB-T Plus [18ac:db10] |
23 | card=22 - digitalnow DNTV Live! DVB-T | 23 | 22 -> pcHDTV HD3000 HDTV [7063:3000] |
24 | card=23 - pcHDTV HD3000 HDTV | 24 | 23 -> digitalnow DNTV Live! DVB-T [17de:a8a6] |
25 | card=24 - Hauppauge WinTV 28xxx (Roslyn) models | 25 | 24 -> Hauppauge WinTV 28xxx (Roslyn) models [0070:2801] |
26 | card=25 - Digital-Logic MICROSPACE Entertainment Center (MEC) | 26 | 25 -> Digital-Logic MICROSPACE Entertainment Center (MEC) [14f1:0342] |
27 | card=26 - IODATA GV/BCTV7E | 27 | 26 -> IODATA GV/BCTV7E [10fc:d035] |
28 | card=27 - PixelView PlayTV Ultra Pro (Stereo) | 28 | 27 -> PixelView PlayTV Ultra Pro (Stereo) |
29 | card=28 - DViCO FusionHDTV 3 Gold-T | 29 | 28 -> DViCO FusionHDTV 3 Gold-T [18ac:d820] |
30 | card=29 - ADS Tech Instant TV DVB-T PCI | 30 | 29 -> ADS Tech Instant TV DVB-T PCI [1421:0334] |
31 | card=30 - TerraTec Cinergy 1400 DVB-T | 31 | 30 -> TerraTec Cinergy 1400 DVB-T [153b:1166] |
32 | card=31 - DViCO FusionHDTV 5 Gold | 32 | 31 -> DViCO FusionHDTV 5 Gold [18ac:d500] |
33 | 32 -> AverMedia UltraTV Media Center PCI 550 [1461:8011] | ||
34 | 33 -> Kworld V-Stream Xpert DVD | ||
35 | 34 -> ATI HDTV Wonder [1002:a101] | ||
36 | 35 -> WinFast DTV1000-T [107d:665f] | ||
37 | 36 -> AVerTV 303 (M126) [1461:000a] | ||
diff --git a/Documentation/video4linux/CARDLIST.em28xx b/Documentation/video4linux/CARDLIST.em28xx new file mode 100644 index 000000000000..a0c7cad20971 --- /dev/null +++ b/Documentation/video4linux/CARDLIST.em28xx | |||
@@ -0,0 +1,10 @@ | |||
1 | 0 -> Unknown EM2800 video grabber (em2800) [eb1a:2800] | ||
2 | 1 -> Unknown EM2820/2840 video grabber (em2820/em2840) | ||
3 | 2 -> Terratec Cinergy 250 USB (em2820/em2840) [0ccd:0036] | ||
4 | 3 -> Pinnacle PCTV USB 2 (em2820/em2840) [2304:0208] | ||
5 | 4 -> Hauppauge WinTV USB 2 (em2820/em2840) [2040:4200] | ||
6 | 5 -> MSI VOX USB 2.0 (em2820/em2840) [eb1a:2820] | ||
7 | 6 -> Terratec Cinergy 200 USB (em2800) | ||
8 | 7 -> Leadtek Winfast USB II (em2800) | ||
9 | 8 -> Kworld USB2800 (em2800) | ||
10 | 9 -> Pinnacle Dazzle DVC 90 (em2820/em2840) [2304:0207] | ||
diff --git a/Documentation/video4linux/CARDLIST.saa7134 b/Documentation/video4linux/CARDLIST.saa7134 index dc57225f39be..efb708ec116a 100644 --- a/Documentation/video4linux/CARDLIST.saa7134 +++ b/Documentation/video4linux/CARDLIST.saa7134 | |||
@@ -6,10 +6,10 @@ | |||
6 | 5 -> SKNet Monster TV [1131:4e85] | 6 | 5 -> SKNet Monster TV [1131:4e85] |
7 | 6 -> Tevion MD 9717 | 7 | 6 -> Tevion MD 9717 |
8 | 7 -> KNC One TV-Station RDS / Typhoon TV Tuner RDS [1131:fe01,1894:fe01] | 8 | 7 -> KNC One TV-Station RDS / Typhoon TV Tuner RDS [1131:fe01,1894:fe01] |
9 | 8 -> Terratec Cinergy 400 TV [153B:1142] | 9 | 8 -> Terratec Cinergy 400 TV [153b:1142] |
10 | 9 -> Medion 5044 | 10 | 9 -> Medion 5044 |
11 | 10 -> Kworld/KuroutoShikou SAA7130-TVPCI | 11 | 10 -> Kworld/KuroutoShikou SAA7130-TVPCI |
12 | 11 -> Terratec Cinergy 600 TV [153B:1143] | 12 | 11 -> Terratec Cinergy 600 TV [153b:1143] |
13 | 12 -> Medion 7134 [16be:0003] | 13 | 12 -> Medion 7134 [16be:0003] |
14 | 13 -> Typhoon TV+Radio 90031 | 14 | 13 -> Typhoon TV+Radio 90031 |
15 | 14 -> ELSA EX-VISION 300TV [1048:226b] | 15 | 14 -> ELSA EX-VISION 300TV [1048:226b] |
@@ -36,8 +36,8 @@ | |||
36 | 35 -> AverMedia AverTV Studio 305 [1461:2115] | 36 | 35 -> AverMedia AverTV Studio 305 [1461:2115] |
37 | 36 -> UPMOST PURPLE TV [12ab:0800] | 37 | 36 -> UPMOST PURPLE TV [12ab:0800] |
38 | 37 -> Items MuchTV Plus / IT-005 | 38 | 37 -> Items MuchTV Plus / IT-005 |
39 | 38 -> Terratec Cinergy 200 TV [153B:1152] | 39 | 38 -> Terratec Cinergy 200 TV [153b:1152] |
40 | 39 -> LifeView FlyTV Platinum Mini [5168:0212] | 40 | 39 -> LifeView FlyTV Platinum Mini [5168:0212,4e42:0212] |
41 | 40 -> Compro VideoMate TV PVR/FM [185b:c100] | 41 | 40 -> Compro VideoMate TV PVR/FM [185b:c100] |
42 | 41 -> Compro VideoMate TV Gold+ [185b:c100] | 42 | 41 -> Compro VideoMate TV Gold+ [185b:c100] |
43 | 42 -> Sabrent SBT-TVFM (saa7130) | 43 | 42 -> Sabrent SBT-TVFM (saa7130) |
@@ -46,7 +46,7 @@ | |||
46 | 45 -> Avermedia AVerTV Studio 307 [1461:9715] | 46 | 45 -> Avermedia AVerTV Studio 307 [1461:9715] |
47 | 46 -> AVerMedia Cardbus TV/Radio (E500) [1461:d6ee] | 47 | 46 -> AVerMedia Cardbus TV/Radio (E500) [1461:d6ee] |
48 | 47 -> Terratec Cinergy 400 mobile [153b:1162] | 48 | 47 -> Terratec Cinergy 400 mobile [153b:1162] |
49 | 48 -> Terratec Cinergy 600 TV MK3 [153B:1158] | 49 | 48 -> Terratec Cinergy 600 TV MK3 [153b:1158] |
50 | 49 -> Compro VideoMate Gold+ Pal [185b:c200] | 50 | 49 -> Compro VideoMate Gold+ Pal [185b:c200] |
51 | 50 -> Pinnacle PCTV 300i DVB-T + PAL [11bd:002d] | 51 | 50 -> Pinnacle PCTV 300i DVB-T + PAL [11bd:002d] |
52 | 51 -> ProVideo PV952 [1540:9524] | 52 | 51 -> ProVideo PV952 [1540:9524] |
@@ -56,12 +56,29 @@ | |||
56 | 55 -> LifeView FlyDVB-T DUO [5168:0502,5168:0306] | 56 | 55 -> LifeView FlyDVB-T DUO [5168:0502,5168:0306] |
57 | 56 -> Avermedia AVerTV 307 [1461:a70a] | 57 | 56 -> Avermedia AVerTV 307 [1461:a70a] |
58 | 57 -> Avermedia AVerTV GO 007 FM [1461:f31f] | 58 | 57 -> Avermedia AVerTV GO 007 FM [1461:f31f] |
59 | 58 -> ADS Tech Instant TV (saa7135) [1421:0350,1421:0370] | 59 | 58 -> ADS Tech Instant TV (saa7135) [1421:0350,1421:0370,1421:1370] |
60 | 59 -> Kworld/Tevion V-Stream Xpert TV PVR7134 | 60 | 59 -> Kworld/Tevion V-Stream Xpert TV PVR7134 |
61 | 60 -> Typhoon DVB-T Duo Digital/Analog Cardbus [4e42:0502] | 61 | 60 -> Typhoon DVB-T Duo Digital/Analog Cardbus [4e42:0502] |
62 | 61 -> Philips TOUGH DVB-T reference design [1131:2004] | 62 | 61 -> Philips TOUGH DVB-T reference design [1131:2004] |
63 | 62 -> Compro VideoMate TV Gold+II | 63 | 62 -> Compro VideoMate TV Gold+II |
64 | 63 -> Kworld Xpert TV PVR7134 | 64 | 63 -> Kworld Xpert TV PVR7134 |
65 | 64 -> FlyTV mini Asus Digimatrix [1043:0210,1043:0210] | 65 | 64 -> FlyTV mini Asus Digimatrix [1043:0210] |
66 | 65 -> V-Stream Studio TV Terminator | 66 | 65 -> V-Stream Studio TV Terminator |
67 | 66 -> Yuan TUN-900 (saa7135) | 67 | 66 -> Yuan TUN-900 (saa7135) |
68 | 67 -> Beholder BeholdTV 409 FM [0000:4091] | ||
69 | 68 -> GoTView 7135 PCI [5456:7135] | ||
70 | 69 -> Philips EUROPA V3 reference design [1131:2004] | ||
71 | 70 -> Compro Videomate DVB-T300 [185b:c900] | ||
72 | 71 -> Compro Videomate DVB-T200 [185b:c901] | ||
73 | 72 -> RTD Embedded Technologies VFG7350 [1435:7350] | ||
74 | 73 -> RTD Embedded Technologies VFG7330 [1435:7330] | ||
75 | 74 -> LifeView FlyTV Platinum Mini2 [14c0:1212] | ||
76 | 75 -> AVerMedia AVerTVHD MCE A180 [1461:1044] | ||
77 | 76 -> SKNet MonsterTV Mobile [1131:4ee9] | ||
78 | 77 -> Pinnacle PCTV 110i (saa7133) [11bd:002e] | ||
79 | 78 -> ASUSTeK P7131 Dual [1043:4862] | ||
80 | 79 -> Sedna/MuchTV PC TV Cardbus TV/Radio (ITO25 Rev:2B) | ||
81 | 80 -> ASUS Digimatrix TV [1043:0210] | ||
82 | 81 -> Philips Tiger reference design [1131:2018] | ||
83 | 82 -> MSI TV@Anywhere plus [1462:6231] | ||
84 | |||
diff --git a/Documentation/video4linux/CARDLIST.tuner b/Documentation/video4linux/CARDLIST.tuner index f5876be658a6..9d6544ea9f41 100644 --- a/Documentation/video4linux/CARDLIST.tuner +++ b/Documentation/video4linux/CARDLIST.tuner | |||
@@ -53,7 +53,7 @@ tuner=51 - Philips PAL/SECAM_D (FM 1256 I-H3) | |||
53 | tuner=52 - Thomson DDT 7610 (ATSC/NTSC) | 53 | tuner=52 - Thomson DDT 7610 (ATSC/NTSC) |
54 | tuner=53 - Philips FQ1286 | 54 | tuner=53 - Philips FQ1286 |
55 | tuner=54 - tda8290+75 | 55 | tuner=54 - tda8290+75 |
56 | tuner=55 - LG PAL (TAPE series) | 56 | tuner=55 - TCL 2002MB |
57 | tuner=56 - Philips PAL/SECAM multi (FQ1216AME MK4) | 57 | tuner=56 - Philips PAL/SECAM multi (FQ1216AME MK4) |
58 | tuner=57 - Philips FQ1236A MK4 | 58 | tuner=57 - Philips FQ1236A MK4 |
59 | tuner=58 - Ymec TVision TVF-8531MF/8831MF/8731MF | 59 | tuner=58 - Ymec TVision TVF-8531MF/8831MF/8731MF |
@@ -65,3 +65,6 @@ tuner=63 - Philips FMD1216ME MK3 Hybrid Tuner | |||
65 | tuner=64 - LG TDVS-H062F/TUA6034 | 65 | tuner=64 - LG TDVS-H062F/TUA6034 |
66 | tuner=65 - Ymec TVF66T5-B/DFF | 66 | tuner=65 - Ymec TVF66T5-B/DFF |
67 | tuner=66 - LG NTSC (TALN mini series) | 67 | tuner=66 - LG NTSC (TALN mini series) |
68 | tuner=67 - Philips TD1316 Hybrid Tuner | ||
69 | tuner=68 - Philips TUV1236D ATSC/NTSC dual in | ||
70 | tuner=69 - Tena TNF 5335 MF | ||
diff --git a/Documentation/video4linux/README.cx88 b/Documentation/video4linux/README.cx88 index 897ab834839a..06a33a4f52fd 100644 --- a/Documentation/video4linux/README.cx88 +++ b/Documentation/video4linux/README.cx88 | |||
@@ -17,9 +17,9 @@ audio | |||
17 | - The chip specs for the on-chip TV sound decoder are next | 17 | - The chip specs for the on-chip TV sound decoder are next |
18 | to useless :-/ | 18 | to useless :-/ |
19 | - Neverless the builtin TV sound decoder starts working now, | 19 | - Neverless the builtin TV sound decoder starts working now, |
20 | at least for PAL-BG. Other TV norms need other code ... | 20 | at least for PAL-BG. Other TV norms need other code ... |
21 | FOR ANY REPORTS ON THIS PLEASE MENTION THE TV NORM YOU ARE | 21 | FOR ANY REPORTS ON THIS PLEASE MENTION THE TV NORM YOU ARE |
22 | USING. | 22 | USING. |
23 | - Most tuner chips do provide mono sound, which may or may not | 23 | - Most tuner chips do provide mono sound, which may or may not |
24 | be useable depending on the board design. With the Hauppauge | 24 | be useable depending on the board design. With the Hauppauge |
25 | cards it works, so there is mono sound available as fallback. | 25 | cards it works, so there is mono sound available as fallback. |
@@ -65,5 +65,5 @@ Have fun, | |||
65 | 65 | ||
66 | Gerd | 66 | Gerd |
67 | 67 | ||
68 | -- | 68 | -- |
69 | Gerd Knorr <kraxel@bytesex.org> [SuSE Labs] | 69 | Gerd Knorr <kraxel@bytesex.org> [SuSE Labs] |
diff --git a/Documentation/video4linux/README.saa7134 b/Documentation/video4linux/README.saa7134 index 1f788e498eff..b911f0871874 100644 --- a/Documentation/video4linux/README.saa7134 +++ b/Documentation/video4linux/README.saa7134 | |||
@@ -78,5 +78,5 @@ Have fun, | |||
78 | 78 | ||
79 | Gerd | 79 | Gerd |
80 | 80 | ||
81 | -- | 81 | -- |
82 | Gerd Knorr <kraxel@bytesex.org> [SuSE Labs] | 82 | Gerd Knorr <kraxel@bytesex.org> [SuSE Labs] |
diff --git a/Documentation/video4linux/bttv/Cards b/Documentation/video4linux/bttv/Cards index 8f1941ede4da..d3389655ad96 100644 --- a/Documentation/video4linux/bttv/Cards +++ b/Documentation/video4linux/bttv/Cards | |||
@@ -149,11 +149,11 @@ Lifeview Flyvideo Series: | |||
149 | 2) There is a print on the PCB: | 149 | 2) There is a print on the PCB: |
150 | LR25 = Flyvideo (Zoran ZR36120, SAA7110A) | 150 | LR25 = Flyvideo (Zoran ZR36120, SAA7110A) |
151 | LR26 Rev.N = Flyvideo II (Bt848) | 151 | LR26 Rev.N = Flyvideo II (Bt848) |
152 | Rev.O = Flyvideo II (Bt878) | 152 | Rev.O = Flyvideo II (Bt878) |
153 | LR37 Rev.C = Flyvideo EZ (Capture only, ZR36120 + SAA7110) | 153 | LR37 Rev.C = Flyvideo EZ (Capture only, ZR36120 + SAA7110) |
154 | LR38 Rev.A1= Flyvideo II EZ (Bt848 capture only) | 154 | LR38 Rev.A1= Flyvideo II EZ (Bt848 capture only) |
155 | LR50 Rev.Q = Flyvideo 98 (w/eeprom and PCI subsystem ID) | 155 | LR50 Rev.Q = Flyvideo 98 (w/eeprom and PCI subsystem ID) |
156 | Rev.W = Flyvideo 98 (no eeprom) | 156 | Rev.W = Flyvideo 98 (no eeprom) |
157 | LR51 Rev.E = Flyvideo 98 EZ (capture only) | 157 | LR51 Rev.E = Flyvideo 98 EZ (capture only) |
158 | LR90 = Flyvideo 2000 (Bt878) | 158 | LR90 = Flyvideo 2000 (Bt878) |
159 | Flyvideo 2000S (Bt878) w/Stereo TV (Package incl. LR91 daughterboard) | 159 | Flyvideo 2000S (Bt878) w/Stereo TV (Package incl. LR91 daughterboard) |
@@ -163,7 +163,7 @@ Lifeview Flyvideo Series: | |||
163 | LR136 = Flyvideo 2100/3100 (Low profile, SAA7130/SAA7134) | 163 | LR136 = Flyvideo 2100/3100 (Low profile, SAA7130/SAA7134) |
164 | LR137 = Flyvideo DV2000/DV3000 (SAA7130/SAA7134 + IEEE1394) | 164 | LR137 = Flyvideo DV2000/DV3000 (SAA7130/SAA7134 + IEEE1394) |
165 | LR138 Rev.C= Flyvideo 2000 (SAA7130) | 165 | LR138 Rev.C= Flyvideo 2000 (SAA7130) |
166 | or Flyvideo 3000 (SAA7134) w/Stereo TV | 166 | or Flyvideo 3000 (SAA7134) w/Stereo TV |
167 | These exist in variations w/FM and w/Remote sometimes denoted | 167 | These exist in variations w/FM and w/Remote sometimes denoted |
168 | by suffixes "FM" and "R". | 168 | by suffixes "FM" and "R". |
169 | 3) You have a laptop (miniPCI card): | 169 | 3) You have a laptop (miniPCI card): |
@@ -197,7 +197,7 @@ Typhoon TV card series: | |||
197 | 50680 "TV Tuner Pal BG" (blue package)= Pixelview PV-BT878P+ (Rev 9B) | 197 | 50680 "TV Tuner Pal BG" (blue package)= Pixelview PV-BT878P+ (Rev 9B) |
198 | 50681 "TV Tuner PCI Pal I" (variant of 50680) | 198 | 50681 "TV Tuner PCI Pal I" (variant of 50680) |
199 | 50682 "TView TV/FM Tuner Pal BG" = Flyvideo 98FM (LR50 Rev.Q) | 199 | 50682 "TView TV/FM Tuner Pal BG" = Flyvideo 98FM (LR50 Rev.Q) |
200 | Note: The package has a picture of CPH05x (which would be a real TView) | 200 | Note: The package has a picture of CPH05x (which would be a real TView) |
201 | 50683 "TV Tuner PCI SECAM" (variant of 50680) | 201 | 50683 "TV Tuner PCI SECAM" (variant of 50680) |
202 | 50684 "TV Tuner Pal BG" = Pixelview 878TV(Rev.3D) | 202 | 50684 "TV Tuner Pal BG" = Pixelview 878TV(Rev.3D) |
203 | 50686 "TV Tuner" = KNC1 TV Station | 203 | 50686 "TV Tuner" = KNC1 TV Station |
@@ -418,9 +418,9 @@ Lifetec/Medion/Tevion/Aldi | |||
418 | -------------------------- | 418 | -------------------------- |
419 | LT9306/MD9306 = CPH061 | 419 | LT9306/MD9306 = CPH061 |
420 | LT9415/MD9415 = LR90 Rev.F or Rev.G | 420 | LT9415/MD9415 = LR90 Rev.F or Rev.G |
421 | MD9592 = Avermedia TVphone98 (PCI_ID=1461:0003), PCB-Rev=M168II-B (w/TDA9873H) | 421 | MD9592 = Avermedia TVphone98 (PCI_ID=1461:0003), PCB-Rev=M168II-B (w/TDA9873H) |
422 | MD9717 = KNC One (Rev D4, saa7134, FM1216 MK2 tuner) | 422 | MD9717 = KNC One (Rev D4, saa7134, FM1216 MK2 tuner) |
423 | MD5044 = KNC One (Rev D4, saa7134, FM1216ME MK3 tuner) | 423 | MD5044 = KNC One (Rev D4, saa7134, FM1216ME MK3 tuner) |
424 | 424 | ||
425 | Modular Technologies (www.modulartech.com) UK | 425 | Modular Technologies (www.modulartech.com) UK |
426 | --------------------------------------------- | 426 | --------------------------------------------- |
@@ -453,10 +453,10 @@ Technisat | |||
453 | Discos ADR PC-Karte ISA (no TV!) | 453 | Discos ADR PC-Karte ISA (no TV!) |
454 | Discos ADR PC-Karte PCI (probably no TV?) | 454 | Discos ADR PC-Karte PCI (probably no TV?) |
455 | Techni-PC-Sat (Sat. analog) | 455 | Techni-PC-Sat (Sat. analog) |
456 | Rev 1.2 (zr36120, vpx3220, stv0030, saa5246, BSJE3-494A) | 456 | Rev 1.2 (zr36120, vpx3220, stv0030, saa5246, BSJE3-494A) |
457 | Mediafocus I (zr36120/zr36125, drp3510, Sat. analog + ADR Radio) | 457 | Mediafocus I (zr36120/zr36125, drp3510, Sat. analog + ADR Radio) |
458 | Mediafocus II (saa7146, Sat. analog) | 458 | Mediafocus II (saa7146, Sat. analog) |
459 | SatADR Rev 2.1 (saa7146a, saa7113h, stv0056a, msp3400c, drp3510a, BSKE3-307A) | 459 | SatADR Rev 2.1 (saa7146a, saa7113h, stv0056a, msp3400c, drp3510a, BSKE3-307A) |
460 | SkyStar 1 DVB (AV7110) = Technotrend Premium | 460 | SkyStar 1 DVB (AV7110) = Technotrend Premium |
461 | SkyStar 2 DVB (B2C2) (=Sky2PC) | 461 | SkyStar 2 DVB (B2C2) (=Sky2PC) |
462 | 462 | ||
diff --git a/Documentation/video4linux/bttv/README b/Documentation/video4linux/bttv/README index a72f4c94fb0b..7ca2154c2bf5 100644 --- a/Documentation/video4linux/bttv/README +++ b/Documentation/video4linux/bttv/README | |||
@@ -42,9 +42,9 @@ bttv uses the PCI Subsystem ID to autodetect the card type. lspci lists | |||
42 | the Subsystem ID in the second line, looks like this: | 42 | the Subsystem ID in the second line, looks like this: |
43 | 43 | ||
44 | 00:0a.0 Multimedia video controller: Brooktree Corporation Bt878 (rev 02) | 44 | 00:0a.0 Multimedia video controller: Brooktree Corporation Bt878 (rev 02) |
45 | Subsystem: Hauppauge computer works Inc. WinTV/GO | 45 | Subsystem: Hauppauge computer works Inc. WinTV/GO |
46 | Flags: bus master, medium devsel, latency 32, IRQ 5 | 46 | Flags: bus master, medium devsel, latency 32, IRQ 5 |
47 | Memory at e2000000 (32-bit, prefetchable) [size=4K] | 47 | Memory at e2000000 (32-bit, prefetchable) [size=4K] |
48 | 48 | ||
49 | only bt878-based cards can have a subsystem ID (which does not mean | 49 | only bt878-based cards can have a subsystem ID (which does not mean |
50 | that every card really has one). bt848 cards can't have a Subsystem | 50 | that every card really has one). bt848 cards can't have a Subsystem |
diff --git a/Documentation/video4linux/bttv/README.freeze b/Documentation/video4linux/bttv/README.freeze index 51f8d4379a94..4259dccc8287 100644 --- a/Documentation/video4linux/bttv/README.freeze +++ b/Documentation/video4linux/bttv/README.freeze | |||
@@ -27,9 +27,9 @@ information out of a register+stack dump printed by the kernel on | |||
27 | protection faults (so-called "kernel oops"). | 27 | protection faults (so-called "kernel oops"). |
28 | 28 | ||
29 | If you run into some kind of deadlock, you can try to dump a call trace | 29 | If you run into some kind of deadlock, you can try to dump a call trace |
30 | for each process using sysrq-t (see Documentation/sysrq.txt). ksymoops | 30 | for each process using sysrq-t (see Documentation/sysrq.txt). |
31 | will translate these dumps into kernel symbols too. This way it is | 31 | This way it is possible to figure where *exactly* some process in "D" |
32 | possible to figure where *exactly* some process in "D" state is stuck. | 32 | state is stuck. |
33 | 33 | ||
34 | I've seen reports that bttv 0.7.x crashes whereas 0.8.x works rock solid | 34 | I've seen reports that bttv 0.7.x crashes whereas 0.8.x works rock solid |
35 | for some people. Thus probably a small buglet left somewhere in bttv | 35 | for some people. Thus probably a small buglet left somewhere in bttv |
diff --git a/Documentation/video4linux/bttv/Sound-FAQ b/Documentation/video4linux/bttv/Sound-FAQ index b8c9c2605ce2..1e6328f91083 100644 --- a/Documentation/video4linux/bttv/Sound-FAQ +++ b/Documentation/video4linux/bttv/Sound-FAQ | |||
@@ -61,8 +61,8 @@ line for your board. The important fields are these two: | |||
61 | struct tvcard | 61 | struct tvcard |
62 | { | 62 | { |
63 | [ ... ] | 63 | [ ... ] |
64 | u32 gpiomask; | 64 | u32 gpiomask; |
65 | u32 audiomux[6]; /* Tuner, Radio, external, internal, mute, stereo */ | 65 | u32 audiomux[6]; /* Tuner, Radio, external, internal, mute, stereo */ |
66 | }; | 66 | }; |
67 | 67 | ||
68 | gpiomask specifies which pins are used to control the audio mux chip. | 68 | gpiomask specifies which pins are used to control the audio mux chip. |
@@ -126,11 +126,11 @@ muxsel - video mux, input->registervalue mapping | |||
126 | pll - same as pll= insmod option | 126 | pll - same as pll= insmod option |
127 | tuner_type - same as tuner= insmod option | 127 | tuner_type - same as tuner= insmod option |
128 | *_modulename - hint whenever some card needs this or that audio | 128 | *_modulename - hint whenever some card needs this or that audio |
129 | module loaded to work properly. | 129 | module loaded to work properly. |
130 | has_radio - whenever this TV card has a radio tuner. | 130 | has_radio - whenever this TV card has a radio tuner. |
131 | no_msp34xx - "1" disables loading of msp3400.o module | 131 | no_msp34xx - "1" disables loading of msp3400.o module |
132 | no_tda9875 - "1" disables loading of tda9875.o module | 132 | no_tda9875 - "1" disables loading of tda9875.o module |
133 | needs_tvaudio - set to "1" to load tvaudio.o module | 133 | needs_tvaudio - set to "1" to load tvaudio.o module |
134 | 134 | ||
135 | If some config item is specified both from the tvcards array and as | 135 | If some config item is specified both from the tvcards array and as |
136 | insmod option, the insmod option takes precedence. | 136 | insmod option, the insmod option takes precedence. |
@@ -144,5 +144,5 @@ Good luck, | |||
144 | 144 | ||
145 | PS: If you have a new working entry, mail it to me. | 145 | PS: If you have a new working entry, mail it to me. |
146 | 146 | ||
147 | -- | 147 | -- |
148 | Gerd Knorr <kraxel@bytesex.org> | 148 | Gerd Knorr <kraxel@bytesex.org> |
diff --git a/Documentation/video4linux/bttv/Tuners b/Documentation/video4linux/bttv/Tuners index d18fbc70c0e0..0a371d349542 100644 --- a/Documentation/video4linux/bttv/Tuners +++ b/Documentation/video4linux/bttv/Tuners | |||
@@ -21,7 +21,7 @@ SAMSUNG Tuner identification: (e.g. TCPM9091PD27) | |||
21 | J= NTSC-Japan | 21 | J= NTSC-Japan |
22 | L= Secam LL | 22 | L= Secam LL |
23 | M= BG+I+DK | 23 | M= BG+I+DK |
24 | N= NTSC | 24 | N= NTSC |
25 | Q= BG+I+DK+LL | 25 | Q= BG+I+DK+LL |
26 | [89]: ? | 26 | [89]: ? |
27 | [125]: | 27 | [125]: |
@@ -96,7 +96,7 @@ LG Innotek Tuner: | |||
96 | TADC-H002F: NTSC (L,175/410?; 2-B, C-W+11, W+12-69) | 96 | TADC-H002F: NTSC (L,175/410?; 2-B, C-W+11, W+12-69) |
97 | TADC-M201D: PAL D/K+B/G+I (L,143/425) (sound control at I2C address 0xc8) | 97 | TADC-M201D: PAL D/K+B/G+I (L,143/425) (sound control at I2C address 0xc8) |
98 | TADC-T003F: NTSC Taiwan (L,175/410?; 2-B, C-W+11, W+12-69) | 98 | TADC-T003F: NTSC Taiwan (L,175/410?; 2-B, C-W+11, W+12-69) |
99 | Suffix: | 99 | Suffix: |
100 | P= Standard phono female socket | 100 | P= Standard phono female socket |
101 | D= IEC female socket | 101 | D= IEC female socket |
102 | F= F-connector | 102 | F= F-connector |
diff --git a/Documentation/video4linux/lifeview.txt b/Documentation/video4linux/lifeview.txt index b07ea79c2b7e..05f9eb57aac9 100644 --- a/Documentation/video4linux/lifeview.txt +++ b/Documentation/video4linux/lifeview.txt | |||
@@ -10,33 +10,33 @@ bt878: | |||
10 | ------------------------------------------------------------------------------ | 10 | ------------------------------------------------------------------------------ |
11 | 11 | ||
12 | saa7134: | 12 | saa7134: |
13 | /* LifeView FlyTV Platinum FM (LR214WF) */ | 13 | /* LifeView FlyTV Platinum FM (LR214WF) */ |
14 | /* "Peter Missel <peter.missel@onlinehome.de> */ | 14 | /* "Peter Missel <peter.missel@onlinehome.de> */ |
15 | .name = "LifeView FlyTV Platinum FM", | 15 | .name = "LifeView FlyTV Platinum FM", |
16 | /* GP27 MDT2005 PB4 pin 10 */ | 16 | /* GP27 MDT2005 PB4 pin 10 */ |
17 | /* GP26 MDT2005 PB3 pin 9 */ | 17 | /* GP26 MDT2005 PB3 pin 9 */ |
18 | /* GP25 MDT2005 PB2 pin 8 */ | 18 | /* GP25 MDT2005 PB2 pin 8 */ |
19 | /* GP23 MDT2005 PB1 pin 7 */ | 19 | /* GP23 MDT2005 PB1 pin 7 */ |
20 | /* GP22 MDT2005 PB0 pin 6 */ | 20 | /* GP22 MDT2005 PB0 pin 6 */ |
21 | /* GP21 MDT2005 PB5 pin 11 */ | 21 | /* GP21 MDT2005 PB5 pin 11 */ |
22 | /* GP20 MDT2005 PB6 pin 12 */ | 22 | /* GP20 MDT2005 PB6 pin 12 */ |
23 | /* GP19 MDT2005 PB7 pin 13 */ | 23 | /* GP19 MDT2005 PB7 pin 13 */ |
24 | /* nc MDT2005 PA3 pin 2 */ | 24 | /* nc MDT2005 PA3 pin 2 */ |
25 | /* Remote MDT2005 PA2 pin 1 */ | 25 | /* Remote MDT2005 PA2 pin 1 */ |
26 | /* GP18 MDT2005 PA1 pin 18 */ | 26 | /* GP18 MDT2005 PA1 pin 18 */ |
27 | /* nc MDT2005 PA0 pin 17 strap low */ | 27 | /* nc MDT2005 PA0 pin 17 strap low */ |
28 | 28 | ||
29 | /* GP17 Strap "GP7"=High */ | 29 | /* GP17 Strap "GP7"=High */ |
30 | /* GP16 Strap "GP6"=High | 30 | /* GP16 Strap "GP6"=High |
31 | 0=Radio 1=TV | 31 | 0=Radio 1=TV |
32 | Drives SA630D ENCH1 and HEF4052 A1 pins | 32 | Drives SA630D ENCH1 and HEF4052 A1 pins |
33 | to do FM radio through SIF input */ | 33 | to do FM radio through SIF input */ |
34 | /* GP15 nc */ | 34 | /* GP15 nc */ |
35 | /* GP14 nc */ | 35 | /* GP14 nc */ |
36 | /* GP13 nc */ | 36 | /* GP13 nc */ |
37 | /* GP12 Strap "GP5" = High */ | 37 | /* GP12 Strap "GP5" = High */ |
38 | /* GP11 Strap "GP4" = High */ | 38 | /* GP11 Strap "GP4" = High */ |
39 | /* GP10 Strap "GP3" = High */ | 39 | /* GP10 Strap "GP3" = High */ |
40 | /* GP09 Strap "GP2" = Low */ | 40 | /* GP09 Strap "GP2" = Low */ |
41 | /* GP08 Strap "GP1" = Low */ | 41 | /* GP08 Strap "GP1" = Low */ |
42 | /* GP07.00 nc */ | 42 | /* GP07.00 nc */ |
diff --git a/Documentation/vm/hugetlbpage.txt b/Documentation/vm/hugetlbpage.txt index 1b9bcd1fe98b..1ad9af1ca4d0 100644 --- a/Documentation/vm/hugetlbpage.txt +++ b/Documentation/vm/hugetlbpage.txt | |||
@@ -13,12 +13,13 @@ This optimization is more critical now as bigger and bigger physical memories | |||
13 | Users can use the huge page support in Linux kernel by either using the mmap | 13 | Users can use the huge page support in Linux kernel by either using the mmap |
14 | system call or standard SYSv shared memory system calls (shmget, shmat). | 14 | system call or standard SYSv shared memory system calls (shmget, shmat). |
15 | 15 | ||
16 | First the Linux kernel needs to be built with CONFIG_HUGETLB_PAGE (present | 16 | First the Linux kernel needs to be built with the CONFIG_HUGETLBFS |
17 | under Processor types and feature) and CONFIG_HUGETLBFS (present under file | 17 | (present under "File systems") and CONFIG_HUGETLB_PAGE (selected |
18 | system option on config menu) config options. | 18 | automatically when CONFIG_HUGETLBFS is selected) configuration |
19 | options. | ||
19 | 20 | ||
20 | The kernel built with hugepage support should show the number of configured | 21 | The kernel built with hugepage support should show the number of configured |
21 | hugepages in the system by running the "cat /proc/meminfo" command. | 22 | hugepages in the system by running the "cat /proc/meminfo" command. |
22 | 23 | ||
23 | /proc/meminfo also provides information about the total number of hugetlb | 24 | /proc/meminfo also provides information about the total number of hugetlb |
24 | pages configured in the kernel. It also displays information about the | 25 | pages configured in the kernel. It also displays information about the |
@@ -38,19 +39,19 @@ in the kernel. | |||
38 | 39 | ||
39 | /proc/sys/vm/nr_hugepages indicates the current number of configured hugetlb | 40 | /proc/sys/vm/nr_hugepages indicates the current number of configured hugetlb |
40 | pages in the kernel. Super user can dynamically request more (or free some | 41 | pages in the kernel. Super user can dynamically request more (or free some |
41 | pre-configured) hugepages. | 42 | pre-configured) hugepages. |
42 | The allocation( or deallocation) of hugetlb pages is posible only if there are | 43 | The allocation (or deallocation) of hugetlb pages is possible only if there are |
43 | enough physically contiguous free pages in system (freeing of hugepages is | 44 | enough physically contiguous free pages in system (freeing of hugepages is |
44 | possible only if there are enough hugetlb pages free that can be transfered | 45 | possible only if there are enough hugetlb pages free that can be transfered |
45 | back to regular memory pool). | 46 | back to regular memory pool). |
46 | 47 | ||
47 | Pages that are used as hugetlb pages are reserved inside the kernel and can | 48 | Pages that are used as hugetlb pages are reserved inside the kernel and can |
48 | not be used for other purposes. | 49 | not be used for other purposes. |
49 | 50 | ||
50 | Once the kernel with Hugetlb page support is built and running, a user can | 51 | Once the kernel with Hugetlb page support is built and running, a user can |
51 | use either the mmap system call or shared memory system calls to start using | 52 | use either the mmap system call or shared memory system calls to start using |
52 | the huge pages. It is required that the system administrator preallocate | 53 | the huge pages. It is required that the system administrator preallocate |
53 | enough memory for huge page purposes. | 54 | enough memory for huge page purposes. |
54 | 55 | ||
55 | Use the following command to dynamically allocate/deallocate hugepages: | 56 | Use the following command to dynamically allocate/deallocate hugepages: |
56 | 57 | ||
@@ -80,9 +81,9 @@ memory (huge pages) allowed for that filesystem (/mnt/huge). The size is | |||
80 | rounded down to HPAGE_SIZE. The option nr_inode sets the maximum number of | 81 | rounded down to HPAGE_SIZE. The option nr_inode sets the maximum number of |
81 | inodes that /mnt/huge can use. If the size or nr_inode options are not | 82 | inodes that /mnt/huge can use. If the size or nr_inode options are not |
82 | provided on command line then no limits are set. For size and nr_inodes | 83 | provided on command line then no limits are set. For size and nr_inodes |
83 | options, you can use [G|g]/[M|m]/[K|k] to represent giga/mega/kilo. For | 84 | options, you can use [G|g]/[M|m]/[K|k] to represent giga/mega/kilo. For |
84 | example, size=2K has the same meaning as size=2048. An example is given at | 85 | example, size=2K has the same meaning as size=2048. An example is given at |
85 | the end of this document. | 86 | the end of this document. |
86 | 87 | ||
87 | read and write system calls are not supported on files that reside on hugetlb | 88 | read and write system calls are not supported on files that reside on hugetlb |
88 | file systems. | 89 | file systems. |