aboutsummaryrefslogtreecommitdiffstats
path: root/Documentation
diff options
context:
space:
mode:
Diffstat (limited to 'Documentation')
-rw-r--r--Documentation/Changes11
-rw-r--r--Documentation/DocBook/Makefile50
-rw-r--r--Documentation/DocBook/journal-api.tmpl2
-rw-r--r--Documentation/DocBook/kernel-api.tmpl11
-rw-r--r--Documentation/DocBook/rapidio.tmpl160
-rw-r--r--Documentation/DocBook/stylesheet.xsl1
-rw-r--r--Documentation/MSI-HOWTO.txt174
-rw-r--r--Documentation/RCU/whatisRCU.txt2
-rw-r--r--Documentation/arm/README7
-rw-r--r--Documentation/atomic_ops.txt27
-rw-r--r--Documentation/cciss.txt29
-rw-r--r--Documentation/connector/cn_test.c4
-rw-r--r--Documentation/device-mapper/snapshot.txt5
-rw-r--r--Documentation/dvb/bt8xx.txt64
-rw-r--r--Documentation/dvb/cards.txt37
-rw-r--r--Documentation/dvb/contributors.txt17
-rw-r--r--Documentation/dvb/get_dvb_firmware19
-rw-r--r--Documentation/early-userspace/README2
-rw-r--r--Documentation/fb/fbcon.txt152
-rw-r--r--Documentation/fb/vesafb.txt4
-rw-r--r--Documentation/feature-removal-schedule.txt45
-rw-r--r--Documentation/filesystems/dentry-locking.txt173
-rw-r--r--Documentation/filesystems/devfs/README5
-rw-r--r--Documentation/filesystems/ext2.txt2
-rw-r--r--Documentation/filesystems/ramfs-rootfs-initramfs.txt195
-rw-r--r--Documentation/filesystems/vfs.txt434
-rw-r--r--Documentation/hpet.txt34
-rw-r--r--Documentation/i2c/busses/i2c-viapro6
-rw-r--r--Documentation/i2c/writing-clients4
-rw-r--r--Documentation/ioctl-number.txt2
-rw-r--r--Documentation/magic-number.txt2
-rw-r--r--Documentation/md.txt119
-rw-r--r--Documentation/networking/README.ipw2100132
-rw-r--r--Documentation/networking/README.ipw2200196
-rw-r--r--Documentation/networking/dccp.txt56
-rw-r--r--Documentation/networking/decnet.txt2
-rw-r--r--Documentation/networking/ip-sysctl.txt5
-rw-r--r--Documentation/networking/s2io.txt199
-rw-r--r--Documentation/oops-tracing.txt6
-rw-r--r--Documentation/power/video.txt17
-rw-r--r--Documentation/s390/Debugging390.txt2
-rw-r--r--Documentation/s390/driver-model.txt21
-rw-r--r--Documentation/sched-arch.txt89
-rw-r--r--Documentation/scsi/00-INDEX2
-rw-r--r--Documentation/scsi/LICENSE.qla2xxx45
-rw-r--r--Documentation/scsi/qlogicfas.txt3
-rw-r--r--Documentation/scsi/qlogicisp.txt30
-rw-r--r--Documentation/scsi/scsi_eh.txt8
-rw-r--r--Documentation/scsi/scsi_mid_low_api.txt4
-rw-r--r--Documentation/sharedsubtree.txt1060
-rw-r--r--Documentation/sound/alsa/ALSA-Configuration.txt29
-rw-r--r--Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl56
-rw-r--r--Documentation/sparse.txt4
-rw-r--r--Documentation/video4linux/API.html2
-rw-r--r--Documentation/video4linux/CARDLIST.bttv280
-rw-r--r--Documentation/video4linux/CARDLIST.cx8869
-rw-r--r--Documentation/video4linux/CARDLIST.em28xx10
-rw-r--r--Documentation/video4linux/CARDLIST.saa713431
-rw-r--r--Documentation/video4linux/CARDLIST.tuner5
-rw-r--r--Documentation/video4linux/README.cx888
-rw-r--r--Documentation/video4linux/README.saa71342
-rw-r--r--Documentation/video4linux/bttv/Cards18
-rw-r--r--Documentation/video4linux/bttv/README6
-rw-r--r--Documentation/video4linux/bttv/README.freeze6
-rw-r--r--Documentation/video4linux/bttv/Sound-FAQ12
-rw-r--r--Documentation/video4linux/bttv/Tuners4
-rw-r--r--Documentation/video4linux/lifeview.txt58
-rw-r--r--Documentation/vm/hugetlbpage.txt25
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.
139Ksymoops 139Ksymoops
140-------- 140--------
141 141
142If the unthinkable happens and your kernel oopses, you'll need a 2.4 142If the unthinkable happens and your kernel oopses, you may need the
143version of ksymoops to decode the report; see REPORTING-BUGS in the 143ksymoops tool to decode it, but in most cases you don't.
144root of the Linux source for more information. 144In the 2.6 kernel it is generally preferred to build the kernel with
145CONFIG_KALLSYMS so that it produces readable dumps that can be used as-is
146(this also produces better output than ksymoops).
147If for some reason your kernel is not build with CONFIG_KALLSYMS and
148you have no way to rebuild and reproduce the Oops with that option, then
149you can still decode that Oops with ksymoops.
145 150
146Module-Init-Tools 151Module-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
25PDF_METHOD = $(prefer-db2x)
26PS_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
93C-procfs-example2 = $(addprefix $(obj)/,$(C-procfs-example)) 99C-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### 102notfoundtemplate = 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 104db2xtemplate = db2TYPE -o $(dir $@) $<
105xmltotemplate = xmlto TYPE $(XMLTOFLAGS) -o $(dir $@) $<
106
107# determine which methods are available
108ifeq ($(shell which db2ps >/dev/null 2>&1 && echo found),found)
109 use-db2x = db2x
110 prefer-db2x = db2x
111else
112 use-db2x = notfound
113 prefer-db2x = $(use-xmlto)
114endif
115ifeq ($(shell which xmlto >/dev/null 2>&1 && echo found),found)
116 use-xmlto = xmlto
117 prefer-xmlto = xmlto
118else
119 use-xmlto = notfound
120 prefer-xmlto = $(use-db2x)
121endif
99 122
100quiet_cmd_db2ps = XMLTO $@ 123# the commands, generated from the chosen template
101 cmd_db2ps = xmlto ps $(XMLTOFLAGS) -o $(dir $@) $< 124quiet_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
108quiet_cmd_db2pdf = XMLTO $@ 129quiet_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
116quiet_cmd_db2html = XMLTO $@ 134quiet_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
130quiet_cmd_db2man = XMLTO $@ 148quiet_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
72X!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 @@
10This guide describes the basics of Message Signaled Interrupts (MSI), 10This guide describes the basics of Message Signaled Interrupts (MSI),
11the advantages of using MSI over traditional interrupt mechanisms, 11the advantages of using MSI over traditional interrupt mechanisms,
12and how to enable your driver to use MSI or MSI-X. Also included is 12and how to enable your driver to use MSI or MSI-X. Also included is
13a Frequently Asked Questions. 13a Frequently Asked Questions (FAQ) section.
14
151.1 Terminology
16
17PCI devices can be single-function or multi-function. In either case,
18when this text talks about enabling or disabling MSI on a "device
19function," it is referring to one specific PCI device and function and
20not to all functions on a PCI device (unless the PCI device has only
21one function).
14 22
152. Copyright 2003 Intel Corporation 232. Copyright 2003 Intel Corporation
16 24
173. What is MSI/MSI-X? 253. What is MSI/MSI-X?
18 26
19Message Signaled Interrupt (MSI), as described in the PCI Local Bus 27Message Signaled Interrupt (MSI), as described in the PCI Local Bus
20Specification Revision 2.3 or latest, is an optional feature, and a 28Specification Revision 2.3 or later, is an optional feature, and a
21required feature for PCI Express devices. MSI enables a device function 29required feature for PCI Express devices. MSI enables a device function
22to request service by sending an Inbound Memory Write on its PCI bus to 30to request service by sending an Inbound Memory Write on its PCI bus to
23the FSB as a Message Signal Interrupt transaction. Because MSI is 31the FSB as a Message Signal Interrupt transaction. Because MSI is
@@ -27,7 +35,7 @@ supported.
27 35
28A PCI device that supports MSI must also support pin IRQ assertion 36A PCI device that supports MSI must also support pin IRQ assertion
29interrupt mechanism to provide backward compatibility for systems that 37interrupt mechanism to provide backward compatibility for systems that
30do not support MSI. In Systems, which support MSI, the bus driver is 38do not support MSI. In systems which support MSI, the bus driver is
31responsible for initializing the message address and message data of 39responsible for initializing the message address and message data of
32the device function's MSI/MSI-X capability structure during device 40the device function's MSI/MSI-X capability structure during device
33initial configuration. 41initial 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
714. Why use MSI? 794. Why use MSI?
72 80
73As a benefit the simplification of board design, MSI allows board 81As a benefit to the simplification of board design, MSI allows board
74designers to remove out of band interrupt routing. MSI is another 82designers to remove out-of-band interrupt routing. MSI is another
75step towards a legacy-free environment. 83step towards a legacy-free environment.
76 84
77Due to increasing pressure on chipset and processor packages to 85Due to increasing pressure on chipset and processor packages to
@@ -87,7 +95,7 @@ support. As a result, the PCI Express technology requires MSI
87support for better interrupt performance. 95support for better interrupt performance.
88 96
89Using MSI enables the device functions to support two or more 97Using MSI enables the device functions to support two or more
90vectors, which can be configured to target different CPU's to 98vectors, which can be configured to target different CPUs to
91increase scalability. 99increase scalability.
92 100
935. Configuring a driver to use MSI/MSI-X 1015. Configuring a driver to use MSI/MSI-X
@@ -119,13 +127,13 @@ pci_enable_msi() explicitly.
119 127
120int pci_enable_msi(struct pci_dev *dev) 128int pci_enable_msi(struct pci_dev *dev)
121 129
122With this new API, any existing device driver, which like to have 130With this new API, a device driver that wants to have MSI
123MSI enabled on its device function, must call this API to enable MSI 131enabled on its device function must call this API to enable MSI.
124A successful call will initialize the MSI capability structure 132A successful call will initialize the MSI capability structure
125with ONE vector, regardless of whether a device function is 133with ONE vector, regardless of whether a device function is
126capable of supporting multiple messages. This vector replaces the 134capable of supporting multiple messages. This vector replaces the
127pre-assigned dev->irq with a new MSI vector. To avoid the conflict 135pre-assigned dev->irq with a new MSI vector. To avoid a conflict
128of new assigned vector with existing pre-assigned vector requires 136of the new assigned vector with existing pre-assigned vector requires
129a device driver to call this API before calling request_irq(). 137a device driver to call this API before calling request_irq().
130 138
1315.2.2 API pci_disable_msi 1395.2.2 API pci_disable_msi
@@ -137,14 +145,14 @@ when a device driver is unloading. This API restores dev->irq with
137the pre-assigned IOAPIC vector and switches a device's interrupt 145the pre-assigned IOAPIC vector and switches a device's interrupt
138mode to PCI pin-irq assertion/INTx emulation mode. 146mode to PCI pin-irq assertion/INTx emulation mode.
139 147
140Note that a device driver should always call free_irq() on MSI vector 148Note that a device driver should always call free_irq() on the MSI vector
141it has done request_irq() on before calling this API. Failure to do 149that it has done request_irq() on before calling this API. Failure to do
142so results a BUG_ON() and a device will be left with MSI enabled and 150so results in a BUG_ON() and a device will be left with MSI enabled and
143leaks its vector. 151leaks its vector.
144 152
1455.2.3 MSI mode vs. legacy mode diagram 1535.2.3 MSI mode vs. legacy mode diagram
146 154
147The below diagram shows the events, which switches the interrupt 155The below diagram shows the events which switch the interrupt
148mode on the MSI-capable device function between MSI mode and 156mode on the MSI-capable device function between MSI mode and
149PIN-IRQ assertion mode. 157PIN-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
158Figure 1.0 MSI Mode vs. Legacy Mode 166Figure 1. MSI Mode vs. Legacy Mode
159 167
160In Figure 1.0, a device operates by default in legacy mode. Legacy 168In Figure 1, a device operates by default in legacy mode. Legacy
161in this context means PCI pin-irq assertion or PCI-Express INTx 169in this context means PCI pin-irq assertion or PCI-Express INTx
162emulation. A successful MSI request (using pci_enable_msi()) switches 170emulation. A successful MSI request (using pci_enable_msi()) switches
163a device's interrupt mode to MSI mode. A pre-assigned IOAPIC vector 171a 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
167To return back to its default mode, a device driver should always call 175To return back to its default mode, a device driver should always call
168pci_disable_msi() to undo the effect of pci_enable_msi(). Note that a 176pci_disable_msi() to undo the effect of pci_enable_msi(). Note that a
169device driver should always call free_irq() on MSI vector it has done 177device driver should always call free_irq() on the MSI vector it has
170request_irq() on before calling pci_disable_msi(). Failure to do so 178done request_irq() on before calling pci_disable_msi(). Failure to do
171results a BUG_ON() and a device will be left with MSI enabled and 179so results in a BUG_ON() and a device will be left with MSI enabled and
172leaks its vector. Otherwise, the PCI subsystem restores a device's 180leaks its vector. Otherwise, the PCI subsystem restores a device's
173dev->irq with a pre-assigned IOAPIC vector and marks released 181dev->irq with a pre-assigned IOAPIC vector and marks the released
174MSI vector as unused. 182MSI vector as unused.
175 183
176Once being marked as unused, there is no guarantee that the PCI 184Once 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
178the availability of current PCI vector resources and the number of 186the availability of current PCI vector resources and the number of
179MSI/MSI-X requests from other drivers, this MSI may be re-assigned. 187MSI/MSI-X requests from other drivers, this MSI may be re-assigned.
180 188
181For the case where the PCI subsystem re-assigned this MSI vector 189For the case where the PCI subsystem re-assigns this MSI vector to
182another driver, a request to switching back to MSI mode may result 190another driver, a request to switch back to MSI mode may result
183in being assigned a different MSI vector or a failure if no more 191in being assigned a different MSI vector or a failure if no more
184vectors are available. 192vectors are available.
185 193
@@ -208,12 +216,12 @@ Unlike the function pci_enable_msi(), the function pci_enable_msix()
208does not replace the pre-assigned IOAPIC dev->irq with a new MSI 216does not replace the pre-assigned IOAPIC dev->irq with a new MSI
209vector because the PCI subsystem writes the 1:1 vector-to-entry mapping 217vector because the PCI subsystem writes the 1:1 vector-to-entry mapping
210into the field vector of each element contained in a second argument. 218into the field vector of each element contained in a second argument.
211Note that the pre-assigned IO-APIC dev->irq is valid only if the device 219Note that the pre-assigned IOAPIC dev->irq is valid only if the device
212operates in PIN-IRQ assertion mode. In MSI-X mode, any attempt of 220operates in PIN-IRQ assertion mode. In MSI-X mode, any attempt at
213using dev->irq by the device driver to request for interrupt service 221using dev->irq by the device driver to request for interrupt service
214may result unpredictabe behavior. 222may result unpredictabe behavior.
215 223
216For each MSI-X vector granted, a device driver is responsible to call 224For each MSI-X vector granted, a device driver is responsible for calling
217other functions like request_irq(), enable_irq(), etc. to enable 225other functions like request_irq(), enable_irq(), etc. to enable
218this vector with its corresponding interrupt service handler. It is 226this vector with its corresponding interrupt service handler. It is
219a device driver's choice to assign all vectors with the same 227a device driver's choice to assign all vectors with the same
@@ -224,13 +232,13 @@ service handler.
224 232
225The PCI 3.0 specification has implementation notes that MMIO address 233The PCI 3.0 specification has implementation notes that MMIO address
226space for a device's MSI-X structure should be isolated so that the 234space for a device's MSI-X structure should be isolated so that the
227software system can set different page for controlling accesses to 235software system can set different pages for controlling accesses to the
228the MSI-X structure. The implementation of MSI patch requires the PCI 236MSI-X structure. The implementation of MSI support requires the PCI
229subsystem, not a device driver, to maintain full control of the MSI-X 237subsystem, not a device driver, to maintain full control of the MSI-X
230table/MSI-X PBA and MMIO address space of the MSI-X table/MSI-X PBA. 238table/MSI-X PBA (Pending Bit Array) and MMIO address space of the MSI-X
231A device driver is prohibited from requesting the MMIO address space 239table/MSI-X PBA. A device driver is prohibited from requesting the MMIO
232of the MSI-X table/MSI-X PBA. Otherwise, the PCI subsystem will fail 240address space of the MSI-X table/MSI-X PBA. Otherwise, the PCI subsystem
233enabling MSI-X on its hardware device when it calls the function 241will fail enabling MSI-X on its hardware device when it calls the function
234pci_enable_msix(). 242pci_enable_msix().
235 243
2365.3.2 Handling MSI-X allocation 2445.3.2 Handling MSI-X allocation
@@ -274,9 +282,9 @@ For the case where fewer MSI-X vectors are allocated to a function
274than requested, the function pci_enable_msix() will return the 282than requested, the function pci_enable_msix() will return the
275maximum number of MSI-X vectors available to the caller. A device 283maximum number of MSI-X vectors available to the caller. A device
276driver may re-send its request with fewer or equal vectors indicated 284driver may re-send its request with fewer or equal vectors indicated
277in a return. For example, if a device driver requests 5 vectors, but 285in the return. For example, if a device driver requests 5 vectors, but
278the number of available vectors is 3 vectors, a value of 3 will be a 286the number of available vectors is 3 vectors, a value of 3 will be
279return as a result of pci_enable_msix() call. A function could be 287returned as a result of pci_enable_msix() call. A function could be
280designed for its driver to use only 3 MSI-X table entries as 288designed for its driver to use only 3 MSI-X table entries as
281different combinations as ABC--, A-B-C, A--CB, etc. Note that this 289different combinations as ABC--, A-B-C, A--CB, etc. Note that this
282patch does not support multiple entries with the same vector. Such 290patch 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
285pci_enable_msix(). Below are the reasons why supporting multiple 293pci_enable_msix(). Below are the reasons why supporting multiple
286entries with the same vector is an undesirable solution. 294entries 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
2975.3.4 API pci_enable_msix 3055.3.4 API pci_enable_msix
298 306
299int pci_enable_msix(struct pci_dev *dev, u32 *entries, int nvec) 307int pci_enable_msix(struct pci_dev *dev, struct msix_entry *entries, int nvec)
300 308
301This API enables a device driver to request the PCI subsystem 309This API enables a device driver to request the PCI subsystem
302for enabling MSI-X messages on its hardware device. Depending on 310to enable MSI-X messages on its hardware device. Depending on
303the availability of PCI vectors resources, the PCI subsystem enables 311the availability of PCI vectors resources, the PCI subsystem enables
304either all or nothing. 312either all or none of the requested vectors.
305 313
306Argument dev points to the device (pci_dev) structure. 314Argument 'dev' points to the device (pci_dev) structure.
307 315
308Argument entries is a pointer of unsigned integer type. The number of 316Argument 'entries' is a pointer to an array of msix_entry structs.
309elements is indicated in argument nvec. The content of each element 317The number of entries is indicated in argument 'nvec'.
310will be mapped to the following struct defined in /driver/pci/msi.h. 318struct msix_entry is defined in /driver/pci/msi.h:
311 319
312struct msix_entry { 320struct 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
317A device driver is responsible for initializing the field entry of 325A device driver is responsible for initializing the field 'entry' of
318each element with unique entry supported by MSI-X table. Otherwise, 326each 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
320indicates the PCI subsystem completes initializing each of requested 328indicates the PCI subsystem completed initializing each of the requested
321entries of the MSI-X table with message address and message data. 329entries of the MSI-X table with message address and message data.
322Last but not least, the PCI subsystem will write the 1:1 330Last but not least, the PCI subsystem will write the 1:1
323vector-to-entry mapping into the field vector of each element. A 331vector-to-entry mapping into the field 'vector' of each element. A
324device driver is responsible of keeping track of allocated MSI-X 332device driver is responsible for keeping track of allocated MSI-X
325vectors in its internal data structure. 333vectors in its internal data structure.
326 334
327Argument nvec is an integer indicating the number of messages 335A return of zero indicates that the number of MSI-X vectors was
328requested.
329
330A return of zero indicates that the number of MSI-X vectors is
331successfully allocated. A return of greater than zero indicates 336successfully allocated. A return of greater than zero indicates
332MSI-X vector shortage. Or a return of less than zero indicates 337MSI-X vector shortage. Or a return of less than zero indicates
333a failure. This failure may be a result of duplicate entries 338a failure. This failure may be a result of duplicate entries
@@ -341,12 +346,12 @@ void pci_disable_msix(struct pci_dev *dev)
341This API should always be used to undo the effect of pci_enable_msix() 346This API should always be used to undo the effect of pci_enable_msix()
342when a device driver is unloading. Note that a device driver should 347when a device driver is unloading. Note that a device driver should
343always call free_irq() on all MSI-X vectors it has done request_irq() 348always call free_irq() on all MSI-X vectors it has done request_irq()
344on before calling this API. Failure to do so results a BUG_ON() and 349on before calling this API. Failure to do so results in a BUG_ON() and
345a device will be left with MSI-X enabled and leaks its vectors. 350a device will be left with MSI-X enabled and leaks its vectors.
346 351
3475.3.6 MSI-X mode vs. legacy mode diagram 3525.3.6 MSI-X mode vs. legacy mode diagram
348 353
349The below diagram shows the events, which switches the interrupt 354The below diagram shows the events which switch the interrupt
350mode on the MSI-X capable device function between MSI-X mode and 355mode on the MSI-X capable device function between MSI-X mode and
351PIN-IRQ assertion mode (legacy). 356PIN-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
359Figure 2.0 MSI-X Mode vs. Legacy Mode 364Figure 2. MSI-X Mode vs. Legacy Mode
360 365
361In Figure 2.0, a device operates by default in legacy mode. A 366In Figure 2, a device operates by default in legacy mode. A
362successful MSI-X request (using pci_enable_msix()) switches a 367successful MSI-X request (using pci_enable_msix()) switches a
363device's interrupt mode to MSI-X mode. A pre-assigned IOAPIC vector 368device's interrupt mode to MSI-X mode. A pre-assigned IOAPIC vector
364stored in dev->irq will be saved by the PCI subsystem; however, 369stored in dev->irq will be saved by the PCI subsystem; however,
365unlike MSI mode, the PCI subsystem will not replace dev->irq with 370unlike MSI mode, the PCI subsystem will not replace dev->irq with
366assigned MSI-X vector because the PCI subsystem already writes the 1:1 371assigned MSI-X vector because the PCI subsystem already writes the 1:1
367vector-to-entry mapping into the field vector of each element 372vector-to-entry mapping into the field 'vector' of each element
368specified in second argument. 373specified in second argument.
369 374
370To return back to its default mode, a device driver should always call 375To return back to its default mode, a device driver should always call
371pci_disable_msix() to undo the effect of pci_enable_msix(). Note that 376pci_disable_msix() to undo the effect of pci_enable_msix(). Note that
372a device driver should always call free_irq() on all MSI-X vectors it 377a device driver should always call free_irq() on all MSI-X vectors it
373has done request_irq() on before calling pci_disable_msix(). Failure 378has done request_irq() on before calling pci_disable_msix(). Failure
374to do so results a BUG_ON() and a device will be left with MSI-X 379to do so results in a BUG_ON() and a device will be left with MSI-X
375enabled and leaks its vectors. Otherwise, the PCI subsystem switches a 380enabled and leaks its vectors. Otherwise, the PCI subsystem switches a
376device function's interrupt mode from MSI-X mode to legacy mode and 381device function's interrupt mode from MSI-X mode to legacy mode and
377marks all allocated MSI-X vectors as unused. 382marks all allocated MSI-X vectors as unused.
@@ -383,53 +388,56 @@ MSI/MSI-X requests from other drivers, these MSI-X vectors may be
383re-assigned. 388re-assigned.
384 389
385For the case where the PCI subsystem re-assigned these MSI-X vectors 390For the case where the PCI subsystem re-assigned these MSI-X vectors
386to other driver, a request to switching back to MSI-X mode may result 391to other drivers, a request to switch back to MSI-X mode may result
387being assigned with another set of MSI-X vectors or a failure if no 392being assigned with another set of MSI-X vectors or a failure if no
388more vectors are available. 393more vectors are available.
389 394
3905.4 Handling function implementng both MSI and MSI-X capabilities 3955.4 Handling function implementing both MSI and MSI-X capabilities
391 396
392For the case where a function implements both MSI and MSI-X 397For the case where a function implements both MSI and MSI-X
393capabilities, the PCI subsystem enables a device to run either in MSI 398capabilities, the PCI subsystem enables a device to run either in MSI
394mode or MSI-X mode but not both. A device driver determines whether it 399mode or MSI-X mode but not both. A device driver determines whether it
395wants MSI or MSI-X enabled on its hardware device. Once a device 400wants MSI or MSI-X enabled on its hardware device. Once a device
396driver requests for MSI, for example, it is prohibited to request for 401driver requests for MSI, for example, it is prohibited from requesting
397MSI-X; in other words, a device driver is not permitted to ping-pong 402MSI-X; in other words, a device driver is not permitted to ping-pong
398between MSI mod MSI-X mode during a run-time. 403between MSI mod MSI-X mode during a run-time.
399 404
4005.5 Hardware requirements for MSI/MSI-X support 4055.5 Hardware requirements for MSI/MSI-X support
406
401MSI/MSI-X support requires support from both system hardware and 407MSI/MSI-X support requires support from both system hardware and
402individual hardware device functions. 408individual hardware device functions.
403 409
4045.5.1 System hardware support 4105.5.1 System hardware support
411
405Since the target of MSI address is the local APIC CPU, enabling 412Since the target of MSI address is the local APIC CPU, enabling
406MSI/MSI-X support in Linux kernel is dependent on whether existing 413MSI/MSI-X support in the Linux kernel is dependent on whether existing
407system hardware supports local APIC. Users should verify their 414system hardware supports local APIC. Users should verify that their
408system whether it runs when CONFIG_X86_LOCAL_APIC=y. 415system supports local APIC operation by testing that it runs when
416CONFIG_X86_LOCAL_APIC=y.
409 417
410In SMP environment, CONFIG_X86_LOCAL_APIC is automatically set; 418In SMP environment, CONFIG_X86_LOCAL_APIC is automatically set;
411however, in UP environment, users must manually set 419however, in UP environment, users must manually set
412CONFIG_X86_LOCAL_APIC. Once CONFIG_X86_LOCAL_APIC=y, setting 420CONFIG_X86_LOCAL_APIC. Once CONFIG_X86_LOCAL_APIC=y, setting
413CONFIG_PCI_MSI enables the VECTOR based scheme and 421CONFIG_PCI_MSI enables the VECTOR based scheme and the option for
414the option for MSI-capable device drivers to selectively enable 422MSI-capable device drivers to selectively enable MSI/MSI-X.
415MSI/MSI-X.
416 423
417Note that CONFIG_X86_IO_APIC setting is irrelevant because MSI/MSI-X 424Note that CONFIG_X86_IO_APIC setting is irrelevant because MSI/MSI-X
418vector is allocated new during runtime and MSI/MSI-X support does not 425vector is allocated new during runtime and MSI/MSI-X support does not
419depend on BIOS support. This key independency enables MSI/MSI-X 426depend on BIOS support. This key independency enables MSI/MSI-X
420support on future IOxAPIC free platform. 427support on future IOxAPIC free platforms.
421 428
4225.5.2 Device hardware support 4295.5.2 Device hardware support
430
423The hardware device function supports MSI by indicating the 431The hardware device function supports MSI by indicating the
424MSI/MSI-X capability structure on its PCI capability list. By 432MSI/MSI-X capability structure on its PCI capability list. By
425default, this capability structure will not be initialized by 433default, this capability structure will not be initialized by
426the kernel to enable MSI during the system boot. In other words, 434the kernel to enable MSI during the system boot. In other words,
427the device function is running on its default pin assertion mode. 435the device function is running on its default pin assertion mode.
428Note that in many cases the hardware supporting MSI have bugs, 436Note that in many cases the hardware supporting MSI have bugs,
429which may result in system hang. The software driver of specific 437which may result in system hangs. The software driver of specific
430MSI-capable hardware is responsible for whether calling 438MSI-capable hardware is responsible for deciding whether to call
431pci_enable_msi or not. A return of zero indicates the kernel 439pci_enable_msi or not. A return of zero indicates the kernel
432successfully initializes the MSI/MSI-X capability structure of the 440successfully initialized the MSI/MSI-X capability structure of the
433device function. The device function is now running on MSI/MSI-X mode. 441device function. The device function is now running on MSI/MSI-X mode.
434 442
4355.6 How to tell whether MSI/MSI-X is enabled on device function 4435.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
439its device function is initialized successfully and ready to run in 447its device function is initialized successfully and ready to run in
440MSI/MSI-X mode. 448MSI/MSI-X mode.
441 449
442At the user level, users can use command 'cat /proc/interrupts' 450At the user level, users can use the command 'cat /proc/interrupts'
443to display the vector allocated for a device and its interrupt 451to display the vectors allocated for devices and their interrupt
444MSI/MSI-X mode ("PCI MSI"/"PCI MSIX"). Below shows below MSI mode is 452MSI/MSI-X modes ("PCI-MSI"/"PCI-MSI-X"). Below shows MSI mode is
445enabled on a SCSI Adaptec 39320D Ultra320. 453enabled 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
454169: 0 0 IO-APIC-level uhci-hcd 462169: 0 0 IO-APIC-level uhci-hcd
455185: 0 0 IO-APIC-level uhci-hcd 463185: 0 0 IO-APIC-level uhci-hcd
456193: 138 10 PCI MSI aic79xx 464193: 138 10 PCI-MSI aic79xx
457201: 30 0 PCI MSI aic79xx 465201: 30 0 PCI-MSI aic79xx
458225: 30 0 IO-APIC-level aic7xxx 466225: 30 0 IO-APIC-level aic7xxx
459233: 30 0 IO-APIC-level aic7xxx 467233: 30 0 IO-APIC-level aic7xxx
460NMI: 0 0 468NMI: 0 0
@@ -490,8 +498,8 @@ target address set as 0xfeexxxxx, as conformed to PCI
490specification 2.3 or latest, then it should work. 498specification 2.3 or latest, then it should work.
491 499
492Q4. From the driver point of view, if the MSI is lost because 500Q4. From the driver point of view, if the MSI is lost because
493of the errors occur during inbound memory write, then it may 501of errors occurring during inbound memory write, then it may
494wait for ever. Is there a mechanism for it to recover? 502wait forever. Is there a mechanism for it to recover?
495 503
496A4. Since the target of the transaction is an inbound memory 504A4. Since the target of the transaction is an inbound memory
497write, all transaction termination conditions (Retry, 505write, 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
779RCU pointer update: 777RCU 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
115is negative. It requires explicit memory barrier semantics around the 115is negative. It requires explicit memory barrier semantics around the
116operation. 116operation.
117 117
118Then:
119
120 int atomic_cmpxchg(atomic_t *v, int old, int new);
121
122This performs an atomic compare exchange operation on the atomic value v,
123with the given old and new values. Like all atomic_xxx operations,
124atomic_cmpxchg will only satisfy its atomicity semantics as long as all
125other accesses of *v are performed through atomic_xxx operations.
126
127atomic_cmpxchg requires explicit memory barriers around the operation.
128
129The semantics for atomic_cmpxchg are the same as those defined for 'cas'
130below.
131
132Finally:
133
134 int atomic_add_unless(atomic_t *v, int a, int u);
135
136If the atomic value v is not equal to u, this function adds a to v, and
137returns non zero. If v is equal to u then it returns zero. This is done as
138an atomic operation.
139
140atomic_add_unless requires explicit memory barriers around the operation.
141
142atomic_inc_not_zero, equivalent to atomic_add_unless(v, 1, 0)
143
144
118If a caller requires memory barrier semantics around an atomic_t 145If a caller requires memory barrier semantics around an atomic_t
119operation which does not return a value, a set of interfaces are 146operation which does not return a value, a set of interfaces are
120defined which accomplish this: 147defined 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
133access these devices too, as if the array controller were merely a SCSI 133access these devices too, as if the array controller were merely a SCSI
134controller in the same way that we are allowing it to access SCSI tape drives. 134controller in the same way that we are allowing it to access SCSI tape drives.
135 135
136SCSI error handling for tape drives and medium changers
137-------------------------------------------------------
138
139The linux SCSI mid layer provides an error handling protocol which
140kicks into gear whenever a SCSI command fails to complete within a
141certain amount of time (which can vary depending on the command).
142The cciss driver participates in this protocol to some extent. The
143normal protocol is a four step process. First the device is told
144to abort the command. If that doesn't work, the device is reset.
145If that doesn't work, the SCSI bus is reset. If that doesn't work
146the host bus adapter is reset. Because the cciss driver is a block
147driver as well as a SCSI driver and only the tape drives and medium
148changers are presented to the SCSI mid layer, and unlike more
149straightforward SCSI drivers, disk i/o continues through the block
150side during the SCSI error recovery process, the cciss driver only
151implements the first two of these actions, aborting the command, and
152resetting the device. Additionally, most tape drives will not oblige
153in aborting commands, and sometimes it appears they will not even
154obey a reset coommand, though in most circumstances they will. In
155the case that the command cannot be aborted and the device cannot be
156reset, the device will be set offline.
157
158In the event the error handling code is triggered and a tape drive is
159successfully reset or the tardy command is successfully aborted, the
160tape drive may still not allow i/o to continue until some command
161is issued which positions the tape to a known position. Typically you
162must rewind the tape (by issuing "mt -f /dev/st0 rewind" for example)
163before 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
30static struct cb_id cn_test_id = { 0x123, 0x456 }; 30static struct cb_id cn_test_id = { 0x123, 0x456 };
31static char cn_test_name[] = "cn_test"; 31static 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
21which will normally have one or more snapshots based on it. 21which will normally have one or more snapshots based on it.
22You must create the snapshot-origin device before you can create snapshots.
23Reads will be mapped directly to the backing device. For each write, the 22Reads will be mapped directly to the backing device. For each write, the
24original data will be saved in the <COW device> of each snapshot to keep 23original data will be saved in the <COW device> of each snapshot to keep
25its visible content unchanged, at least until the <COW device> fills up. 24its 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
30A snapshot is created of the <origin> block device. Changed chunks of 29A 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
32only go to the <COW device>. Reads will come from the <COW device> or 31only go to the <COW device>. Reads will come from the <COW device> or
33from <origin> for unchanged data. <COW device> will often be 32from <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
39after reboot). 38after reboot).
39The difference is that for transient snapshots less metadata must be
40saved on disk - they can be kept in memory by the kernel.
40 41
41 42
42How this is used by LVM2 43How 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 @@
1How to get the Nebula, PCTV and Twinhan DST cards working 1How to get the Nebula, PCTV, FusionHDTV Lite and Twinhan DST cards working
2========================================================= 2==========================================================================
3 3
4This class of cards has a bt878a as the PCI interface, and 4This class of cards has a bt878a as the PCI interface, and
5require the bttv driver. 5require the bttv driver.
@@ -26,27 +26,31 @@ Furthermore you need to enable
26 26
27In general you need to load the bttv driver, which will handle the gpio and 27In general you need to load the bttv driver, which will handle the gpio and
28i2c communication for us, plus the common dvb-bt8xx device driver. 28i2c communication for us, plus the common dvb-bt8xx device driver.
29The frontends for Nebula (nxt6000), Pinnacle PCTV (cx24110) and 29The frontends for Nebula (nxt6000), Pinnacle PCTV (cx24110), TwinHan (dst),
30TwinHan (dst) are loaded automatically by the dvb-bt8xx device driver. 30FusionHDTV DVB-T Lite (mt352) and FusionHDTV5 Lite (lgdt330x) are loaded
31automatically by the dvb-bt8xx device driver.
31 32
323a) Nebula / Pinnacle PCTV 333a) 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
393b) TwinHan and Clones 423b) 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
46The value 0x71 will override the PCI type detection for dvb-bt8xx, 49The value 0x71 will override the PCI type detection for dvb-bt8xx,
47which is necessary for TwinHan cards. 50which is necessary for TwinHan cards. Omission of this parameter might result
51in a system lockup.
48 52
49If you're having an older card (blue color circuit) and card=0x71 locks 53If you're having an older card (blue color PCB) and card=0x71 locks up
50your machine, try using 0x68, too. If that does not work, ask on the 54your machine, try using 0x68, too. If that does not work, ask on the
51mailing list. 55mailing list.
52 56
@@ -64,11 +68,47 @@ verbose=0 means complete disabling of messages
64dst_addons takes values 0 and 0x20. A value of 0 means it is a FTA card. 68dst_addons takes values 0 and 0x20. A value of 0 means it is a FTA card.
650x20 means it has a Conditional Access slot. 690x20 means it has a Conditional Access slot.
66 70
67The autodected values are determined bythe cards 'response 71The autodetected values are determined by the cards 'response string'
68string' which you can see in your logs e.g. 72which you can see in your logs e.g.
69 73
70dst_get_device_id: Recognise [DSTMCI] 74dst_get_device_id: Recognise [DSTMCI]
71 75
76If you need to sent in bug reports on the dst, please do send in a complete
77log with the verbose=4 module parameter. For general usage, the default setting
78of verbose=1 is ideal.
79
80
814) Multiple cards
82--------------------------
83
84If you happen to be running multiple cards, it would be advisable to load
85the bttv module with the card id. This would help to solve any module loading
86problems that you might face.
87
88For example, if you have a Twinhan and Clones card along with a FusionHDTV5 Lite
89
90 $ modprobe bttv card=0x71 card=0x87
91
92Here the order of the card id is important and should be the same as that of the
93physical order of the cards. Here card=0x71 represents the Twinhan and clones
94and card=0x87 represents Fusion HDTV5 Lite. These arguments can also be
95specified in decimal, rather than hex:
96
97 $ modprobe bttv card=113 card=135
98
99Some examples of card-id's
100
101Pinnacle Sat 0x5e (94)
102Nebula Digi TV 0x68 (104)
103PC HDTV 0x70 (112)
104Twinhan 0x71 (113)
105FusionHDTV DVB-T Lite 0x80 (128)
106FusionHDTV5 Lite 0x87 (135)
107
108For a full list of card-id's, see the V4L Documentation within the kernel
109source: linux/Documentation/video4linux/CARDLIST.bttv
110
111If you have problems with this please do ask on the mailing list.
72 112
73-- 113--
74Authors: Richard Walker, Jamie Honan, Michael Hunold, Manu Abraham 114Authors: 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
46o Cards based on the Phillips saa7146 multimedia PCI bridge chip: 52o 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
66o Technotrend / Hauppauge DVB USB devices: 76o 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
85o Experimental support for the analog module of the Siemens DVB-C PCI card 95o Experimental support for the analog module of the Siemens DVB-C PCI card
96
97o 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
112o 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>
75Peter Beutner <p.beutner@gmx.net> 75Peter 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
78Wilson Michaels <wilsonmichaels@earthlink.net>
79 for the lgdt330x frontend driver, and various bugfixes
80
81Michael Krufky <mkrufky@m1k.net>
82 for maintaining v4l/dvb inter-tree dependencies
83
84Taylor Jacob <rtjacob@earthlink.net>
85 for the nxt2002 frontend driver
86
87Jean-Francois Thibert <jeanfrancois@sagetv.com>
88 for the nxt2004 frontend driver
89
90Kirk 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 /;
22use IO::Handle; 22use 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
255sub 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
255sub or51211 { 272sub 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.
28CPIO ARCHIVE method 28CPIO ARCHIVE method
29 29
30You can create a cpio archive that contains the early userspace image. 30You can create a cpio archive that contains the early userspace image.
31Youre cpio archive should be specified in CONFIG_INITRAMFS_SOURCE and it 31Your cpio archive should be specified in CONFIG_INITRAMFS_SOURCE and it
32will be used directly. Only a single cpio file may be specified in 32will be used directly. Only a single cpio file may be specified in
33CONFIG_INITRAMFS_SOURCE and directory and file names are not allowed in 33CONFIG_INITRAMFS_SOURCE and directory and file names are not allowed in
34combination with a cpio archive. 34combination 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 @@
1The Framebuffer Console
2=======================
3
4 The framebuffer console (fbcon), as its name implies, is a text
5console running on top of the framebuffer device. It has the functionality of
6any standard text console driver, such as the VGA console, with the added
7features that can be attributed to the graphical nature of the framebuffer.
8
9 In the x86 architecture, the framebuffer console is optional, and
10some even treat it as a toy. For other architectures, it is the only available
11display device, text or graphical.
12
13 What are the features of fbcon? The framebuffer console supports
14high resolutions, varying font types, display rotation, primitive multihead,
15etc. Theoretically, multi-colored fonts, blending, aliasing, and any feature
16made available by the underlying graphics card are also possible.
17
18A. Configuration
19
20 The framebuffer console can be enabled by using your favorite kernel
21configuration tool. It is under Device Drivers->Graphics Support->Support for
22framebuffer devices->Framebuffer Console Support. Select 'y' to compile
23support 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
26required, so choose from any of the numerous drivers available. For x86
27systems, they almost universally have VGA cards, so vga16fb and vesafb will
28always be available. However, using a chipset-specific driver will give you
29more speed and features, such as the ability to change the video mode
30dynamically.
31
32 To display the penguin logo, choose any logo available in Logo
33Configuration->Boot up logo.
34
35 Also, you will need to select at least one compiled-in fonts, but if
36you don't do anything, the kernel configuration tool will select one for you,
37usually an 8x16 font.
38
39GOTCHA: A common bug report is enabling the framebuffer without enabling the
40framebuffer console. Depending on the driver, you may get a blanked or
41garbled display, but the system still boots to completion. If you are
42fortunate to have a driver that does not alter the graphics chip, then you
43will still get a VGA console.
44
45B. Loading
46
47Possible scenarios:
48
491. 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
552. 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
613. 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
674. 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
72C. Boot options
73
74 The framebuffer console has several, largely unknown, boot options
75 that can change its behavior.
76
771. 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
862. 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
943. 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
1154. 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
1264. 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---
152Antonino 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
147mtrr:n setup memory type range registers for the vesafb framebuffer 147mtrr: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
28What: drivers depending on OBSOLETE_OSS_DRIVER
29When: January 2006
30Why: OSS drivers with ALSA replacements
31Who: Adrian Bunk <bunk@stusta.de>
32
33---------------------------
34
28What: RCU API moves to EXPORT_SYMBOL_GPL 35What: RCU API moves to EXPORT_SYMBOL_GPL
29When: April 2006 36When: April 2006
30Files: include/linux/rcupdate.h, kernel/rcupdate.c 37Files: include/linux/rcupdate.h, kernel/rcupdate.c
@@ -60,6 +67,21 @@ Who: Jody McIntyre <scjody@steamballoon.com>
60 67
61--------------------------- 68---------------------------
62 69
70What: Video4Linux API 1 ioctls and video_decoder.h from Video devices.
71When: July 2006
72Why: 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.
81Who: Mauro Carvalho Chehab <mchehab@brturbo.com.br>
82
83---------------------------
84
63What: i2c sysfs name change: in1_ref, vid deprecated in favour of cpu0_vid 85What: i2c sysfs name change: in1_ref, vid deprecated in favour of cpu0_vid
64When: November 2005 86When: November 2005
65Files: drivers/i2c/chips/adm1025.c, drivers/i2c/chips/adm1026.c 87Files: 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
94What: remove EXPORT_SYMBOL(panic_timeout)
95When: April 2006
96Files: kernel/panic.c
97Why: No modular usage in the kernel.
98Who: Adrian Bunk <bunk@stusta.de>
99
100---------------------------
101
102What: remove EXPORT_SYMBOL(insert_resource)
103When: April 2006
104Files: kernel/resource.c
105Why: No modular usage in the kernel.
106Who: Adrian Bunk <bunk@stusta.de>
107
108---------------------------
109
72What: PCMCIA control ioctl (needed for pcmcia-cs [cardmgr, cardctl]) 110What: PCMCIA control ioctl (needed for pcmcia-cs [cardmgr, cardctl])
73When: November 2005 111When: November 2005
74Files: drivers/pcmcia/: pcmcia_ioctl.c 112Files: 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'.
97Who: Harald Welte <laforge@netfilter.org> 135Who: Harald Welte <laforge@netfilter.org>
136
137---------------------------
138
139What: EXPORT_SYMBOL(lookup_hash)
140When: January 2006
141Why: Too low-level interface. Use lookup_one_len or lookup_create instead.
142Who: 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 @@
1RCU-based dcache locking model
2==============================
3
4On many workloads, the most common operation on dcache is to look up a
5dentry, given a parent dentry and the name of the child. Typically,
6for every open(), stat() etc., the dentry corresponding to the
7pathname will be looked up by walking the tree starting with the first
8component of the pathname and using that dentry along with the next
9component to look up the next level and so on. Since it is a frequent
10operation for workloads like multiuser environments and web servers,
11it is important to optimize this path.
12
13Prior to 2.5.10, dcache_lock was acquired in d_lookup and thus in
14every component during path look-up. Since 2.5.10 onwards, fast-walk
15algorithm changed this by holding the dcache_lock at the beginning and
16walking as many cached path component dentries as possible. This
17significantly decreases the number of acquisition of
18dcache_lock. However it also increases the lock hold time
19significantly and affects performance in large SMP machines. Since
202.5.62 kernel, dcache has been using a new locking model that uses RCU
21to make dcache look-up lock-free.
22
23The current dcache locking model is not very different from the
24existing dcache locking model. Prior to 2.5.62 kernel, dcache_lock
25protected the hash chain, d_child, d_alias, d_lru lists as well as
26d_inode and several other things like mount look-up. RCU-based changes
27affect only the way the hash chain is protected. For everything else
28the dcache_lock must be taken for both traversing as well as
29updating. The hash chain updates too take the dcache_lock. The
30significant change is the way d_lookup traverses the hash chain, it
31doesn't acquire the dcache_lock for this and rely on RCU to ensure
32that the dentry has not been *freed*.
33
34
35Dcache locking details
36======================
37
38For many multi-user workloads, open() and stat() on files are very
39frequently occurring operations. Both involve walking of path names to
40find the dentry corresponding to the concerned file. In 2.4 kernel,
41dcache_lock was held during look-up of each path component. Contention
42and cache-line bouncing of this global lock caused significant
43scalability problems. With the introduction of RCU in Linux kernel,
44this was worked around by making the look-up of path components during
45path walking lock-free.
46
47
48Safe lock-free look-up of dcache hash table
49===========================================
50
51Dcache is a complex data structure with the hash table entries also
52linked together in other lists. In 2.4 kernel, dcache_lock protected
53all the lists. We applied RCU only on hash chain walking. The rest of
54the lists are still protected by dcache_lock. Some of the important
55changes are :
56
571. 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
622. 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
723. 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
824. 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
885. 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
936. 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
107Maintaining POSIX rename semantics
108==================================
109
110Since look-up of dentries is lock-free, it can race against a
111concurrent rename operation. For example, during rename of file A to
112B, look-up of either A or B must succeed. So, if look-up of B happens
113after A has been removed from the hash chain but not added to the new
114hash chain, it may fail. Also, a comparison while the name is being
115written concurrently by a rename may result in false positive matches
116violating rename semantics. Issues related to race with rename are
117handled as described below :
118
1191. 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
1262. 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
1333. 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
1424. 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
149Important guidelines for filesystem developers related to dcache_rcu
150====================================================================
151
1521. 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
1582. d_flags is now protected by a per-dentry lock (d_lock). All access
159 to d_flags must be protected by it.
160
1613. For a hashed dentry, checking of d_count needs to be protected by
162 d_lock.
163
164
165Papers and other documentation on dcache locking
166================================================
167
1681. Scaling dcache with RCU (http://linuxjournal.com/article.php?sid=7124).
169
1702. 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
1812you can 1812you can
1813 1813
1814 1814
1815if you get an Oops, run ksymoops to decode it so that the
1816names of the offending functions are provided. A non-decoded Oops is
1817pretty useless
1818
1819
1820send a copy of your devfsd configuration file(s) 1815send a copy of your devfsd configuration file(s)
1821 1816
1822send the bug report to me first. 1817send 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 (*).
17bsddf (*) Makes `df' act like BSD. 17bsddf (*) Makes `df' act like BSD.
18minixdf Makes `df' act like Minix. 18minixdf Makes `df' act like Minix.
19 19
20check Check block and inode bitmaps at mount time
21 (requires CONFIG_EXT2_CHECK).
22check=none, nocheck (*) Don't do extra checking of bitmaps on mount 20check=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 @@
1ramfs, rootfs and initramfs
2October 17, 2005
3Rob Landley <rob@landley.net>
4=============================
5
6What is ramfs?
7--------------
8
9Ramfs is a very simple filesystem that exports Linux's disk caching
10mechanisms (the page cache and dentry cache) as a dynamically resizable
11ram-based filesystem.
12
13Normally all files are cached in memory by Linux. Pages of data read from
14backing store (usually the block device the filesystem is mounted on) are kept
15around in case it's needed again, but marked as clean (freeable) in case the
16Virtual Memory system needs the memory for something else. Similarly, data
17written to files is marked clean as soon as it has been written to backing
18store, but kept around for caching purposes until the VM reallocates the
19memory. A similar mechanism (the dentry cache) greatly speeds up access to
20directories.
21
22With ramfs, there is no backing store. Files written into ramfs allocate
23dentries and page cache as usual, but there's nowhere to write them to.
24This means the pages are never marked clean, so they can't be freed by the
25VM when it's looking to recycle memory.
26
27The amount of code required to implement ramfs is tiny, because all the
28work is done by the existing Linux caching infrastructure. Basically,
29you're mounting the disk cache as a filesystem. Because of this, ramfs is not
30an optional component removable via menuconfig, since there would be negligible
31space savings.
32
33ramfs and ramdisk:
34------------------
35
36The older "ram disk" mechanism created a synthetic block device out of
37an area of ram and used it as backing store for a filesystem. This block
38device was of fixed size, so the filesystem mounted on it was of fixed
39size. Using a ram disk also required unnecessarily copying memory from the
40fake block device into the page cache (and copying changes back out), as well
41as creating and destroying dentries. Plus it needed a filesystem driver
42(such as ext2) to format and interpret this data.
43
44Compared to ramfs, this wastes memory (and memory bus bandwidth), creates
45unnecessary work for the CPU, and pollutes the CPU caches. (There are tricks
46to avoid this copying by playing with the page tables, but they're unpleasantly
47complicated and turn out to be about as expensive as the copying anyway.)
48More to the point, all the work ramfs is doing has to happen _anyway_,
49since all file access goes through the page and dentry caches. The ram
50disk is simply unnecessary, ramfs is internally much simpler.
51
52Another reason ramdisks are semi-obsolete is that the introduction of
53loopback devices offered a more flexible and convenient way to create
54synthetic block devices, now from files instead of from chunks of memory.
55See losetup (8) for details.
56
57ramfs and tmpfs:
58----------------
59
60One downside of ramfs is you can keep writing data into it until you fill
61up all memory, and the VM can't free it because the VM thinks that files
62should get written to backing store (rather than swap space), but ramfs hasn't
63got any backing store. Because of this, only root (or a trusted user) should
64be allowed write access to a ramfs mount.
65
66A ramfs derivative called tmpfs was created to add size limits, and the ability
67to write the data to swap space. Normal users can be allowed write access to
68tmpfs mounts. See Documentation/filesystems/tmpfs.txt for more information.
69
70What is rootfs?
71---------------
72
73Rootfs 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
75kernel's doubly-linked list of mount points.)
76
77Most systems just mount another filesystem over it and ignore it. The
78amount of space an empty instance of ramfs takes up is tiny.
79
80What is initramfs?
81------------------
82
83All 2.6 Linux kernels contain a gzipped "cpio" format archive, which is
84extracted into rootfs when the kernel boots up. After extracting, the kernel
85checks to see if rootfs contains a file "init", and if so it executes it as PID
861. If found, this init process is responsible for bringing the system the
87rest of the way up, including locating and mounting the real root device (if
88any). If rootfs does not contain an init program after the embedded cpio
89archive is extracted into it, the kernel will fall through to the older code
90to locate and mount a root partition, then exec some variant of /sbin/init
91out of that.
92
93All 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
122Populating initramfs:
123---------------------
124
125The 2.6 kernel build process always creates a gzipped cpio format initramfs
126archive and links it into the resulting kernel binary. By default, this
127archive is empty (consuming 134 bytes on x86). The config option
128CONFIG_INITRAMFS_SOURCE (for some reason buried under devices->block devices
129in menuconfig, and living in usr/Kconfig) can be used to specify a source for
130the initramfs archive, which will automatically be incorporated into the
131resulting binary. This option can point to an existing gzipped cpio archive, a
132directory containing files to be archived, or a text file specification such
133as 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
146One advantage of the text file is that root access is not required to
147set permissions or create device nodes in the new archive. (Note that those
148two example "file" entries expect to find files named "init.sh" and "busybox" in
149a directory called "initramfs", under the linux-2.6.* directory. See
150Documentation/early-userspace/README for more details.)
151
152If you don't already understand what shared libraries, devices, and paths
153you need to get a minimal root filesystem up and running, here are some
154references:
155http://www.tldp.org/HOWTO/Bootdisk-HOWTO/
156http://www.tldp.org/HOWTO/From-PowerUp-To-Bash-Prompt-HOWTO.html
157http://www.linuxfromscratch.org/lfs/view/stable/
158
159The "klibc" package (http://www.kernel.org/pub/linux/libs/klibc) is
160designed to be a tiny C library to statically link early userspace
161code against, along with some related utilities. It is BSD licensed.
162
163I use uClibc (http://www.uclibc.org) and busybox (http://www.busybox.net)
164myself. These are LGPL and GPL, respectively.
165
166In theory you could use glibc, but that's not well suited for small embedded
167uses like this. (A "hello world" program statically linked against glibc is
168over 400k. With uClibc it's 7k. Also note that glibc dlopens libnss to do
169name lookups, even when otherwise statically linked.)
170
171Future directions:
172------------------
173
174Today (2.6.14), initramfs is always compiled in, but not always used. The
175kernel falls back to legacy boot code that is reached only if initramfs does
176not contain an /init program. The fallback is legacy code, there to ensure a
177smooth transition and allowing early boot functionality to gradually move to
178"early userspace" (I.E. initramfs).
179
180The move to early userspace is necessary because finding and mounting the real
181root device is complex. Root partitions can span multiple devices (raid or
182separate journal). They can be out on the network (requiring dhcp, setting a
183specific mac address, logging into a server, etc). They can live on removable
184media, with dynamically allocated major/minor numbers and persistent naming
185issues requiring a full udev implementation to sort out. They can be
186compressed, encrypted, copy-on-write, loopback mounted, strangely partitioned,
187and so on.
188
189This kind of complexity (which inevitably includes policy) is rightly handled
190in userspace. Both klibc and busybox/uClibc are working on simple initramfs
191packages to drop into a kernel build, and when standard solutions are ready
192and widely deployed, the kernel's legacy early boot code will become obsolete
193and a candidate for the feature removal schedule.
194
195But 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
14What is it? 14Introduction
15=========== 15============
16 16
17The Virtual File System (otherwise known as the Virtual Filesystem 17The Virtual File System (also known as the Virtual Filesystem Switch)
18Switch) is the software layer in the kernel that provides the 18is the software layer in the kernel that provides the filesystem
19filesystem interface to userspace programs. It also provides an 19interface to userspace programs. It also provides an abstraction
20abstraction within the kernel which allows different filesystem 20within the kernel which allows different filesystem implementations to
21implementations to coexist. 21coexist.
22 22
23VFS system calls open(2), stat(2), read(2), write(2), chmod(2) and so
24on are called from a process context. Filesystem locking is described
25in the document Documentation/filesystems/Locking.
23 26
24A Quick Look At How It Works
25============================
26 27
27In this section I'll briefly describe how things work, before 28Directory Entry Cache (dcache)
28launching into the details. I'll start with describing what happens 29------------------------------
29when user programs open and manipulate files, and then look from the
30other view which is how a filesystem is supported and subsequently
31mounted.
32
33
34Opening a File
35--------------
36
37The VFS implements the open(2), stat(2), chmod(2) and similar system
38calls. The pathname argument is used by the VFS to search through the
39directory entry cache (dentry cache or "dcache"). This provides a very
40fast look-up mechanism to translate a pathname (filename) into a
41specific dentry.
42
43An individual dentry usually has a pointer to an inode. Inodes are the
44things that live on disc drives, and can be regular files (you know:
45those things that you write data into), directories, FIFOs and other
46beasts. Dentries live in RAM and are never saved to disc: they exist
47only for performance. Inodes live on disc and are copied into memory
48when required. Later any changes are written back to disc. The inode
49that lives in RAM is a VFS inode, and it is this which the dentry
50points to. A single inode can be pointed to by multiple dentries
51(think about hardlinks).
52
53The dcache is meant to be a view into your entire filespace. Unlike
54Linus, most of us losers can't fit enough dentries into RAM to cover
55all of our filespace, so the dcache has bits missing. In order to
56resolve your pathname into a dentry, the VFS may have to resort to
57creating dentries along the way, and then loading the inode. This is
58done by looking up the inode.
59
60To look up an inode (usually read from disc) requires that the VFS
61calls the lookup() method of the parent directory inode. This method
62is installed by the specific filesystem implementation that the inode
63lives in. There will be more on this later.
64 30
65Once the VFS has the required dentry (and hence the inode), we can do 31The VFS implements the open(2), stat(2), chmod(2), and similar system
66all those boring things like open(2) the file, or stat(2) it to peek 32calls. The pathname argument that is passed to them is used by the VFS
67at the inode data. The stat(2) operation is fairly simple: once the 33to search through the directory entry cache (also known as the dentry
68VFS has the dentry, it peeks at the inode data and passes some of it 34cache or dcache). This provides a very fast look-up mechanism to
69back to userspace. 35translate a pathname (filename) into a specific dentry. Dentries live
36in RAM and are never saved to disc: they exist only for performance.
37
38The dentry cache is meant to be a view into your entire filespace. As
39most computers cannot fit all dentries in the RAM at the same time,
40some bits of the cache are missing. In order to resolve your pathname
41into a dentry, the VFS may have to resort to creating dentries along
42the way, and then loading the inode. This is done by looking up the
43inode.
44
45
46The Inode Object
47----------------
48
49An individual dentry usually has a pointer to an inode. Inodes are
50filesystem objects such as regular files, directories, FIFOs and other
51beasts. They live either on the disc (for block device filesystems)
52or in the memory (for pseudo filesystems). Inodes that live on the
53disc are copied into the memory when required and changes to the inode
54are written back to disc. A single inode can be pointed to by multiple
55dentries (hard links, for example, do this).
56
57To look up an inode requires that the VFS calls the lookup() method of
58the parent directory inode. This method is installed by the specific
59filesystem implementation that the inode lives in. Once the VFS has
60the required dentry (and hence the inode), we can do all those boring
61things like open(2) the file, or stat(2) it to peek at the inode
62data. The stat(2) operation is fairly simple: once the VFS has the
63dentry, it peeks at the inode data and passes some of it back to
64userspace.
65
66
67The File Object
68---------------
70 69
71Opening a file requires another operation: allocation of a file 70Opening a file requires another operation: allocation of a file
72structure (this is the kernel-side implementation of file 71structure (this is the kernel-side implementation of file
@@ -74,51 +73,39 @@ descriptors). The freshly allocated file structure is initialized with
74a pointer to the dentry and a set of file operation member functions. 73a pointer to the dentry and a set of file operation member functions.
75These are taken from the inode data. The open() file method is then 74These are taken from the inode data. The open() file method is then
76called so the specific filesystem implementation can do it's work. You 75called so the specific filesystem implementation can do it's work. You
77can see that this is another switch performed by the VFS. 76can see that this is another switch performed by the VFS. The file
78 77structure is placed into the file descriptor table for the process.
79The file structure is placed into the file descriptor table for the
80process.
81 78
82Reading, writing and closing files (and other assorted VFS operations) 79Reading, writing and closing files (and other assorted VFS operations)
83is done by using the userspace file descriptor to grab the appropriate 80is done by using the userspace file descriptor to grab the appropriate
84file structure, and then calling the required file structure method 81file structure, and then calling the required file structure method to
85function to do whatever is required. 82do whatever is required. For as long as the file is open, it keeps the
86 83dentry in use, which in turn means that the VFS inode is still in use.
87For as long as the file is open, it keeps the dentry "open" (in use),
88which in turn means that the VFS inode is still in use.
89
90All VFS system calls (i.e. open(2), stat(2), read(2), write(2),
91chmod(2) and so on) are called from a process context. You should
92assume that these calls are made without any kernel locks being
93held. This means that the processes may be executing the same piece of
94filesystem or driver code at the same time, on different
95processors. You should ensure that access to shared resources is
96protected by appropriate locks.
97 84
98 85
99Registering and Mounting a Filesystem 86Registering and Mounting a Filesystem
100------------------------------------- 87=====================================
101 88
102If you want to support a new kind of filesystem in the kernel, all you 89To register and unregister a filesystem, use the following API
103need to do is call register_filesystem(). You pass a structure 90functions:
104describing the filesystem implementation (struct file_system_type)
105which is then added to an internal table of supported filesystems. You
106can do:
107 91
108% cat /proc/filesystems 92 #include <linux/fs.h>
109 93
110to 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
112When a request is made to mount a block device onto a directory in 97The passed struct file_system_type describes your filesystem. When a
113your filespace the VFS will call the appropriate method for the 98request is made to mount a device onto a directory in your filespace,
114specific filesystem. The dentry for the mount point will then be 99the VFS will call the appropriate get_sb() method for the specific
115updated to point to the root inode for the new filesystem. 100filesystem. The dentry for the mount point will then be updated to
101point to the root inode for the new filesystem.
116 102
117It's now time to look at things in more detail. 103You can see all filesystems that are registered to the kernel in the
104file /proc/filesystems.
118 105
119 106
120struct file_system_type 107struct file_system_type
121======================= 108-----------------------
122 109
123This describes the filesystem. As of kernel 2.6.13, the following 110This describes the filesystem. As of kernel 2.6.13, the following
124members are defined: 111members 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
187The Superblock Object
188=====================
189
190A superblock object represents a mounted filesystem.
191
192
200struct super_operations 193struct super_operations
201======================= 194-----------------------
202 195
203This describes how the VFS can manipulate the superblock of your 196This describes how the VFS can manipulate the superblock of your
204filesystem. As of kernel 2.6.13, the following members are defined: 197filesystem. 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
317describes the methods that can be performed on individual inodes. 310describes the methods that can be performed on individual inodes.
318 311
319 312
313The Inode Object
314================
315
316An inode object represents an object within the filesystem.
317
318
320struct inode_operations 319struct inode_operations
321======================= 320-----------------------
322 321
323This describes how the VFS can manipulate an inode in your 322This describes how the VFS can manipulate an inode in your
324filesystem. As of kernel 2.6.13, the following members are defined: 323filesystem. 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. 444The Address Space Object
445========================
446
447The address space object is used to identify pages in the page cache.
438 448
439 449
440struct address_space_operations 450struct address_space_operations
441=============================== 451-------------------------------
442 452
443This describes how the VFS can manipulate mapping of a file to page cache in 453This describes how the VFS can manipulate mapping of a file to page cache in
444your filesystem. As of kernel 2.6.13, the following members are defined: 454your 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
515The File Object
516===============
517
518A file object represents a file opened by a process.
519
520
505struct file_operations 521struct file_operations
506====================== 522----------------------
507 523
508This describes how the VFS can manipulate an open file. As of kernel 524This describes how the VFS can manipulate an open file. As of kernel
5092.6.13, the following members are defined: 5252.6.13, the following members are defined:
@@ -661,7 +677,7 @@ of child dentries. Child dentries are basically like files in a
661directory. 677directory.
662 678
663 679
664Directory Entry Cache APIs 680Directory Entry Cache API
665-------------------------- 681--------------------------
666 682
667There are a number of functions defined which permit a filesystem to 683There 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
724For further information on dentry locking, please refer to the document
725Documentation/filesystems/dentry-locking.txt.
708 726
709RCU-based dcache locking model
710------------------------------
711 727
712On many workloads, the most common operation on dcache is 728Resources
713to look up a dentry, given a parent dentry and the name 729=========
714of the child. Typically, for every open(), stat() etc., 730
715the dentry corresponding to the pathname will be looked 731(Note some of these resources are not up-to-date with the latest kernel
716up by walking the tree starting with the first component 732 version.)
717of the pathname and using that dentry along with the next 733
718component to look up the next level and so on. Since it 734Creating Linux virtual filesystems. 2002
719is a frequent operation for workloads like multiuser 735 <http://lwn.net/Articles/13325/>
720environments and web servers, it is important to optimize 736
721this path. 737The Linux Virtual File-system Layer by Neil Brown. 1999
722 738 <http://www.cse.unsw.edu.au/~neilb/oss/linux-commentary/vfs.html>
723Prior to 2.5.10, dcache_lock was acquired in d_lookup and thus 739
724in every component during path look-up. Since 2.5.10 onwards, 740A tour of the Linux VFS by Michael K. Johnson. 1996
725fast-walk algorithm changed this by holding the dcache_lock 741 <http://www.tldp.org/LDP/khg/HyperNews/get/fs/vfstour.html>
726at the beginning and walking as many cached path component
727dentries as possible. This significantly decreases the number
728of acquisition of dcache_lock. However it also increases the
729lock hold time significantly and affects performance in large
730SMP machines. Since 2.5.62 kernel, dcache has been using
731a new locking model that uses RCU to make dcache look-up
732lock-free.
733
734The current dcache locking model is not very different from the existing
735dcache locking model. Prior to 2.5.62 kernel, dcache_lock
736protected the hash chain, d_child, d_alias, d_lru lists as well
737as d_inode and several other things like mount look-up. RCU-based
738changes affect only the way the hash chain is protected. For everything
739else the dcache_lock must be taken for both traversing as well as
740updating. The hash chain updates too take the dcache_lock.
741The significant change is the way d_lookup traverses the hash chain,
742it doesn't acquire the dcache_lock for this and rely on RCU to
743ensure that the dentry has not been *freed*.
744
745
746Dcache locking details
747----------------------
748 742
749For many multi-user workloads, open() and stat() on files are 743A small trail through the Linux kernel by Andries Brouwer. 2001
750very frequently occurring operations. Both involve walking 744 <http://www.win.tue.nl/~aeb/linux/vfs/trail.html>
751of path names to find the dentry corresponding to the
752concerned file. In 2.4 kernel, dcache_lock was held
753during look-up of each path component. Contention and
754cache-line bouncing of this global lock caused significant
755scalability problems. With the introduction of RCU
756in Linux kernel, this was worked around by making
757the look-up of path components during path walking lock-free.
758
759
760Safe lock-free look-up of dcache hash table
761===========================================
762
763Dcache is a complex data structure with the hash table entries
764also linked together in other lists. In 2.4 kernel, dcache_lock
765protected all the lists. We applied RCU only on hash chain
766walking. The rest of the lists are still protected by dcache_lock.
767Some of the important changes are :
768
7691. 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
7732. 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
7823. 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
7924. 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
7985. 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
8036. 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
818Maintaining POSIX rename semantics
819==================================
820
821Since look-up of dentries is lock-free, it can race against
822a concurrent rename operation. For example, during rename
823of file A to B, look-up of either A or B must succeed.
824So, if look-up of B happens after A has been removed from the
825hash chain but not added to the new hash chain, it may fail.
826Also, a comparison while the name is being written concurrently
827by a rename may result in false positive matches violating
828rename semantics. Issues related to race with rename are
829handled as described below :
830
8311. 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
8382. 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
8453. 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
8544. 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
861Important guidelines for filesystem developers related to dcache_rcu
862====================================================================
863
8641. 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
8702. d_flags is now protected by a per-dentry lock (d_lock). All
871 access to d_flags must be protected by it.
872
8733. For a hashed dentry, checking of d_count needs to be protected
874 by d_lock.
875
876
877Papers and other documentation on dcache locking
878================================================
879
8801. Scaling dcache with RCU (http://linuxjournal.com/article.php?sid=7124).
881
8822. 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
3The High Precision Event Timer (HPET) hardware is the future replacement for the 8254 and Real 3The High Precision Event Timer (HPET) hardware is the future replacement
4Time Clock (RTC) periodic timer functionality. Each HPET can have up two 32 timers. It is possible 4for the 8254 and Real Time Clock (RTC) periodic timer functionality.
5to configure the first two timers as legacy replacements for 8254 and RTC periodic. A specification 5Each HPET can have up two 32 timers. It is possible to configure the
6done by INTEL and Microsoft can be found at http://www.intel.com/labs/platcomp/hpet/hpetspec.htm. 6first two timers as legacy replacements for 8254 and RTC periodic timers.
7 7A specification done by Intel and Microsoft can be found at
8The driver supports detection of HPET driver allocation and initialization of the HPET before the 8<http://www.intel.com/hardwaredesign/hpetspec.htm>.
9driver module_init routine is called. This enables platform code which uses timer 0 or 1 as the 9
10main timer to intercept HPET initialization. An example of this initialization can be found in 10The driver supports detection of HPET driver allocation and initialization
11of the HPET before the driver module_init routine is called. This enables
12platform code which uses timer 0 or 1 as the main timer to intercept HPET
13initialization. An example of this initialization can be found in
11arch/i386/kernel/time_hpet.c. 14arch/i386/kernel/time_hpet.c.
12 15
13The driver provides two APIs which are very similar to the API found in the rtc.c driver. 16The driver provides two APIs which are very similar to the API found in
14There is a user space API and a kernel space API. An example user space program is provided 17the rtc.c driver. There is a user space API and a kernel space API.
15below. 18An 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
293The kernel module using this interface fills in the ht_func and ht_data members of the 296The kernel module using this interface fills in the ht_func and ht_data
294hpet_task structure before calling hpet_register. hpet_control simply vectors to the hpet_ioctl 297members of the hpet_task structure before calling hpet_register.
295routine and has the same commands and respective arguments as the user API. hpet_unregister 298hpet_control simply vectors to the hpet_ioctl routine and has the same
299commands and respective arguments as the user API. hpet_unregister
296is used to terminate usage of the HPET timer reserved by hpet_register. 300is 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
13Authors: 13Authors:
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
120SAVEKMSG_MAGIC2 0x4B4D5347 savekmsg arch/*/amiga/config.c 120SAVEKMSG_MAGIC2 0x4B4D5347 savekmsg arch/*/amiga/config.c
121STLI_BOARDMAGIC 0x4bc6c825 stlibrd include/linux/istallion.h 121STLI_BOARDMAGIC 0x4bc6c825 stlibrd include/linux/istallion.h
122CS_STATE_MAGIC 0x4c4f4749 cs_state sound/oss/cs46xx.c 122CS_STATE_MAGIC 0x4c4f4749 cs_state sound/oss/cs46xx.c
123SLAB_C_MAGIC 0x4f17a36d kmem_cache_s mm/slab.c 123SLAB_C_MAGIC 0x4f17a36d kmem_cache mm/slab.c
124COW_MAGIC 0x4f4f4f4d cow_header_v1 arch/um/drivers/ubd_user.c 124COW_MAGIC 0x4f4f4f4d cow_header_v1 arch/um/drivers/ubd_user.c
125I810_CARD_MAGIC 0x5072696E i810_card sound/oss/i810_audio.c 125I810_CARD_MAGIC 0x5072696E i810_card sound/oss/i810_audio.c
126TRIDENT_CARD_MAGIC 0x5072696E trident_card sound/oss/trident.c 126TRIDENT_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
117Once started with RUN_ARRAY, uninitialized spares can be added with 117Once started with RUN_ARRAY, uninitialized spares can be added with
118HOT_ADD_DISK. 118HOT_ADD_DISK.
119
120
121
122MD devices in sysfs
123-------------------
124md devices appear in sysfs (/sys) as regular block devices,
125e.g.
126 /sys/block/md0
127
128Each 'md' device will contain a subdirectory called 'md' which
129contains further md-specific information about the device.
130
131All 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
145As component devices are added to an md array, they appear in the 'md'
146directory as new directories named
147 dev-XXX
148where XXX is a name that the kernel knows for the device, e.g. hdb1.
149Each 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
171An active md device will also contain and entry for each active device
172in the array. These are named
173
174 rdNN
175
176where 'NN' is the possition in the array, starting from 0.
177So for a 3 drive array there will be rd0, rd1, rd2.
178These are symbolic links to the appropriate 'dev-XXX' entry.
179Thus, for example,
180 cat /sys/block/md*/md/rd*/state
181will show 'in_sync' on every line.
182
183
184
185Active md devices for levels that support data redundancy (1,4,5,6)
186also 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
226Each active md device may also have attributes specific to the
227personality module that manages it.
228These are specific to the implementation of the module and could
229change substantially if the implementation changes.
230
231These 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=========================== 2Intel(R) PRO/Wireless 2100 Driver for Linux in support of:
3Intel(R) PRO/Wireless 2100 Network Connection Driver for Linux 3
4Intel(R) PRO/Wireless 2100 Network Connection
5
6Copyright (C) 2003-2005, Intel Corporation
7
4README.ipw2100 8README.ipw2100
5 9
6March 14, 2005 10Version: 1.1.3
11Date : October 17, 2005
7 12
8===========================
9Index 13Index
10--------------------------- 14-----------------------------------------------
110. Introduction 150. IMPORTANT INFORMATION BEFORE USING THIS DRIVER
121. Release 1.1.0 Current Features 161. Introduction
132. Command Line Parameters 172. Release 1.1.3 Current Features
143. Sysfs Helper Files 183. Command Line Parameters
154. Radio Kill Switch 194. Sysfs Helper Files
165. Dynamic Firmware 205. Radio Kill Switch
176. Power Management 216. Dynamic Firmware
187. Support 227. Power Management
198. License 238. Support
20 249. License
21 25
22=========================== 26
230. Introduction 270. IMPORTANT INFORMATION BEFORE USING THIS DRIVER
24------------ ----- ----- ---- --- -- - 28-----------------------------------------------
29
30Important Notice FOR ALL USERS OR DISTRIBUTORS!!!!
31
32Intel wireless LAN adapters are engineered, manufactured, tested, and
33quality checked to ensure that they meet all necessary local and
34governmental regulatory agency requirements for the regions that they
35are designated and/or marked to ship into. Since wireless LANs are
36generally unlicensed devices that share spectrum with radars,
37satellites, and other licensed and unlicensed devices, it is sometimes
38necessary to dynamically detect, avoid, and limit usage to avoid
39interference with these devices. In many instances Intel is required to
40provide test data to prove regional and local compliance to regional and
41governmental regulations before certification or approval to use the
42product is granted. Intel's wireless LAN's EEPROM, firmware, and
43software driver are designed to carefully control parameters that affect
44radio operation and to ensure electromagnetic compliance (EMC). These
45parameters include, without limitation, RF power, spectrum usage,
46channel scanning, and human exposure.
47
48For these reasons Intel cannot permit any manipulation by third parties
49of the software provided in binary format with the wireless WLAN
50adapters (e.g., the EEPROM and firmware). Furthermore, if you use any
51patches, utilities, or code with the Intel wireless LAN adapters that
52have been manipulated by an unauthorized party (i.e., patches,
53utilities, or code (including open source code modifications) which have
54not been validated by Intel), (i) you will be solely responsible for
55ensuring the regulatory compliance of the products, (ii) Intel will bear
56no liability, under any theory of liability for any issues associated
57with the modified products, including without limitation, claims under
58the warranty and/or issues arising from regulatory non-compliance, and
59(iii) Intel will not provide or be required to assist in providing
60support to any third parties for such modified products.
61
62Note: Many regulatory agencies consider Wireless LAN adapters to be
63modules, and accordingly, condition system-level regulatory approval
64upon receipt and review of test data documenting that the antennas and
65system configuration do not cause the EMC and radio operation to be
66non-compliant.
67
68The drivers available for download from SourceForge are provided as a
69part of a development project. Conformance to local regulatory
70requirements is the responsibility of the individual developer. As
71such, if you are interested in deploying or shipping a driver as part of
72solution intended to be used for purposes other than development, please
73obtain a tested driver from Intel Customer Support at:
74
75http://support.intel.com/support/notebook/sb/CS-006408.htm
76
77
781. Introduction
79-----------------------------------------------
25 80
26This document provides a brief overview of the features supported by the 81This document provides a brief overview of the features supported by the
27IPW2100 driver project. The main project website, where the latest 82IPW2100 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
34for the driver project. 89for the driver project.
35 90
36 91
37=========================== 922. Release 1.1.3 Current Supported Features
381. 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
51performed on a given feature. 105performed on a given feature.
52 106
53 107
54=========================== 1083. Command Line Parameters
552. Command Line Parameters 109-----------------------------------------------
56---------------------------
57 110
58If the driver is built as a module, the following optional parameters are used 111If the driver is built as a module, the following optional parameters are used
59by entering them on the command line with the modprobe command using this 112by entering them on the command line with the modprobe command using this
@@ -75,9 +128,9 @@ associate boolean associate=0 /* Do NOT auto associate */
75disable boolean disable=1 /* Do not power the HW */ 128disable boolean disable=1 /* Do not power the HW */
76 129
77 130
78=========================== 1314. Sysfs Helper Files
793. Sysfs Helper Files
80--------------------------- 132---------------------------
133-----------------------------------------------
81 134
82There are several ways to control the behavior of the driver. Many of the 135There are several ways to control the behavior of the driver. Many of the
83general capabilities are exposed through the Wireless Tools (iwconfig). There 136general 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=========================== 1765. Radio Kill Switch
1244. Radio Kill Switch 177-----------------------------------------------
125---------------------------
126Most laptops provide the ability for the user to physically disable the radio. 178Most laptops provide the ability for the user to physically disable the radio.
127Some vendors have implemented this as a physical switch that requires no 179Some vendors have implemented this as a physical switch that requires no
128software to turn the radio off and on. On other laptops, however, the switch 180software 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
134on your system. 186on your system.
135 187
136 188
137=========================== 1896. Dynamic Firmware
1385. Dynamic Firmware 190-----------------------------------------------
139---------------------------
140As the firmware is licensed under a restricted use license, it can not be 191As the firmware is licensed under a restricted use license, it can not be
141included within the kernel sources. To enable the IPW2100 you will need a 192included within the kernel sources. To enable the IPW2100 you will need a
142firmware image to load into the wireless NIC's processors. 193firmware 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>.
146See INSTALL for instructions on installing the firmware. 197See INSTALL for instructions on installing the firmware.
147 198
148 199
149=========================== 2007. Power Management
1506. Power Management 201-----------------------------------------------
151---------------------------
152The IPW2100 supports the configuration of the Power Save Protocol 202The IPW2100 supports the configuration of the Power Save Protocol
153through a private wireless extension interface. The IPW2100 supports 203through a private wireless extension interface. The IPW2100 supports
154the following different modes: 204the following different modes:
@@ -200,9 +250,8 @@ xxxx/yyyy will be replaced with 'off' -- the level reported will be the active
200level if `iwconfig eth1 power on` is invoked. 250level if `iwconfig eth1 power on` is invoked.
201 251
202 252
203=========================== 2538. Support
2047. Support 254-----------------------------------------------
205---------------------------
206 255
207For general development information and support, 256For general development information and support,
208go to: 257go 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=========================== 2709. License
2228. 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
2Intel(R) PRO/Wireless 2915ABG Driver for Linux in support of: 2Intel(R) PRO/Wireless 2915ABG Driver for Linux in support of:
3 3
4Intel(R) PRO/Wireless 2200BG Network Connection 4Intel(R) PRO/Wireless 2200BG Network Connection
5Intel(R) PRO/Wireless 2915ABG Network Connection 5Intel(R) PRO/Wireless 2915ABG Network Connection
6 6
7Note: The Intel(R) PRO/Wireless 2915ABG Driver for Linux and Intel(R) 7Note: The Intel(R) PRO/Wireless 2915ABG Driver for Linux and Intel(R)
8PRO/Wireless 2200BG Driver for Linux is a unified driver that works on 8PRO/Wireless 2200BG Driver for Linux is a unified driver that works on
9both hardware adapters listed above. In this document the Intel(R) 9both hardware adapters listed above. In this document the Intel(R)
10PRO/Wireless 2915ABG Driver for Linux will be used to reference the 10PRO/Wireless 2915ABG Driver for Linux will be used to reference the
11unified driver. 11unified driver.
12 12
13Copyright (C) 2004-2005, Intel Corporation 13Copyright (C) 2004-2005, Intel Corporation
14 14
15README.ipw2200 15README.ipw2200
16 16
17Version: 1.0.0 17Version: 1.0.8
18Date : January 31, 2005 18Date : October 20, 2005
19 19
20 20
21Index 21Index
22----------------------------------------------- 22-----------------------------------------------
230. IMPORTANT INFORMATION BEFORE USING THIS DRIVER
231. Introduction 241. Introduction
241.1. Overview of features 251.1. Overview of features
251.2. Module parameters 261.2. Module parameters
261.3. Wireless Extension Private Methods 271.3. Wireless Extension Private Methods
271.4. Sysfs Helper Files 281.4. Sysfs Helper Files
282. About the Version Numbers 292. Ad-Hoc Networking
293. Support 303. Interacting with Wireless Tools
304. License 313.1. iwconfig mode
324. About the Version Numbers
335. Firmware installation
346. Support
357. License
36
37
380. IMPORTANT INFORMATION BEFORE USING THIS DRIVER
39-----------------------------------------------
40
41Important Notice FOR ALL USERS OR DISTRIBUTORS!!!!
42
43Intel wireless LAN adapters are engineered, manufactured, tested, and
44quality checked to ensure that they meet all necessary local and
45governmental regulatory agency requirements for the regions that they
46are designated and/or marked to ship into. Since wireless LANs are
47generally unlicensed devices that share spectrum with radars,
48satellites, and other licensed and unlicensed devices, it is sometimes
49necessary to dynamically detect, avoid, and limit usage to avoid
50interference with these devices. In many instances Intel is required to
51provide test data to prove regional and local compliance to regional and
52governmental regulations before certification or approval to use the
53product is granted. Intel's wireless LAN's EEPROM, firmware, and
54software driver are designed to carefully control parameters that affect
55radio operation and to ensure electromagnetic compliance (EMC). These
56parameters include, without limitation, RF power, spectrum usage,
57channel scanning, and human exposure.
58
59For these reasons Intel cannot permit any manipulation by third parties
60of the software provided in binary format with the wireless WLAN
61adapters (e.g., the EEPROM and firmware). Furthermore, if you use any
62patches, utilities, or code with the Intel wireless LAN adapters that
63have been manipulated by an unauthorized party (i.e., patches,
64utilities, or code (including open source code modifications) which have
65not been validated by Intel), (i) you will be solely responsible for
66ensuring the regulatory compliance of the products, (ii) Intel will bear
67no liability, under any theory of liability for any issues associated
68with the modified products, including without limitation, claims under
69the warranty and/or issues arising from regulatory non-compliance, and
70(iii) Intel will not provide or be required to assist in providing
71support to any third parties for such modified products.
72
73Note: Many regulatory agencies consider Wireless LAN adapters to be
74modules, and accordingly, condition system-level regulatory approval
75upon receipt and review of test data documenting that the antennas and
76system configuration do not cause the EMC and radio operation to be
77non-compliant.
78
79The drivers available for download from SourceForge are provided as a
80part of a development project. Conformance to local regulatory
81requirements is the responsibility of the individual developer. As
82such, if you are interested in deploying or shipping a driver as part of
83solution intended to be used for purposes other than development, please
84obtain a tested driver from Intel Customer Support at:
85
86http://support.intel.com/support/notebook/sb/CS-006408.htm
31 87
32 88
331. Introduction 891. Introduction
@@ -45,7 +101,7 @@ file.
45 101
461.1. Overview of Features 1021.1. Overview of Features
47----------------------------------------------- 103-----------------------------------------------
48The current release (1.0.0) supports the following features: 104The 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
116The following features are currently enabled, but not officially
117supported:
118
119+ WPA
59+ long/short preamble support 120+ long/short preamble support
121+ Monitor mode (aka RFMon)
122
123The distinction between officially supported and enabled is a reflection
124on the amount of validation and interoperability testing that has been
125performed on a given feature.
60 126
61 127
62 128
631.2. Command Line Parameters 1291.2. Command Line Parameters
64----------------------------------------------- 130-----------------------------------------------
65 131
66Like many modules used in the Linux kernel, the Intel(R) PRO/Wireless 132Like many modules used in the Linux kernel, the Intel(R) PRO/Wireless
672915ABG Driver for Linux allows certain configuration options to be 1332915ABG Driver for Linux allows configuration options to be provided
68provided as module parameters. The most common way to specify a module 134as module parameters. The most common way to specify a module parameter
69parameter is via the command line. 135is via the command line.
70 136
71The general form is: 137The 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
1091.3. Wireless Extension Private Methods 1791.3. Wireless Extension Private Methods
@@ -164,8 +234,8 @@ The supported private methods are:
164----------------------------------------------- 234-----------------------------------------------
165 235
166The Linux kernel provides a pseudo file system that can be used to 236The Linux kernel provides a pseudo file system that can be used to
167access various components of the operating system. The Intel(R) 237access various components of the operating system. The Intel(R)
168PRO/Wireless 2915ABG Driver for Linux exposes several configuration 238PRO/Wireless 2915ABG Driver for Linux exposes several configuration
169parameters through this mechanism. 239parameters through this mechanism.
170 240
171An entry in the sysfs can support reading and/or writing. You can 241An 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
185Where $VALUE would be a number in the case of this sysfs entry. The 255Where $VALUE would be a number in the case of this sysfs entry. The
186input to sysfs files does not have to be a number. For example, the 256input to sysfs files does not have to be a number. For example, the
187firmware loader used by hotplug utilizes sysfs entries for transferring 257firmware loader used by hotplug utilizes sysfs entries for transfering
188the firmware image from user space into the driver. 258the firmware image from user space into the driver.
189 259
190The Intel(R) PRO/Wireless 2915ABG Driver for Linux exposes sysfs entries 260The Intel(R) PRO/Wireless 2915ABG Driver for Linux exposes sysfs entries
191at two levels -- driver level, which apply to all instances of the 261at two levels -- driver level, which apply to all instances of the driver
192driver (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
193device level, which applies only to the single specific instance. 263level, which applies only to the single specific instance.
194 264
195 265
1961.4.1 Driver Level Sysfs Helper Files 2661.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
2061.4.2 Device Level Sysfs Helper Files 2771.4.2 Device Level Sysfs Helper Files
207----------------------------------------------- 278-----------------------------------------------
208 279
@@ -213,7 +284,7 @@ For the device level files, look in
213For example: 284For example:
214 /sys/bus/pci/drivers/ipw2200/0000:02:01.0 285 /sys/bus/pci/drivers/ipw2200/0000:02:01.0
215 286
216For the device level files, see /sys/bus/pci/[drivers/ipw2200: 287For 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
3172. Ad-Hoc Networking
318-----------------------------------------------
319
320When using a device in an Ad-Hoc network, it is useful to understand the
321sequence and requirements for the driver to be able to create, join, or
322merge networks.
323
324The following attempts to provide enough information so that you can
325have a consistent experience while using the driver as a member of an
326Ad-Hoc network.
327
3282.1. Joining an Ad-Hoc Network
329-----------------------------------------------
330
331The easiest way to get onto an Ad-Hoc network is to join one that
332already exists.
234 333
2352. About the Version Numbers 3342.2. Creating an Ad-Hoc Network
335-----------------------------------------------
336
337An Ad-Hoc networks is created using the syntax of the Wireless tool.
338
339For Example:
340iwconfig eth1 mode ad-hoc essid testing channel 2
341
3422.3. Merging Ad-Hoc Networks
343-----------------------------------------------
344
345
3463. Interaction with Wireless Tools
347-----------------------------------------------
348
3493.1 iwconfig mode
350-----------------------------------------------
351
352When configuring the mode of the adapter, all run-time configured parameters
353are reset to the value used when the module was loaded. This includes
354channels, rates, ESSID, etc.
355
356
3574. About the Version Numbers
236----------------------------------------------- 358-----------------------------------------------
237 359
238Due to the nature of open source development projects, there are 360Due to the nature of open source development projects, there are
@@ -259,12 +381,23 @@ available as quickly as possible, unknown anomalies should be expected.
259The major version number will be incremented when significant changes 381The major version number will be incremented when significant changes
260are made to the driver. Currently, there are no major changes planned. 382are made to the driver. Currently, there are no major changes planned.
261 383
3845. Firmware installation
385----------------------------------------------
386
387The driver requires a firmware image, download it and extract the
388files under /lib/firmware (or wherever your hotplug's firmware.agent
389will look for firmware files)
390
391The firmware can be downloaded from the following URL:
262 392
2633. Support 393 http://ipw2200.sf.net/
394
395
3966. Support
264----------------------------------------------- 397-----------------------------------------------
265 398
266For installation support of the 1.0.0 version, you can contact 399For direct support of the 1.0.0 version, you can contact
267http://supportmail.intel.com, or you can use the open source project 400http://supportmail.intel.com, or you can use the open source project
268support. 401support.
269 402
270For general information and support, go to: 403For 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
2754. License 4087. 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 @@
1DCCP protocol
2============
3
4Last updated: 10 November 2005
5
6Contents
7========
8
9- Introduction
10- Missing features
11- Socket options
12- Notes
13
14Introduction
15============
16
17Datagram Congestion Control Protocol (DCCP) is an unreliable, connection
18based protocol designed to solve issues present in UDP and TCP particularly
19for real time and multimedia traffic.
20
21It has a base protocol and pluggable congestion control IDs (CCIDs).
22
23It is at draft RFC status and the homepage for DCCP as a protocol is at:
24 http://www.icir.org/kohler/dcp/
25
26Missing features
27================
28
29The DCCP implementation does not currently have all the features that are in
30the draft RFC.
31
32In particular the following are missing:
33- CCID2 support
34- feature negotiation
35
36When testing against other implementations it appears that elapsed time
37options are not coded compliant to the specification.
38
39Socket options
40==============
41
42DCCP_SOCKOPT_PACKET_SIZE is used for CCID3 to set default packet size for
43calculations.
44
45DCCP_SOCKOPT_SERVICE sets the service. This is compulsory as per the
46specification. If you don't set it you will get EPROTO.
47
48Notes
49=====
50
51SELinux does not yet have support for DCCP. You will need to turn it off or
52else you will get EACCES.
53
54DCCP does not travel through NAT successfully at present. This is because
55the checksum covers the psuedo-header as per TCP and UDP. It should be
56relatively 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
79TCP variables: 79TCP variables:
80 80
81tcp_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
81tcp_syn_retries - INTEGER 86tcp_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 @@
1S2IO Technologies XFrame 10 Gig adapter. 1Release notes for Neterion's (Formerly S2io) Xframe I/II PCI-X 10GbE driver.
2------------------------------------------- 2
3 3Contents
4I. Module loadable parameters. 4=======
5When loaded as a module, the driver provides a host of Module loadable 5- 1. Introduction
6parameters, so the device can be tuned as per the users needs. 6- 2. Identifying the adapter/interface
7A 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 131. Introduction:
14 be steered into the corrsponding receive ring. 14This 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 15Xframe II PCI-X 2.0 adapters. It supports several features
16 the driver. 16such as jumbo frames, MSI/MSI-X, checksum offloads, TSO, UFO and so on.
17(v) fifo_len: Each element defines the number of 17See below for complete list of features.
18 Tx descriptors that can be associated with each 18All 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 202. Identifying the adapter/interface:
21 value for tx_prio multi FIFO scheme is activated. 21a. Insert the adapter(s) in your system.
22(vii) rx_prio: This is a bool, if module is loaded with a non-zero 22b. 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 24c. 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. 26You will see messages similar to:
27 27eth3: Neterion Xframe I 10GbE adapter (rev 3), Version 2.0.9.1, Intr type INTA
28II. Performance tuning. 28eth4: Neterion Xframe II 10GbE adapter (rev 2), Version 2.0.9.1, Intr type INTA
29 By changing a few sysctl parameters. 29eth4: 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>" 31The above messages identify the adapter type(Xframe I/II), adapter revision,
32### IPV4 specific settings 32driver version, interface name(eth3, eth4), Interrupt type(INTA, MSI, MSI-X).
33net.ipv4.tcp_timestamps = 0 # turns TCP timestamp support off, default 1, reduces CPU use 33In case of Xframe II, the PCI/PCI-X bus width and frequency are displayed
34net.ipv4.tcp_sack = 0 # turn SACK support off, default on 34as well.
35# on systems with a VERY fast bus -> memory interface this is the big gainer 35
36net.ipv4.tcp_rmem = 10000000 10000000 10000000 # sets min/default/max TCP read buffer, default 4096 87380 174760 36To associate an interface with a physical adapter use "ethtool -p <ethX>".
37net.ipv4.tcp_wmem = 10000000 10000000 10000000 # sets min/pressure/max TCP write buffer, default 4096 16384 131072 37The corresponding adapter's LED will blink multiple times.
38net.ipv4.tcp_mem = 10000000 10000000 10000000 # sets min/pressure/max TCP buffer space, default 31744 32256 32768 38
39 393. Features supported:
40### CORE settings (mostly for socket and UDP effect) 40a. Jumbo frames. Xframe I/II supports MTU upto 9600 bytes,
41net.core.rmem_max = 524287 # maximum receive socket buffer size, default 131071 41modifiable using ifconfig command.
42net.core.wmem_max = 524287 # maximum send socket buffer size, default 131071 42
43net.core.rmem_default = 524287 # default receive socket buffer size, default 65535 43b. Offloads. Supports checksum offload(TCP/UDP/IP) on transmit
44net.core.wmem_default = 524287 # default send socket buffer size, default 65535 44and receive, TSO.
45net.core.optmem_max = 524287 # maximum amount of option memory buffers, default 10240 45
46net.core.netdev_max_backlog = 300000 # number of unprocessed input packets before kernel starts dropping them, default 300 46c. Multi-buffer receive mode. Scattering of packet across multiple
47---End of performance tuning file--- 47buffers. Currently driver supports 2-buffer mode which yields
48significant performance improvement on certain platforms(SGI Altix,
49IBM xSeries).
50
51d. MSI/MSI-X. Can be enabled on platforms which support this feature
52(IA64, Xeon) resulting in noticeable performance improvement(upto 7%
53on certain platforms).
54
55e. NAPI. Compile-time option(CONFIG_S2IO_NAPI) for better Rx interrupt
56moderation.
57
58f. Statistics. Comprehensive MAC-level and software statistics displayed
59using "ethtool -S" option.
60
61g. Multi-FIFO/Ring. Supports up to 8 transmit queues and receive rings,
62with multiple steering options.
63
644. Command line parameters
65a. tx_fifo_num
66Number of transmit queues
67Valid range: 1-8
68Default: 1
69
70b. rx_ring_num
71Number of receive rings
72Valid range: 1-8
73Default: 1
74
75c. tx_fifo_len
76Size of each transmit queue
77Valid range: Total length of all queues should not exceed 8192
78Default: 4096
79
80d. rx_ring_sz
81Size of each receive ring(in 4K blocks)
82Valid range: Limited by memory on system
83Default: 30
84
85e. intr_type
86Specifies interrupt type. Possible values 1(INTA), 2(MSI), 3(MSI-X)
87Valid range: 1-3
88Default: 1
89
905. Performance suggestions
91General:
92a. Set MTU to maximum(9000 for switch setup, 9600 in back-to-back configuration)
93b. Set TCP windows size to optimal value.
94For instance, for MTU=1500 a value of 210K has been observed to result in
95good performance.
96# sysctl -w net.ipv4.tcp_rmem="210000 210000 210000"
97# sysctl -w net.ipv4.tcp_wmem="210000 210000 210000"
98For 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
102Transmit performance:
103a. By default, the driver respects BIOS settings for PCI bus parameters.
104However, you may want to experiment with PCI bus parameters
105max-split-transactions(MOST) and MMRBC (use setpci command).
106A MOST value of 2 has been found optimal for Opterons and 3 for Itanium.
107It could be different for your hardware.
108Set MMRBC to 4K**.
109
110For example you can set
111For opteron
112#setpci -d 17d5:* 62=1d
113For Itanium
114#setpci -d 17d5:* 62=3d
115
116For detailed description of the PCI registers, please see Xframe User Guide.
117
118b. Ensure Transmit Checksum offload is enabled. Use ethtool to set/verify this
119parameter.
120c. Turn on TSO(using "ethtool -K")
121# ethtool -K <ethX> tso on
122
123Receive performance:
124a. By default, the driver respects BIOS settings for PCI bus parameters.
125However, you may want to set PCI latency timer to 248.
126#setpci -d 17d5:* LATENCY_TIMER=f8
127For detailed description of the PCI registers, please see Xframe User Guide.
128b. Use 2-buffer mode. This results in large performance boost on
129on certain platforms(eg. SGI Altix, IBM xSeries).
130c. Ensure Receive Checksum offload is enabled. Use "ethtool -K ethX" command to
131set/verify this option.
132d. Enable NAPI feature(in kernel configuration Device Drivers ---> Network
133device support ---> Ethernet (10000 Mbit) ---> S2IO 10Gbe Xframe NIC) to
134bring down CPU utilization.
135
136** For AMD opteron platforms with 8131 chipset, MMRBC=1 and MOST=1 are
137recommended as safe parameters.
138For more information, please review the AMD8131 errata at
139http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/26310.pdf
140
1416. Available Downloads
142Neterion "s2io" driver in Red Hat and Suse 2.6-based distributions is kept up
143to date, also the latest "s2io" code (including support for 2.4 kernels) is
144available via "Support" link on the Neterion site: http://www.neterion.com.
145
146For Xframe User Guide (Programming manual), visit ftp site ns1.s2io.com,
147user: linuxdocs password: HALdocs
148
1497. Support
150For further support please contact either your 10GbE Xframe NIC vendor (IBM,
151HP, SGI etc.) or click on the "Support" link on the Neterion site:
152http://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 @@
1NOTE: ksymoops is useless on 2.6. Please use the Oops in its original format 1NOTE: 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
3the Oops" or "running it through ksymoops". If you post an Oops fron 2.6 that 3the Oops" or "running it through ksymoops". If you post an Oops from 2.6 that
4has been run through ksymoops, people will just tell you to repost it. 4has been run through ksymoops, people will just tell you to repost it.
5 5
6Quick Summary 6Quick 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
11driver -- vesafb and vgacon are widely used). 11driver -- vesafb and vgacon are widely used).
12 12
13This is not problem for swsusp, because during swsusp resume, BIOS is 13This is not problem for swsusp, because during swsusp resume, BIOS is
14run normally so video card is normally initialized. S3 has absolutely 14run normally so video card is normally initialized. It should not be
15no chance of working with SMP/HT. Be sure it to turn it off before 15problem for S1 standby, because hardware should retain its state over
16testing (swsusp should work ok, OTOH). 16that.
17 17
18There are a few types of systems where video works after S3 resume: 18There 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
65chance of working. 65chance of working.
66 66
67Table of known working systems: 67Table of known working notebooks:
68 68
69Model hack (or "how to do it") 69Model hack (or "how to do it")
70------------------------------------------------------------------------------ 70------------------------------------------------------------------------------
@@ -73,7 +73,7 @@ Acer TM 242FX vbetool (6)
73Acer TM C110 video_post (8) 73Acer TM C110 video_post (8)
74Acer TM C300 vga=normal (only suspend on console, not in X), vbetool (6) or video_post (8) 74Acer TM C300 vga=normal (only suspend on console, not in X), vbetool (6) or video_post (8)
75Acer TM 4052LCi s3_bios (2) 75Acer TM 4052LCi s3_bios (2)
76Acer TM 636Lci s3_bios vga=normal (2) 76Acer TM 636Lci s3_bios,s3_mode (4)
77Acer TM 650 (Radeon M7) vga=normal plus boot-radeon (5) gets text console back 77Acer TM 650 (Radeon M7) vga=normal plus boot-radeon (5) gets text console back
78Acer TM 660 ??? (*) 78Acer TM 660 ??? (*)
79Acer TM 800 vga=normal, X patches, see webpage (5) or vbetool (6) 79Acer 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)(****)
137Toshiba M30 (2) xor X with nvidia driver using internal AGP 137Toshiba M30 (2) xor X with nvidia driver using internal AGP
138Uniwill 244IIO ??? (*) 138Uniwill 244IIO ??? (*)
139 139
140Known working desktop systems
141~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
142
143Mainboard Graphics card hack (or "how to do it")
144------------------------------------------------------------------------------
145Asus 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
874extern inline void spin_lock(spinlock_t *lp) 874static 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' -
8even if they aren't actually driven by ccws. 8even if they aren't actually driven by ccws.
9 9
10All ccw devices are accessed via a subchannel, this is reflected in the 10All ccw devices are accessed via a subchannel, this is reflected in the
11structures under root/: 11structures under devices/:
12 12
13root/ 13devices/
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
37online: An interface to set the device online and offline. 36online: 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
42The device drivers can add entries to export per-device data and interfaces. 41The 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.
222Please note, that unlike /proc/chpids in 2.4, the channel path objects reflect 221Please note, that unlike /proc/chpids in 2.4, the channel path objects reflect
223only the logical state and not the physical state, since we cannot track the 222only the logical state and not the physical state, since we cannot track the
224latter consistently due to lacking machine support (we don't need to be aware 223latter consistently due to lacking machine support (we don't need to be aware
225of anyway). 224of it anyway).
226 225
227status - Can be 'online' or 'offline'. 226status - 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'.
2353. System devices 2343. System devices
236----------------- 235-----------------
237 236
238Note: cpus may yet be added here.
239
2403.1 xpram 2373.1 xpram
241--------- 238---------
242 239
243xpram shows up under sys/ as 'xpram'. 240xpram shows up under devices/system/ as 'xpram'.
241
2423.2 cpus
243--------
244
245For each cpu, a directory is created under devices/system/cpu/. Each cpu has an
246attribute 'online' which can be 0 or 1.
244 247
245 248
2464. Other devices 2494. 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
5Context switch
6==============
71. Runqueue locking
8By default, the switch_to arch function is called with the runqueue
9locked. This is usually not a problem unless switch_to may need to
10take the runqueue lock. This is usually due to a wake up operation in
11the context switch. See include/asm-ia64/system.h for an example.
12
13To request the scheduler call switch_to with the runqueue unlocked,
14you must `#define __ARCH_WANT_UNLOCKED_CTXSW` in a header file
15(typically the one where switch_to is defined).
16
17Unlocked context switches introduce only a very minor performance
18penalty to the core scheduler implementation in the CONFIG_SMP case.
19
202. Interrupt status
21By default, the switch_to arch function is called with interrupts
22disabled. Interrupts may be enabled over the call if it is likely to
23introduce a significant interrupt latency by adding the line
24`#define __ARCH_WANT_INTERRUPTS_ON_CTXSW` in the same place as for
25unlocked context switches. This define also implies
26`__ARCH_WANT_UNLOCKED_CTXSW`. See include/asm-arm/system.h for an
27example.
28
29
30CPU idle
31========
32Your cpu_idle routines need to obey the following rules:
33
341. Preempt should now disabled over idle routines. Should only
35 be enabled to call schedule() then disabled again.
36
372. 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
423. When cpu_idle finds (need_resched() == 'true'), it should call
43 schedule(). It should not call schedule() otherwise.
44
454. 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
585. 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
69arch/i386/kernel/process.c has examples of both polling and
70sleeping idle functions.
71
72
73Possible arch/ problems
74=======================
75
76Possible arch problems I found (and either tried to fix or didn't):
77
78h8300 - 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
83ia64 - is safe_halt call racy vs interrupts? (does it sleep?) (See #4a)
84
85sh64 - Is sleeping racy vs interrupts? (See #4a)
86
87sparc - 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
53qlogicfas.txt 53qlogicfas.txt
54 - info on driver for QLogic FASxxx based adapters 54 - info on driver for QLogic FASxxx based adapters
55qlogicisp.txt
56 - info on driver for QLogic ISP 1020 based adapters
57scsi-generic.txt 55scsi-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.
59scsi.txt 57scsi.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 @@
1Copyright (c) 2003-2005 QLogic Corporation
2QLogic Linux Fibre Channel HBA Driver
3
4This program includes a device driver for Linux 2.6 that may be
5distributed with QLogic hardware specific firmware binary file.
6You may modify and redistribute the device driver code under the
7GNU General Public License as published by the Free Software
8Foundation (version 2 or a later version).
9
10You may redistribute the hardware specific firmware binary file
11under 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
26REGARDLESS OF WHAT LICENSING MECHANISM IS USED OR APPLICABLE,
27THIS PROGRAM IS PROVIDED BY QLOGIC CORPORATION "AS IS'' AND ANY
28EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
30PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR
31BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
32EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
33TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
34DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
35ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
36OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
37OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
38POSSIBILITY OF SUCH DAMAGE.
39
40USER ACKNOWLEDGES AND AGREES THAT USE OF THIS PROGRAM WILL NOT
41CREATE OR GIVE GROUNDS FOR A LICENSE BY IMPLICATION, ESTOPPEL, OR
42OTHERWISE IN ANY INTELLECTUAL PROPERTY RIGHTS (PATENT, COPYRIGHT,
43TRADE SECRET, MASK WORK, OR OTHER PROPRIETARY RIGHT) EMBODIED IN
44ANY OTHER QLOGIC HARDWARE OR SOFTWARE EITHER SOLELY OR IN
45COMBINATION 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
14is provided by the qlogicisp.c driver. Check README.qlogicisp for 14is provided by the qla1280 driver.
15details.
16 15
17Nor does it support the PCI-Basic, which is supported by the 16Nor 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 @@
1Notes for the QLogic ISP1020 PCI SCSI Driver:
2
3This driver works well in practice, but does not support disconnect/
4reconnect, which makes using it with tape drives impractical.
5
6It should work for most host adaptors with the ISP1020 chip. The
7QLogic Corporation produces several PCI SCSI adapters which should
8work:
9
10 * IQ-PCI
11 * IQ-PCI-10
12 * IQ-PCI-D
13
14This driver may work with boards containing the ISP1020A or ISP1040A
15chips, but that has not been tested.
16
17This 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
22Much thanks to QLogic's tech support for providing the latest ISP1020
23firmware, and for taking the time to review my code.
24
25Erik Moe
26ehm@cris.com
27
28Revised:
29Michael A. Griffith
30grif@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
84function 84function
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
143completed a scmd with error status, the LLDD and lower layers are 143completed a scmd with error status, the LLDD and lower layers are
144assumed to forget about the scmd at that point. However, if a scmd 144assumed to forget about the scmd at that point. However, if a scmd
145has timed out, unless hostt->eh_timedout() made lower layers forget 145has timed out, unless hostt->eh_timed_out() made lower layers forget
146about the scmd, which currently no LLDD does, the command is still 146about the scmd, which currently no LLDD does, the command is still
147active as long as lower layers are concerned and completion could 147active as long as lower layers are concerned and completion could
148occur at any time. Of course, all such completions are ignored as the 148occur 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
346struct tags. Both can be still found in the SCSI subsystem, but 346struct tags. Both can be still found in the SCSI subsystem, but
347the typedefs have been moved to a single file, scsi_typedefs.h to 347the typedefs have been moved to a single file, scsi_typedefs.h to
348make their future removal easier, for example: 348make their future removal easier, for example:
349"typedef struct scsi_host_template Scsi_Host_Template;" 349"typedef struct scsi_cmnd Scsi_Cmnd;"
350 350
351Also, most C99 enhancements are encouraged to the extent they are supported 351Also, most C99 enhancements are encouraged to the extent they are supported
352by the relevant gcc compilers. So C99 style structure and array 352by 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 **/
721int scsi_track_queue_full(Scsi_Device *sdev, int depth) 721int 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 @@
1Shared Subtrees
2---------------
3
4Contents:
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
151) Overview
16-----------
17
18Consider the following situation:
19
20A process wants to clone its own namespace, but still wants to access the CD
21that got mounted recently. Shared subtree semantics provide the necessary
22mechanism to accomplish the above.
23
24It provides the necessary building blocks for features like per-user-namespace
25and versioned filesystem.
26
272) Features
28-----------
29
30Shared subtree provides four different flavors of mounts; struct vfsmount to be
31precise
32
33 a. shared mount
34 b. slave mount
35 c. private mount
36 d. unbindable mount
37
38
392a) A shared mount can be replicated to as many mountpoints and all the
40replicas 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
762b) 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
1202c) 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
1252d) 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
1403) 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
2844) 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
3625) 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
3705a) 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
4745b) 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
5505c) 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
5855d) 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
6605e) 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
6735f) 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
7075g) 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
7266) 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
7817) 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
9358) Implementation
936
9378A) 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
10138B 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
1059version 0.1 (created the initial document, Ram Pai linuxram@us.ibm.com)
1060version 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-&gt;private_data to the type defined by 3696 just accesses to kcontrol-&gt;private_data. The
3713 <type>chip_t</type>. The
3714 kcontrol-&gt;private_data field is 3697 kcontrol-&gt;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
41vs cpu-endian vs whatever), and there the constant "0" really _is_ 41vs cpu-endian vs whatever), and there the constant "0" really _is_
42special. 42special.
43 43
44Modify top-level Makefile to say 44Use
45 45
46CHECK = sparse -Wbitwise 46 make C=[12] CF=-Wbitwise
47 47
48or you don't get any checking at all. 48or 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>
9Obsoleted by V4L2 API 9Obsoleted 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>
12V4L2 API</a> 12V4L2 API</a>
13</td><td> 13</td><td>
14Should be used for new projects 14Should 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 @@
1card=0 - *** UNKNOWN/GENERIC *** 1 0 -> *** UNKNOWN/GENERIC ***
2card=1 - MIRO PCTV 2 1 -> MIRO PCTV
3card=2 - Hauppauge (bt848) 3 2 -> Hauppauge (bt848)
4card=3 - STB, Gateway P/N 6000699 (bt848) 4 3 -> STB, Gateway P/N 6000699 (bt848)
5card=4 - Intel Create and Share PCI/ Smart Video Recorder III 5 4 -> Intel Create and Share PCI/ Smart Video Recorder III
6card=5 - Diamond DTV2000 6 5 -> Diamond DTV2000
7card=6 - AVerMedia TVPhone 7 6 -> AVerMedia TVPhone
8card=7 - MATRIX-Vision MV-Delta 8 7 -> MATRIX-Vision MV-Delta
9card=8 - Lifeview FlyVideo II (Bt848) LR26 / MAXI TV Video PCI2 LR26 9 8 -> Lifeview FlyVideo II (Bt848) LR26 / MAXI TV Video PCI2 LR26
10card=9 - IMS/IXmicro TurboTV 10 9 -> IMS/IXmicro TurboTV
11card=10 - Hauppauge (bt878) 11 10 -> Hauppauge (bt878) [0070:13eb,0070:3900,2636:10b4]
12card=11 - MIRO PCTV pro 12 11 -> MIRO PCTV pro
13card=12 - ADS Technologies Channel Surfer TV (bt848) 13 12 -> ADS Technologies Channel Surfer TV (bt848)
14card=13 - AVerMedia TVCapture 98 14 13 -> AVerMedia TVCapture 98 [1461:0002,1461:0004,1461:0300]
15card=14 - Aimslab Video Highway Xtreme (VHX) 15 14 -> Aimslab Video Highway Xtreme (VHX)
16card=15 - Zoltrix TV-Max 16 15 -> Zoltrix TV-Max [a1a0:a0fc]
17card=16 - Prolink Pixelview PlayTV (bt878) 17 16 -> Prolink Pixelview PlayTV (bt878)
18card=17 - Leadtek WinView 601 18 17 -> Leadtek WinView 601
19card=18 - AVEC Intercapture 19 18 -> AVEC Intercapture
20card=19 - Lifeview FlyVideo II EZ /FlyKit LR38 Bt848 (capture only) 20 19 -> Lifeview FlyVideo II EZ /FlyKit LR38 Bt848 (capture only)
21card=20 - CEI Raffles Card 21 20 -> CEI Raffles Card
22card=21 - Lifeview FlyVideo 98/ Lucky Star Image World ConferenceTV LR50 22 21 -> Lifeview FlyVideo 98/ Lucky Star Image World ConferenceTV LR50
23card=22 - Askey CPH050/ Phoebe Tv Master + FM 23 22 -> Askey CPH050/ Phoebe Tv Master + FM [14ff:3002]
24card=23 - Modular Technology MM201/MM202/MM205/MM210/MM215 PCTV, bt878 24 23 -> Modular Technology MM201/MM202/MM205/MM210/MM215 PCTV, bt878 [14c7:0101]
25card=24 - Askey CPH05X/06X (bt878) [many vendors] 25 24 -> Askey CPH05X/06X (bt878) [many vendors] [144f:3002,144f:3005,144f:5000,14ff:3000]
26card=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
27card=26 - Hauppauge WinCam newer (bt878) 27 26 -> Hauppauge WinCam newer (bt878)
28card=27 - Lifeview FlyVideo 98/ MAXI TV Video PCI2 LR50 28 27 -> Lifeview FlyVideo 98/ MAXI TV Video PCI2 LR50
29card=28 - Terratec TerraTV+ Version 1.1 (bt878) 29 28 -> Terratec TerraTV+ Version 1.1 (bt878) [153b:1127,1852:1852]
30card=29 - Imagenation PXC200 30 29 -> Imagenation PXC200 [1295:200a]
31card=30 - Lifeview FlyVideo 98 LR50 31 30 -> Lifeview FlyVideo 98 LR50 [1f7f:1850]
32card=31 - Formac iProTV, Formac ProTV I (bt848) 32 31 -> Formac iProTV, Formac ProTV I (bt848)
33card=32 - Intel Create and Share PCI/ Smart Video Recorder III 33 32 -> Intel Create and Share PCI/ Smart Video Recorder III
34card=33 - Terratec TerraTValue Version Bt878 34 33 -> Terratec TerraTValue Version Bt878 [153b:1117,153b:1118,153b:1119,153b:111a,153b:1134,153b:5018]
35card=34 - Leadtek WinFast 2000/ WinFast 2000 XP 35 34 -> Leadtek WinFast 2000/ WinFast 2000 XP [107d:6606,107d:6609,6606:217d,f6ff:fff6]
36card=35 - Lifeview FlyVideo 98 LR50 / Chronos Video Shuttle II 36 35 -> Lifeview FlyVideo 98 LR50 / Chronos Video Shuttle II [1851:1850,1851:a050]
37card=36 - Lifeview FlyVideo 98FM LR50 / Typhoon TView TV/FM Tuner 37 36 -> Lifeview FlyVideo 98FM LR50 / Typhoon TView TV/FM Tuner [1852:1852]
38card=37 - Prolink PixelView PlayTV pro 38 37 -> Prolink PixelView PlayTV pro
39card=38 - Askey CPH06X TView99 39 38 -> Askey CPH06X TView99 [144f:3000,144f:a005,a04f:a0fc]
40card=39 - Pinnacle PCTV Studio/Rave 40 39 -> Pinnacle PCTV Studio/Rave [11bd:0012,bd11:1200,bd11:ff00,11bd:ff12]
41card=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]
42card=41 - AVerMedia TVPhone 98 42 41 -> AVerMedia TVPhone 98 [1461:0001,1461:0003]
43card=42 - ProVideo PV951 43 42 -> ProVideo PV951 [aa0c:146c]
44card=43 - Little OnAir TV 44 43 -> Little OnAir TV
45card=44 - Sigma TVII-FM 45 44 -> Sigma TVII-FM
46card=45 - MATRIX-Vision MV-Delta 2 46 45 -> MATRIX-Vision MV-Delta 2
47card=46 - Zoltrix Genie TV/FM 47 46 -> Zoltrix Genie TV/FM [15b0:4000,15b0:400a,15b0:400d,15b0:4010,15b0:4016]
48card=47 - Terratec TV/Radio+ 48 47 -> Terratec TV/Radio+ [153b:1123]
49card=48 - Askey CPH03x/ Dynalink Magic TView 49 48 -> Askey CPH03x/ Dynalink Magic TView
50card=49 - IODATA GV-BCTV3/PCI 50 49 -> IODATA GV-BCTV3/PCI [10fc:4020]
51card=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
52card=51 - Eagle Wireless Capricorn2 (bt878A) 52 51 -> Eagle Wireless Capricorn2 (bt878A)
53card=52 - Pinnacle PCTV Studio Pro 53 52 -> Pinnacle PCTV Studio Pro
54card=53 - Typhoon TView RDS + FM Stereo / KNC1 TV Station RDS 54 53 -> Typhoon TView RDS + FM Stereo / KNC1 TV Station RDS
55card=54 - Lifeview FlyVideo 2000 /FlyVideo A2/ Lifetec LT 9415 TV [LR90] 55 54 -> Lifeview FlyVideo 2000 /FlyVideo A2/ Lifetec LT 9415 TV [LR90]
56card=55 - Askey CPH031/ BESTBUY Easy TV 56 55 -> Askey CPH031/ BESTBUY Easy TV
57card=56 - Lifeview FlyVideo 98FM LR50 57 56 -> Lifeview FlyVideo 98FM LR50 [a051:41a0]
58card=57 - GrandTec 'Grand Video Capture' (Bt848) 58 57 -> GrandTec 'Grand Video Capture' (Bt848) [4344:4142]
59card=58 - Askey CPH060/ Phoebe TV Master Only (No FM) 59 58 -> Askey CPH060/ Phoebe TV Master Only (No FM)
60card=59 - Askey CPH03x TV Capturer 60 59 -> Askey CPH03x TV Capturer
61card=60 - Modular Technology MM100PCTV 61 60 -> Modular Technology MM100PCTV
62card=61 - AG Electronics GMV1 62 61 -> AG Electronics GMV1 [15cb:0101]
63card=62 - Askey CPH061/ BESTBUY Easy TV (bt878) 63 62 -> Askey CPH061/ BESTBUY Easy TV (bt878)
64card=63 - ATI TV-Wonder 64 63 -> ATI TV-Wonder [1002:0001]
65card=64 - ATI TV-Wonder VE 65 64 -> ATI TV-Wonder VE [1002:0003]
66card=65 - Lifeview FlyVideo 2000S LR90 66 65 -> Lifeview FlyVideo 2000S LR90
67card=66 - Terratec TValueRadio 67 66 -> Terratec TValueRadio [153b:1135,153b:ff3b]
68card=67 - IODATA GV-BCTV4/PCI 68 67 -> IODATA GV-BCTV4/PCI [10fc:4050]
69card=68 - 3Dfx VoodooTV FM (Euro), VoodooTV 200 (USA) 69 68 -> 3Dfx VoodooTV FM (Euro), VoodooTV 200 (USA) [121a:3000,10b4:2637]
70card=69 - Active Imaging AIMMS 70 69 -> Active Imaging AIMMS
71card=70 - Prolink Pixelview PV-BT878P+ (Rev.4C,8E) 71 70 -> Prolink Pixelview PV-BT878P+ (Rev.4C,8E)
72card=71 - Lifeview FlyVideo 98EZ (capture only) LR51 72 71 -> Lifeview FlyVideo 98EZ (capture only) LR51 [1851:1851]
73card=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]
74card=73 - Sensoray 311 74 73 -> Sensoray 311 [6000:0311]
75card=74 - RemoteVision MX (RV605) 75 74 -> RemoteVision MX (RV605)
76card=75 - Powercolor MTV878/ MTV878R/ MTV878F 76 75 -> Powercolor MTV878/ MTV878R/ MTV878F
77card=76 - Canopus WinDVR PCI (COMPAQ Presario 3524JP, 5112JP) 77 76 -> Canopus WinDVR PCI (COMPAQ Presario 3524JP, 5112JP) [0e11:0079]
78card=77 - GrandTec Multi Capture Card (Bt878) 78 77 -> GrandTec Multi Capture Card (Bt878)
79card=78 - Jetway TV/Capture JW-TV878-FBK, Kworld KW-TV878RF 79 78 -> Jetway TV/Capture JW-TV878-FBK, Kworld KW-TV878RF [0a01:17de]
80card=79 - DSP Design TCVIDEO 80 79 -> DSP Design TCVIDEO
81card=80 - Hauppauge WinTV PVR 81 80 -> Hauppauge WinTV PVR [0070:4500]
82card=81 - IODATA GV-BCTV5/PCI 82 81 -> IODATA GV-BCTV5/PCI [10fc:4070,10fc:d018]
83card=82 - Osprey 100/150 (878) 83 82 -> Osprey 100/150 (878) [0070:ff00]
84card=83 - Osprey 100/150 (848) 84 83 -> Osprey 100/150 (848)
85card=84 - Osprey 101 (848) 85 84 -> Osprey 101 (848)
86card=85 - Osprey 101/151 86 85 -> Osprey 101/151
87card=86 - Osprey 101/151 w/ svid 87 86 -> Osprey 101/151 w/ svid
88card=87 - Osprey 200/201/250/251 88 87 -> Osprey 200/201/250/251
89card=88 - Osprey 200/250 89 88 -> Osprey 200/250 [0070:ff01]
90card=89 - Osprey 210/220 90 89 -> Osprey 210/220
91card=90 - Osprey 500 91 90 -> Osprey 500 [0070:ff02]
92card=91 - Osprey 540 92 91 -> Osprey 540 [0070:ff04]
93card=92 - Osprey 2000 93 92 -> Osprey 2000 [0070:ff03]
94card=93 - IDS Eagle 94 93 -> IDS Eagle
95card=94 - Pinnacle PCTV Sat 95 94 -> Pinnacle PCTV Sat [11bd:001c]
96card=95 - Formac ProTV II (bt878) 96 95 -> Formac ProTV II (bt878)
97card=96 - MachTV 97 96 -> MachTV
98card=97 - Euresys Picolo 98 97 -> Euresys Picolo
99card=98 - ProVideo PV150 99 98 -> ProVideo PV150 [aa00:1460,aa01:1461,aa02:1462,aa03:1463,aa04:1464,aa05:1465,aa06:1466,aa07:1467]
100card=99 - AD-TVK503 100 99 -> AD-TVK503
101card=100 - Hercules Smart TV Stereo 101100 -> Hercules Smart TV Stereo
102card=101 - Pace TV & Radio Card 102101 -> Pace TV & Radio Card
103card=102 - IVC-200 103102 -> IVC-200 [0000:a155,0001:a155,0002:a155,0003:a155,0100:a155,0101:a155,0102:a155,0103:a155]
104card=103 - Grand X-Guard / Trust 814PCI 104103 -> Grand X-Guard / Trust 814PCI [0304:0102]
105card=104 - Nebula Electronics DigiTV 105104 -> Nebula Electronics DigiTV [0071:0101]
106card=105 - ProVideo PV143 106105 -> ProVideo PV143 [aa00:1430,aa00:1431,aa00:1432,aa00:1433,aa03:1433]
107card=106 - PHYTEC VD-009-X1 MiniDIN (bt878) 107106 -> PHYTEC VD-009-X1 MiniDIN (bt878)
108card=107 - PHYTEC VD-009-X1 Combi (bt878) 108107 -> PHYTEC VD-009-X1 Combi (bt878)
109card=108 - PHYTEC VD-009 MiniDIN (bt878) 109108 -> PHYTEC VD-009 MiniDIN (bt878)
110card=109 - PHYTEC VD-009 Combi (bt878) 110109 -> PHYTEC VD-009 Combi (bt878)
111card=110 - IVC-100 111110 -> IVC-100 [ff00:a132]
112card=111 - IVC-120G 112111 -> 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]
113card=112 - pcHDTV HD-2000 TV 113112 -> pcHDTV HD-2000 TV [7063:2000]
114card=113 - Twinhan DST + clones 114113 -> Twinhan DST + clones [11bd:0026,1822:0001,270f:fc00]
115card=114 - Winfast VC100 115114 -> Winfast VC100 [107d:6607]
116card=115 - Teppro TEV-560/InterVision IV-560 116115 -> Teppro TEV-560/InterVision IV-560
117card=116 - SIMUS GVC1100 117116 -> SIMUS GVC1100 [aa6a:82b2]
118card=117 - NGS NGSTV+ 118117 -> NGS NGSTV+
119card=118 - LMLBT4 119118 -> LMLBT4
120card=119 - Tekram M205 PRO 120119 -> Tekram M205 PRO
121card=120 - Conceptronic CONTVFMi 121120 -> Conceptronic CONTVFMi
122card=121 - Euresys Picolo Tetra 122121 -> Euresys Picolo Tetra [1805:0105,1805:0106,1805:0107,1805:0108]
123card=122 - Spirit TV Tuner 123122 -> Spirit TV Tuner
124card=123 - AVerMedia AVerTV DVB-T 771 124123 -> AVerMedia AVerTV DVB-T 771 [1461:0771]
125card=124 - AverMedia AverTV DVB-T 761 125124 -> AverMedia AverTV DVB-T 761 [1461:0761]
126card=125 - MATRIX Vision Sigma-SQ 126125 -> MATRIX Vision Sigma-SQ
127card=126 - MATRIX Vision Sigma-SLC 127126 -> MATRIX Vision Sigma-SLC
128card=127 - APAC Viewcomp 878(AMAX) 128127 -> APAC Viewcomp 878(AMAX)
129card=128 - DViCO FusionHDTV DVB-T Lite 129128 -> DViCO FusionHDTV DVB-T Lite [18ac:db10]
130card=129 - V-Gear MyVCD 130129 -> V-Gear MyVCD
131card=130 - Super TV Tuner 131130 -> Super TV Tuner
132card=131 - Tibet Systems 'Progress DVR' CS16 132131 -> Tibet Systems 'Progress DVR' CS16
133card=132 - Kodicom 4400R (master) 133132 -> Kodicom 4400R (master)
134card=133 - Kodicom 4400R (slave) 134133 -> Kodicom 4400R (slave)
135card=134 - Adlink RTV24 135134 -> Adlink RTV24
136card=135 - DViCO FusionHDTV 5 Lite 136135 -> DViCO FusionHDTV 5 Lite [18ac:d500]
137card=136 - Acorp Y878F 137136 -> Acorp Y878F [9511:1540]
138137 -> Conceptronic CTVFMi v2
139138 -> Prolink Pixelview PV-BT878P+ (Rev.2E)
140139 -> Prolink PixelView PlayTV MPEG2 PV-M4900
141140 -> Osprey 440 [0070:ff07]
142141 -> Asound Skyeye PCTV
143142 -> 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 @@
1card=0 - UNKNOWN/GENERIC 1 0 -> UNKNOWN/GENERIC
2card=1 - Hauppauge WinTV 34xxx models 2 1 -> Hauppauge WinTV 34xxx models [0070:3400,0070:3401]
3card=2 - GDI Black Gold 3 2 -> GDI Black Gold [14c7:0106,14c7:0107]
4card=3 - PixelView 4 3 -> PixelView [1554:4811]
5card=4 - ATI TV Wonder Pro 5 4 -> ATI TV Wonder Pro [1002:00f8]
6card=5 - Leadtek Winfast 2000XP Expert 6 5 -> Leadtek Winfast 2000XP Expert [107d:6611,107d:6613]
7card=6 - AverTV Studio 303 (M126) 7 6 -> AverTV Studio 303 (M126) [1461:000b]
8card=7 - MSI TV-@nywhere Master 8 7 -> MSI TV-@nywhere Master [1462:8606]
9card=8 - Leadtek Winfast DV2000 9 8 -> Leadtek Winfast DV2000 [107d:6620]
10card=9 - Leadtek PVR 2000 10 9 -> Leadtek PVR 2000 [107d:663b,107d:663C]
11card=10 - IODATA GV-VCP3/PCI 11 10 -> IODATA GV-VCP3/PCI [10fc:d003]
12card=11 - Prolink PlayTV PVR 12 11 -> Prolink PlayTV PVR
13card=12 - ASUS PVR-416 13 12 -> ASUS PVR-416 [1043:4823]
14card=13 - MSI TV-@nywhere 14 13 -> MSI TV-@nywhere
15card=14 - KWorld/VStream XPert DVB-T 15 14 -> KWorld/VStream XPert DVB-T [17de:08a6]
16card=15 - DViCO FusionHDTV DVB-T1 16 15 -> DViCO FusionHDTV DVB-T1 [18ac:db00]
17card=16 - KWorld LTV883RF 17 16 -> KWorld LTV883RF
18card=17 - DViCO FusionHDTV 3 Gold-Q 18 17 -> DViCO FusionHDTV 3 Gold-Q [18ac:d810]
19card=18 - Hauppauge Nova-T DVB-T 19 18 -> Hauppauge Nova-T DVB-T [0070:9002]
20card=19 - Conexant DVB-T reference design 20 19 -> Conexant DVB-T reference design [14f1:0187]
21card=20 - Provideo PV259 21 20 -> Provideo PV259 [1540:2580]
22card=21 - DViCO FusionHDTV DVB-T Plus 22 21 -> DViCO FusionHDTV DVB-T Plus [18ac:db10]
23card=22 - digitalnow DNTV Live! DVB-T 23 22 -> pcHDTV HD3000 HDTV [7063:3000]
24card=23 - pcHDTV HD3000 HDTV 24 23 -> digitalnow DNTV Live! DVB-T [17de:a8a6]
25card=24 - Hauppauge WinTV 28xxx (Roslyn) models 25 24 -> Hauppauge WinTV 28xxx (Roslyn) models [0070:2801]
26card=25 - Digital-Logic MICROSPACE Entertainment Center (MEC) 26 25 -> Digital-Logic MICROSPACE Entertainment Center (MEC) [14f1:0342]
27card=26 - IODATA GV/BCTV7E 27 26 -> IODATA GV/BCTV7E [10fc:d035]
28card=27 - PixelView PlayTV Ultra Pro (Stereo) 28 27 -> PixelView PlayTV Ultra Pro (Stereo)
29card=28 - DViCO FusionHDTV 3 Gold-T 29 28 -> DViCO FusionHDTV 3 Gold-T [18ac:d820]
30card=29 - ADS Tech Instant TV DVB-T PCI 30 29 -> ADS Tech Instant TV DVB-T PCI [1421:0334]
31card=30 - TerraTec Cinergy 1400 DVB-T 31 30 -> TerraTec Cinergy 1400 DVB-T [153b:1166]
32card=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)
53tuner=52 - Thomson DDT 7610 (ATSC/NTSC) 53tuner=52 - Thomson DDT 7610 (ATSC/NTSC)
54tuner=53 - Philips FQ1286 54tuner=53 - Philips FQ1286
55tuner=54 - tda8290+75 55tuner=54 - tda8290+75
56tuner=55 - LG PAL (TAPE series) 56tuner=55 - TCL 2002MB
57tuner=56 - Philips PAL/SECAM multi (FQ1216AME MK4) 57tuner=56 - Philips PAL/SECAM multi (FQ1216AME MK4)
58tuner=57 - Philips FQ1236A MK4 58tuner=57 - Philips FQ1236A MK4
59tuner=58 - Ymec TVision TVF-8531MF/8831MF/8731MF 59tuner=58 - Ymec TVision TVF-8531MF/8831MF/8731MF
@@ -65,3 +65,6 @@ tuner=63 - Philips FMD1216ME MK3 Hybrid Tuner
65tuner=64 - LG TDVS-H062F/TUA6034 65tuner=64 - LG TDVS-H062F/TUA6034
66tuner=65 - Ymec TVF66T5-B/DFF 66tuner=65 - Ymec TVF66T5-B/DFF
67tuner=66 - LG NTSC (TALN mini series) 67tuner=66 - LG NTSC (TALN mini series)
68tuner=67 - Philips TD1316 Hybrid Tuner
69tuner=68 - Philips TUV1236D ATSC/NTSC dual in
70tuner=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--
69Gerd Knorr <kraxel@bytesex.org> [SuSE Labs] 69Gerd 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--
82Gerd Knorr <kraxel@bytesex.org> [SuSE Labs] 82Gerd 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
425Modular Technologies (www.modulartech.com) UK 425Modular 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
42the Subsystem ID in the second line, looks like this: 42the Subsystem ID in the second line, looks like this:
43 43
4400:0a.0 Multimedia video controller: Brooktree Corporation Bt878 (rev 02) 4400: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
49only bt878-based cards can have a subsystem ID (which does not mean 49only bt878-based cards can have a subsystem ID (which does not mean
50that every card really has one). bt848 cards can't have a Subsystem 50that 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
27protection faults (so-called "kernel oops"). 27protection faults (so-called "kernel oops").
28 28
29If you run into some kind of deadlock, you can try to dump a call trace 29If you run into some kind of deadlock, you can try to dump a call trace
30for each process using sysrq-t (see Documentation/sysrq.txt). ksymoops 30for each process using sysrq-t (see Documentation/sysrq.txt).
31will translate these dumps into kernel symbols too. This way it is 31This way it is possible to figure where *exactly* some process in "D"
32possible to figure where *exactly* some process in "D" state is stuck. 32state is stuck.
33 33
34I've seen reports that bttv 0.7.x crashes whereas 0.8.x works rock solid 34I've seen reports that bttv 0.7.x crashes whereas 0.8.x works rock solid
35for some people. Thus probably a small buglet left somewhere in bttv 35for 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:
61struct tvcard 61struct 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
68gpiomask specifies which pins are used to control the audio mux chip. 68gpiomask specifies which pins are used to control the audio mux chip.
@@ -126,11 +126,11 @@ muxsel - video mux, input->registervalue mapping
126pll - same as pll= insmod option 126pll - same as pll= insmod option
127tuner_type - same as tuner= insmod option 127tuner_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.
130has_radio - whenever this TV card has a radio tuner. 130has_radio - whenever this TV card has a radio tuner.
131no_msp34xx - "1" disables loading of msp3400.o module 131no_msp34xx - "1" disables loading of msp3400.o module
132no_tda9875 - "1" disables loading of tda9875.o module 132no_tda9875 - "1" disables loading of tda9875.o module
133needs_tvaudio - set to "1" to load tvaudio.o module 133needs_tvaudio - set to "1" to load tvaudio.o module
134 134
135If some config item is specified both from the tvcards array and as 135If some config item is specified both from the tvcards array and as
136insmod option, the insmod option takes precedence. 136insmod option, the insmod option takes precedence.
@@ -144,5 +144,5 @@ Good luck,
144 144
145PS: If you have a new working entry, mail it to me. 145PS: If you have a new working entry, mail it to me.
146 146
147-- 147--
148Gerd Knorr <kraxel@bytesex.org> 148Gerd 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
12saa7134: 12saa7134:
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
13Users can use the huge page support in Linux kernel by either using the mmap 13Users can use the huge page support in Linux kernel by either using the mmap
14system call or standard SYSv shared memory system calls (shmget, shmat). 14system call or standard SYSv shared memory system calls (shmget, shmat).
15 15
16First the Linux kernel needs to be built with CONFIG_HUGETLB_PAGE (present 16First the Linux kernel needs to be built with the CONFIG_HUGETLBFS
17under Processor types and feature) and CONFIG_HUGETLBFS (present under file 17(present under "File systems") and CONFIG_HUGETLB_PAGE (selected
18system option on config menu) config options. 18automatically when CONFIG_HUGETLBFS is selected) configuration
19options.
19 20
20The kernel built with hugepage support should show the number of configured 21The kernel built with hugepage support should show the number of configured
21hugepages in the system by running the "cat /proc/meminfo" command. 22hugepages 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
24pages configured in the kernel. It also displays information about the 25pages 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
40pages in the kernel. Super user can dynamically request more (or free some 41pages in the kernel. Super user can dynamically request more (or free some
41pre-configured) hugepages. 42pre-configured) hugepages.
42The allocation( or deallocation) of hugetlb pages is posible only if there are 43The allocation (or deallocation) of hugetlb pages is possible only if there are
43enough physically contiguous free pages in system (freeing of hugepages is 44enough physically contiguous free pages in system (freeing of hugepages is
44possible only if there are enough hugetlb pages free that can be transfered 45possible only if there are enough hugetlb pages free that can be transfered
45back to regular memory pool). 46back to regular memory pool).
46 47
47Pages that are used as hugetlb pages are reserved inside the kernel and can 48Pages that are used as hugetlb pages are reserved inside the kernel and can
48not be used for other purposes. 49not be used for other purposes.
49 50
50Once the kernel with Hugetlb page support is built and running, a user can 51Once the kernel with Hugetlb page support is built and running, a user can
51use either the mmap system call or shared memory system calls to start using 52use either the mmap system call or shared memory system calls to start using
52the huge pages. It is required that the system administrator preallocate 53the huge pages. It is required that the system administrator preallocate
53enough memory for huge page purposes. 54enough memory for huge page purposes.
54 55
55Use the following command to dynamically allocate/deallocate hugepages: 56Use 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
80rounded down to HPAGE_SIZE. The option nr_inode sets the maximum number of 81rounded down to HPAGE_SIZE. The option nr_inode sets the maximum number of
81inodes that /mnt/huge can use. If the size or nr_inode options are not 82inodes that /mnt/huge can use. If the size or nr_inode options are not
82provided on command line then no limits are set. For size and nr_inodes 83provided on command line then no limits are set. For size and nr_inodes
83options, you can use [G|g]/[M|m]/[K|k] to represent giga/mega/kilo. For 84options, you can use [G|g]/[M|m]/[K|k] to represent giga/mega/kilo. For
84example, size=2K has the same meaning as size=2048. An example is given at 85example, size=2K has the same meaning as size=2048. An example is given at
85the end of this document. 86the end of this document.
86 87
87read and write system calls are not supported on files that reside on hugetlb 88read and write system calls are not supported on files that reside on hugetlb
88file systems. 89file systems.