diff options
author | David Woodhouse <dwmw2@infradead.org> | 2007-10-13 09:43:54 -0400 |
---|---|---|
committer | David Woodhouse <dwmw2@infradead.org> | 2007-10-13 09:43:54 -0400 |
commit | b160292cc216a50fd0cd386b0bda2cd48352c73b (patch) | |
tree | ef07cf98f91353ee4c9ec1e1ca7a2a5d9d4b538a /Documentation | |
parent | b37bde147890c8fea8369a5a4e230dabdea4ebfb (diff) | |
parent | bbf25010f1a6b761914430f5fca081ec8c7accd1 (diff) |
Merge Linux 2.6.23
Diffstat (limited to 'Documentation')
23 files changed, 1942 insertions, 309 deletions
diff --git a/Documentation/00-INDEX b/Documentation/00-INDEX index 8b0563633442..43e89b1537d9 100644 --- a/Documentation/00-INDEX +++ b/Documentation/00-INDEX | |||
@@ -134,8 +134,6 @@ dvb/ | |||
134 | - info on Linux Digital Video Broadcast (DVB) subsystem. | 134 | - info on Linux Digital Video Broadcast (DVB) subsystem. |
135 | early-userspace/ | 135 | early-userspace/ |
136 | - info about initramfs, klibc, and userspace early during boot. | 136 | - info about initramfs, klibc, and userspace early during boot. |
137 | ecryptfs.txt | ||
138 | - docs on eCryptfs: stacked cryptographic filesystem for Linux. | ||
139 | eisa.txt | 137 | eisa.txt |
140 | - info on EISA bus support. | 138 | - info on EISA bus support. |
141 | exception.txt | 139 | exception.txt |
diff --git a/Documentation/DocBook/deviceiobook.tmpl b/Documentation/DocBook/deviceiobook.tmpl index 90ed23df1f68..c917de681ccd 100644 --- a/Documentation/DocBook/deviceiobook.tmpl +++ b/Documentation/DocBook/deviceiobook.tmpl | |||
@@ -316,7 +316,8 @@ CPU B: spin_unlock_irqrestore(&dev_lock, flags) | |||
316 | 316 | ||
317 | <chapter id="pubfunctions"> | 317 | <chapter id="pubfunctions"> |
318 | <title>Public Functions Provided</title> | 318 | <title>Public Functions Provided</title> |
319 | !Einclude/asm-i386/io.h | 319 | !Iinclude/asm-i386/io.h |
320 | !Elib/iomap.c | ||
320 | </chapter> | 321 | </chapter> |
321 | 322 | ||
322 | </book> | 323 | </book> |
diff --git a/Documentation/HOWTO b/Documentation/HOWTO index f8cc3f8ed152..c64e969dc33b 100644 --- a/Documentation/HOWTO +++ b/Documentation/HOWTO | |||
@@ -208,7 +208,7 @@ tools. One such tool that is particularly recommended is the Linux | |||
208 | Cross-Reference project, which is able to present source code in a | 208 | Cross-Reference project, which is able to present source code in a |
209 | self-referential, indexed webpage format. An excellent up-to-date | 209 | self-referential, indexed webpage format. An excellent up-to-date |
210 | repository of the kernel code may be found at: | 210 | repository of the kernel code may be found at: |
211 | http://sosdg.org/~coywolf/lxr/ | 211 | http://users.sosdg.org/~qiyong/lxr/ |
212 | 212 | ||
213 | 213 | ||
214 | The development process | 214 | The development process |
@@ -384,7 +384,7 @@ One of the best ways to put into practice your hacking skills is by fixing | |||
384 | bugs reported by other people. Not only you will help to make the kernel | 384 | bugs reported by other people. Not only you will help to make the kernel |
385 | more stable, you'll learn to fix real world problems and you will improve | 385 | more stable, you'll learn to fix real world problems and you will improve |
386 | your skills, and other developers will be aware of your presence. Fixing | 386 | your skills, and other developers will be aware of your presence. Fixing |
387 | bugs is one of the best ways to earn merit amongst the developers, because | 387 | bugs is one of the best ways to get merits among other developers, because |
388 | not many people like wasting time fixing other people's bugs. | 388 | not many people like wasting time fixing other people's bugs. |
389 | 389 | ||
390 | To work in the already reported bug reports, go to http://bugzilla.kernel.org. | 390 | To work in the already reported bug reports, go to http://bugzilla.kernel.org. |
diff --git a/Documentation/ManagementStyle b/Documentation/ManagementStyle index cbbebfb51ffe..49a8efa5afeb 100644 --- a/Documentation/ManagementStyle +++ b/Documentation/ManagementStyle | |||
@@ -166,7 +166,7 @@ To solve this problem, you really only have two options: | |||
166 | The option of being unfailingly polite really doesn't exist. Nobody will | 166 | The option of being unfailingly polite really doesn't exist. Nobody will |
167 | trust somebody who is so clearly hiding his true character. | 167 | trust somebody who is so clearly hiding his true character. |
168 | 168 | ||
169 | (*) Paul Simon sang "Fifty Ways to Lose Your Lover", because quite | 169 | (*) Paul Simon sang "Fifty Ways to Leave Your Lover", because quite |
170 | frankly, "A Million Ways to Tell a Developer He Is a D*ckhead" doesn't | 170 | frankly, "A Million Ways to Tell a Developer He Is a D*ckhead" doesn't |
171 | scan nearly as well. But I'm sure he thought about it. | 171 | scan nearly as well. But I'm sure he thought about it. |
172 | 172 | ||
diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches index d6b45a9b29b4..a30dd4480ad4 100644 --- a/Documentation/SubmittingPatches +++ b/Documentation/SubmittingPatches | |||
@@ -126,7 +126,7 @@ the reviewers time and will get your patch rejected, probably | |||
126 | without even being read. | 126 | without even being read. |
127 | 127 | ||
128 | At a minimum you should check your patches with the patch style | 128 | At a minimum you should check your patches with the patch style |
129 | checker prior to submission (scripts/patchcheck.pl). You should | 129 | checker prior to submission (scripts/checkpatch.pl). You should |
130 | be able to justify all violations that remain in your patch. | 130 | be able to justify all violations that remain in your patch. |
131 | 131 | ||
132 | 132 | ||
@@ -560,7 +560,7 @@ NO!!!! No more huge patch bombs to linux-kernel@vger.kernel.org people! | |||
560 | <http://marc.theaimsgroup.com/?l=linux-kernel&m=112112749912944&w=2> | 560 | <http://marc.theaimsgroup.com/?l=linux-kernel&m=112112749912944&w=2> |
561 | 561 | ||
562 | Kernel Documentation/CodingStyle: | 562 | Kernel Documentation/CodingStyle: |
563 | <http://sosdg.org/~coywolf/lxr/source/Documentation/CodingStyle> | 563 | <http://users.sosdg.org/~qiyong/lxr/source/Documentation/CodingStyle> |
564 | 564 | ||
565 | Linus Torvalds's mail on the canonical patch format: | 565 | Linus Torvalds's mail on the canonical patch format: |
566 | <http://lkml.org/lkml/2005/4/7/183> | 566 | <http://lkml.org/lkml/2005/4/7/183> |
diff --git a/Documentation/crypto/async-tx-api.txt b/Documentation/crypto/async-tx-api.txt new file mode 100644 index 000000000000..c1e9545c59bd --- /dev/null +++ b/Documentation/crypto/async-tx-api.txt | |||
@@ -0,0 +1,219 @@ | |||
1 | Asynchronous Transfers/Transforms API | ||
2 | |||
3 | 1 INTRODUCTION | ||
4 | |||
5 | 2 GENEALOGY | ||
6 | |||
7 | 3 USAGE | ||
8 | 3.1 General format of the API | ||
9 | 3.2 Supported operations | ||
10 | 3.3 Descriptor management | ||
11 | 3.4 When does the operation execute? | ||
12 | 3.5 When does the operation complete? | ||
13 | 3.6 Constraints | ||
14 | 3.7 Example | ||
15 | |||
16 | 4 DRIVER DEVELOPER NOTES | ||
17 | 4.1 Conformance points | ||
18 | 4.2 "My application needs finer control of hardware channels" | ||
19 | |||
20 | 5 SOURCE | ||
21 | |||
22 | --- | ||
23 | |||
24 | 1 INTRODUCTION | ||
25 | |||
26 | The async_tx API provides methods for describing a chain of asynchronous | ||
27 | bulk memory transfers/transforms with support for inter-transactional | ||
28 | dependencies. It is implemented as a dmaengine client that smooths over | ||
29 | the details of different hardware offload engine implementations. Code | ||
30 | that is written to the API can optimize for asynchronous operation and | ||
31 | the API will fit the chain of operations to the available offload | ||
32 | resources. | ||
33 | |||
34 | 2 GENEALOGY | ||
35 | |||
36 | The API was initially designed to offload the memory copy and | ||
37 | xor-parity-calculations of the md-raid5 driver using the offload engines | ||
38 | present in the Intel(R) Xscale series of I/O processors. It also built | ||
39 | on the 'dmaengine' layer developed for offloading memory copies in the | ||
40 | network stack using Intel(R) I/OAT engines. The following design | ||
41 | features surfaced as a result: | ||
42 | 1/ implicit synchronous path: users of the API do not need to know if | ||
43 | the platform they are running on has offload capabilities. The | ||
44 | operation will be offloaded when an engine is available and carried out | ||
45 | in software otherwise. | ||
46 | 2/ cross channel dependency chains: the API allows a chain of dependent | ||
47 | operations to be submitted, like xor->copy->xor in the raid5 case. The | ||
48 | API automatically handles cases where the transition from one operation | ||
49 | to another implies a hardware channel switch. | ||
50 | 3/ dmaengine extensions to support multiple clients and operation types | ||
51 | beyond 'memcpy' | ||
52 | |||
53 | 3 USAGE | ||
54 | |||
55 | 3.1 General format of the API: | ||
56 | struct dma_async_tx_descriptor * | ||
57 | async_<operation>(<op specific parameters>, | ||
58 | enum async_tx_flags flags, | ||
59 | struct dma_async_tx_descriptor *dependency, | ||
60 | dma_async_tx_callback callback_routine, | ||
61 | void *callback_parameter); | ||
62 | |||
63 | 3.2 Supported operations: | ||
64 | memcpy - memory copy between a source and a destination buffer | ||
65 | memset - fill a destination buffer with a byte value | ||
66 | xor - xor a series of source buffers and write the result to a | ||
67 | destination buffer | ||
68 | xor_zero_sum - xor a series of source buffers and set a flag if the | ||
69 | result is zero. The implementation attempts to prevent | ||
70 | writes to memory | ||
71 | |||
72 | 3.3 Descriptor management: | ||
73 | The return value is non-NULL and points to a 'descriptor' when the operation | ||
74 | has been queued to execute asynchronously. Descriptors are recycled | ||
75 | resources, under control of the offload engine driver, to be reused as | ||
76 | operations complete. When an application needs to submit a chain of | ||
77 | operations it must guarantee that the descriptor is not automatically recycled | ||
78 | before the dependency is submitted. This requires that all descriptors be | ||
79 | acknowledged by the application before the offload engine driver is allowed to | ||
80 | recycle (or free) the descriptor. A descriptor can be acked by one of the | ||
81 | following methods: | ||
82 | 1/ setting the ASYNC_TX_ACK flag if no child operations are to be submitted | ||
83 | 2/ setting the ASYNC_TX_DEP_ACK flag to acknowledge the parent | ||
84 | descriptor of a new operation. | ||
85 | 3/ calling async_tx_ack() on the descriptor. | ||
86 | |||
87 | 3.4 When does the operation execute? | ||
88 | Operations do not immediately issue after return from the | ||
89 | async_<operation> call. Offload engine drivers batch operations to | ||
90 | improve performance by reducing the number of mmio cycles needed to | ||
91 | manage the channel. Once a driver-specific threshold is met the driver | ||
92 | automatically issues pending operations. An application can force this | ||
93 | event by calling async_tx_issue_pending_all(). This operates on all | ||
94 | channels since the application has no knowledge of channel to operation | ||
95 | mapping. | ||
96 | |||
97 | 3.5 When does the operation complete? | ||
98 | There are two methods for an application to learn about the completion | ||
99 | of an operation. | ||
100 | 1/ Call dma_wait_for_async_tx(). This call causes the CPU to spin while | ||
101 | it polls for the completion of the operation. It handles dependency | ||
102 | chains and issuing pending operations. | ||
103 | 2/ Specify a completion callback. The callback routine runs in tasklet | ||
104 | context if the offload engine driver supports interrupts, or it is | ||
105 | called in application context if the operation is carried out | ||
106 | synchronously in software. The callback can be set in the call to | ||
107 | async_<operation>, or when the application needs to submit a chain of | ||
108 | unknown length it can use the async_trigger_callback() routine to set a | ||
109 | completion interrupt/callback at the end of the chain. | ||
110 | |||
111 | 3.6 Constraints: | ||
112 | 1/ Calls to async_<operation> are not permitted in IRQ context. Other | ||
113 | contexts are permitted provided constraint #2 is not violated. | ||
114 | 2/ Completion callback routines cannot submit new operations. This | ||
115 | results in recursion in the synchronous case and spin_locks being | ||
116 | acquired twice in the asynchronous case. | ||
117 | |||
118 | 3.7 Example: | ||
119 | Perform a xor->copy->xor operation where each operation depends on the | ||
120 | result from the previous operation: | ||
121 | |||
122 | void complete_xor_copy_xor(void *param) | ||
123 | { | ||
124 | printk("complete\n"); | ||
125 | } | ||
126 | |||
127 | int run_xor_copy_xor(struct page **xor_srcs, | ||
128 | int xor_src_cnt, | ||
129 | struct page *xor_dest, | ||
130 | size_t xor_len, | ||
131 | struct page *copy_src, | ||
132 | struct page *copy_dest, | ||
133 | size_t copy_len) | ||
134 | { | ||
135 | struct dma_async_tx_descriptor *tx; | ||
136 | |||
137 | tx = async_xor(xor_dest, xor_srcs, 0, xor_src_cnt, xor_len, | ||
138 | ASYNC_TX_XOR_DROP_DST, NULL, NULL, NULL); | ||
139 | tx = async_memcpy(copy_dest, copy_src, 0, 0, copy_len, | ||
140 | ASYNC_TX_DEP_ACK, tx, NULL, NULL); | ||
141 | tx = async_xor(xor_dest, xor_srcs, 0, xor_src_cnt, xor_len, | ||
142 | ASYNC_TX_XOR_DROP_DST | ASYNC_TX_DEP_ACK | ASYNC_TX_ACK, | ||
143 | tx, complete_xor_copy_xor, NULL); | ||
144 | |||
145 | async_tx_issue_pending_all(); | ||
146 | } | ||
147 | |||
148 | See include/linux/async_tx.h for more information on the flags. See the | ||
149 | ops_run_* and ops_complete_* routines in drivers/md/raid5.c for more | ||
150 | implementation examples. | ||
151 | |||
152 | 4 DRIVER DEVELOPMENT NOTES | ||
153 | 4.1 Conformance points: | ||
154 | There are a few conformance points required in dmaengine drivers to | ||
155 | accommodate assumptions made by applications using the async_tx API: | ||
156 | 1/ Completion callbacks are expected to happen in tasklet context | ||
157 | 2/ dma_async_tx_descriptor fields are never manipulated in IRQ context | ||
158 | 3/ Use async_tx_run_dependencies() in the descriptor clean up path to | ||
159 | handle submission of dependent operations | ||
160 | |||
161 | 4.2 "My application needs finer control of hardware channels" | ||
162 | This requirement seems to arise from cases where a DMA engine driver is | ||
163 | trying to support device-to-memory DMA. The dmaengine and async_tx | ||
164 | implementations were designed for offloading memory-to-memory | ||
165 | operations; however, there are some capabilities of the dmaengine layer | ||
166 | that can be used for platform-specific channel management. | ||
167 | Platform-specific constraints can be handled by registering the | ||
168 | application as a 'dma_client' and implementing a 'dma_event_callback' to | ||
169 | apply a filter to the available channels in the system. Before showing | ||
170 | how to implement a custom dma_event callback some background of | ||
171 | dmaengine's client support is required. | ||
172 | |||
173 | The following routines in dmaengine support multiple clients requesting | ||
174 | use of a channel: | ||
175 | - dma_async_client_register(struct dma_client *client) | ||
176 | - dma_async_client_chan_request(struct dma_client *client) | ||
177 | |||
178 | dma_async_client_register takes a pointer to an initialized dma_client | ||
179 | structure. It expects that the 'event_callback' and 'cap_mask' fields | ||
180 | are already initialized. | ||
181 | |||
182 | dma_async_client_chan_request triggers dmaengine to notify the client of | ||
183 | all channels that satisfy the capability mask. It is up to the client's | ||
184 | event_callback routine to track how many channels the client needs and | ||
185 | how many it is currently using. The dma_event_callback routine returns a | ||
186 | dma_state_client code to let dmaengine know the status of the | ||
187 | allocation. | ||
188 | |||
189 | Below is the example of how to extend this functionality for | ||
190 | platform-specific filtering of the available channels beyond the | ||
191 | standard capability mask: | ||
192 | |||
193 | static enum dma_state_client | ||
194 | my_dma_client_callback(struct dma_client *client, | ||
195 | struct dma_chan *chan, enum dma_state state) | ||
196 | { | ||
197 | struct dma_device *dma_dev; | ||
198 | struct my_platform_specific_dma *plat_dma_dev; | ||
199 | |||
200 | dma_dev = chan->device; | ||
201 | plat_dma_dev = container_of(dma_dev, | ||
202 | struct my_platform_specific_dma, | ||
203 | dma_dev); | ||
204 | |||
205 | if (!plat_dma_dev->platform_specific_capability) | ||
206 | return DMA_DUP; | ||
207 | |||
208 | . . . | ||
209 | } | ||
210 | |||
211 | 5 SOURCE | ||
212 | include/linux/dmaengine.h: core header file for DMA drivers and clients | ||
213 | drivers/dma/dmaengine.c: offload engine channel management routines | ||
214 | drivers/dma/: location for offload engine drivers | ||
215 | include/linux/async_tx.h: core header file for the async_tx api | ||
216 | crypto/async_tx/async_tx.c: async_tx interface to dmaengine and common code | ||
217 | crypto/async_tx/async_memcpy.c: copy offload | ||
218 | crypto/async_tx/async_memset.c: memory fill offload | ||
219 | crypto/async_tx/async_xor.c: xor and xor zero sum offload | ||
diff --git a/Documentation/devices.txt b/Documentation/devices.txt index 8de132a02ba9..6c46730c631a 100644 --- a/Documentation/devices.txt +++ b/Documentation/devices.txt | |||
@@ -94,6 +94,8 @@ Your cooperation is appreciated. | |||
94 | 9 = /dev/urandom Faster, less secure random number gen. | 94 | 9 = /dev/urandom Faster, less secure random number gen. |
95 | 10 = /dev/aio Asynchronous I/O notification interface | 95 | 10 = /dev/aio Asynchronous I/O notification interface |
96 | 11 = /dev/kmsg Writes to this come out as printk's | 96 | 11 = /dev/kmsg Writes to this come out as printk's |
97 | 12 = /dev/oldmem Used by crashdump kernels to access | ||
98 | the memory of the kernel that crashed. | ||
97 | 99 | ||
98 | 1 block RAM disk | 100 | 1 block RAM disk |
99 | 0 = /dev/ram0 First RAM disk | 101 | 0 = /dev/ram0 First RAM disk |
diff --git a/Documentation/feature-removal-schedule.txt b/Documentation/feature-removal-schedule.txt index a43d2878a4ef..00928d2ecfb2 100644 --- a/Documentation/feature-removal-schedule.txt +++ b/Documentation/feature-removal-schedule.txt | |||
@@ -197,6 +197,14 @@ Who: Len Brown <len.brown@intel.com> | |||
197 | 197 | ||
198 | --------------------------- | 198 | --------------------------- |
199 | 199 | ||
200 | What: /proc/acpi/event | ||
201 | When: February 2008 | ||
202 | Why: /proc/acpi/event has been replaced by events via the input layer | ||
203 | and netlink since 2.6.23. | ||
204 | Who: Len Brown <len.brown@intel.com> | ||
205 | |||
206 | --------------------------- | ||
207 | |||
200 | What: Compaq touchscreen device emulation | 208 | What: Compaq touchscreen device emulation |
201 | When: Oct 2007 | 209 | When: Oct 2007 |
202 | Files: drivers/input/tsdev.c | 210 | Files: drivers/input/tsdev.c |
@@ -290,3 +298,11 @@ Why: All mthca hardware also supports MSI-X, which provides | |||
290 | Who: Roland Dreier <rolandd@cisco.com> | 298 | Who: Roland Dreier <rolandd@cisco.com> |
291 | 299 | ||
292 | --------------------------- | 300 | --------------------------- |
301 | |||
302 | What: sk98lin network driver | ||
303 | When: Feburary 2008 | ||
304 | Why: In kernel tree version of driver is unmaintained. Sk98lin driver | ||
305 | replaced by the skge driver. | ||
306 | Who: Stephen Hemminger <shemminger@linux-foundation.org> | ||
307 | |||
308 | --------------------------- | ||
diff --git a/Documentation/filesystems/00-INDEX b/Documentation/filesystems/00-INDEX index 571785887a4f..59db1bca7027 100644 --- a/Documentation/filesystems/00-INDEX +++ b/Documentation/filesystems/00-INDEX | |||
@@ -32,6 +32,8 @@ directory-locking | |||
32 | - info about the locking scheme used for directory operations. | 32 | - info about the locking scheme used for directory operations. |
33 | dlmfs.txt | 33 | dlmfs.txt |
34 | - info on the userspace interface to the OCFS2 DLM. | 34 | - info on the userspace interface to the OCFS2 DLM. |
35 | ecryptfs.txt | ||
36 | - docs on eCryptfs: stacked cryptographic filesystem for Linux. | ||
35 | ext2.txt | 37 | ext2.txt |
36 | - info, mount options and specifications for the Ext2 filesystem. | 38 | - info, mount options and specifications for the Ext2 filesystem. |
37 | ext3.txt | 39 | ext3.txt |
diff --git a/Documentation/filesystems/9p.txt b/Documentation/filesystems/9p.txt index bbd8b28c13de..cda6905cbe49 100644 --- a/Documentation/filesystems/9p.txt +++ b/Documentation/filesystems/9p.txt | |||
@@ -6,12 +6,26 @@ ABOUT | |||
6 | 6 | ||
7 | v9fs is a Unix implementation of the Plan 9 9p remote filesystem protocol. | 7 | v9fs is a Unix implementation of the Plan 9 9p remote filesystem protocol. |
8 | 8 | ||
9 | This software was originally developed by Ron Minnich <rminnich@lanl.gov> | 9 | This software was originally developed by Ron Minnich <rminnich@sandia.gov> |
10 | and Maya Gokhale <maya@lanl.gov>. Additional development by Greg Watson | 10 | and Maya Gokhale. Additional development by Greg Watson |
11 | <gwatson@lanl.gov> and most recently Eric Van Hensbergen | 11 | <gwatson@lanl.gov> and most recently Eric Van Hensbergen |
12 | <ericvh@gmail.com>, Latchesar Ionkov <lucho@ionkov.net> and Russ Cox | 12 | <ericvh@gmail.com>, Latchesar Ionkov <lucho@ionkov.net> and Russ Cox |
13 | <rsc@swtch.com>. | 13 | <rsc@swtch.com>. |
14 | 14 | ||
15 | The best detailed explanation of the Linux implementation and applications of | ||
16 | the 9p client is available in the form of a USENIX paper: | ||
17 | http://www.usenix.org/events/usenix05/tech/freenix/hensbergen.html | ||
18 | |||
19 | Other applications are described in the following papers: | ||
20 | * XCPU & Clustering | ||
21 | http://www.xcpu.org/xcpu-talk.pdf | ||
22 | * KVMFS: control file system for KVM | ||
23 | http://www.xcpu.org/kvmfs.pdf | ||
24 | * CellFS: A New ProgrammingModel for the Cell BE | ||
25 | http://www.xcpu.org/cellfs-talk.pdf | ||
26 | * PROSE I/O: Using 9p to enable Application Partitions | ||
27 | http://plan9.escet.urjc.es/iwp9/cready/PROSE_iwp9_2006.pdf | ||
28 | |||
15 | USAGE | 29 | USAGE |
16 | ===== | 30 | ===== |
17 | 31 | ||
@@ -90,9 +104,9 @@ subset of the namespace by extending the path: '#U*'/tmp would just export | |||
90 | and export. | 104 | and export. |
91 | 105 | ||
92 | A Linux version of the 9p server is now maintained under the npfs project | 106 | A Linux version of the 9p server is now maintained under the npfs project |
93 | on sourceforge (http://sourceforge.net/projects/npfs). There is also a | 107 | on sourceforge (http://sourceforge.net/projects/npfs). The currently |
94 | more stable single-threaded version of the server (named spfs) available from | 108 | maintained version is the single-threaded version of the server (named spfs) |
95 | the same CVS repository. | 109 | available from the same CVS repository. |
96 | 110 | ||
97 | There are user and developer mailing lists available through the v9fs project | 111 | There are user and developer mailing lists available through the v9fs project |
98 | on sourceforge (http://sourceforge.net/projects/v9fs). | 112 | on sourceforge (http://sourceforge.net/projects/v9fs). |
diff --git a/Documentation/filesystems/ocfs2.txt b/Documentation/filesystems/ocfs2.txt index 8ccf0c1b58ed..ed55238023a9 100644 --- a/Documentation/filesystems/ocfs2.txt +++ b/Documentation/filesystems/ocfs2.txt | |||
@@ -28,11 +28,7 @@ Manish Singh <manish.singh@oracle.com> | |||
28 | Caveats | 28 | Caveats |
29 | ======= | 29 | ======= |
30 | Features which OCFS2 does not support yet: | 30 | Features which OCFS2 does not support yet: |
31 | - sparse files | ||
32 | - extended attributes | 31 | - extended attributes |
33 | - shared writable mmap | ||
34 | - loopback is supported, but data written will not | ||
35 | be cluster coherent. | ||
36 | - quotas | 32 | - quotas |
37 | - cluster aware flock | 33 | - cluster aware flock |
38 | - cluster aware lockf | 34 | - cluster aware lockf |
@@ -57,3 +53,12 @@ nointr Do not allow signals to interrupt cluster | |||
57 | atime_quantum=60(*) OCFS2 will not update atime unless this number | 53 | atime_quantum=60(*) OCFS2 will not update atime unless this number |
58 | of seconds has passed since the last update. | 54 | of seconds has passed since the last update. |
59 | Set to zero to always update atime. | 55 | Set to zero to always update atime. |
56 | data=ordered (*) All data are forced directly out to the main file | ||
57 | system prior to its metadata being committed to the | ||
58 | journal. | ||
59 | data=writeback Data ordering is not preserved, data may be written | ||
60 | into the main file system after its metadata has been | ||
61 | committed to the journal. | ||
62 | preferred_slot=0(*) During mount, try to use this filesystem slot first. If | ||
63 | it is in use by another node, the first empty one found | ||
64 | will be chosen. Invalid values will be ignored. | ||
diff --git a/Documentation/i2c/busses/i2c-piix4 b/Documentation/i2c/busses/i2c-piix4 index fa0c786a8bf5..cf6b6cb02aa1 100644 --- a/Documentation/i2c/busses/i2c-piix4 +++ b/Documentation/i2c/busses/i2c-piix4 | |||
@@ -6,7 +6,7 @@ Supported adapters: | |||
6 | Datasheet: Publicly available at the Intel website | 6 | Datasheet: Publicly available at the Intel website |
7 | * ServerWorks OSB4, CSB5, CSB6 and HT-1000 southbridges | 7 | * ServerWorks OSB4, CSB5, CSB6 and HT-1000 southbridges |
8 | Datasheet: Only available via NDA from ServerWorks | 8 | Datasheet: Only available via NDA from ServerWorks |
9 | * ATI IXP200, IXP300, IXP400, SB600 and SB700 southbridges | 9 | * ATI IXP200, IXP300, IXP400, SB600, SB700 and SB800 southbridges |
10 | Datasheet: Not publicly available | 10 | Datasheet: Not publicly available |
11 | * Standard Microsystems (SMSC) SLC90E66 (Victory66) southbridge | 11 | * Standard Microsystems (SMSC) SLC90E66 (Victory66) southbridge |
12 | Datasheet: Publicly available at the SMSC website http://www.smsc.com | 12 | Datasheet: Publicly available at the SMSC website http://www.smsc.com |
diff --git a/Documentation/input/iforce-protocol.txt b/Documentation/input/iforce-protocol.txt index 95df4ca70e71..8777d2d321e3 100644 --- a/Documentation/input/iforce-protocol.txt +++ b/Documentation/input/iforce-protocol.txt | |||
@@ -1,254 +1,254 @@ | |||
1 | ** Introduction | 1 | ** Introduction |
2 | This document describes what I managed to discover about the protocol used to | 2 | This document describes what I managed to discover about the protocol used to |
3 | specify force effects to I-Force 2.0 devices. None of this information comes | 3 | specify force effects to I-Force 2.0 devices. None of this information comes |
4 | from Immerse. That's why you should not trust what is written in this | 4 | from Immerse. That's why you should not trust what is written in this |
5 | document. This document is intended to help understanding the protocol. | 5 | document. This document is intended to help understanding the protocol. |
6 | This is not a reference. Comments and corrections are welcome. To contact me, | 6 | This is not a reference. Comments and corrections are welcome. To contact me, |
7 | send an email to: deneux@ifrance.com | 7 | send an email to: deneux@ifrance.com |
8 | 8 | ||
9 | ** WARNING ** | 9 | ** WARNING ** |
10 | I may not be held responsible for any dammage or harm caused if you try to | 10 | I may not be held responsible for any dammage or harm caused if you try to |
11 | send data to your I-Force device based on what you read in this document. | 11 | send data to your I-Force device based on what you read in this document. |
12 | 12 | ||
13 | ** Preliminary Notes: | 13 | ** Preliminary Notes: |
14 | All values are hexadecimal with big-endian encoding (msb on the left). Beware, | 14 | All values are hexadecimal with big-endian encoding (msb on the left). Beware, |
15 | values inside packets are encoded using little-endian. Bytes whose roles are | 15 | values inside packets are encoded using little-endian. Bytes whose roles are |
16 | unknown are marked ??? Information that needs deeper inspection is marked (?) | 16 | unknown are marked ??? Information that needs deeper inspection is marked (?) |
17 | 17 | ||
18 | ** General form of a packet ** | 18 | ** General form of a packet ** |
19 | This is how packets look when the device uses the rs232 to communicate. | 19 | This is how packets look when the device uses the rs232 to communicate. |
20 | 2B OP LEN DATA CS | 20 | 2B OP LEN DATA CS |
21 | CS is the checksum. It is equal to the exclusive or of all bytes. | 21 | CS is the checksum. It is equal to the exclusive or of all bytes. |
22 | 22 | ||
23 | When using USB: | 23 | When using USB: |
24 | OP DATA | 24 | OP DATA |
25 | The 2B, LEN and CS fields have disappeared, probably because USB handles frames and | 25 | The 2B, LEN and CS fields have disappeared, probably because USB handles frames and |
26 | data corruption is handled or unsignificant. | 26 | data corruption is handled or unsignificant. |
27 | 27 | ||
28 | First, I describe effects that are sent by the device to the computer | 28 | First, I describe effects that are sent by the device to the computer |
29 | 29 | ||
30 | ** Device input state | 30 | ** Device input state |
31 | This packet is used to indicate the state of each button and the value of each | 31 | This packet is used to indicate the state of each button and the value of each |
32 | axis | 32 | axis |
33 | OP= 01 for a joystick, 03 for a wheel | 33 | OP= 01 for a joystick, 03 for a wheel |
34 | LEN= Varies from device to device | 34 | LEN= Varies from device to device |
35 | 00 X-Axis lsb | 35 | 00 X-Axis lsb |
36 | 01 X-Axis msb | 36 | 01 X-Axis msb |
37 | 02 Y-Axis lsb, or gas pedal for a wheel | 37 | 02 Y-Axis lsb, or gas pedal for a wheel |
38 | 03 Y-Axis msb, or brake pedal for a wheel | 38 | 03 Y-Axis msb, or brake pedal for a wheel |
39 | 04 Throttle | 39 | 04 Throttle |
40 | 05 Buttons | 40 | 05 Buttons |
41 | 06 Lower 4 bits: Buttons | 41 | 06 Lower 4 bits: Buttons |
42 | Upper 4 bits: Hat | 42 | Upper 4 bits: Hat |
43 | 07 Rudder | 43 | 07 Rudder |
44 | 44 | ||
45 | ** Device effects states | 45 | ** Device effects states |
46 | OP= 02 | 46 | OP= 02 |
47 | LEN= Varies | 47 | LEN= Varies |
48 | 00 ? Bit 1 (Value 2) is the value of the deadman switch | 48 | 00 ? Bit 1 (Value 2) is the value of the deadman switch |
49 | 01 Bit 8 is set if the effect is playing. Bits 0 to 7 are the effect id. | 49 | 01 Bit 8 is set if the effect is playing. Bits 0 to 7 are the effect id. |
50 | 02 ?? | 50 | 02 ?? |
51 | 03 Address of parameter block changed (lsb) | 51 | 03 Address of parameter block changed (lsb) |
52 | 04 Address of parameter block changed (msb) | 52 | 04 Address of parameter block changed (msb) |
53 | 05 Address of second parameter block changed (lsb) | 53 | 05 Address of second parameter block changed (lsb) |
54 | ... depending on the number of parameter blocks updated | 54 | ... depending on the number of parameter blocks updated |
55 | 55 | ||
56 | ** Force effect ** | 56 | ** Force effect ** |
57 | OP= 01 | 57 | OP= 01 |
58 | LEN= 0e | 58 | LEN= 0e |
59 | 00 Channel (when playing several effects at the same time, each must be assigned a channel) | 59 | 00 Channel (when playing several effects at the same time, each must be assigned a channel) |
60 | 01 Wave form | 60 | 01 Wave form |
61 | Val 00 Constant | 61 | Val 00 Constant |
62 | Val 20 Square | 62 | Val 20 Square |
63 | Val 21 Triangle | 63 | Val 21 Triangle |
64 | Val 22 Sine | 64 | Val 22 Sine |
65 | Val 23 Sawtooth up | 65 | Val 23 Sawtooth up |
66 | Val 24 Sawtooth down | 66 | Val 24 Sawtooth down |
67 | Val 40 Spring (Force = f(pos)) | 67 | Val 40 Spring (Force = f(pos)) |
68 | Val 41 Friction (Force = f(velocity)) and Inertia (Force = f(acceleration)) | 68 | Val 41 Friction (Force = f(velocity)) and Inertia (Force = f(acceleration)) |
69 | 69 | ||
70 | 70 | ||
71 | 02 Axes affected and trigger | 71 | 02 Axes affected and trigger |
72 | Bits 4-7: Val 2 = effect along one axis. Byte 05 indicates direction | 72 | Bits 4-7: Val 2 = effect along one axis. Byte 05 indicates direction |
73 | Val 4 = X axis only. Byte 05 must contain 5a | 73 | Val 4 = X axis only. Byte 05 must contain 5a |
74 | Val 8 = Y axis only. Byte 05 must contain b4 | 74 | Val 8 = Y axis only. Byte 05 must contain b4 |
75 | Val c = X and Y axes. Bytes 05 must contain 60 | 75 | Val c = X and Y axes. Bytes 05 must contain 60 |
76 | Bits 0-3: Val 0 = No trigger | 76 | Bits 0-3: Val 0 = No trigger |
77 | Val x+1 = Button x triggers the effect | 77 | Val x+1 = Button x triggers the effect |
78 | When the whole byte is 0, cancel the previously set trigger | 78 | When the whole byte is 0, cancel the previously set trigger |
79 | 79 | ||
80 | 03-04 Duration of effect (little endian encoding, in ms) | 80 | 03-04 Duration of effect (little endian encoding, in ms) |
81 | 81 | ||
82 | 05 Direction of effect, if applicable. Else, see 02 for value to assign. | 82 | 05 Direction of effect, if applicable. Else, see 02 for value to assign. |
83 | 83 | ||
84 | 06-07 Minimum time between triggering. | 84 | 06-07 Minimum time between triggering. |
85 | 85 | ||
86 | 08-09 Address of periodicity or magnitude parameters | 86 | 08-09 Address of periodicity or magnitude parameters |
87 | 0a-0b Address of attack and fade parameters, or ffff if none. | 87 | 0a-0b Address of attack and fade parameters, or ffff if none. |
88 | *or* | 88 | *or* |
89 | 08-09 Address of interactive parameters for X-axis, or ffff if not applicable | 89 | 08-09 Address of interactive parameters for X-axis, or ffff if not applicable |
90 | 0a-0b Address of interactive parameters for Y-axis, or ffff if not applicable | 90 | 0a-0b Address of interactive parameters for Y-axis, or ffff if not applicable |
91 | 91 | ||
92 | 0c-0d Delay before execution of effect (little endian encoding, in ms) | 92 | 0c-0d Delay before execution of effect (little endian encoding, in ms) |
93 | 93 | ||
94 | 94 | ||
95 | ** Time based parameters ** | 95 | ** Time based parameters ** |
96 | 96 | ||
97 | *** Attack and fade *** | 97 | *** Attack and fade *** |
98 | OP= 02 | 98 | OP= 02 |
99 | LEN= 08 | 99 | LEN= 08 |
100 | 00-01 Address where to store the parameteres | 100 | 00-01 Address where to store the parameteres |
101 | 02-03 Duration of attack (little endian encoding, in ms) | 101 | 02-03 Duration of attack (little endian encoding, in ms) |
102 | 04 Level at end of attack. Signed byte. | 102 | 04 Level at end of attack. Signed byte. |
103 | 05-06 Duration of fade. | 103 | 05-06 Duration of fade. |
104 | 07 Level at end of fade. | 104 | 07 Level at end of fade. |
105 | 105 | ||
106 | *** Magnitude *** | 106 | *** Magnitude *** |
107 | OP= 03 | 107 | OP= 03 |
108 | LEN= 03 | 108 | LEN= 03 |
109 | 00-01 Address | 109 | 00-01 Address |
110 | 02 Level. Signed byte. | 110 | 02 Level. Signed byte. |
111 | 111 | ||
112 | *** Periodicity *** | 112 | *** Periodicity *** |
113 | OP= 04 | 113 | OP= 04 |
114 | LEN= 07 | 114 | LEN= 07 |
115 | 00-01 Address | 115 | 00-01 Address |
116 | 02 Magnitude. Signed byte. | 116 | 02 Magnitude. Signed byte. |
117 | 03 Offset. Signed byte. | 117 | 03 Offset. Signed byte. |
118 | 04 Phase. Val 00 = 0 deg, Val 40 = 90 degs. | 118 | 04 Phase. Val 00 = 0 deg, Val 40 = 90 degs. |
119 | 05-06 Period (little endian encoding, in ms) | 119 | 05-06 Period (little endian encoding, in ms) |
120 | 120 | ||
121 | ** Interactive parameters ** | 121 | ** Interactive parameters ** |
122 | OP= 05 | 122 | OP= 05 |
123 | LEN= 0a | 123 | LEN= 0a |
124 | 00-01 Address | 124 | 00-01 Address |
125 | 02 Positive Coeff | 125 | 02 Positive Coeff |
126 | 03 Negative Coeff | 126 | 03 Negative Coeff |
127 | 04+05 Offset (center) | 127 | 04+05 Offset (center) |
128 | 06+07 Dead band (Val 01F4 = 5000 (decimal)) | 128 | 06+07 Dead band (Val 01F4 = 5000 (decimal)) |
129 | 08 Positive saturation (Val 0a = 1000 (decimal) Val 64 = 10000 (decimal)) | 129 | 08 Positive saturation (Val 0a = 1000 (decimal) Val 64 = 10000 (decimal)) |
130 | 09 Negative saturation | 130 | 09 Negative saturation |
131 | 131 | ||
132 | The encoding is a bit funny here: For coeffs, these are signed values. The | 132 | The encoding is a bit funny here: For coeffs, these are signed values. The |
133 | maximum value is 64 (100 decimal), the min is 9c. | 133 | maximum value is 64 (100 decimal), the min is 9c. |
134 | For the offset, the minimum value is FE0C, the maximum value is 01F4. | 134 | For the offset, the minimum value is FE0C, the maximum value is 01F4. |
135 | For the deadband, the minimum value is 0, the max is 03E8. | 135 | For the deadband, the minimum value is 0, the max is 03E8. |
136 | 136 | ||
137 | ** Controls ** | 137 | ** Controls ** |
138 | OP= 41 | 138 | OP= 41 |
139 | LEN= 03 | 139 | LEN= 03 |
140 | 00 Channel | 140 | 00 Channel |
141 | 01 Start/Stop | 141 | 01 Start/Stop |
142 | Val 00: Stop | 142 | Val 00: Stop |
143 | Val 01: Start and play once. | 143 | Val 01: Start and play once. |
144 | Val 41: Start and play n times (See byte 02 below) | 144 | Val 41: Start and play n times (See byte 02 below) |
145 | 02 Number of iterations n. | 145 | 02 Number of iterations n. |
146 | 146 | ||
147 | ** Init ** | 147 | ** Init ** |
148 | 148 | ||
149 | *** Querying features *** | 149 | *** Querying features *** |
150 | OP= ff | 150 | OP= ff |
151 | Query command. Length varies according to the query type. | 151 | Query command. Length varies according to the query type. |
152 | The general format of this packet is: | 152 | The general format of this packet is: |
153 | ff 01 QUERY [INDEX] CHECKSUM | 153 | ff 01 QUERY [INDEX] CHECKSUM |
154 | reponses are of the same form: | 154 | reponses are of the same form: |
155 | FF LEN QUERY VALUE_QUERIED CHECKSUM2 | 155 | FF LEN QUERY VALUE_QUERIED CHECKSUM2 |
156 | where LEN = 1 + length(VALUE_QUERIED) | 156 | where LEN = 1 + length(VALUE_QUERIED) |
157 | 157 | ||
158 | **** Query ram size **** | 158 | **** Query ram size **** |
159 | QUERY = 42 ('B'uffer size) | 159 | QUERY = 42 ('B'uffer size) |
160 | The device should reply with the same packet plus two additionnal bytes | 160 | The device should reply with the same packet plus two additionnal bytes |
161 | containing the size of the memory: | 161 | containing the size of the memory: |
162 | ff 03 42 03 e8 CS would mean that the device has 1000 bytes of ram available. | 162 | ff 03 42 03 e8 CS would mean that the device has 1000 bytes of ram available. |
163 | 163 | ||
164 | **** Query number of effects **** | 164 | **** Query number of effects **** |
165 | QUERY = 4e ('N'umber of effects) | 165 | QUERY = 4e ('N'umber of effects) |
166 | The device should respond by sending the number of effects that can be played | 166 | The device should respond by sending the number of effects that can be played |
167 | at the same time (one byte) | 167 | at the same time (one byte) |
168 | ff 02 4e 14 CS would stand for 20 effects. | 168 | ff 02 4e 14 CS would stand for 20 effects. |
169 | 169 | ||
170 | **** Vendor's id **** | 170 | **** Vendor's id **** |
171 | QUERY = 4d ('M'anufacturer) | 171 | QUERY = 4d ('M'anufacturer) |
172 | Query the vendors'id (2 bytes) | 172 | Query the vendors'id (2 bytes) |
173 | 173 | ||
174 | **** Product id ***** | 174 | **** Product id ***** |
175 | QUERY = 50 ('P'roduct) | 175 | QUERY = 50 ('P'roduct) |
176 | Query the product id (2 bytes) | 176 | Query the product id (2 bytes) |
177 | 177 | ||
178 | **** Open device **** | 178 | **** Open device **** |
179 | QUERY = 4f ('O'pen) | 179 | QUERY = 4f ('O'pen) |
180 | No data returned. | 180 | No data returned. |
181 | 181 | ||
182 | **** Close device ***** | 182 | **** Close device ***** |
183 | QUERY = 43 ('C')lose | 183 | QUERY = 43 ('C')lose |
184 | No data returned. | 184 | No data returned. |
185 | 185 | ||
186 | **** Query effect **** | 186 | **** Query effect **** |
187 | QUERY = 45 ('E') | 187 | QUERY = 45 ('E') |
188 | Send effect type. | 188 | Send effect type. |
189 | Returns nonzero if supported (2 bytes) | 189 | Returns nonzero if supported (2 bytes) |
190 | 190 | ||
191 | **** Firmware Version **** | 191 | **** Firmware Version **** |
192 | QUERY = 56 ('V'ersion) | 192 | QUERY = 56 ('V'ersion) |
193 | Sends back 3 bytes - major, minor, subminor | 193 | Sends back 3 bytes - major, minor, subminor |
194 | 194 | ||
195 | *** Initialisation of the device *** | 195 | *** Initialisation of the device *** |
196 | 196 | ||
197 | **** Set Control **** | 197 | **** Set Control **** |
198 | !!! Device dependent, can be different on different models !!! | 198 | !!! Device dependent, can be different on different models !!! |
199 | OP= 40 <idx> <val> [<val>] | 199 | OP= 40 <idx> <val> [<val>] |
200 | LEN= 2 or 3 | 200 | LEN= 2 or 3 |
201 | 00 Idx | 201 | 00 Idx |
202 | Idx 00 Set dead zone (0..2048) | 202 | Idx 00 Set dead zone (0..2048) |
203 | Idx 01 Ignore Deadman sensor (0..1) | 203 | Idx 01 Ignore Deadman sensor (0..1) |
204 | Idx 02 Enable comm watchdog (0..1) | 204 | Idx 02 Enable comm watchdog (0..1) |
205 | Idx 03 Set the strength of the spring (0..100) | 205 | Idx 03 Set the strength of the spring (0..100) |
206 | Idx 04 Enable or disable the spring (0/1) | 206 | Idx 04 Enable or disable the spring (0/1) |
207 | Idx 05 Set axis saturation threshold (0..2048) | 207 | Idx 05 Set axis saturation threshold (0..2048) |
208 | 208 | ||
209 | **** Set Effect State **** | 209 | **** Set Effect State **** |
210 | OP= 42 <val> | 210 | OP= 42 <val> |
211 | LEN= 1 | 211 | LEN= 1 |
212 | 00 State | 212 | 00 State |
213 | Bit 3 Pause force feedback | 213 | Bit 3 Pause force feedback |
214 | Bit 2 Enable force feedback | 214 | Bit 2 Enable force feedback |
215 | Bit 0 Stop all effects | 215 | Bit 0 Stop all effects |
216 | 216 | ||
217 | **** Set overall gain **** | 217 | **** Set overall gain **** |
218 | OP= 43 <val> | 218 | OP= 43 <val> |
219 | LEN= 1 | 219 | LEN= 1 |
220 | 00 Gain | 220 | 00 Gain |
221 | Val 00 = 0% | 221 | Val 00 = 0% |
222 | Val 40 = 50% | 222 | Val 40 = 50% |
223 | Val 80 = 100% | 223 | Val 80 = 100% |
224 | 224 | ||
225 | ** Parameter memory ** | 225 | ** Parameter memory ** |
226 | 226 | ||
227 | Each device has a certain amount of memory to store parameters of effects. | 227 | Each device has a certain amount of memory to store parameters of effects. |
228 | The amount of RAM may vary, I encountered values from 200 to 1000 bytes. Below | 228 | The amount of RAM may vary, I encountered values from 200 to 1000 bytes. Below |
229 | is the amount of memory apparently needed for every set of parameters: | 229 | is the amount of memory apparently needed for every set of parameters: |
230 | - period : 0c | 230 | - period : 0c |
231 | - magnitude : 02 | 231 | - magnitude : 02 |
232 | - attack and fade : 0e | 232 | - attack and fade : 0e |
233 | - interactive : 08 | 233 | - interactive : 08 |
234 | 234 | ||
235 | ** Appendix: How to study the protocol ? ** | 235 | ** Appendix: How to study the protocol ? ** |
236 | 236 | ||
237 | 1. Generate effects using the force editor provided with the DirectX SDK, or use Immersion Studio (freely available at their web site in the developer section: www.immersion.com) | 237 | 1. Generate effects using the force editor provided with the DirectX SDK, or use Immersion Studio (freely available at their web site in the developer section: www.immersion.com) |
238 | 2. Start a soft spying RS232 or USB (depending on where you connected your joystick/wheel). I used ComPortSpy from fCoder (alpha version!) | 238 | 2. Start a soft spying RS232 or USB (depending on where you connected your joystick/wheel). I used ComPortSpy from fCoder (alpha version!) |
239 | 3. Play the effect, and watch what happens on the spy screen. | 239 | 3. Play the effect, and watch what happens on the spy screen. |
240 | 240 | ||
241 | A few words about ComPortSpy: | 241 | A few words about ComPortSpy: |
242 | At first glance, this soft seems, hum, well... buggy. In fact, data appear with a few seconds latency. Personnaly, I restart it every time I play an effect. | 242 | At first glance, this soft seems, hum, well... buggy. In fact, data appear with a few seconds latency. Personnaly, I restart it every time I play an effect. |
243 | Remember it's free (as in free beer) and alpha! | 243 | Remember it's free (as in free beer) and alpha! |
244 | 244 | ||
245 | ** URLS ** | 245 | ** URLS ** |
246 | Check www.immerse.com for Immersion Studio, and www.fcoder.com for ComPortSpy. | 246 | Check www.immerse.com for Immersion Studio, and www.fcoder.com for ComPortSpy. |
247 | 247 | ||
248 | ** Author of this document ** | 248 | ** Author of this document ** |
249 | Johann Deneux <deneux@ifrance.com> | 249 | Johann Deneux <deneux@ifrance.com> |
250 | Home page at http://www.esil.univ-mrs.fr/~jdeneux/projects/ff/ | 250 | Home page at http://www.esil.univ-mrs.fr/~jdeneux/projects/ff/ |
251 | 251 | ||
252 | Additions by Vojtech Pavlik. | 252 | Additions by Vojtech Pavlik. |
253 | 253 | ||
254 | I-Force is trademark of Immersion Corp. | 254 | I-Force is trademark of Immersion Corp. |
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 975f029be25c..4d175c751246 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
@@ -468,9 +468,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
468 | Format: | 468 | Format: |
469 | <first_slot>,<last_slot>,<port>,<enum_bit>[,<debug>] | 469 | <first_slot>,<last_slot>,<port>,<enum_bit>[,<debug>] |
470 | 470 | ||
471 | cpia_pp= [HW,PPT] | ||
472 | Format: { parport<nr> | auto | none } | ||
473 | |||
474 | crashkernel=nn[KMG]@ss[KMG] | 471 | crashkernel=nn[KMG]@ss[KMG] |
475 | [KNL] Reserve a chunk of physical memory to | 472 | [KNL] Reserve a chunk of physical memory to |
476 | hold a kernel to switch to with kexec on panic. | 473 | hold a kernel to switch to with kexec on panic. |
@@ -952,14 +949,10 @@ and is between 256 and 4096 characters. It is defined in the file | |||
952 | Format: <1-256> | 949 | Format: <1-256> |
953 | 950 | ||
954 | maxcpus= [SMP] Maximum number of processors that an SMP kernel | 951 | maxcpus= [SMP] Maximum number of processors that an SMP kernel |
955 | should make use of. | 952 | should make use of. maxcpus=n : n >= 0 limits the |
956 | Using "nosmp" or "maxcpus=0" will disable SMP | 953 | kernel to using 'n' processors. n=0 is a special case, |
957 | entirely (the MPS table probe still happens, though). | 954 | it is equivalent to "nosmp", which also disables |
958 | A command-line option of "maxcpus=<NUM>", where <NUM> | 955 | the IO APIC. |
959 | is an integer greater than 0, limits the maximum number | ||
960 | of CPUs activated in SMP mode to <NUM>. | ||
961 | Using "maxcpus=1" on an SMP kernel is the trivial | ||
962 | case of an SMP kernel with only one CPU. | ||
963 | 956 | ||
964 | max_addr=[KMG] [KNL,BOOT,ia64] All physical memory greater than or | 957 | max_addr=[KMG] [KNL,BOOT,ia64] All physical memory greater than or |
965 | equal to this physical address is ignored. | 958 | equal to this physical address is ignored. |
@@ -1184,7 +1177,8 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1184 | 1177 | ||
1185 | nosep [BUGS=X86-32] Disables x86 SYSENTER/SYSEXIT support. | 1178 | nosep [BUGS=X86-32] Disables x86 SYSENTER/SYSEXIT support. |
1186 | 1179 | ||
1187 | nosmp [SMP] Tells an SMP kernel to act as a UP kernel. | 1180 | nosmp [SMP] Tells an SMP kernel to act as a UP kernel, |
1181 | and disable the IO APIC. legacy for "maxcpus=0". | ||
1188 | 1182 | ||
1189 | nosoftlockup [KNL] Disable the soft-lockup detector. | 1183 | nosoftlockup [KNL] Disable the soft-lockup detector. |
1190 | 1184 | ||
@@ -1826,6 +1820,10 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1826 | -1: disable all active trip points in all thermal zones | 1820 | -1: disable all active trip points in all thermal zones |
1827 | <degrees C>: override all lowest active trip points | 1821 | <degrees C>: override all lowest active trip points |
1828 | 1822 | ||
1823 | thermal.crt= [HW,ACPI] | ||
1824 | -1: disable all critical trip points in all thermal zones | ||
1825 | <degrees C>: lower all critical trip points | ||
1826 | |||
1829 | thermal.nocrt= [HW,ACPI] | 1827 | thermal.nocrt= [HW,ACPI] |
1830 | Set to disable actions on ACPI thermal zone | 1828 | Set to disable actions on ACPI thermal zone |
1831 | critical and hot trip points. | 1829 | critical and hot trip points. |
diff --git a/Documentation/ko_KR/HOWTO b/Documentation/ko_KR/HOWTO new file mode 100644 index 000000000000..b51d7ca842ba --- /dev/null +++ b/Documentation/ko_KR/HOWTO | |||
@@ -0,0 +1,623 @@ | |||
1 | NOTE: | ||
2 | This is a version of Documentation/HOWTO translated into korean | ||
3 | This document is maintained by minchan Kim < minchan.kim@gmail.com> | ||
4 | If you find any difference between this document and the original file or | ||
5 | a problem with the translation, please contact the maintainer of this file. | ||
6 | |||
7 | Please also note that the purpose of this file is to be easier to | ||
8 | read for non English (read: korean) speakers and is not intended as | ||
9 | a fork. So if you have any comments or updates for this file please | ||
10 | try to update the original English file first. | ||
11 | |||
12 | ================================== | ||
13 | 이 문서는 | ||
14 | Documentation/HOWTO | ||
15 | 의 한글 번역입니다. | ||
16 | |||
17 | 역자: 김민찬 <minchan.kim@gmail.com > | ||
18 | 감수: 이제이미 <jamee.lee@samsung.com> | ||
19 | ================================== | ||
20 | |||
21 | 어떻게 리눅스 커널 개발을 하는가 | ||
22 | --------------------------------- | ||
23 | |||
24 | 이 문서는 커널 개발에 있어 가장 중요한 문서이다. 이 문서는 | ||
25 | 리눅스 커널 개발자가 되는 법과 리눅스 커널 개발 커뮤니티와 일하는 | ||
26 | 법을 담고있다. 커널 프로그래밍의기술적인 측면과 관련된 내용들은 | ||
27 | 포함하지 않으려고 하였지만 올바으로 여러분을 안내하는 데 도움이 | ||
28 | 될 것이다. | ||
29 | |||
30 | 이 문서에서 오래된 것을 발견하면 문서의 아래쪽에 나열된 메인트너에게 | ||
31 | 패치를 보내달라. | ||
32 | |||
33 | |||
34 | 소개 | ||
35 | ---- | ||
36 | |||
37 | 자, 여러분은 리눅스 커널 개발자가 되는 법을 배우고 싶은가? 아니면 | ||
38 | 상사로부터"이 장치를 위한 리눅스 드라이버를 작성하시오"라는 말을 | ||
39 | 들었는가? 이 문서는 여러분이 겪게 될 과정과 커뮤니티와 일하는 법을 | ||
40 | 조언하여 여러분의 목적을 달성하기 위해 필요한 것 모두를 알려주는 | ||
41 | 것이다. | ||
42 | |||
43 | 커널은 대부분은 C로 작성되었어고 몇몇 아키텍쳐의 의존적인 부분은 | ||
44 | 어셈블리로 작성되었다. 커널 개발을 위해 C를 잘 이해하고 있어야 한다. | ||
45 | 여러분이 특정 아키텍쳐의 low-level 개발을 할 것이 아니라면 | ||
46 | 어셈블리(특정 아키텍쳐)는 잘 알아야 할 필요는 없다. | ||
47 | 다음의 참고서적들은 기본에 충실한 C 교육이나 수년간의 경험에 견주지는 | ||
48 | 못하지만 적어도 참고 용도로는 좋을 것이다 | ||
49 | - "The C Programming Language" by Kernighan and Ritchie [Prentice Hall] | ||
50 | - "Practical C Programming" by Steve Oualline [O'Reilly] | ||
51 | - "C: A Reference Manual" by Harbison and Steele [Prentice Hall] | ||
52 | |||
53 | 커널은 GNU C와 GNU 툴체인을 사용하여 작성되었다. 이 툴들은 ISO C89 표준을 | ||
54 | 따르는 반면 표준에 있지 않은 많은 확장기능도 가지고 있다. 커널은 표준 C | ||
55 | 라이브러리와는 관계없이 freestanding C 환경이어서 C 표준의 일부는 | ||
56 | 지원되지 않는다. 임의의 long long 나누기나 floating point는 지원되지 않는다. | ||
57 | 때론 이런 이유로 커널이 그런 확장 기능을 가진 툴체인을 가지고 만들어졌다는 | ||
58 | 것이 이해하기 어려울 수도 있고 게다가 불행하게도 그런 것을 정확하게 설명하는 | ||
59 | 어떤 참고문서도 있지 않다. 정보를 얻기 위해서는 gcc info (`info gcc`)페이지를 | ||
60 | 살펴보라. | ||
61 | |||
62 | 여러분은 기존의 개발 커뮤니티와 일하는 법을 배우려고 하고 있다는 것을 | ||
63 | 기억하라. 코딩, 스타일, 절차에 관한 훌륭한 표준을 가진 사람들이 모인 | ||
64 | 다양한 그룹이 있다. 이 표준들은 오랜동안 크고 지역적으로 분산된 팀들에 | ||
65 | 의해 가장 좋은 방법으로 일하기위하여 찾은 것을 기초로 만들어져왔다. | ||
66 | 그 표준들은 문서화가 잘 되어 있기 때문에 가능한한 미리 많은 표준들에 | ||
67 | 관하여 배우려고 시도하라. 다른 사람들은 여러분이나 여러분의 회사가 | ||
68 | 일하는 방식에 적응하는 것을 원하지는 않는다. | ||
69 | |||
70 | |||
71 | 법적 문제 | ||
72 | --------- | ||
73 | |||
74 | 리눅스 커널 소스 코드는 GPL로 배포(release)되었다. 소스트리의 메인 | ||
75 | 디렉토리에 있는 라이센스에 관하여 상세하게 쓰여 있는 COPYING이라는 | ||
76 | 파일을 봐라.여러분이 라이센스에 관한 더 깊은 문제를 가지고 있다면 | ||
77 | 리눅스 커널 메일링 리스트에 묻지말고 변호사와 연락하라. 메일링 | ||
78 | 리스트들에 있는 사람들은 변호사가 아니기 때문에 법적 문제에 관하여 | ||
79 | 그들의 말에 의지해서는 안된다. | ||
80 | |||
81 | GPL에 관한 잦은 질문들과 답변들은 다음을 참조하라. | ||
82 | http://www.gnu.org/licenses/gpl-faq.html | ||
83 | |||
84 | |||
85 | 문서 | ||
86 | ---- | ||
87 | |||
88 | 리눅스 커널 소스 트리는 커널 커뮤니티와 일하는 법을 배우기 위한 많은 | ||
89 | 귀중한 문서들을 가지고 있다. 새로운 기능들이 커널에 들어가게 될 때, | ||
90 | 그 기능을 어떻게 사용하는지에 관한 설명을 위하여 새로운 문서 파일을 | ||
91 | 추가하는 것을 권장한다. 커널이 유저스페이스로 노출하는 인터페이스를 | ||
92 | 변경하게 되면 변경을 설명하는 메뉴얼 페이지들에 대한 패치나 정보를 | ||
93 | mtk-manpages@gmx.net의 메인트너에게 보낼 것을 권장한다. | ||
94 | |||
95 | 다음은 커널 소스 트리에 있는 읽어야 할 파일들의 리스트이다. | ||
96 | README | ||
97 | 이 파일은 리눅스 커널에 관하여 간단한 배경 설명과 커널을 설정하고 | ||
98 | 빌드하기 위해 필요한 것을 설명한다. 커널에 입문하는 사람들은 여기서 | ||
99 | 시작해야 한다. | ||
100 | |||
101 | Documentation/Changes | ||
102 | 이 파일은 커널을 성공적으로 빌드하고 실행시키기 위해 필요한 다양한 | ||
103 | 소프트웨어 패키지들의 최소 버젼을 나열한다. | ||
104 | |||
105 | Documentation/CodingStyle | ||
106 | 이 문서는 리눅스 커널 코딩 스타일과 그렇게 한 몇몇 이유를 설명한다. | ||
107 | 모든 새로운 코드는 이 문서에 가이드라인들을 따라야 한다. 대부분의 | ||
108 | 메인트너들은 이 규칙을 따르는 패치들만을 받아들일 것이고 많은 사람들이 | ||
109 | 그 패치가 올바른 스타일일 경우만 코드를 검토할 것이다. | ||
110 | |||
111 | Documentation/SubmittingPatches | ||
112 | Documentation/SubmittingDrivers | ||
113 | 이 파일들은 성공적으로 패치를 만들고 보내는 법을 다음의 내용들로 | ||
114 | 굉장히 상세히 설명하고 있다(그러나 다음으로 한정되진 않는다). | ||
115 | - Email 내용들 | ||
116 | - Email 양식 | ||
117 | - 그것을 누구에게 보낼지 | ||
118 | 이러한 규칙들을 따르는 것이 성공을 보장하진 않는다(왜냐하면 모든 | ||
119 | 패치들은 내용과 스타일에 관하여 면밀히 검토되기 때문이다). | ||
120 | 그러나 규칙을 따르지 않는다면 거의 성공하지도 못할 것이다. | ||
121 | |||
122 | 올바른 패치들을 만드는 법에 관한 훌륭한 다른 문서들이 있다. | ||
123 | "The Perfect Patch" | ||
124 | http://www.zip.com.au/~akpm/linux/patches/stuff/tpp.txt | ||
125 | "Linux kernel patch submission format" | ||
126 | http://linux.yyz.us/patch-format.html | ||
127 | |||
128 | Documentation/stable_api_nonsense.txt | ||
129 | 이 문서는 의도적으로 커널이 변하지 않는 API를 갖지 않도록 결정한 | ||
130 | 이유를 설명하며 다음과 같은 것들을 포함한다. | ||
131 | - 서브시스템 shim-layer(호환성을 위해?) | ||
132 | - 운영 체제들 간의 드라이버 이식성 | ||
133 | - 커널 소스 트리내에 빠른 변화를 늦추는 것(또는 빠른 변화를 막는 것) | ||
134 | 이 문서는 리눅스 개발 철학을 이해하는데 필수적이며 다른 운영체제에서 | ||
135 | 리눅스로 옮겨오는 사람들에게는 매우 중요하다. | ||
136 | |||
137 | |||
138 | Documentation/SecurityBugs | ||
139 | 여러분들이 리눅스 커널의 보안 문제를 발견했다고 생각한다면 이 문서에 | ||
140 | 나온 단계에 따라서 커널 개발자들에게 알리고 그 문제를 해결할 수 있도록 | ||
141 | 도와 달라. | ||
142 | |||
143 | Documentation/ManagementStyle | ||
144 | 이 문서는 리눅스 커널 메인트너들이 어떻게 그들의 방법론의 정신을 | ||
145 | 어떻게 공유하고 운영하는지를 설명한다. 이것은 커널 개발에 입문하는 | ||
146 | 모든 사람들(또는 커널 개발에 작은 호기심이라도 있는 사람들)이 | ||
147 | 읽어야 할 중요한 문서이다. 왜냐하면 이 문서는 커널 메인트너들의 | ||
148 | 독특한 행동에 관하여 흔히 있는 오해들과 혼란들을 해소하고 있기 | ||
149 | 때문이다. | ||
150 | |||
151 | Documentation/stable_kernel_rules.txt | ||
152 | 이 문서는 안정적인 커널 배포가 이루어지는 규칙을 설명하고 있으며 | ||
153 | 여러분들이 이러한 배포들 중 하나에 변경을 하길 원한다면 | ||
154 | 무엇을 해야 하는지를 설명한다. | ||
155 | |||
156 | Documentation/kernel-docs.txt | ||
157 | 커널 개발에 관계된 외부 문서의 리스트이다. 커널 내의 포함된 문서들 | ||
158 | 중에 여러분이 찾고 싶은 문서를 발견하지 못할 경우 이 리스트를 | ||
159 | 살펴보라. | ||
160 | |||
161 | Documentation/applying-patches.txt | ||
162 | 패치가 무엇이며 그것을 커널의 다른 개발 브랜치들에 어떻게 | ||
163 | 적용하는지에 관하여 자세히 설명 하고 있는 좋은 입문서이다. | ||
164 | |||
165 | 커널은 소스 코드 그 자체에서 자동적으로 만들어질 수 있는 많은 문서들을 | ||
166 | 가지고 있다. 이것은 커널 내의 API에 대한 모든 설명, 그리고 락킹을 | ||
167 | 올바르게 처리하는 법에 관한 규칙을 포함하고 있다. 이 문서는 | ||
168 | Documentation/DocBook/ 디렉토리 내에서 만들어지며 PDF, Postscript, HTML, | ||
169 | 그리고 man 페이지들로 다음과 같이 실행하여 만들어 진다. | ||
170 | make pdfdocs | ||
171 | make psdocs | ||
172 | make htmldocs | ||
173 | make mandocs | ||
174 | 각각의 명령을 메인 커널 소스 디렉토리로부터 실행한다. | ||
175 | |||
176 | |||
177 | 커널 개발자가 되는 것 | ||
178 | --------------------- | ||
179 | |||
180 | 여러분이 리눅스 커널 개발에 관하여 아무것도 모른다면 Linux KernelNewbies | ||
181 | 프로젝트를 봐야 한다. | ||
182 | http://kernelnewbies.org | ||
183 | 그곳은 거의 모든 종류의 기본적인 커널 개발 질문들(질문하기 전에 먼저 | ||
184 | 아카이브를 찾아봐라. 과거에 이미 답변되었을 수도 있다)을 할수있는 도움이 | ||
185 | 될만한 메일링 리스트가 있다. 또한 실시간으로 질문 할수 있는 IRC 채널도 | ||
186 | 가지고 있으며 리눅스 커널 개발을 배우는 데 유용한 문서들을 보유하고 있다. | ||
187 | |||
188 | 웹사이트는 코드구성, 서브시스템들, 그리고 현재 프로젝트들 | ||
189 | (트리 내, 외부에 존재하는)에 관한 기본적인 정보들을 가지고 있다. 또한 | ||
190 | 그곳은 커널 컴파일이나 패치를 하는 법과 같은 기본적인 것들을 설명한다. | ||
191 | |||
192 | 여러분이 어디서 시작해야 할진 모르지만 커널 개발 커뮤니티에 참여할 수 | ||
193 | 있는 일들을 찾길 원한다면 리눅스 커널 Janitor 프로젝트를 살펴봐라. | ||
194 | http://janitor.kernelnewbies.org/ | ||
195 | 그곳은 시작하기에 아주 딱 좋은 곳이다. 그곳은 리눅스 커널 소스 트리내에 | ||
196 | 간단히 정리되고 수정될 수 있는 문제들에 관하여 설명한다. 여러분은 이 | ||
197 | 프로젝트를 대표하는 개발자들과 일하면서 자신의 패치를 리눅스 커널 트리에 | ||
198 | 반영하기 위한 기본적인 것들을 배우게 될것이며 여러분이 아직 아이디어를 | ||
199 | 가지고 있지 않다면 다음에 무엇을 해야할지에 관한 방향을 배울 수 있을 | ||
200 | 것이다. | ||
201 | |||
202 | 여러분들이 이미 커널 트리에 반영하길 원하는 코드 묶음을 가지고 있지만 | ||
203 | 올바른 포맷으로 포장하는데 도움이 필요하다면 그러한 문제를 돕기 위해 | ||
204 | 만들어진 kernel-mentors 프로젝트가 있다. 그곳은 메일링 리스트이며 | ||
205 | 다음에서 참조할 수 있다. | ||
206 | http://selenic.com/mailman/listinfo/kernel-mentors | ||
207 | |||
208 | 리눅스 커널 코드에 실제 변경을 하기 전에 반드시 그 코드가 어떻게 | ||
209 | 동작하는지 이해하고 있어야 한다. 코드를 분석하기 위하여 특정한 툴의 | ||
210 | 도움을 빌려서라도 코드를 직접 읽는 것보다 좋은 것은 없다(대부분의 | ||
211 | 자잘한 부분들은 잘 코멘트되어 있다). 그런 툴들 중에 특히 추천할만한 | ||
212 | 것은 Linux Cross-Reference project이며 그것은 자기 참조 방식이며 | ||
213 | 소스코드를 인덱스된 웹 페이지들의 형태로 보여준다. 최신의 멋진 커널 | ||
214 | 코드 저장소는 다음을 통하여 참조할 수 있다. | ||
215 | http://sosdg.org/~coywolf/lxr/ | ||
216 | |||
217 | |||
218 | 개발 프로세스 | ||
219 | ------------- | ||
220 | |||
221 | 리눅스 커널 개발 프로세스는 현재 몇몇 다른 메인 커널 "브랜치들"과 | ||
222 | 서브시스템에 특화된 커널 브랜치들로 구성된다. 몇몇 다른 메인 | ||
223 | 브랜치들은 다음과 같다. | ||
224 | - main 2.6.x 커널 트리 | ||
225 | - 2.6.x.y - 안정된 커널 트리 | ||
226 | - 2.6.x -git 커널 패치들 | ||
227 | - 2.6.x -mm 커널 패치들 | ||
228 | - 서브시스템을 위한 커널 트리들과 패치들 | ||
229 | |||
230 | 2.6.x 커널 트리 | ||
231 | --------------- | ||
232 | |||
233 | 2.6.x 커널들은 Linux Torvalds가 관리하며 kernel.org의 pub/linux/kernel/v2.6/ | ||
234 | 디렉토리에서 참조될 수 있다.개발 프로세스는 다음과 같다. | ||
235 | - 새로운 커널이 배포되자마자 2주의 시간이 주어진다. 이 기간동은 | ||
236 | 메인트너들은 큰 diff들을 Linus에게 제출할 수 있다. 대개 이 패치들은 | ||
237 | 몇 주 동안 -mm 커널내에 이미 있었던 것들이다. 큰 변경들을 제출하는 데 | ||
238 | 선호되는 방법은 git(커널의 소스 관리 툴, 더 많은 정보들은 http://git.or.cz/ | ||
239 | 에서 참조할 수 있다)를 사용하는 것이지만 순수한 패치파일의 형식으로 보내도 | ||
240 | 것도 무관하다. | ||
241 | - 2주 후에 -rc1 커널이 배포되며 지금부터는 전체 커널의 안정성에 영향을 | ||
242 | 미칠수 있는 새로운 기능들을 포함하지 않는 패치들만을 추가될 수 있다. | ||
243 | 완전히 새로운 드라이버(혹은 파일시스템)는 -rc1 이후에만 받아들여진다는 | ||
244 | 것을 기억해라. 왜냐하면 변경이 자체내에서만 발생하고 추가된 코드가 | ||
245 | 드라이버 외부의 다른 부분에는 영향을 주지 않으므로 그런 변경은 | ||
246 | 퇴보(regression)를 일으킬 만한 위험을 가지고 있지 않기 때문이다. -rc1이 | ||
247 | 배포된 이후에 git를 사용하여 패치들을 Linus에게 보낼수 있지만 패치들은 | ||
248 | 공식적인 메일링 리스트로 보내서 검토를 받을 필요가 있다. | ||
249 | - 새로운 -rc는 Linus는 현재 git tree가 테스트 하기에 충분히 안정된 상태에 | ||
250 | 있다고 판단될 때마다 배포된다. 목표는 새로운 -rc 커널을 매주 배포하는 | ||
251 | 것이다. | ||
252 | - 이러한 프로세스는 커널이 "준비"되었다고 여겨질때까지 계속된다. | ||
253 | 프로세스는 대체로 6주간 지속된다. | ||
254 | - 각 -rc 배포에 있는 알려진 퇴보의 목록들은 다음 URI에 남겨진다. | ||
255 | http://kernelnewbies.org/known_regressions | ||
256 | |||
257 | 커널 배포에 있어서 언급할만한 가치가 있는 리눅스 커널 메일링 리스트의 | ||
258 | Andrew Morton의 글이 있다. | ||
259 | "커널이 언제 배포될지는 아무로 모른다. 왜냐하면 배포는 알려진 | ||
260 | 버그의 상황에 따라 배포되는 것이지 미리정해 놓은 시간에 따라 | ||
261 | 배포되는 것은 아니기 때문이다." | ||
262 | |||
263 | 2.6.x.y - 안정 커널 트리 | ||
264 | ------------------------ | ||
265 | |||
266 | 4 자리 숫자로 이루어진 버젼의 커널들은 -stable 커널들이다. 그것들은 2.6.x | ||
267 | 커널에서 발견된 큰 퇴보들이나 보안 문제들 중 비교적 작고 중요한 수정들을 | ||
268 | 포함한다. | ||
269 | |||
270 | 이것은 가장 최근의 안정적인 커널을 원하는 사용자에게 추천되는 브랜치이며, | ||
271 | 개발/실험적 버젼을 테스트하는 것을 돕는데는 별로 관심이 없다. | ||
272 | |||
273 | 어떤 2.6.x.y 커널도 사용가능하지 않다면 그때는 가장 높은 숫자의 2.6.x | ||
274 | 커널이 현재의 안정 커널이다. | ||
275 | |||
276 | 2.6.x.y는 "stable" 팀<stable@kernel.org>에 의해 관리되며 거의 매번 격주로 | ||
277 | 배포된다. | ||
278 | |||
279 | 커널 트리 문서들 내에 Documentation/stable_kernel_rules.txt 파일은 어떤 | ||
280 | 종류의 변경들이 -stable 트리로 들어왔는지와 배포 프로세스가 어떻게 | ||
281 | 진행되는지를 설명한다. | ||
282 | |||
283 | |||
284 | 2.6.x -git 패치들 | ||
285 | ------------------ | ||
286 | git 저장소(그러므로 -git이라는 이름이 붙음)에는 날마다 관리되는 Linus의 | ||
287 | 커널 트리의 snapshot 들이 있다. 이 패치들은 일반적으로 날마다 배포되며 | ||
288 | Linus의 트리의 현재 상태를 나타낸다. 이 패치들은 정상적인지 조금도 | ||
289 | 살펴보지 않고 자동적으로 생성된 것이므로 -rc 커널들 보다도 더 실험적이다. | ||
290 | |||
291 | 2.6.x -mm 커널 패치들 | ||
292 | --------------------- | ||
293 | Andrew Morton에 의해 배포된 실험적인 커널 패치들이다. Andrew는 모든 다른 | ||
294 | 서브시스템 커널 트리와 패치들을 가져와서 리눅스 커널 메일링 리스트로 | ||
295 | 온 많은 패치들과 한데 묶는다. 이 트리는 새로운 기능들과 패치들을 위한 | ||
296 | 장소를 제공하는 역할을 한다. 하나의 패치가 -mm에 한동안 있으면서 그 가치가 | ||
297 | 증명되게 되면 Andrew나 서브시스템 메인트너는 그것을 메인라인에 포함시키기 | ||
298 | 위하여 Linus에게 보낸다. | ||
299 | |||
300 | 커널 트리에 포함하고 싶은 모든 새로운 패치들은 Linus에게 보내지기 전에 | ||
301 | -mm 트리에서 테스트를 하는 것을 적극 추천한다. | ||
302 | |||
303 | 이 커널들은 안정되게 사용할 시스템에서에 실행하는 것은 적합하지 않으며 | ||
304 | 다른 브랜치들의 어떤 것들보다 위험하다. | ||
305 | |||
306 | 여러분이 커널 개발 프로세스를 돕길 원한다면 이 커널 배포들을 사용하고 | ||
307 | 테스트한 후 어떤 문제를 발견하거나 또는 모든 것이 잘 동작한다면 리눅스 | ||
308 | 커널 메일링 리스트로 피드백을 해달라. | ||
309 | |||
310 | 이 커널들은 일반적으로 모든 다른 실험적인 패치들과 배포될 당시의 | ||
311 | 사용가능한 메인라인 -git 커널들의 몇몇 변경을 포함한다. | ||
312 | |||
313 | -mm 커널들은 정해진 일정대로 배포되지 않는다. 하지만 대개 몇몇 -mm 커널들은 | ||
314 | 각 -rc 커널(1부터 3이 흔함) 사이에서 배포된다. | ||
315 | |||
316 | 서브시스템 커널 트리들과 패치들 | ||
317 | ------------------------------- | ||
318 | 많은 다른 커널 서브시스템 개발자들은 커널의 다른 부분들에서 무슨 일이 | ||
319 | 일어나고 있는지를 볼수 있도록 그들의 개발 트리를 공개한다. 이 트리들은 | ||
320 | 위에서 설명하였던 것 처럼 -mm 커널 배포들로 합쳐진다. | ||
321 | |||
322 | 다음은 활용가능한 커널 트리들을 나열한다. | ||
323 | git trees: | ||
324 | - Kbuild development tree, Sam Ravnborg < sam@ravnborg.org> | ||
325 | git.kernel.org:/pub/scm/linux/kernel/git/sam/kbuild.git | ||
326 | |||
327 | - ACPI development tree, Len Brown <len.brown@intel.com > | ||
328 | git.kernel.org:/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6.git | ||
329 | |||
330 | - Block development tree, Jens Axboe <axboe@suse.de> | ||
331 | git.kernel.org:/pub/scm/linux/kernel/git/axboe/linux-2.6-block.git | ||
332 | |||
333 | - DRM development tree, Dave Airlie <airlied@linux.ie> | ||
334 | git.kernel.org:/pub/scm/linux/kernel/git/airlied/drm-2.6.git | ||
335 | |||
336 | - ia64 development tree, Tony Luck < tony.luck@intel.com> | ||
337 | git.kernel.org:/pub/scm/linux/kernel/git/aegl/linux-2.6.git | ||
338 | |||
339 | - infiniband, Roland Dreier <rolandd@cisco.com > | ||
340 | git.kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git | ||
341 | |||
342 | - libata, Jeff Garzik <jgarzik@pobox.com> | ||
343 | git.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev.git | ||
344 | |||
345 | - network drivers, Jeff Garzik <jgarzik@pobox.com> | ||
346 | git.kernel.org:/pub/scm/linux/kernel/git/jgarzik/netdev-2.6.git | ||
347 | |||
348 | - pcmcia, Dominik Brodowski < linux@dominikbrodowski.net> | ||
349 | git.kernel.org:/pub/scm/linux/kernel/git/brodo/pcmcia-2.6.git | ||
350 | |||
351 | - SCSI, James Bottomley < James.Bottomley@SteelEye.com> | ||
352 | git.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6.git | ||
353 | |||
354 | quilt trees: | ||
355 | - USB, PCI, Driver Core, and I2C, Greg Kroah-Hartman < gregkh@suse.de> | ||
356 | kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/ | ||
357 | - x86-64, partly i386, Andi Kleen < ak@suse.de> | ||
358 | ftp.firstfloor.org:/pub/ak/x86_64/quilt/ | ||
359 | |||
360 | 다른 커널 트리들은 http://kernel.org/git와 MAINTAINERS 파일에서 참조할 수 | ||
361 | 있다. | ||
362 | |||
363 | 버그 보고 | ||
364 | --------- | ||
365 | bugzilla.kernel.org는 리눅스 커널 개발자들이 커널의 버그를 추적하는 곳이다. | ||
366 | 사용자들은 발견한 모든 버그들을 보고하기 위하여 이 툴을 사용할 것을 권장한다. | ||
367 | kernel bugzilla를 사용하는 자세한 방법은 다음을 참조하라. | ||
368 | http://test.kernel.org/bugzilla/faq.html | ||
369 | |||
370 | 메인 커널 소스 디렉토리에 있는 REPORTING-BUGS 파일은 커널 버그일 것 같은 | ||
371 | 것을 보고하는는 법에 관한 좋은 템플릿이고 문제를 추적하기 위해서 커널 | ||
372 | 개발자들이 필요로 하는 정보가 무엇들인지를 상세히 설명하고 있다. | ||
373 | |||
374 | |||
375 | 버그 리포트들의 관리 | ||
376 | -------------------- | ||
377 | |||
378 | 여러분의 해킹 기술을 연습하는 가장 좋은 방법 중의 하는 다른 사람들이 | ||
379 | 보고한 버그들을 수정하는 것이다. 여러분은 커널을 더욱 안정화시키는데 | ||
380 | 도움을 줄 뿐만이 아니라 실제있는 문제들을 수정하는 법을 배우게 되고 | ||
381 | 그와 함께 여러분들의 기술은 향상될 것이며 다른 개발자들이 여러분의 | ||
382 | 존재에 대해 알게 될 것이다. 버그를 수정하는 것은 개발자들 사이에서 | ||
383 | 점수를 얻을 수 있는 가장 좋은 방법중의 하나이다. 왜냐하면 많은 사람들은 | ||
384 | 다른 사람들의 버그들을 수정하기 위하여 시간을 낭비하지 않기 때문이다. | ||
385 | |||
386 | 이미 보고된 버그 리포트들을 가지고 작업하기 위해서 http://bugzilla.kernelorg를 | ||
387 | 참조하라. 여러분이 앞으로 생겨날 버그 리포트들의 조언자가 되길 원한다면 | ||
388 | bugme-new 메일링 리스트나(새로운 버그 리포트들만이 이곳에서 메일로 전해진다) | ||
389 | bugme-janitor 메일링 리스트(bugzilla에 모든 변화들이 여기서 메일로 전해진다) | ||
390 | 에 등록하면 된다. | ||
391 | |||
392 | http://lists.osdl.org/mailman/listinfo/bugme-new | ||
393 | http://lists.osdl.org/mailman/listinfo/bugme-janitors | ||
394 | |||
395 | |||
396 | |||
397 | 메일링 리스트들 | ||
398 | --------------- | ||
399 | |||
400 | 위의 몇몇 문서들이 설명하였지만 핵심 커널 개발자들의 대다수는 | ||
401 | 리눅스 커널 메일링 리스트에 참여하고 있다. 리스트에 등록하고 해지하는 | ||
402 | 방법에 관한 자세한 사항은 다음에서 참조할 수 있다. | ||
403 | http://vger.kernel.org/vger-lists.html#linux-kernel | ||
404 | 웹상의 많은 다른 곳에도 메일링 리스트의 아카이브들이 있다. | ||
405 | 이러한 아카이브들을 찾으려면 검색 엔진을 사용하라. 예를 들어: | ||
406 | http://dir.gmane.org/gmane.linux.kernel | ||
407 | 여러분이 새로운 문제에 관해 리스트에 올리기 전에 말하고 싶은 주제에 대한 | ||
408 | 것을 아카이브에서 먼저 찾기를 강력히 권장한다. 이미 상세하게 토론된 많은 | ||
409 | 것들이 메일링 리스트의 아카이브에 기록되어 있다. | ||
410 | |||
411 | 각각의 커널 서브시스템들의 대부분은 자신들의 개발에 관한 노력들로 이루어진 | ||
412 | 분리된 메일링 리스트를 따로 가지고 있다. 다른 그룹들이 무슨 리스트를 가지고 | ||
413 | 있는지는 MAINTAINERS 파일을 참조하라. | ||
414 | |||
415 | 많은 리스트들은 kernel.org에서 호스트되고 있다. 그 정보들은 다음에서 참조될 수 있다. | ||
416 | http://vger.kernel.org/vger-lists.html | ||
417 | |||
418 | 리스트들을 사용할 때는 올바른 예절을 따를 것을 유념해라. | ||
419 | 대단하진 않지만 다음 URL은 리스트(혹은 모든 리스트)와 대화하는 몇몇 간단한 | ||
420 | 가이드라인을 가지고 있다. | ||
421 | http://www.albion.com/netiquette/ | ||
422 | |||
423 | 여러 사람들이 여러분의 메일에 응답한다면 CC: 즉 수신 리스트는 꽤 커지게 | ||
424 | 될 것이다. 아무 이유없이 CC에서 어떤 사람도 제거하거나 리스트 주소로만 | ||
425 | 회신하지 마라. 메일을 보낸 사람으로서 하나를 받고 리스트로부터 또 | ||
426 | 하나를 받아 두번 받는 것에 익숙하여 있으니 mail-header를 조작하려고 하지 | ||
427 | 말아라. 사람들은 그런 것을 좋아하지 않을 것이다. | ||
428 | |||
429 | 여러분의 회신의 문맥을 원래대로 유지해야 한다. 여러분들의 회신의 윗부분에 | ||
430 | "John 커널해커는 작성했다...."를 유지하며 여러분들의 의견을 그 메일의 윗부분에 | ||
431 | 작성하지 말고 각 인용한 단락들 사이에 넣어라. | ||
432 | |||
433 | 여러분들이 패치들을 메일에 넣는다면 그것들은 Documentation/SubmittingPatches에 | ||
434 | 나와있는데로 명백히(plain) 읽을 수 있는 텍스트여야 한다. 커널 개발자들은 | ||
435 | 첨부파일이나 압축된 패치들을 원하지 않는다. 그들은 여러분들의 패치의 | ||
436 | 각 라인 단위로 코멘트를 하길 원하며 압축하거나 첨부하지 않고 보내는 것이 | ||
437 | 그렇게 할 수 있는 유일한 방법이다. 여러분들이 사용하는 메일 프로그램이 | ||
438 | 스페이스나 탭 문자들을 조작하지 않는지 확인하라. 가장 좋은 첫 테스트는 | ||
439 | 메일을 자신에게 보내보고 스스로 그 패치를 적용해보라. 그것이 동작하지 | ||
440 | 않는다면 여러분의 메일 프로그램을 고치던가 제대로 동작하는 프로그램으로 | ||
441 | 바꾸어라. | ||
442 | |||
443 | 무엇보다도 메일링 리스트의 다른 구독자들에게 보여주려 한다는 것을 기억하라. | ||
444 | |||
445 | |||
446 | 커뮤니티와 일하는 법 | ||
447 | -------------------- | ||
448 | |||
449 | 커널 커뮤니티의 목적은 가능한한 가장 좋은 커널을 제공하는 것이다. 여러분이 | ||
450 | 받아들여질 패치를 제출하게 되면 그 패치의 기술적인 이점으로 검토될 것이다. | ||
451 | 그럼 여러분들은 무엇을 기대하고 있어야 하는가? | ||
452 | - 비판 | ||
453 | - 의견 | ||
454 | - 변경을 위한 요구 | ||
455 | - 당위성을 위한 요구 | ||
456 | - 고요 | ||
457 | |||
458 | 기억하라. 이것들은 여러분의 패치가 커널로 들어가기 위한 과정이다. 여러분의 | ||
459 | 패치들은 비판과 다른 의견을 받을 수 있고 그것들을 기술적인 레벨로 평가하고 | ||
460 | 재작업하거나 또는 왜 수정하면 안되는지에 관하여 명료하고 간결한 이유를 | ||
461 | 말할 수 있어야 한다. 여러분이 제출한 것에 어떤 응답도 있지 않다면 몇 일을 | ||
462 | 기다려보고 다시 시도해라. 때론 너무 많은 메일들 속에 묻혀버리기도 한다. | ||
463 | |||
464 | 여러분은 무엇을 해서는 안되는가? | ||
465 | - 여러분의 패치가 아무 질문 없이 받아들여지기를 기대하는 것 | ||
466 | - 방어적이 되는 것 | ||
467 | - 의견을 무시하는 것 | ||
468 | - 요청된 변경을 하지 않고 패치를 다시 제출하는 것 | ||
469 | |||
470 | 가능한한 가장 좋은 기술적인 해답을 찾고 있는 커뮤니티에서는 항상 | ||
471 | 어떤 패치가 얼마나 좋은지에 관하여 다른 의견들이 있을 수 있다. 여러분은 | ||
472 | 협조적이어야 하고 기꺼이 여러분의 생각을 커널 내에 맞추어야 한다. 아니면 | ||
473 | 적어도 여러분의 것이 가치있다는 것을 중명하여야 한다. 잘못된 것도 여러분이 | ||
474 | 올바른 방향의 해결책으로 이끌어갈 의지가 있다면 받아들여질 것이라는 점을 | ||
475 | 기억하라. | ||
476 | |||
477 | 여러분의 첫 패치에 여러분이 수정해야하는 십여개 정도의 회신이 오는 | ||
478 | 경우도 흔하다. 이것은 여러분의 패치가 받아들여지지 않을 것이라는 것을 | ||
479 | 의미하는 것이 아니고 개인적으로 여러분에게 감정이 있어서 그러는 것도 | ||
480 | 아니다. 간단히 여러분의 패치에 제기된 문제들을 수정하고 그것을 다시 | ||
481 | 보내라. | ||
482 | |||
483 | |||
484 | 커널 커뮤니티와 기업 조직간의 차이점 | ||
485 | ----------------------------------------------------------------- | ||
486 | 커널 커뮤니티는 가장 전통적인 회사의 개발 환경과는 다르다. 여기에 여러분들의 | ||
487 | 문제를 피하기 위한 목록이 있다. | ||
488 | 여러분들이 제안한 변경들에 관하여 말할 때 좋은 것들 : | ||
489 | - " 이것은 여러 문제들을 해겹합니다." | ||
490 | - "이것은 2000 라인의 코드를 제거합니다." | ||
491 | - "이것은 내가 말하려는 것에 관해 설명하는 패치입니다." | ||
492 | - "나는 5개의 다른 아키텍쳐에서 그것을 테스트했슴으로..." | ||
493 | - "여기에 일련의 작은 패치들이 있습음로..." | ||
494 | - "이것은 일반적인 머신에서 성능을 향상시키므로..." | ||
495 | |||
496 | 여러분들이 말할 때 피해야 할 좋지 않은 것들 : | ||
497 | - "우리를 그것을 AIT/ptx/Solaris에서 이러한 방법으로 했다. 그러므로 그것은 좋은 것임에 틀립없다..." | ||
498 | - "나는 20년동안 이것을 해왔다. 그러므로..." | ||
499 | - "이것은 돈을 벌기위해 나의 회사가 필요로 하는 것이다." | ||
500 | - "이것은 우리의 엔터프라이즈 상품 라인을 위한 것이다." | ||
501 | - "여기에 나의 생각을 말하고 있는 1000 페이지 설계 문서가 있다." | ||
502 | - "나는 6달동안 이것을 했으니..." | ||
503 | - "여기세 5000라인 짜리 패치가 있으니..." | ||
504 | - "나는 현재 뒤죽박죽인 것을 재작성했다. 그리고 여기에..." | ||
505 | - "나는 마감시한을 가지고 있으므로 이 패치는 지금 적용될 필요가 있다." | ||
506 | |||
507 | 커널 커뮤니티가 전통적인 소프트웨어 엔지니어링 개발 환경들과 | ||
508 | 또 다른 점은 얼굴을 보지 않고 일한다는 점이다. 이메일과 irc를 대화의 | ||
509 | 주요수단으로 사용하는 것의 한가지 장점은 성별이나 인종의 차별이 | ||
510 | 없다는 것이다. 리눅스 커널의 작업 환경에서는 단지 이메일 주소만 | ||
511 | 알수 있기 때문에 여성과 소수 민족들도 모두 받아들여진다. 국제적으로 | ||
512 | 일하게 되는 측면은 사람의 이름에 근거하여 성별을 추측할 수 없게 | ||
513 | 하기때문에 차별을 없애는 데 도움을 준다. Andrea라는 이름을 가진 남자와 | ||
514 | Pat이라는 이름을 가진 여자가 있을 수도 있는 것이다. 리눅스 커널에서 | ||
515 | 작업하며 생각을 표현해왔던 대부분의 여성들은 긍정적인 경험을 가지고 | ||
516 | 있다. | ||
517 | |||
518 | 언어 장벽은 영어에 익숙하지 않은 몇몇 사람들에게 문제가 될 수도 있다. | ||
519 | 언어의 훌륭한 구사는 메일링 리스트에서 올바르게 자신의 생각을 | ||
520 | 표현하기 위하여 필요하다. 그래서 여러분은 이메일을 보내기 전에 | ||
521 | 영어를 올바르게 사용하고 있는지를 체크하는 것이 바람직하다. | ||
522 | |||
523 | |||
524 | 여러분의 변경을 나누어라 | ||
525 | ------------------------ | ||
526 | |||
527 | 리눅스 커널 커뮤니티는 한꺼번에 굉장히 큰 코드의 묶음을 쉽게 | ||
528 | 받아들이지 않는다. 변경은 적절하게 소개되고, 검토되고, 각각의 | ||
529 | 부분으로 작게 나누어져야 한다. 이것은 회사에서 하는 것과는 정확히 | ||
530 | 반대되는 것이다. 여러분들의 제안은 개발 초기에 일찍이 소개되야 한다. | ||
531 | 그래서 여러분들은 자신이 하고 있는 것에 관하여 피드백을 받을 수 있게 | ||
532 | 된다. 커뮤니티가 여러분들이 커뮤니티와 함께 일하고 있다는 것을 | ||
533 | 느끼도록 만들고 커뮤니티가 여러분의 기능을 위한 쓰레기 장으로서 | ||
534 | 사용되지 않고 있다는 것을 느끼게 하자. 그러나 메일링 리스트에 한번에 | ||
535 | 50개의 이메일을 보내지는 말아라. 여러분들의 일련의 패치들은 항상 | ||
536 | 더 작아야 한다. | ||
537 | |||
538 | 패치를 나누는 이유는 다음과 같다. | ||
539 | |||
540 | 1) 작은 패치들은 여러분의 패치들이 적용될 수 있는 확률을 높여준다. | ||
541 | 왜냐하면 다른 사람들은 정확성을 검증하기 위하여 많은 시간과 노력을 | ||
542 | 들이기를 원하지 않는다. 5줄의 패치는 메인트너가 거의 몇 초간 힐끗 | ||
543 | 보면 적용될 수 있다. 그러나 500 줄의 패치는 정확성을 검토하기 위하여 | ||
544 | 몇시간이 걸릴 수도 있다(걸리는 시간은 패치의 크기 혹은 다른 것에 | ||
545 | 비례하여 기하급수적으로 늘어난다). | ||
546 | |||
547 | 패치를 작게 만드는 것은 무엇인가 잘못되었을 때 디버그하는 것을 | ||
548 | 쉽게 만든다. 즉, 그렇게 만드는 것은 매우 큰 패치를 적용한 후에 | ||
549 | 조사하는 것 보다 작은 패치를 적용한 후에 (그리고 몇몇의 것이 | ||
550 | 깨졌을 때) 하나씩 패치들을 제거해가며 디버그 하기 쉽도록 만들어 준다. | ||
551 | |||
552 | 2) 작은 패치들을 보내는 것뿐만 아니라 패치들을 제출하기전에 재작성하고 | ||
553 | 간단하게(혹은 간단한게 재배치하여) 하는 것도 중요하다. | ||
554 | |||
555 | 여기에 커널 개발자 Al Viro의 이야기가 있다. | ||
556 | "학생의 수학 숙제를 채점하는 선생님을 생각해보라. 선생님은 학생들이 | ||
557 | 답을 얻을때까지 겪은 시행착오를 보길 원하지 않는다. 선생님들은 | ||
558 | 간결하고 가장 뛰어난 답을 보길 원한다. 훌륭한 학생은 이것을 알고 | ||
559 | 마지막으로 답을 얻기 전 중간 과정들을 제출하진 않는다. | ||
560 | |||
561 | 커널 개발도 마찬가지이다. 메인트너들과 검토하는 사람들은 문제를 | ||
562 | 풀어나가는 과정속에 숨겨진 과정을 보길 원하진 않는다. 그들은 | ||
563 | 간결하고 멋진 답을 보길 원한다." | ||
564 | |||
565 | 커뮤니티와 함께 일하며 뛰어난 답을 찾고 여러분들의 완성되지 않은 일들 | ||
566 | 사이에 균형을 유지해야 하는 어려움이 있을 수 있다. 그러므로 프로세스의 | ||
567 | 초반에 여러분의 일을 향상시키기위한 피드백을 얻는 것 뿐만 아니라 | ||
568 | 여러분들의 변경들을 작은 묶음으로 유지해서 심지어는 여러분의 작업의 | ||
569 | 모든 부분이 지금은 포함될 준비가 되어있지 않지만 작은 부분은 이미 | ||
570 | 받아들여질 수 있도록 유지하는 것이 바람직하다. | ||
571 | |||
572 | 또한 완성되지 않았고 "나중에 수정될 것이다." 와 같은 것들은 포함하는 | ||
573 | 패치들은 받아들여지지 않을 것이라는 점을 유념하라. | ||
574 | |||
575 | 변경을 정당화해라 | ||
576 | ----------------- | ||
577 | |||
578 | 여러분들의 나누어진 패치들을 리눅스 커뮤니티가 왜 반영해야 하는지를 | ||
579 | 알도록 하는 것은 매우 중요하다. 새로운 기능들이 필요하고 유용하다는 | ||
580 | 것은 반드시 그에 맞는 이유가 있어야 한다. | ||
581 | |||
582 | |||
583 | 변경을 문서화해라 | ||
584 | ----------------- | ||
585 | |||
586 | 여러분이 패치를 보내려 할때는 여러분이 무엇을 말하려고 하는지를 충분히 | ||
587 | 생각하여 이메일을 작성해야 한다. 이 정보는 패치를 위한 ChangeLog가 될 | ||
588 | 것이다. 그리고 항상 그 내용을 보길 원하는 모든 사람들을 위해 보존될 | ||
589 | 것이다. 패치는 완벽하게 다음과 같은 내용들을 포함하여 설명해야 한다. | ||
590 | - 변경이 왜 필요한지 | ||
591 | - 패치에 관한 전체 설계 어프로치 | ||
592 | - 구현 상세들 | ||
593 | - 테스트 결과들 | ||
594 | |||
595 | 이것이 무엇인지 더 자세한 것을 알고 싶다면 다음 문서의 ChageLog 항을 봐라. | ||
596 | "The Perfect Patch" | ||
597 | http://www.zip.com.au/~akpm/linux/patches/stuff/tpp.txt | ||
598 | |||
599 | |||
600 | |||
601 | |||
602 | 이 모든 것을 하는 것은 매우 어려운 일이다. 완벽히 소화하는 데는 적어도 몇년이 | ||
603 | 걸릴 수도 있다. 많은 인내와 결의가 필요한 계속되는 개선의 과정이다. 그러나 | ||
604 | 가능한한 포기하지 말라. 많은 사람들은 이전부터 해왔던 것이고 그 사람들도 | ||
605 | 정확하게 여러분들이 지금 서 있는 그 곳부터 시작했었다. | ||
606 | |||
607 | |||
608 | |||
609 | |||
610 | ---------- | ||
611 | "개발 프로세스"(http://linux.tar.gz/articles/2.6-development_process) 섹션을 | ||
612 | 작성하는데 있어 참고할 문서를 사용하도록 허락해준 Paolo Ciarrocchi에게 | ||
613 | 감사한다. 여러분들이 말해야 할 것과 말해서는 안되는 것의 목록 중 일부를 제공해준 | ||
614 | Randy Dunlap과 Gerrit Huizenga에게 감사한다. 또한 검토와 의견 그리고 | ||
615 | 공헌을 아끼지 않은 Pat Mochel, Hanna Linder, Randy Dunlap, Kay Sievers, | ||
616 | Vojtech Pavlik, Jan Kara, Josh Boyer, Kees Cook, Andrew Morton, Andi Kleen, | ||
617 | Vadim Lobanov, Jesper Juhl, Adrian Bunk, Keri Harris, Frans Pop, | ||
618 | David A. Wheeler, Junio Hamano, Michael Kerrisk, and Alex Shepard에게도 감사를 전한다. | ||
619 | 그들의 도움이 없었다면 이 문서는 존재하지 않았을 것이다. | ||
620 | |||
621 | |||
622 | |||
623 | 메인트너: Greg Kroah-Hartman <greg@kroah.com> | ||
diff --git a/Documentation/lguest/lguest.c b/Documentation/lguest/lguest.c index f7918401a007..73c5f1f3d5d2 100644 --- a/Documentation/lguest/lguest.c +++ b/Documentation/lguest/lguest.c | |||
@@ -882,7 +882,7 @@ static u32 handle_block_output(int fd, const struct iovec *iov, | |||
882 | * of the block file (possibly extending it). */ | 882 | * of the block file (possibly extending it). */ |
883 | if (off + len > device_len) { | 883 | if (off + len > device_len) { |
884 | /* Trim it back to the correct length */ | 884 | /* Trim it back to the correct length */ |
885 | ftruncate(dev->fd, device_len); | 885 | ftruncate64(dev->fd, device_len); |
886 | /* Die, bad Guest, die. */ | 886 | /* Die, bad Guest, die. */ |
887 | errx(1, "Write past end %llu+%u", off, len); | 887 | errx(1, "Write past end %llu+%u", off, len); |
888 | } | 888 | } |
diff --git a/Documentation/lockstat.txt b/Documentation/lockstat.txt new file mode 100644 index 000000000000..4ba4664ce5c3 --- /dev/null +++ b/Documentation/lockstat.txt | |||
@@ -0,0 +1,120 @@ | |||
1 | |||
2 | LOCK STATISTICS | ||
3 | |||
4 | - WHAT | ||
5 | |||
6 | As the name suggests, it provides statistics on locks. | ||
7 | |||
8 | - WHY | ||
9 | |||
10 | Because things like lock contention can severely impact performance. | ||
11 | |||
12 | - HOW | ||
13 | |||
14 | Lockdep already has hooks in the lock functions and maps lock instances to | ||
15 | lock classes. We build on that. The graph below shows the relation between | ||
16 | the lock functions and the various hooks therein. | ||
17 | |||
18 | __acquire | ||
19 | | | ||
20 | lock _____ | ||
21 | | \ | ||
22 | | __contended | ||
23 | | | | ||
24 | | <wait> | ||
25 | | _______/ | ||
26 | |/ | ||
27 | | | ||
28 | __acquired | ||
29 | | | ||
30 | . | ||
31 | <hold> | ||
32 | . | ||
33 | | | ||
34 | __release | ||
35 | | | ||
36 | unlock | ||
37 | |||
38 | lock, unlock - the regular lock functions | ||
39 | __* - the hooks | ||
40 | <> - states | ||
41 | |||
42 | With these hooks we provide the following statistics: | ||
43 | |||
44 | con-bounces - number of lock contention that involved x-cpu data | ||
45 | contentions - number of lock acquisitions that had to wait | ||
46 | wait time min - shortest (non-0) time we ever had to wait for a lock | ||
47 | max - longest time we ever had to wait for a lock | ||
48 | total - total time we spend waiting on this lock | ||
49 | acq-bounces - number of lock acquisitions that involved x-cpu data | ||
50 | acquisitions - number of times we took the lock | ||
51 | hold time min - shortest (non-0) time we ever held the lock | ||
52 | max - longest time we ever held the lock | ||
53 | total - total time this lock was held | ||
54 | |||
55 | From these number various other statistics can be derived, such as: | ||
56 | |||
57 | hold time average = hold time total / acquisitions | ||
58 | |||
59 | These numbers are gathered per lock class, per read/write state (when | ||
60 | applicable). | ||
61 | |||
62 | It also tracks 4 contention points per class. A contention point is a call site | ||
63 | that had to wait on lock acquisition. | ||
64 | |||
65 | - USAGE | ||
66 | |||
67 | Look at the current lock statistics: | ||
68 | |||
69 | ( line numbers not part of actual output, done for clarity in the explanation | ||
70 | below ) | ||
71 | |||
72 | # less /proc/lock_stat | ||
73 | |||
74 | 01 lock_stat version 0.2 | ||
75 | 02 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
76 | 03 class name con-bounces contentions waittime-min waittime-max waittime-total acq-bounces acquisitions holdtime-min holdtime-max holdtime-total | ||
77 | 04 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ||
78 | 05 | ||
79 | 06 &inode->i_data.tree_lock-W: 15 21657 0.18 1093295.30 11547131054.85 58 10415 0.16 87.51 6387.60 | ||
80 | 07 &inode->i_data.tree_lock-R: 0 0 0.00 0.00 0.00 23302 231198 0.25 8.45 98023.38 | ||
81 | 08 -------------------------- | ||
82 | 09 &inode->i_data.tree_lock 0 [<ffffffff8027c08f>] add_to_page_cache+0x5f/0x190 | ||
83 | 10 | ||
84 | 11 ............................................................................................................................................................................................... | ||
85 | 12 | ||
86 | 13 dcache_lock: 1037 1161 0.38 45.32 774.51 6611 243371 0.15 306.48 77387.24 | ||
87 | 14 ----------- | ||
88 | 15 dcache_lock 180 [<ffffffff802c0d7e>] sys_getcwd+0x11e/0x230 | ||
89 | 16 dcache_lock 165 [<ffffffff802c002a>] d_alloc+0x15a/0x210 | ||
90 | 17 dcache_lock 33 [<ffffffff8035818d>] _atomic_dec_and_lock+0x4d/0x70 | ||
91 | 18 dcache_lock 1 [<ffffffff802beef8>] shrink_dcache_parent+0x18/0x130 | ||
92 | |||
93 | This excerpt shows the first two lock class statistics. Line 01 shows the | ||
94 | output version - each time the format changes this will be updated. Line 02-04 | ||
95 | show the header with column descriptions. Lines 05-10 and 13-18 show the actual | ||
96 | statistics. These statistics come in two parts; the actual stats separated by a | ||
97 | short separator (line 08, 14) from the contention points. | ||
98 | |||
99 | The first lock (05-10) is a read/write lock, and shows two lines above the | ||
100 | short separator. The contention points don't match the column descriptors, | ||
101 | they have two: contentions and [<IP>] symbol. | ||
102 | |||
103 | |||
104 | View the top contending locks: | ||
105 | |||
106 | # grep : /proc/lock_stat | head | ||
107 | &inode->i_data.tree_lock-W: 15 21657 0.18 1093295.30 11547131054.85 58 10415 0.16 87.51 6387.60 | ||
108 | &inode->i_data.tree_lock-R: 0 0 0.00 0.00 0.00 23302 231198 0.25 8.45 98023.38 | ||
109 | dcache_lock: 1037 1161 0.38 45.32 774.51 6611 243371 0.15 306.48 77387.24 | ||
110 | &inode->i_mutex: 161 286 18446744073709 62882.54 1244614.55 3653 20598 18446744073709 62318.60 1693822.74 | ||
111 | &zone->lru_lock: 94 94 0.53 7.33 92.10 4366 32690 0.29 59.81 16350.06 | ||
112 | &inode->i_data.i_mmap_lock: 79 79 0.40 3.77 53.03 11779 87755 0.28 116.93 29898.44 | ||
113 | &q->__queue_lock: 48 50 0.52 31.62 86.31 774 13131 0.17 113.08 12277.52 | ||
114 | &rq->rq_lock_key: 43 47 0.74 68.50 170.63 3706 33929 0.22 107.99 17460.62 | ||
115 | &rq->rq_lock_key#2: 39 46 0.75 6.68 49.03 2979 32292 0.17 125.17 17137.63 | ||
116 | tasklist_lock-W: 15 15 1.45 10.87 32.70 1201 7390 0.58 62.55 13648.47 | ||
117 | |||
118 | Clear the statistics: | ||
119 | |||
120 | # echo 0 > /proc/lock_stat | ||
diff --git a/Documentation/networking/00-INDEX b/Documentation/networking/00-INDEX index d63f480afb74..153d84d281e6 100644 --- a/Documentation/networking/00-INDEX +++ b/Documentation/networking/00-INDEX | |||
@@ -96,6 +96,9 @@ routing.txt | |||
96 | - the new routing mechanism | 96 | - the new routing mechanism |
97 | shaper.txt | 97 | shaper.txt |
98 | - info on the module that can shape/limit transmitted traffic. | 98 | - info on the module that can shape/limit transmitted traffic. |
99 | sk98lin.txt | ||
100 | - Marvell Yukon Chipset / SysKonnect SK-98xx compliant Gigabit | ||
101 | Ethernet Adapter family driver info | ||
99 | skfp.txt | 102 | skfp.txt |
100 | - SysKonnect FDDI (SK-5xxx, Compaq Netelligent) driver info. | 103 | - SysKonnect FDDI (SK-5xxx, Compaq Netelligent) driver info. |
101 | smc9.txt | 104 | smc9.txt |
diff --git a/Documentation/networking/multiqueue.txt b/Documentation/networking/multiqueue.txt index 00b60cce2224..ea5a42e8f79f 100644 --- a/Documentation/networking/multiqueue.txt +++ b/Documentation/networking/multiqueue.txt | |||
@@ -58,9 +58,13 @@ software, so it's a straight round-robin qdisc. It uses the same syntax and | |||
58 | classification priomap that sch_prio uses, so it should be intuitive to | 58 | classification priomap that sch_prio uses, so it should be intuitive to |
59 | configure for people who've used sch_prio. | 59 | configure for people who've used sch_prio. |
60 | 60 | ||
61 | The PRIO qdisc naturally plugs into a multiqueue device. If PRIO has been | 61 | In order to utilitize the multiqueue features of the qdiscs, the network |
62 | built with NET_SCH_PRIO_MQ, then upon load, it will make sure the number of | 62 | device layer needs to enable multiple queue support. This can be done by |
63 | bands requested is equal to the number of queues on the hardware. If they | 63 | selecting NETDEVICES_MULTIQUEUE under Drivers. |
64 | |||
65 | The PRIO qdisc naturally plugs into a multiqueue device. If | ||
66 | NETDEVICES_MULTIQUEUE is selected, then on qdisc load, the number of | ||
67 | bands requested is compared to the number of queues on the hardware. If they | ||
64 | are equal, it sets a one-to-one mapping up between the queues and bands. If | 68 | are equal, it sets a one-to-one mapping up between the queues and bands. If |
65 | they're not equal, it will not load the qdisc. This is the same behavior | 69 | they're not equal, it will not load the qdisc. This is the same behavior |
66 | for RR. Once the association is made, any skb that is classified will have | 70 | for RR. Once the association is made, any skb that is classified will have |
diff --git a/Documentation/networking/sk98lin.txt b/Documentation/networking/sk98lin.txt new file mode 100644 index 000000000000..8590a954df1d --- /dev/null +++ b/Documentation/networking/sk98lin.txt | |||
@@ -0,0 +1,568 @@ | |||
1 | (C)Copyright 1999-2004 Marvell(R). | ||
2 | All rights reserved | ||
3 | =========================================================================== | ||
4 | |||
5 | sk98lin.txt created 13-Feb-2004 | ||
6 | |||
7 | Readme File for sk98lin v6.23 | ||
8 | Marvell Yukon/SysKonnect SK-98xx Gigabit Ethernet Adapter family driver for LINUX | ||
9 | |||
10 | This file contains | ||
11 | 1 Overview | ||
12 | 2 Required Files | ||
13 | 3 Installation | ||
14 | 3.1 Driver Installation | ||
15 | 3.2 Inclusion of adapter at system start | ||
16 | 4 Driver Parameters | ||
17 | 4.1 Per-Port Parameters | ||
18 | 4.2 Adapter Parameters | ||
19 | 5 Large Frame Support | ||
20 | 6 VLAN and Link Aggregation Support (IEEE 802.1, 802.1q, 802.3ad) | ||
21 | 7 Troubleshooting | ||
22 | |||
23 | =========================================================================== | ||
24 | |||
25 | |||
26 | 1 Overview | ||
27 | =========== | ||
28 | |||
29 | The sk98lin driver supports the Marvell Yukon and SysKonnect | ||
30 | SK-98xx/SK-95xx compliant Gigabit Ethernet Adapter on Linux. It has | ||
31 | been tested with Linux on Intel/x86 machines. | ||
32 | *** | ||
33 | |||
34 | |||
35 | 2 Required Files | ||
36 | ================= | ||
37 | |||
38 | The linux kernel source. | ||
39 | No additional files required. | ||
40 | *** | ||
41 | |||
42 | |||
43 | 3 Installation | ||
44 | =============== | ||
45 | |||
46 | It is recommended to download the latest version of the driver from the | ||
47 | SysKonnect web site www.syskonnect.com. If you have downloaded the latest | ||
48 | driver, the Linux kernel has to be patched before the driver can be | ||
49 | installed. For details on how to patch a Linux kernel, refer to the | ||
50 | patch.txt file. | ||
51 | |||
52 | 3.1 Driver Installation | ||
53 | ------------------------ | ||
54 | |||
55 | The following steps describe the actions that are required to install | ||
56 | the driver and to start it manually. These steps should be carried | ||
57 | out for the initial driver setup. Once confirmed to be ok, they can | ||
58 | be included in the system start. | ||
59 | |||
60 | NOTE 1: To perform the following tasks you need 'root' access. | ||
61 | |||
62 | NOTE 2: In case of problems, please read the section "Troubleshooting" | ||
63 | below. | ||
64 | |||
65 | The driver can either be integrated into the kernel or it can be compiled | ||
66 | as a module. Select the appropriate option during the kernel | ||
67 | configuration. | ||
68 | |||
69 | Compile/use the driver as a module | ||
70 | ---------------------------------- | ||
71 | To compile the driver, go to the directory /usr/src/linux and | ||
72 | execute the command "make menuconfig" or "make xconfig" and proceed as | ||
73 | follows: | ||
74 | |||
75 | To integrate the driver permanently into the kernel, proceed as follows: | ||
76 | |||
77 | 1. Select the menu "Network device support" and then "Ethernet(1000Mbit)" | ||
78 | 2. Mark "Marvell Yukon Chipset / SysKonnect SK-98xx family support" | ||
79 | with (*) | ||
80 | 3. Build a new kernel when the configuration of the above options is | ||
81 | finished. | ||
82 | 4. Install the new kernel. | ||
83 | 5. Reboot your system. | ||
84 | |||
85 | To use the driver as a module, proceed as follows: | ||
86 | |||
87 | 1. Enable 'loadable module support' in the kernel. | ||
88 | 2. For automatic driver start, enable the 'Kernel module loader'. | ||
89 | 3. Select the menu "Network device support" and then "Ethernet(1000Mbit)" | ||
90 | 4. Mark "Marvell Yukon Chipset / SysKonnect SK-98xx family support" | ||
91 | with (M) | ||
92 | 5. Execute the command "make modules". | ||
93 | 6. Execute the command "make modules_install". | ||
94 | The appropriate modules will be installed. | ||
95 | 7. Reboot your system. | ||
96 | |||
97 | |||
98 | Load the module manually | ||
99 | ------------------------ | ||
100 | To load the module manually, proceed as follows: | ||
101 | |||
102 | 1. Enter "modprobe sk98lin". | ||
103 | 2. If a Marvell Yukon or SysKonnect SK-98xx adapter is installed in | ||
104 | your computer and you have a /proc file system, execute the command: | ||
105 | "ls /proc/net/sk98lin/" | ||
106 | This should produce an output containing a line with the following | ||
107 | format: | ||
108 | eth0 eth1 ... | ||
109 | which indicates that your adapter has been found and initialized. | ||
110 | |||
111 | NOTE 1: If you have more than one Marvell Yukon or SysKonnect SK-98xx | ||
112 | adapter installed, the adapters will be listed as 'eth0', | ||
113 | 'eth1', 'eth2', etc. | ||
114 | For each adapter, repeat steps 3 and 4 below. | ||
115 | |||
116 | NOTE 2: If you have other Ethernet adapters installed, your Marvell | ||
117 | Yukon or SysKonnect SK-98xx adapter will be mapped to the | ||
118 | next available number, e.g. 'eth1'. The mapping is executed | ||
119 | automatically. | ||
120 | The module installation message (displayed either in a system | ||
121 | log file or on the console) prints a line for each adapter | ||
122 | found containing the corresponding 'ethX'. | ||
123 | |||
124 | 3. Select an IP address and assign it to the respective adapter by | ||
125 | entering: | ||
126 | ifconfig eth0 <ip-address> | ||
127 | With this command, the adapter is connected to the Ethernet. | ||
128 | |||
129 | SK-98xx Gigabit Ethernet Server Adapters: The yellow LED on the adapter | ||
130 | is now active, the link status LED of the primary port is active and | ||
131 | the link status LED of the secondary port (on dual port adapters) is | ||
132 | blinking (if the ports are connected to a switch or hub). | ||
133 | SK-98xx V2.0 Gigabit Ethernet Adapters: The link status LED is active. | ||
134 | In addition, you will receive a status message on the console stating | ||
135 | "ethX: network connection up using port Y" and showing the selected | ||
136 | connection parameters (x stands for the ethernet device number | ||
137 | (0,1,2, etc), y stands for the port name (A or B)). | ||
138 | |||
139 | NOTE: If you are in doubt about IP addresses, ask your network | ||
140 | administrator for assistance. | ||
141 | |||
142 | 4. Your adapter should now be fully operational. | ||
143 | Use 'ping <otherstation>' to verify the connection to other computers | ||
144 | on your network. | ||
145 | 5. To check the adapter configuration view /proc/net/sk98lin/[devicename]. | ||
146 | For example by executing: | ||
147 | "cat /proc/net/sk98lin/eth0" | ||
148 | |||
149 | Unload the module | ||
150 | ----------------- | ||
151 | To stop and unload the driver modules, proceed as follows: | ||
152 | |||
153 | 1. Execute the command "ifconfig eth0 down". | ||
154 | 2. Execute the command "rmmod sk98lin". | ||
155 | |||
156 | 3.2 Inclusion of adapter at system start | ||
157 | ----------------------------------------- | ||
158 | |||
159 | Since a large number of different Linux distributions are | ||
160 | available, we are unable to describe a general installation procedure | ||
161 | for the driver module. | ||
162 | Because the driver is now integrated in the kernel, installation should | ||
163 | be easy, using the standard mechanism of your distribution. | ||
164 | Refer to the distribution's manual for installation of ethernet adapters. | ||
165 | |||
166 | *** | ||
167 | |||
168 | 4 Driver Parameters | ||
169 | ==================== | ||
170 | |||
171 | Parameters can be set at the command line after the module has been | ||
172 | loaded with the command 'modprobe'. | ||
173 | In some distributions, the configuration tools are able to pass parameters | ||
174 | to the driver module. | ||
175 | |||
176 | If you use the kernel module loader, you can set driver parameters | ||
177 | in the file /etc/modprobe.conf (or /etc/modules.conf in 2.4 or earlier). | ||
178 | To set the driver parameters in this file, proceed as follows: | ||
179 | |||
180 | 1. Insert a line of the form : | ||
181 | options sk98lin ... | ||
182 | For "...", the same syntax is required as described for the command | ||
183 | line parameters of modprobe below. | ||
184 | 2. To activate the new parameters, either reboot your computer | ||
185 | or | ||
186 | unload and reload the driver. | ||
187 | The syntax of the driver parameters is: | ||
188 | |||
189 | modprobe sk98lin parameter=value1[,value2[,value3...]] | ||
190 | |||
191 | where value1 refers to the first adapter, value2 to the second etc. | ||
192 | |||
193 | NOTE: All parameters are case sensitive. Write them exactly as shown | ||
194 | below. | ||
195 | |||
196 | Example: | ||
197 | Suppose you have two adapters. You want to set auto-negotiation | ||
198 | on the first adapter to ON and on the second adapter to OFF. | ||
199 | You also want to set DuplexCapabilities on the first adapter | ||
200 | to FULL, and on the second adapter to HALF. | ||
201 | Then, you must enter: | ||
202 | |||
203 | modprobe sk98lin AutoNeg_A=On,Off DupCap_A=Full,Half | ||
204 | |||
205 | NOTE: The number of adapters that can be configured this way is | ||
206 | limited in the driver (file skge.c, constant SK_MAX_CARD_PARAM). | ||
207 | The current limit is 16. If you happen to install | ||
208 | more adapters, adjust this and recompile. | ||
209 | |||
210 | |||
211 | 4.1 Per-Port Parameters | ||
212 | ------------------------ | ||
213 | |||
214 | These settings are available for each port on the adapter. | ||
215 | In the following description, '?' stands for the port for | ||
216 | which you set the parameter (A or B). | ||
217 | |||
218 | Speed | ||
219 | ----- | ||
220 | Parameter: Speed_? | ||
221 | Values: 10, 100, 1000, Auto | ||
222 | Default: Auto | ||
223 | |||
224 | This parameter is used to set the speed capabilities. It is only valid | ||
225 | for the SK-98xx V2.0 copper adapters. | ||
226 | Usually, the speed is negotiated between the two ports during link | ||
227 | establishment. If this fails, a port can be forced to a specific setting | ||
228 | with this parameter. | ||
229 | |||
230 | Auto-Negotiation | ||
231 | ---------------- | ||
232 | Parameter: AutoNeg_? | ||
233 | Values: On, Off, Sense | ||
234 | Default: On | ||
235 | |||
236 | The "Sense"-mode automatically detects whether the link partner supports | ||
237 | auto-negotiation or not. | ||
238 | |||
239 | Duplex Capabilities | ||
240 | ------------------- | ||
241 | Parameter: DupCap_? | ||
242 | Values: Half, Full, Both | ||
243 | Default: Both | ||
244 | |||
245 | This parameters is only relevant if auto-negotiation for this port is | ||
246 | not set to "Sense". If auto-negotiation is set to "On", all three values | ||
247 | are possible. If it is set to "Off", only "Full" and "Half" are allowed. | ||
248 | This parameter is useful if your link partner does not support all | ||
249 | possible combinations. | ||
250 | |||
251 | Flow Control | ||
252 | ------------ | ||
253 | Parameter: FlowCtrl_? | ||
254 | Values: Sym, SymOrRem, LocSend, None | ||
255 | Default: SymOrRem | ||
256 | |||
257 | This parameter can be used to set the flow control capabilities the | ||
258 | port reports during auto-negotiation. It can be set for each port | ||
259 | individually. | ||
260 | Possible modes: | ||
261 | -- Sym = Symmetric: both link partners are allowed to send | ||
262 | PAUSE frames | ||
263 | -- SymOrRem = SymmetricOrRemote: both or only remote partner | ||
264 | are allowed to send PAUSE frames | ||
265 | -- LocSend = LocalSend: only local link partner is allowed | ||
266 | to send PAUSE frames | ||
267 | -- None = no link partner is allowed to send PAUSE frames | ||
268 | |||
269 | NOTE: This parameter is ignored if auto-negotiation is set to "Off". | ||
270 | |||
271 | Role in Master-Slave-Negotiation (1000Base-T only) | ||
272 | -------------------------------------------------- | ||
273 | Parameter: Role_? | ||
274 | Values: Auto, Master, Slave | ||
275 | Default: Auto | ||
276 | |||
277 | This parameter is only valid for the SK-9821 and SK-9822 adapters. | ||
278 | For two 1000Base-T ports to communicate, one must take the role of the | ||
279 | master (providing timing information), while the other must be the | ||
280 | slave. Usually, this is negotiated between the two ports during link | ||
281 | establishment. If this fails, a port can be forced to a specific setting | ||
282 | with this parameter. | ||
283 | |||
284 | |||
285 | 4.2 Adapter Parameters | ||
286 | ----------------------- | ||
287 | |||
288 | Connection Type (SK-98xx V2.0 copper adapters only) | ||
289 | --------------- | ||
290 | Parameter: ConType | ||
291 | Values: Auto, 100FD, 100HD, 10FD, 10HD | ||
292 | Default: Auto | ||
293 | |||
294 | The parameter 'ConType' is a combination of all five per-port parameters | ||
295 | within one single parameter. This simplifies the configuration of both ports | ||
296 | of an adapter card! The different values of this variable reflect the most | ||
297 | meaningful combinations of port parameters. | ||
298 | |||
299 | The following table shows the values of 'ConType' and the corresponding | ||
300 | combinations of the per-port parameters: | ||
301 | |||
302 | ConType | DupCap AutoNeg FlowCtrl Role Speed | ||
303 | ----------+------------------------------------------------------ | ||
304 | Auto | Both On SymOrRem Auto Auto | ||
305 | 100FD | Full Off None Auto (ignored) 100 | ||
306 | 100HD | Half Off None Auto (ignored) 100 | ||
307 | 10FD | Full Off None Auto (ignored) 10 | ||
308 | 10HD | Half Off None Auto (ignored) 10 | ||
309 | |||
310 | Stating any other port parameter together with this 'ConType' variable | ||
311 | will result in a merged configuration of those settings. This due to | ||
312 | the fact, that the per-port parameters (e.g. Speed_? ) have a higher | ||
313 | priority than the combined variable 'ConType'. | ||
314 | |||
315 | NOTE: This parameter is always used on both ports of the adapter card. | ||
316 | |||
317 | Interrupt Moderation | ||
318 | -------------------- | ||
319 | Parameter: Moderation | ||
320 | Values: None, Static, Dynamic | ||
321 | Default: None | ||
322 | |||
323 | Interrupt moderation is employed to limit the maximum number of interrupts | ||
324 | the driver has to serve. That is, one or more interrupts (which indicate any | ||
325 | transmit or receive packet to be processed) are queued until the driver | ||
326 | processes them. When queued interrupts are to be served, is determined by the | ||
327 | 'IntsPerSec' parameter, which is explained later below. | ||
328 | |||
329 | Possible modes: | ||
330 | |||
331 | -- None - No interrupt moderation is applied on the adapter card. | ||
332 | Therefore, each transmit or receive interrupt is served immediately | ||
333 | as soon as it appears on the interrupt line of the adapter card. | ||
334 | |||
335 | -- Static - Interrupt moderation is applied on the adapter card. | ||
336 | All transmit and receive interrupts are queued until a complete | ||
337 | moderation interval ends. If such a moderation interval ends, all | ||
338 | queued interrupts are processed in one big bunch without any delay. | ||
339 | The term 'static' reflects the fact, that interrupt moderation is | ||
340 | always enabled, regardless how much network load is currently | ||
341 | passing via a particular interface. In addition, the duration of | ||
342 | the moderation interval has a fixed length that never changes while | ||
343 | the driver is operational. | ||
344 | |||
345 | -- Dynamic - Interrupt moderation might be applied on the adapter card, | ||
346 | depending on the load of the system. If the driver detects that the | ||
347 | system load is too high, the driver tries to shield the system against | ||
348 | too much network load by enabling interrupt moderation. If - at a later | ||
349 | time - the CPU utilization decreases again (or if the network load is | ||
350 | negligible) the interrupt moderation will automatically be disabled. | ||
351 | |||
352 | Interrupt moderation should be used when the driver has to handle one or more | ||
353 | interfaces with a high network load, which - as a consequence - leads also to a | ||
354 | high CPU utilization. When moderation is applied in such high network load | ||
355 | situations, CPU load might be reduced by 20-30%. | ||
356 | |||
357 | NOTE: The drawback of using interrupt moderation is an increase of the round- | ||
358 | trip-time (RTT), due to the queueing and serving of interrupts at dedicated | ||
359 | moderation times. | ||
360 | |||
361 | Interrupts per second | ||
362 | --------------------- | ||
363 | Parameter: IntsPerSec | ||
364 | Values: 30...40000 (interrupts per second) | ||
365 | Default: 2000 | ||
366 | |||
367 | This parameter is only used if either static or dynamic interrupt moderation | ||
368 | is used on a network adapter card. Using this parameter if no moderation is | ||
369 | applied will lead to no action performed. | ||
370 | |||
371 | This parameter determines the length of any interrupt moderation interval. | ||
372 | Assuming that static interrupt moderation is to be used, an 'IntsPerSec' | ||
373 | parameter value of 2000 will lead to an interrupt moderation interval of | ||
374 | 500 microseconds. | ||
375 | |||
376 | NOTE: The duration of the moderation interval is to be chosen with care. | ||
377 | At first glance, selecting a very long duration (e.g. only 100 interrupts per | ||
378 | second) seems to be meaningful, but the increase of packet-processing delay | ||
379 | is tremendous. On the other hand, selecting a very short moderation time might | ||
380 | compensate the use of any moderation being applied. | ||
381 | |||
382 | |||
383 | Preferred Port | ||
384 | -------------- | ||
385 | Parameter: PrefPort | ||
386 | Values: A, B | ||
387 | Default: A | ||
388 | |||
389 | This is used to force the preferred port to A or B (on dual-port network | ||
390 | adapters). The preferred port is the one that is used if both are detected | ||
391 | as fully functional. | ||
392 | |||
393 | RLMT Mode (Redundant Link Management Technology) | ||
394 | ------------------------------------------------ | ||
395 | Parameter: RlmtMode | ||
396 | Values: CheckLinkState,CheckLocalPort, CheckSeg, DualNet | ||
397 | Default: CheckLinkState | ||
398 | |||
399 | RLMT monitors the status of the port. If the link of the active port | ||
400 | fails, RLMT switches immediately to the standby link. The virtual link is | ||
401 | maintained as long as at least one 'physical' link is up. | ||
402 | |||
403 | Possible modes: | ||
404 | |||
405 | -- CheckLinkState - Check link state only: RLMT uses the link state | ||
406 | reported by the adapter hardware for each individual port to | ||
407 | determine whether a port can be used for all network traffic or | ||
408 | not. | ||
409 | |||
410 | -- CheckLocalPort - In this mode, RLMT monitors the network path | ||
411 | between the two ports of an adapter by regularly exchanging packets | ||
412 | between them. This mode requires a network configuration in which | ||
413 | the two ports are able to "see" each other (i.e. there must not be | ||
414 | any router between the ports). | ||
415 | |||
416 | -- CheckSeg - Check local port and segmentation: This mode supports the | ||
417 | same functions as the CheckLocalPort mode and additionally checks | ||
418 | network segmentation between the ports. Therefore, this mode is only | ||
419 | to be used if Gigabit Ethernet switches are installed on the network | ||
420 | that have been configured to use the Spanning Tree protocol. | ||
421 | |||
422 | -- DualNet - In this mode, ports A and B are used as separate devices. | ||
423 | If you have a dual port adapter, port A will be configured as eth0 | ||
424 | and port B as eth1. Both ports can be used independently with | ||
425 | distinct IP addresses. The preferred port setting is not used. | ||
426 | RLMT is turned off. | ||
427 | |||
428 | NOTE: RLMT modes CLP and CLPSS are designed to operate in configurations | ||
429 | where a network path between the ports on one adapter exists. | ||
430 | Moreover, they are not designed to work where adapters are connected | ||
431 | back-to-back. | ||
432 | *** | ||
433 | |||
434 | |||
435 | 5 Large Frame Support | ||
436 | ====================== | ||
437 | |||
438 | The driver supports large frames (also called jumbo frames). Using large | ||
439 | frames can result in an improved throughput if transferring large amounts | ||
440 | of data. | ||
441 | To enable large frames, set the MTU (maximum transfer unit) of the | ||
442 | interface to the desired value (up to 9000), execute the following | ||
443 | command: | ||
444 | ifconfig eth0 mtu 9000 | ||
445 | This will only work if you have two adapters connected back-to-back | ||
446 | or if you use a switch that supports large frames. When using a switch, | ||
447 | it should be configured to allow large frames and auto-negotiation should | ||
448 | be set to OFF. The setting must be configured on all adapters that can be | ||
449 | reached by the large frames. If one adapter is not set to receive large | ||
450 | frames, it will simply drop them. | ||
451 | |||
452 | You can switch back to the standard ethernet frame size by executing the | ||
453 | following command: | ||
454 | ifconfig eth0 mtu 1500 | ||
455 | |||
456 | To permanently configure this setting, add a script with the 'ifconfig' | ||
457 | line to the system startup sequence (named something like "S99sk98lin" | ||
458 | in /etc/rc.d/rc2.d). | ||
459 | *** | ||
460 | |||
461 | |||
462 | 6 VLAN and Link Aggregation Support (IEEE 802.1, 802.1q, 802.3ad) | ||
463 | ================================================================== | ||
464 | |||
465 | The Marvell Yukon/SysKonnect Linux drivers are able to support VLAN and | ||
466 | Link Aggregation according to IEEE standards 802.1, 802.1q, and 802.3ad. | ||
467 | These features are only available after installation of open source | ||
468 | modules available on the Internet: | ||
469 | For VLAN go to: http://www.candelatech.com/~greear/vlan.html | ||
470 | For Link Aggregation go to: http://www.st.rim.or.jp/~yumo | ||
471 | |||
472 | NOTE: SysKonnect GmbH does not offer any support for these open source | ||
473 | modules and does not take the responsibility for any kind of | ||
474 | failures or problems arising in connection with these modules. | ||
475 | |||
476 | NOTE: Configuring Link Aggregation on a SysKonnect dual link adapter may | ||
477 | cause problems when unloading the driver. | ||
478 | |||
479 | |||
480 | 7 Troubleshooting | ||
481 | ================== | ||
482 | |||
483 | If any problems occur during the installation process, check the | ||
484 | following list: | ||
485 | |||
486 | |||
487 | Problem: The SK-98xx adapter cannot be found by the driver. | ||
488 | Solution: In /proc/pci search for the following entry: | ||
489 | 'Ethernet controller: SysKonnect SK-98xx ...' | ||
490 | If this entry exists, the SK-98xx or SK-98xx V2.0 adapter has | ||
491 | been found by the system and should be operational. | ||
492 | If this entry does not exist or if the file '/proc/pci' is not | ||
493 | found, there may be a hardware problem or the PCI support may | ||
494 | not be enabled in your kernel. | ||
495 | The adapter can be checked using the diagnostics program which | ||
496 | is available on the SysKonnect web site: | ||
497 | www.syskonnect.com | ||
498 | |||
499 | Some COMPAQ machines have problems dealing with PCI under Linux. | ||
500 | This problem is described in the 'PCI howto' document | ||
501 | (included in some distributions or available from the | ||
502 | web, e.g. at 'www.linux.org'). | ||
503 | |||
504 | |||
505 | Problem: Programs such as 'ifconfig' or 'route' cannot be found or the | ||
506 | error message 'Operation not permitted' is displayed. | ||
507 | Reason: You are not logged in as user 'root'. | ||
508 | Solution: Logout and login as 'root' or change to 'root' via 'su'. | ||
509 | |||
510 | |||
511 | Problem: Upon use of the command 'ping <address>' the message | ||
512 | "ping: sendto: Network is unreachable" is displayed. | ||
513 | Reason: Your route is not set correctly. | ||
514 | Solution: If you are using RedHat, you probably forgot to set up the | ||
515 | route in the 'network configuration'. | ||
516 | Check the existing routes with the 'route' command and check | ||
517 | if an entry for 'eth0' exists, and if so, if it is set correctly. | ||
518 | |||
519 | |||
520 | Problem: The driver can be started, the adapter is connected to the | ||
521 | network, but you cannot receive or transmit any packets; | ||
522 | e.g. 'ping' does not work. | ||
523 | Reason: There is an incorrect route in your routing table. | ||
524 | Solution: Check the routing table with the command 'route' and read the | ||
525 | manual help pages dealing with routes (enter 'man route'). | ||
526 | |||
527 | NOTE: Although the 2.2.x kernel versions generate the routing entry | ||
528 | automatically, problems of this kind may occur here as well. We've | ||
529 | come across a situation in which the driver started correctly at | ||
530 | system start, but after the driver has been removed and reloaded, | ||
531 | the route of the adapter's network pointed to the 'dummy0'device | ||
532 | and had to be corrected manually. | ||
533 | |||
534 | |||
535 | Problem: Your computer should act as a router between multiple | ||
536 | IP subnetworks (using multiple adapters), but computers in | ||
537 | other subnetworks cannot be reached. | ||
538 | Reason: Either the router's kernel is not configured for IP forwarding | ||
539 | or the routing table and gateway configuration of at least one | ||
540 | computer is not working. | ||
541 | |||
542 | Problem: Upon driver start, the following error message is displayed: | ||
543 | "eth0: -- ERROR -- | ||
544 | Class: internal Software error | ||
545 | Nr: 0xcc | ||
546 | Msg: SkGeInitPort() cannot init running ports" | ||
547 | Reason: You are using a driver compiled for single processor machines | ||
548 | on a multiprocessor machine with SMP (Symmetric MultiProcessor) | ||
549 | kernel. | ||
550 | Solution: Configure your kernel appropriately and recompile the kernel or | ||
551 | the modules. | ||
552 | |||
553 | |||
554 | |||
555 | If your problem is not listed here, please contact SysKonnect's technical | ||
556 | support for help (linux@syskonnect.de). | ||
557 | When contacting our technical support, please ensure that the following | ||
558 | information is available: | ||
559 | - System Manufacturer and HW Informations (CPU, Memory... ) | ||
560 | - PCI-Boards in your system | ||
561 | - Distribution | ||
562 | - Kernel version | ||
563 | - Driver version | ||
564 | *** | ||
565 | |||
566 | |||
567 | |||
568 | ***End of Readme File*** | ||
diff --git a/Documentation/sysrq.txt b/Documentation/sysrq.txt index ef19142896ca..10c8f6922ef4 100644 --- a/Documentation/sysrq.txt +++ b/Documentation/sysrq.txt | |||
@@ -43,7 +43,7 @@ On x86 - You press the key combo 'ALT-SysRq-<command key>'. Note - Some | |||
43 | keyboards may not have a key labeled 'SysRq'. The 'SysRq' key is | 43 | keyboards may not have a key labeled 'SysRq'. The 'SysRq' key is |
44 | also known as the 'Print Screen' key. Also some keyboards cannot | 44 | also known as the 'Print Screen' key. Also some keyboards cannot |
45 | handle so many keys being pressed at the same time, so you might | 45 | handle so many keys being pressed at the same time, so you might |
46 | have better luck with "press Alt", "press SysRq", "release Alt", | 46 | have better luck with "press Alt", "press SysRq", "release SysRq", |
47 | "press <command key>", release everything. | 47 | "press <command key>", release everything. |
48 | 48 | ||
49 | On SPARC - You press 'ALT-STOP-<command key>', I believe. | 49 | On SPARC - You press 'ALT-STOP-<command key>', I believe. |
diff --git a/Documentation/thinkpad-acpi.txt b/Documentation/thinkpad-acpi.txt index eb2f5986e1eb..60953d6c919d 100644 --- a/Documentation/thinkpad-acpi.txt +++ b/Documentation/thinkpad-acpi.txt | |||
@@ -1,7 +1,7 @@ | |||
1 | ThinkPad ACPI Extras Driver | 1 | ThinkPad ACPI Extras Driver |
2 | 2 | ||
3 | Version 0.15 | 3 | Version 0.16 |
4 | July 1st, 2007 | 4 | August 2nd, 2007 |
5 | 5 | ||
6 | Borislav Deianov <borislav@users.sf.net> | 6 | Borislav Deianov <borislav@users.sf.net> |
7 | Henrique de Moraes Holschuh <hmh@hmh.eng.br> | 7 | Henrique de Moraes Holschuh <hmh@hmh.eng.br> |
@@ -161,20 +161,22 @@ system. Enabling the hotkey functionality of thinkpad-acpi signals the | |||
161 | firmware that such a driver is present, and modifies how the ThinkPad | 161 | firmware that such a driver is present, and modifies how the ThinkPad |
162 | firmware will behave in many situations. | 162 | firmware will behave in many situations. |
163 | 163 | ||
164 | The driver enables the hot key feature automatically when loaded. The | ||
165 | feature can later be disabled and enabled back at runtime. The driver | ||
166 | will also restore the hot key feature to its previous state and mask | ||
167 | when it is unloaded. | ||
168 | |||
164 | When the hotkey feature is enabled and the hot key mask is set (see | 169 | When the hotkey feature is enabled and the hot key mask is set (see |
165 | below), the various hot keys either generate ACPI events in the | 170 | below), the driver will report HKEY events in the following format: |
166 | following format: | ||
167 | 171 | ||
168 | ibm/hotkey HKEY 00000080 0000xxxx | 172 | ibm/hotkey HKEY 00000080 0000xxxx |
169 | 173 | ||
170 | or events over the input layer. The input layer support accepts the | 174 | Some of these events refer to hot key presses, but not all. |
171 | standard IOCTLs to remap the keycodes assigned to each hotkey. | ||
172 | 175 | ||
173 | When the input device is open, the driver will suppress any ACPI hot key | 176 | The driver will generate events over the input layer for hot keys and |
174 | events that get translated into a meaningful input layer event, in order | 177 | radio switches, and over the ACPI netlink layer for other events. The |
175 | to avoid sending duplicate events to userspace. Hot keys that are | 178 | input layer support accepts the standard IOCTLs to remap the keycodes |
176 | mapped to KEY_RESERVED in the keymap are not translated, and will always | 179 | assigned to each hot key. |
177 | generate an ACPI ibm/hotkey HKEY event, and no input layer events. | ||
178 | 180 | ||
179 | The hot key bit mask allows some control over which hot keys generate | 181 | The hot key bit mask allows some control over which hot keys generate |
180 | events. If a key is "masked" (bit set to 0 in the mask), the firmware | 182 | events. If a key is "masked" (bit set to 0 in the mask), the firmware |
@@ -256,6 +258,20 @@ sysfs notes: | |||
256 | disabled" postition, and 1 if the switch is in the | 258 | disabled" postition, and 1 if the switch is in the |
257 | "radios enabled" position. | 259 | "radios enabled" position. |
258 | 260 | ||
261 | hotkey_report_mode: | ||
262 | Returns the state of the procfs ACPI event report mode | ||
263 | filter for hot keys. If it is set to 1 (the default), | ||
264 | all hot key presses are reported both through the input | ||
265 | layer and also as ACPI events through procfs (but not | ||
266 | through netlink). If it is set to 2, hot key presses | ||
267 | are reported only through the input layer. | ||
268 | |||
269 | This attribute is read-only in kernels 2.6.23 or later, | ||
270 | and read-write on earlier kernels. | ||
271 | |||
272 | May return -EPERM (write access locked out by module | ||
273 | parameter) or -EACCES (read-only). | ||
274 | |||
259 | input layer notes: | 275 | input layer notes: |
260 | 276 | ||
261 | A Hot key is mapped to a single input layer EV_KEY event, possibly | 277 | A Hot key is mapped to a single input layer EV_KEY event, possibly |
@@ -393,21 +409,63 @@ unknown by the driver if the ThinkPad firmware triggered these events on | |||
393 | hot key press or release, but the firmware will do it for either one, not | 409 | hot key press or release, but the firmware will do it for either one, not |
394 | both. | 410 | both. |
395 | 411 | ||
396 | If a key is mapped to KEY_RESERVED, it generates no input events at all, | 412 | If a key is mapped to KEY_RESERVED, it generates no input events at all. |
397 | and it may generate a legacy thinkpad-acpi ACPI hotkey event. | ||
398 | |||
399 | If a key is mapped to KEY_UNKNOWN, it generates an input event that | 413 | If a key is mapped to KEY_UNKNOWN, it generates an input event that |
400 | includes an scan code, and it may also generate a legacy thinkpad-acpi | 414 | includes an scan code. If a key is mapped to anything else, it will |
401 | ACPI hotkey event. | 415 | generate input device EV_KEY events. |
402 | |||
403 | If a key is mapped to anything else, it will only generate legacy | ||
404 | thinkpad-acpi ACPI hotkey events if nobody has opened the input device. | ||
405 | 416 | ||
406 | Non hot-key ACPI HKEY event map: | 417 | Non hot-key ACPI HKEY event map: |
407 | 0x5001 Lid closed | 418 | 0x5001 Lid closed |
408 | 0x5002 Lid opened | 419 | 0x5002 Lid opened |
409 | 0x7000 Radio Switch may have changed state | 420 | 0x7000 Radio Switch may have changed state |
410 | 421 | ||
422 | The above events are not propagated by the driver, except for legacy | ||
423 | compatibility purposes when hotkey_report_mode is set to 1. | ||
424 | |||
425 | Compatibility notes: | ||
426 | |||
427 | ibm-acpi and thinkpad-acpi 0.15 (mainline kernels before 2.6.23) never | ||
428 | supported the input layer, and sent events over the procfs ACPI event | ||
429 | interface. | ||
430 | |||
431 | To avoid sending duplicate events over the input layer and the ACPI | ||
432 | event interface, thinkpad-acpi 0.16 implements a module parameter | ||
433 | (hotkey_report_mode), and also a sysfs device attribute with the same | ||
434 | name. | ||
435 | |||
436 | Make no mistake here: userspace is expected to switch to using the input | ||
437 | layer interface of thinkpad-acpi, together with the ACPI netlink event | ||
438 | interface in kernels 2.6.23 and later, or with the ACPI procfs event | ||
439 | interface in kernels 2.6.22 and earlier. | ||
440 | |||
441 | If no hotkey_report_mode module parameter is specified (or it is set to | ||
442 | zero), the driver defaults to mode 1 (see below), and on kernels 2.6.22 | ||
443 | and earlier, also allows one to change the hotkey_report_mode through | ||
444 | sysfs. In kernels 2.6.23 and later, where the netlink ACPI event | ||
445 | interface is available, hotkey_report_mode cannot be changed through | ||
446 | sysfs (it is read-only). | ||
447 | |||
448 | If the hotkey_report_mode module parameter is set to 1 or 2, it cannot | ||
449 | be changed later through sysfs (any writes will return -EPERM to signal | ||
450 | that hotkey_report_mode was locked. On 2.6.23 and later, where | ||
451 | hotkey_report_mode cannot be changed at all, writes will return -EACES). | ||
452 | |||
453 | hotkey_report_mode set to 1 makes the driver export through the procfs | ||
454 | ACPI event interface all hot key presses (which are *also* sent to the | ||
455 | input layer). This is a legacy compatibility behaviour, and it is also | ||
456 | the default mode of operation for the driver. | ||
457 | |||
458 | hotkey_report_mode set to 2 makes the driver filter out the hot key | ||
459 | presses from the procfs ACPI event interface, so these events will only | ||
460 | be sent through the input layer. Userspace that has been updated to use | ||
461 | the thinkpad-acpi input layer interface should set hotkey_report_mode to | ||
462 | 2. | ||
463 | |||
464 | Hot key press events are never sent to the ACPI netlink event interface. | ||
465 | Really up-to-date userspace under kernel 2.6.23 and later is to use the | ||
466 | netlink interface and the input layer interface, and don't bother at all | ||
467 | with hotkey_report_mode. | ||
468 | |||
411 | 469 | ||
412 | Bluetooth | 470 | Bluetooth |
413 | --------- | 471 | --------- |
diff --git a/Documentation/video4linux/cx2341x/fw-encoder-api.txt b/Documentation/video4linux/cx2341x/fw-encoder-api.txt index 5dd3109a8b3f..5a27af2ee1c6 100644 --- a/Documentation/video4linux/cx2341x/fw-encoder-api.txt +++ b/Documentation/video4linux/cx2341x/fw-encoder-api.txt | |||
@@ -407,8 +407,10 @@ Description | |||
407 | u32 length; // Length of this frame | 407 | u32 length; // Length of this frame |
408 | u32 offset_low; // Offset in the file of the | 408 | u32 offset_low; // Offset in the file of the |
409 | u32 offset_high; // start of this frame | 409 | u32 offset_high; // start of this frame |
410 | u32 mask1; // Bits 0-1 are the type mask: | 410 | u32 mask1; // Bits 0-2 are the type mask: |
411 | // 1=I, 2=P, 4=B | 411 | // 1=I, 2=P, 4=B |
412 | // 0=End of Program Index, other fields | ||
413 | // are invalid. | ||
412 | u32 pts; // The PTS of the frame | 414 | u32 pts; // The PTS of the frame |
413 | u32 mask2; // Bit 0 is bit 32 of the pts. | 415 | u32 mask2; // Bit 0 is bit 32 of the pts. |
414 | }; | 416 | }; |