提交 95d465fd 编写于 作者: D Dmitry Torokhov

Manual merge with Linus.

Conflicts:
	arch/powerpc/kernel/setup-common.c
	drivers/input/keyboard/hil_kbd.c
	drivers/input/mouse/hil_ptr.c

要显示的变更太多。

To preserve performance only 1000 of 1000+ files are displayed.
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
# #
# Top-level generic files # Top-level generic files
# #
tags
vmlinux* vmlinux*
System.map System.map
Module.symvers Module.symvers
...@@ -30,3 +31,5 @@ include/linux/autoconf.h ...@@ -30,3 +31,5 @@ include/linux/autoconf.h
include/linux/compile.h include/linux/compile.h
include/linux/version.h include/linux/version.h
# stgit generated dirs
patches-*
...@@ -120,7 +120,6 @@ D: Author of lil (Linux Interrupt Latency benchmark) ...@@ -120,7 +120,6 @@ D: Author of lil (Linux Interrupt Latency benchmark)
D: Fixed the shm swap deallocation at swapoff time (try_to_unuse message) D: Fixed the shm swap deallocation at swapoff time (try_to_unuse message)
D: VM hacker D: VM hacker
D: Various other kernel hacks D: Various other kernel hacks
S: Via Cicalini 26
S: Imola 40026 S: Imola 40026
S: Italy S: Italy
...@@ -1128,8 +1127,10 @@ S: Carnegie, Pennsylvania 15106-4304 ...@@ -1128,8 +1127,10 @@ S: Carnegie, Pennsylvania 15106-4304
S: USA S: USA
N: Philip Gladstone N: Philip Gladstone
E: philip@raptor.com E: philip@gladstonefamily.net
D: Kernel / timekeeping stuff D: Kernel / timekeeping stuff
S: Carlisle, MA 01741
S: USA
N: Jan-Benedict Glaw N: Jan-Benedict Glaw
E: jbglaw@lug-owl.de E: jbglaw@lug-owl.de
...@@ -2008,13 +2009,14 @@ S: University of Stuttgart, Germany and ...@@ -2008,13 +2009,14 @@ S: University of Stuttgart, Germany and
S: Ecole Nationale Superieure des Telecommunications, Paris S: Ecole Nationale Superieure des Telecommunications, Paris
N: Jamie Lokier N: Jamie Lokier
E: jamie@imbolc.ucc.ie E: jamie@shareable.org
W: http://www.shareable.org/
D: Reboot-through-BIOS for broken 486 motherboards D: Reboot-through-BIOS for broken 486 motherboards
D: Some parport fixes D: Parport fixes, futex improvements
S: 11 Goodson Walk D: First instruction of x86 sysenter path :)
S: Marston S: 51 Sunningwell Road
S: Oxford S: Oxford
S: OX3 0HX S: OX1 4SZ
S: United Kingdom S: United Kingdom
N: Mark Lord N: Mark Lord
...@@ -2814,6 +2816,8 @@ E: luca.risolia@studio.unibo.it ...@@ -2814,6 +2816,8 @@ E: luca.risolia@studio.unibo.it
P: 1024D/FCE635A4 88E8 F32F 7244 68BA 3958 5D40 99DA 5D2A FCE6 35A4 P: 1024D/FCE635A4 88E8 F32F 7244 68BA 3958 5D40 99DA 5D2A FCE6 35A4
D: V4L driver for W996[87]CF JPEG USB Dual Mode Camera Chips D: V4L driver for W996[87]CF JPEG USB Dual Mode Camera Chips
D: V4L2 driver for SN9C10x PC Camera Controllers D: V4L2 driver for SN9C10x PC Camera Controllers
D: V4L2 driver for ET61X151 and ET61X251 PC Camera Controllers
D: V4L2 driver for ZC0301 Image Processor and Control Chip
S: Via Liberta' 41/A S: Via Liberta' 41/A
S: Osio Sotto, 24046, Bergamo S: Osio Sotto, 24046, Bergamo
S: Italy S: Italy
...@@ -3739,10 +3743,11 @@ D: Mylex DAC960 PCI RAID driver ...@@ -3739,10 +3743,11 @@ D: Mylex DAC960 PCI RAID driver
D: Miscellaneous kernel fixes D: Miscellaneous kernel fixes
N: Alessandro Zummo N: Alessandro Zummo
E: azummo@ita.flashnet.it E: a.zummo@towertech.it
W: http://freepage.logicom.it/azummo/
D: CMI8330 support is sb_card.c D: CMI8330 support is sb_card.c
D: ISAPnP fixes in sb_card.c D: ISAPnP fixes in sb_card.c
D: ZyXEL omni.net lcd plus driver
D: RTC subsystem
S: Italy S: Italy
N: Marc Zyngier N: Marc Zyngier
......
Table of contents
=================
Last updated: 20 December 2005
Contents
========
- Introduction
- Devices not appearing
- Finding patch that caused a bug
-- Finding using git-bisect
-- Finding it the old way
- Fixing the bug
Introduction
============
Always try the latest kernel from kernel.org and build from source. If you are
not confident in doing that please report the bug to your distribution vendor
instead of to a kernel developer.
Finding bugs is not always easy. Have a go though. If you can't find it don't
give up. Report as much as you have found to the relevant maintainer. See
MAINTAINERS for who that is for the subsystem you have worked on.
Before you submit a bug report read REPORTING-BUGS.
Devices not appearing
=====================
Often this is caused by udev. Check that first before blaming it on the
kernel.
Finding patch that caused a bug
===============================
Finding using git-bisect
------------------------
Using the provided tools with git makes finding bugs easy provided the bug is
reproducible.
Steps to do it:
- start using git for the kernel source
- read the man page for git-bisect
- have fun
Finding it the old way
----------------------
[Sat Mar 2 10:32:33 PST 1996 KERNEL_BUG-HOWTO lm@sgi.com (Larry McVoy)] [Sat Mar 2 10:32:33 PST 1996 KERNEL_BUG-HOWTO lm@sgi.com (Larry McVoy)]
This is how to track down a bug if you know nothing about kernel hacking. This is how to track down a bug if you know nothing about kernel hacking.
...@@ -90,3 +143,63 @@ it does work and it lets non-hackers help fix bugs. And it is cool ...@@ -90,3 +143,63 @@ it does work and it lets non-hackers help fix bugs. And it is cool
because Linux snapshots will let you do this - something that you can't because Linux snapshots will let you do this - something that you can't
do with vendor supplied releases. do with vendor supplied releases.
Fixing the bug
==============
Nobody is going to tell you how to fix bugs. Seriously. You need to work it
out. But below are some hints on how to use the tools.
To debug a kernel, use objdump and look for the hex offset from the crash
output to find the valid line of code/assembler. Without debug symbols, you
will see the assembler code for the routine shown, but if your kernel has
debug symbols the C code will also be available. (Debug symbols can be enabled
in the kernel hacking menu of the menu configuration.) For example:
objdump -r -S -l --disassemble net/dccp/ipv4.o
NB.: you need to be at the top level of the kernel tree for this to pick up
your C files.
If you don't have access to the code you can also debug on some crash dumps
e.g. crash dump output as shown by Dave Miller.
> EIP is at ip_queue_xmit+0x14/0x4c0
> ...
> Code: 44 24 04 e8 6f 05 00 00 e9 e8 fe ff ff 8d 76 00 8d bc 27 00 00
> 00 00 55 57 56 53 81 ec bc 00 00 00 8b ac 24 d0 00 00 00 8b 5d 08
> <8b> 83 3c 01 00 00 89 44 24 14 8b 45 28 85 c0 89 44 24 18 0f 85
>
> Put the bytes into a "foo.s" file like this:
>
> .text
> .globl foo
> foo:
> .byte .... /* bytes from Code: part of OOPS dump */
>
> Compile it with "gcc -c -o foo.o foo.s" then look at the output of
> "objdump --disassemble foo.o".
>
> Output:
>
> ip_queue_xmit:
> push %ebp
> push %edi
> push %esi
> push %ebx
> sub $0xbc, %esp
> mov 0xd0(%esp), %ebp ! %ebp = arg0 (skb)
> mov 0x8(%ebp), %ebx ! %ebx = skb->sk
> mov 0x13c(%ebx), %eax ! %eax = inet_sk(sk)->opt
Another very useful option of the Kernel Hacking section in menuconfig is
Debug memory allocations. This will help you see whether data has been
initialised and not set before use etc. To see the values that get assigned
with this look at mm/slab.c and search for POISON_INUSE. When using this an
Oops will often show the poisoned data instead of zero which is the default.
Once you have worked out a fix please submit it upstream. After all open
source is about sharing what you do and don't you want to be recognised for
your genius?
Please do read Documentation/SubmittingPatches though to help your code get
accepted.
...@@ -15,24 +15,6 @@ and therefore owes credit to the same people as that file (Jared Mauch, ...@@ -15,24 +15,6 @@ and therefore owes credit to the same people as that file (Jared Mauch,
Axel Boldt, Alessandro Sigala, and countless other users all over the Axel Boldt, Alessandro Sigala, and countless other users all over the
'net). 'net).
The latest revision of this document, in various formats, can always
be found at <http://cyberbuzz.gatech.edu/kaboom/linux/Changes-2.4/>.
Feel free to translate this document. If you do so, please send me a
URL to your translation for inclusion in future revisions of this
document.
Smotrite file <http://oblom.rnc.ru/linux/kernel/Changes.ru>, yavlyaushisya
russkim perevodom dannogo documenta.
Visite <http://www2.adi.uam.es/~ender/tecnico/> para obtener la traducción
al español de este documento en varios formatos.
Eine deutsche Version dieser Datei finden Sie unter
<http://www.stefan-winter.de/Changes-2.4.0.txt>.
Chris Ricker (kaboom@gatech.edu or chris.ricker@genetics.utah.edu).
Current Minimal Requirements Current Minimal Requirements
============================ ============================
......
...@@ -199,6 +199,8 @@ address during PCI bus mastering you might do something like: ...@@ -199,6 +199,8 @@ address during PCI bus mastering you might do something like:
"mydev: 24-bit DMA addressing not available.\n"); "mydev: 24-bit DMA addressing not available.\n");
goto ignore_this_device; goto ignore_this_device;
} }
[Better use DMA_24BIT_MASK instead of 0x00ffffff.
See linux/include/dma-mapping.h for reference.]
When pci_set_dma_mask() is successful, and returns zero, the PCI layer When pci_set_dma_mask() is successful, and returns zero, the PCI layer
saves away this mask you have provided. The PCI layer will use this saves away this mask you have provided. The PCI layer will use this
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
DOCBOOKS := wanbook.xml z8530book.xml mcabook.xml videobook.xml \ DOCBOOKS := wanbook.xml z8530book.xml mcabook.xml videobook.xml \
kernel-hacking.xml kernel-locking.xml deviceiobook.xml \ kernel-hacking.xml kernel-locking.xml deviceiobook.xml \
procfs-guide.xml writing_usb_driver.xml \ procfs-guide.xml writing_usb_driver.xml \
sis900.xml kernel-api.xml journal-api.xml lsm.xml usb.xml \ kernel-api.xml journal-api.xml lsm.xml usb.xml \
gadget.xml libata.xml mtdnand.xml librs.xml rapidio.xml gadget.xml libata.xml mtdnand.xml librs.xml rapidio.xml
### ###
...@@ -28,7 +28,7 @@ PS_METHOD = $(prefer-db2x) ...@@ -28,7 +28,7 @@ PS_METHOD = $(prefer-db2x)
### ###
# The targets that may be used. # The targets that may be used.
.PHONY: xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs PHONY += xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs
BOOKS := $(addprefix $(obj)/,$(DOCBOOKS)) BOOKS := $(addprefix $(obj)/,$(DOCBOOKS))
xmldocs: $(BOOKS) xmldocs: $(BOOKS)
...@@ -211,3 +211,9 @@ clean-dirs := $(patsubst %.xml,%,$(DOCBOOKS)) ...@@ -211,3 +211,9 @@ clean-dirs := $(patsubst %.xml,%,$(DOCBOOKS))
#man put files in man subdir - traverse down #man put files in man subdir - traverse down
subdir- := man/ subdir- := man/
# Declare the contents of the .PHONY variable as phony. We keep that
# information in a variable se we can use it in if_changed and friends.
.PHONY: $(PHONY)
...@@ -270,25 +270,6 @@ CPU B: spin_unlock_irqrestore(&amp;dev_lock, flags) ...@@ -270,25 +270,6 @@ CPU B: spin_unlock_irqrestore(&amp;dev_lock, flags)
</para> </para>
</sect1> </sect1>
<sect1>
<title>ISA legacy functions</title>
<para>
On older kernels (2.2 and earlier) the ISA bus could be read or
written with these functions and without ioremap being used. This is
no longer true in Linux 2.4. A set of equivalent functions exist for
easy legacy driver porting. The functions available are prefixed
with 'isa_' and are <function>isa_readb</function>,
<function>isa_writeb</function>, <function>isa_readw</function>,
<function>isa_writew</function>, <function>isa_readl</function>,
<function>isa_writel</function>, <function>isa_memcpy_fromio</function>
and <function>isa_memcpy_toio</function>
</para>
<para>
These functions should not be used in new drivers, and will
eventually be going away.
</para>
</sect1>
</chapter> </chapter>
<chapter> <chapter>
......
...@@ -120,14 +120,27 @@ void (*dev_config) (struct ata_port *, struct ata_device *); ...@@ -120,14 +120,27 @@ void (*dev_config) (struct ata_port *, struct ata_device *);
<programlisting> <programlisting>
void (*set_piomode) (struct ata_port *, struct ata_device *); void (*set_piomode) (struct ata_port *, struct ata_device *);
void (*set_dmamode) (struct ata_port *, struct ata_device *); void (*set_dmamode) (struct ata_port *, struct ata_device *);
void (*post_set_mode) (struct ata_port *ap); void (*post_set_mode) (struct ata_port *);
unsigned int (*mode_filter) (struct ata_port *, struct ata_device *, unsigned int);
</programlisting> </programlisting>
<para> <para>
Hooks called prior to the issue of SET FEATURES - XFER MODE Hooks called prior to the issue of SET FEATURES - XFER MODE
command. dev->pio_mode is guaranteed to be valid when command. The optional ->mode_filter() hook is called when libata
->set_piomode() is called, and dev->dma_mode is guaranteed to be has built a mask of the possible modes. This is passed to the
valid when ->set_dmamode() is called. ->post_set_mode() is ->mode_filter() function which should return a mask of valid modes
after filtering those unsuitable due to hardware limits. It is not
valid to use this interface to add modes.
</para>
<para>
dev->pio_mode and dev->dma_mode are guaranteed to be valid when
->set_piomode() and when ->set_dmamode() is called. The timings for
any other drive sharing the cable will also be valid at this point.
That is the library records the decisions for the modes of each
drive on a channel before it attempts to set any of them.
</para>
<para>
->post_set_mode() is
called unconditionally, after the SET FEATURES - XFER MODE called unconditionally, after the SET FEATURES - XFER MODE
command completes successfully. command completes successfully.
</para> </para>
...@@ -230,6 +243,32 @@ void (*dev_select)(struct ata_port *ap, unsigned int device); ...@@ -230,6 +243,32 @@ void (*dev_select)(struct ata_port *ap, unsigned int device);
</sect2> </sect2>
<sect2><title>Private tuning method</title>
<programlisting>
void (*set_mode) (struct ata_port *ap);
</programlisting>
<para>
By default libata performs drive and controller tuning in
accordance with the ATA timing rules and also applies blacklists
and cable limits. Some controllers need special handling and have
custom tuning rules, typically raid controllers that use ATA
commands but do not actually do drive timing.
</para>
<warning>
<para>
This hook should not be used to replace the standard controller
tuning logic when a controller has quirks. Replacing the default
tuning logic in that case would bypass handling for drive and
bridge quirks that may be important to data reliability. If a
controller needs to filter the mode selection it should use the
mode_filter hook instead.
</para>
</warning>
</sect2>
<sect2><title>Reset ATA bus</title> <sect2><title>Reset ATA bus</title>
<programlisting> <programlisting>
void (*phy_reset) (struct ata_port *ap); void (*phy_reset) (struct ata_port *ap);
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" []>
<book id="SiS900Guide">
<bookinfo>
<title>SiS 900/7016 Fast Ethernet Device Driver</title>
<authorgroup>
<author>
<firstname>Ollie</firstname>
<surname>Lho</surname>
</author>
<author>
<firstname>Lei Chun</firstname>
<surname>Chang</surname>
</author>
</authorgroup>
<edition>Document Revision: 0.3 for SiS900 driver v1.06 &amp; v1.07</edition>
<pubdate>November 16, 2000</pubdate>
<copyright>
<year>1999</year>
<holder>Silicon Integrated System Corp.</holder>
</copyright>
<legalnotice>
<para>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
</para>
<para>
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
</para>
<para>
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
</para>
</legalnotice>
<abstract>
<para>
This document gives some information on installation and usage of SiS 900/7016
device driver under Linux.
</para>
</abstract>
</bookinfo>
<toc></toc>
<chapter id="intro">
<title>Introduction</title>
<para>
This document describes the revision 1.06 and 1.07 of SiS 900/7016 Fast Ethernet
device driver under Linux. The driver is developed by Silicon Integrated
System Corp. and distributed freely under the GNU General Public License (GPL).
The driver can be compiled as a loadable module and used under Linux kernel
version 2.2.x. (rev. 1.06)
With minimal changes, the driver can also be used under 2.3.x and 2.4.x kernel
(rev. 1.07), please see
<xref linkend="install"/>. If you are intended to
use the driver for earlier kernels, you are on your own.
</para>
<para>
The driver is tested with usual TCP/IP applications including
FTP, Telnet, Netscape etc. and is used constantly by the developers.
</para>
<para>
Please send all comments/fixes/questions to
<ulink url="mailto:lcchang@sis.com.tw">Lei-Chun Chang</ulink>.
</para>
</chapter>
<chapter id="changes">
<title>Changes</title>
<para>
Changes made in Revision 1.07
<orderedlist>
<listitem>
<para>
Separation of sis900.c and sis900.h in order to move most
constant definition to sis900.h (many of those constants were
corrected)
</para>
</listitem>
<listitem>
<para>
Clean up PCI detection, the pci-scan from Donald Becker were not used,
just simple pci&lowbar;find&lowbar;*.
</para>
</listitem>
<listitem>
<para>
MII detection is modified to support multiple mii transceiver.
</para>
</listitem>
<listitem>
<para>
Bugs in read&lowbar;eeprom, mdio&lowbar;* were removed.
</para>
</listitem>
<listitem>
<para>
Lot of sis900 irrelevant comments were removed/changed and
more comments were added to reflect the real situation.
</para>
</listitem>
<listitem>
<para>
Clean up of physical/virtual address space mess in buffer
descriptors.
</para>
</listitem>
<listitem>
<para>
Better transmit/receive error handling.
</para>
</listitem>
<listitem>
<para>
The driver now uses zero-copy single buffer management
scheme to improve performance.
</para>
</listitem>
<listitem>
<para>
Names of variables were changed to be more consistent.
</para>
</listitem>
<listitem>
<para>
Clean up of auo-negotiation and timer code.
</para>
</listitem>
<listitem>
<para>
Automatic detection and change of PHY on the fly.
</para>
</listitem>
<listitem>
<para>
Bug in mac probing fixed.
</para>
</listitem>
<listitem>
<para>
Fix 630E equalier problem by modifying the equalizer workaround rule.
</para>
</listitem>
<listitem>
<para>
Support for ICS1893 10/100 Interated PHYceiver.
</para>
</listitem>
<listitem>
<para>
Support for media select by ifconfig.
</para>
</listitem>
<listitem>
<para>
Added kernel-doc extratable documentation.
</para>
</listitem>
</orderedlist>
</para>
</chapter>
<chapter id="tested">
<title>Tested Environment</title>
<para>
This driver is developed on the following hardware
<itemizedlist>
<listitem>
<para>
Intel Celeron 500 with SiS 630 (rev 02) chipset
</para>
</listitem>
<listitem>
<para>
SiS 900 (rev 01) and SiS 7016/7014 Fast Ethernet Card
</para>
</listitem>
</itemizedlist>
and tested with these software environments
<itemizedlist>
<listitem>
<para>
Red Hat Linux version 6.2
</para>
</listitem>
<listitem>
<para>
Linux kernel version 2.4.0
</para>
</listitem>
<listitem>
<para>
Netscape version 4.6
</para>
</listitem>
<listitem>
<para>
NcFTP 3.0.0 beta 18
</para>
</listitem>
<listitem>
<para>
Samba version 2.0.3
</para>
</listitem>
</itemizedlist>
</para>
</chapter>
<chapter id="files">
<title>Files in This Package</title>
<para>
In the package you can find these files:
</para>
<para>
<variablelist>
<varlistentry>
<term>sis900.c</term>
<listitem>
<para>
Driver source file in C
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>sis900.h</term>
<listitem>
<para>
Header file for sis900.c
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>sis900.sgml</term>
<listitem>
<para>
DocBook SGML source of the document
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>sis900.txt</term>
<listitem>
<para>
Driver document in plain text
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</chapter>
<chapter id="install">
<title>Installation</title>
<para>
Silicon Integrated System Corp. is cooperating closely with core Linux Kernel
developers. The revisions of SiS 900 driver are distributed by the usuall channels
for kernel tar files and patches. Those kernel tar files for official kernel and
patches for kernel pre-release can be download at
<ulink url="http://ftp.kernel.org/pub/linux/kernel/">official kernel ftp site</ulink>
and its mirrors.
The 1.06 revision can be found in kernel version later than 2.3.15 and pre-2.2.14,
and 1.07 revision can be found in kernel version 2.4.0.
If you have no prior experience in networking under Linux, please read
<ulink url="http://www.tldp.org/">Ethernet HOWTO</ulink> and
<ulink url="http://www.tldp.org/">Networking HOWTO</ulink> available from
Linux Documentation Project (LDP).
</para>
<para>
The driver is bundled in release later than 2.2.11 and 2.3.15 so this
is the most easy case.
Be sure you have the appropriate packages for compiling kernel source.
Those packages are listed in Document/Changes in kernel source
distribution. If you have to install the driver other than those bundled
in kernel release, you should have your driver file
<filename>sis900.c</filename> and <filename>sis900.h</filename>
copied into <filename class="directory">/usr/src/linux/drivers/net/</filename> first.
There are two alternative ways to install the driver
</para>
<sect1>
<title>Building the driver as loadable module</title>
<para>
To build the driver as a loadable kernel module you have to reconfigure
the kernel to activate network support by
</para>
<para><screen>
make menuconfig
</screen></para>
<para>
Choose <quote>Loadable module support ---></quote>,
then select <quote>Enable loadable module support</quote>.
</para>
<para>
Choose <quote>Network Device Support ---></quote>, select
<quote>Ethernet (10 or 100Mbit)</quote>.
Then select <quote>EISA, VLB, PCI and on board controllers</quote>,
and choose <quote>SiS 900/7016 PCI Fast Ethernet Adapter support</quote>
to <quote>M</quote>.
</para>
<para>
After reconfiguring the kernel, you can make the driver module by
</para>
<para><screen>
make modules
</screen></para>
<para>
The driver should be compiled with no errors. After compiling the driver,
the driver can be installed to proper place by
</para>
<para><screen>
make modules_install
</screen></para>
<para>
Load the driver into kernel by
</para>
<para><screen>
insmod sis900
</screen></para>
<para>
When loading the driver into memory, some information message can be view by
</para>
<para>
<screen>
dmesg
</screen>
or
<screen>
cat /var/log/message
</screen>
</para>
<para>
If the driver is loaded properly you will have messages similar to this:
</para>
<para><screen>
sis900.c: v1.07.06 11/07/2000
eth0: SiS 900 PCI Fast Ethernet at 0xd000, IRQ 10, 00:00:e8:83:7f:a4.
eth0: SiS 900 Internal MII PHY transceiver found at address 1.
eth0: Using SiS 900 Internal MII PHY as default
</screen></para>
<para>
showing the version of the driver and the results of probing routine.
</para>
<para>
Once the driver is loaded, network can be brought up by
</para>
<para><screen>
/sbin/ifconfig eth0 IPADDR broadcast BROADCAST netmask NETMASK media TYPE
</screen></para>
<para>
where IPADDR, BROADCAST, NETMASK are your IP address, broadcast address and
netmask respectively. TYPE is used to set medium type used by the device.
Typical values are "10baseT"(twisted-pair 10Mbps Ethernet) or "100baseT"
(twisted-pair 100Mbps Ethernet). For more information on how to configure
network interface, please refer to
<ulink url="http://www.tldp.org/">Networking HOWTO</ulink>.
</para>
<para>
The link status is also shown by kernel messages. For example, after the
network interface is activated, you may have the message:
</para>
<para><screen>
eth0: Media Link On 100mbps full-duplex
</screen></para>
<para>
If you try to unplug the twist pair (TP) cable you will get
</para>
<para><screen>
eth0: Media Link Off
</screen></para>
<para>
indicating that the link is failed.
</para>
</sect1>
<sect1>
<title>Building the driver into kernel</title>
<para>
If you want to make the driver into kernel, choose <quote>Y</quote>
rather than <quote>M</quote> on
<quote>SiS 900/7016 PCI Fast Ethernet Adapter support</quote>
when configuring the kernel. Build the kernel image in the usual way
</para>
<para><screen>
make clean
make bzlilo
</screen></para>
<para>
Next time the system reboot, you have the driver in memory.
</para>
</sect1>
</chapter>
<chapter id="problems">
<title>Known Problems and Bugs</title>
<para>
There are some known problems and bugs. If you find any other bugs please
mail to <ulink url="mailto:lcchang@sis.com.tw">lcchang@sis.com.tw</ulink>
<orderedlist>
<listitem>
<para>
AM79C901 HomePNA PHY is not thoroughly tested, there may be some
bugs in the <quote>on the fly</quote> change of transceiver.
</para>
</listitem>
<listitem>
<para>
A bug is hidden somewhere in the receive buffer management code,
the bug causes NULL pointer reference in the kernel. This fault is
caught before bad things happen and reported with the message:
<computeroutput>
eth0: NULL pointer encountered in Rx ring, skipping
</computeroutput>
which can be viewed with <literal remap="tt">dmesg</literal> or
<literal remap="tt">cat /var/log/message</literal>.
</para>
</listitem>
<listitem>
<para>
The media type change from 10Mbps to 100Mbps twisted-pair ethernet
by ifconfig causes the media link down.
</para>
</listitem>
</orderedlist>
</para>
</chapter>
<chapter id="RHistory">
<title>Revision History</title>
<para>
<itemizedlist>
<listitem>
<para>
November 13, 2000, Revision 1.07, seventh release, 630E problem fixed
and further clean up.
</para>
</listitem>
<listitem>
<para>
November 4, 1999, Revision 1.06, Second release, lots of clean up
and optimization.
</para>
</listitem>
<listitem>
<para>
August 8, 1999, Revision 1.05, Initial Public Release
</para>
</listitem>
</itemizedlist>
</para>
</chapter>
<chapter id="acknowledgements">
<title>Acknowledgements</title>
<para>
This driver was originally derived form
<ulink url="mailto:becker@cesdis1.gsfc.nasa.gov">Donald Becker</ulink>'s
<ulink url="ftp://cesdis.gsfc.nasa.gov/pub/linux/drivers/kern-2.3/pci-skeleton.c"
>pci-skeleton</ulink> and
<ulink url="ftp://cesdis.gsfc.nasa.gov/pub/linux/drivers/kern-2.3/rtl8139.c"
>rtl8139</ulink> drivers. Donald also provided various suggestion
regarded with improvements made in revision 1.06.
</para>
<para>
The 1.05 revision was created by
<ulink url="mailto:cmhuang@sis.com.tw">Jim Huang</ulink>, AMD 79c901
support was added by <ulink url="mailto:lcs@sis.com.tw">Chin-Shan Li</ulink>.
</para>
</chapter>
<chapter id="functions">
<title>List of Functions</title>
!Idrivers/net/sis900.c
</chapter>
</book>
...@@ -360,7 +360,7 @@ uses of RCU may be found in listRCU.txt, arrayRCU.txt, and NMI-RCU.txt. ...@@ -360,7 +360,7 @@ uses of RCU may be found in listRCU.txt, arrayRCU.txt, and NMI-RCU.txt.
struct foo *new_fp; struct foo *new_fp;
struct foo *old_fp; struct foo *old_fp;
new_fp = kmalloc(sizeof(*fp), GFP_KERNEL); new_fp = kmalloc(sizeof(*new_fp), GFP_KERNEL);
spin_lock(&foo_mutex); spin_lock(&foo_mutex);
old_fp = gbl_foo; old_fp = gbl_foo;
*new_fp = *old_fp; *new_fp = *old_fp;
...@@ -461,7 +461,7 @@ The foo_update_a() function might then be written as follows: ...@@ -461,7 +461,7 @@ The foo_update_a() function might then be written as follows:
struct foo *new_fp; struct foo *new_fp;
struct foo *old_fp; struct foo *old_fp;
new_fp = kmalloc(sizeof(*fp), GFP_KERNEL); new_fp = kmalloc(sizeof(*new_fp), GFP_KERNEL);
spin_lock(&foo_mutex); spin_lock(&foo_mutex);
old_fp = gbl_foo; old_fp = gbl_foo;
*new_fp = *old_fp; *new_fp = *old_fp;
...@@ -605,7 +605,7 @@ are the same as those shown in the preceding section, so they are omitted. ...@@ -605,7 +605,7 @@ are the same as those shown in the preceding section, so they are omitted.
{ {
int cpu; int cpu;
for_each_cpu(cpu) for_each_possible_cpu(cpu)
run_on(cpu); run_on(cpu);
} }
......
...@@ -27,6 +27,8 @@ rm -f $dir/discover ...@@ -27,6 +27,8 @@ rm -f $dir/discover
mknod -m 0200 $dir/discover c $MAJOR 3 mknod -m 0200 $dir/discover c $MAJOR 3
rm -f $dir/interfaces rm -f $dir/interfaces
mknod -m 0200 $dir/interfaces c $MAJOR 4 mknod -m 0200 $dir/interfaces c $MAJOR 4
rm -f $dir/revalidate
mknod -m 0200 $dir/revalidate c $MAJOR 5
export n_partitions export n_partitions
mkshelf=`echo $0 | sed 's!mkdevs!mkshelf!'` mkshelf=`echo $0 | sed 's!mkdevs!mkshelf!'`
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
SUBSYSTEM="aoe", KERNEL="discover", NAME="etherd/%k", GROUP="disk", MODE="0220" SUBSYSTEM="aoe", KERNEL="discover", NAME="etherd/%k", GROUP="disk", MODE="0220"
SUBSYSTEM="aoe", KERNEL="err", NAME="etherd/%k", GROUP="disk", MODE="0440" SUBSYSTEM="aoe", KERNEL="err", NAME="etherd/%k", GROUP="disk", MODE="0440"
SUBSYSTEM="aoe", KERNEL="interfaces", NAME="etherd/%k", GROUP="disk", MODE="0220" SUBSYSTEM="aoe", KERNEL="interfaces", NAME="etherd/%k", GROUP="disk", MODE="0220"
SUBSYSTEM="aoe", KERNEL="revalidate", NAME="etherd/%k", GROUP="disk", MODE="0220"
# aoe block devices # aoe block devices
KERNEL="etherd*", NAME="%k", GROUP="disk" KERNEL="etherd*", NAME="%k", GROUP="disk"
...@@ -118,7 +118,7 @@ to store page tables. The recommended placement is 32KiB into RAM. ...@@ -118,7 +118,7 @@ to store page tables. The recommended placement is 32KiB into RAM.
In either case, the following conditions must be met: In either case, the following conditions must be met:
- Quiesce all DMA capable devicess so that memory does not get - Quiesce all DMA capable devices so that memory does not get
corrupted by bogus network packets or disk data. This will save corrupted by bogus network packets or disk data. This will save
you many hours of debug. you many hours of debug.
......
...@@ -89,7 +89,7 @@ Modules ...@@ -89,7 +89,7 @@ Modules
Although modularisation is supported (and required for the FP emulator), Although modularisation is supported (and required for the FP emulator),
each module on an ARM2/ARM250/ARM3 machine when is loaded will take each module on an ARM2/ARM250/ARM3 machine when is loaded will take
memory up to the next 32k boundary due to the size of the pages. memory up to the next 32k boundary due to the size of the pages.
Therefore, modularisation on these machines really worth it? Therefore, is modularisation on these machines really worth it?
However, ARM6 and up machines allow modules to take multiples of 4k, and However, ARM6 and up machines allow modules to take multiples of 4k, and
as such Acorn RiscPCs and other architectures using these processors can as such Acorn RiscPCs and other architectures using these processors can
......
...@@ -26,7 +26,7 @@ Installing a bootloader ...@@ -26,7 +26,7 @@ Installing a bootloader
A couple of bootloaders able to boot Linux on Assabet are available: A couple of bootloaders able to boot Linux on Assabet are available:
BLOB (http://www.lart.tudelft.nl/lartware/blob/) BLOB (http://www.lartmaker.nl/lartware/blob/)
BLOB is a bootloader used within the LART project. Some contributed BLOB is a bootloader used within the LART project. Some contributed
patches were merged into BLOB to add support for Assabet. patches were merged into BLOB to add support for Assabet.
......
...@@ -11,4 +11,4 @@ is under development, with plenty of others in different stages of ...@@ -11,4 +11,4 @@ is under development, with plenty of others in different stages of
planning. planning.
The hardware designs for this board have been released under an open license; The hardware designs for this board have been released under an open license;
see the LART page at http://www.lart.tudelft.nl/ for more information. see the LART page at http://www.lartmaker.nl/ for more information.
...@@ -10,6 +10,8 @@ Introduction ...@@ -10,6 +10,8 @@ Introduction
by the 's3c2410' architecture of ARM Linux. Currently the S3C2410 and by the 's3c2410' architecture of ARM Linux. Currently the S3C2410 and
the S3C2440 are supported CPUs. the S3C2440 are supported CPUs.
Support for the S3C2400 series is in progress.
Configuration Configuration
------------- -------------
...@@ -32,6 +34,11 @@ Machines ...@@ -32,6 +34,11 @@ Machines
A general purpose development board, see EB2410ITX.txt for further A general purpose development board, see EB2410ITX.txt for further
details details
Simtec Electronics IM2440D20 (Osiris)
CPU Module from Simtec Electronics, with a S3C2440A CPU, nand flash
and a PCMCIA controller.
Samsung SMDK2410 Samsung SMDK2410
Samsung's own development board, geared for PDA work. Samsung's own development board, geared for PDA work.
...@@ -85,6 +92,26 @@ Adding New Machines ...@@ -85,6 +92,26 @@ Adding New Machines
mailing list information. mailing list information.
I2C
---
The hardware I2C core in the CPU is supported in single master
mode, and can be configured via platform data.
RTC
---
Support for the onboard RTC unit, including alarm function.
Watchdog
--------
The onchip watchdog is available via the standard watchdog
interface.
NAND NAND
---- ----
...@@ -121,6 +148,15 @@ Clock Management ...@@ -121,6 +148,15 @@ Clock Management
various clock units various clock units
Suspend to RAM
--------------
For boards that provide support for suspend to RAM, the
system can be placed into low power suspend.
See Suspend.txt for more information.
Platform Data Platform Data
------------- -------------
...@@ -158,6 +194,7 @@ Platform Data ...@@ -158,6 +194,7 @@ Platform Data
exported outside arch/arm/mach-s3c2410/, or exported to exported outside arch/arm/mach-s3c2410/, or exported to
modules via EXPORT_SYMBOL() and related functions. modules via EXPORT_SYMBOL() and related functions.
Port Contributors Port Contributors
----------------- -----------------
...@@ -188,8 +225,11 @@ Document Changes ...@@ -188,8 +225,11 @@ Document Changes
08 Mar 2005 - BJD - Added LCVR to list of people, updated introduction 08 Mar 2005 - BJD - Added LCVR to list of people, updated introduction
08 Mar 2005 - BJD - Added section on adding machines 08 Mar 2005 - BJD - Added section on adding machines
09 Sep 2005 - BJD - Added section on platform data 09 Sep 2005 - BJD - Added section on platform data
11 Feb 2006 - BJD - Added I2C, RTC and Watchdog sections
11 Feb 2006 - BJD - Added Osiris machine, and S3C2400 information
Document Author Document Author
--------------- ---------------
Ben Dooks, (c) 2004-2005 Simtec Electronics Ben Dooks, (c) 2004-2005,2006 Simtec Electronics
...@@ -58,7 +58,7 @@ below: ...@@ -58,7 +58,7 @@ below:
video_y video_y
This describes the character position of cursor on VGA console, and This describes the character position of cursor on VGA console, and
is otherwise unused. (should not used for other console types, and is otherwise unused. (should not be used for other console types, and
should not be used for other purposes). should not be used for other purposes).
memc_control_reg memc_control_reg
......
...@@ -132,8 +132,18 @@ Some new queue property settings: ...@@ -132,8 +132,18 @@ Some new queue property settings:
limit. No highmem default. limit. No highmem default.
blk_queue_max_sectors(q, max_sectors) blk_queue_max_sectors(q, max_sectors)
Maximum size request you can handle in units of 512 byte Sets two variables that limit the size of the request.
sectors. 255 default.
- The request queue's max_sectors, which is a soft size in
in units of 512 byte sectors, and could be dynamically varied
by the core kernel.
- The request queue's max_hw_sectors, which is a hard limit
and reflects the maximum size request a driver can handle
in units of 512 byte sectors.
The default for both max_sectors and max_hw_sectors is
255. The upper limit of max_sectors is 1024.
blk_queue_max_phys_segments(q, max_segments) blk_queue_max_phys_segments(q, max_segments)
Maximum physical segments you can handle in a request. 128 Maximum physical segments you can handle in a request. 128
......
...@@ -362,6 +362,27 @@ maps this page at its virtual address. ...@@ -362,6 +362,27 @@ maps this page at its virtual address.
likely that you will need to flush the instruction cache likely that you will need to flush the instruction cache
for copy_to_user_page(). for copy_to_user_page().
void flush_anon_page(struct page *page, unsigned long vmaddr)
When the kernel needs to access the contents of an anonymous
page, it calls this function (currently only
get_user_pages()). Note: flush_dcache_page() deliberately
doesn't work for an anonymous page. The default
implementation is a nop (and should remain so for all coherent
architectures). For incoherent architectures, it should flush
the cache of the page at vmaddr in the current user process.
void flush_kernel_dcache_page(struct page *page)
When the kernel needs to modify a user page is has obtained
with kmap, it calls this function after all modifications are
complete (but before kunmapping it) to bring the underlying
page up to date. It is assumed here that the user has no
incoherent cached copies (i.e. the original page was obtained
from a mechanism like get_user_pages()). The default
implementation is a nop and should remain so on all coherent
architectures. On incoherent architectures, this should flush
the kernel cache for page (using page_address(page)).
void flush_icache_range(unsigned long start, unsigned long end) void flush_icache_range(unsigned long start, unsigned long end)
When the kernel stores into addresses that it will execute When the kernel stores into addresses that it will execute
out of (eg when loading modules), this function is called. out of (eg when loading modules), this function is called.
......
...@@ -69,10 +69,11 @@ Unregisters new callback with connector core. ...@@ -69,10 +69,11 @@ Unregisters new callback with connector core.
struct cb_id *id - unique connector's user identifier. struct cb_id *id - unique connector's user identifier.
void cn_netlink_send(struct cn_msg *msg, u32 __groups, int gfp_mask); int cn_netlink_send(struct cn_msg *msg, u32 __groups, int gfp_mask);
Sends message to the specified groups. It can be safely called from Sends message to the specified groups. It can be safely called from
any context, but may silently fail under strong memory pressure. softirq context, but may silently fail under strong memory pressure.
If there are no listeners for given group -ESRCH can be returned.
struct cn_msg * - message header(with attached data). struct cn_msg * - message header(with attached data).
u32 __group - destination group. u32 __group - destination group.
......
...@@ -97,13 +97,13 @@ at which time hotplug is disabled. ...@@ -97,13 +97,13 @@ at which time hotplug is disabled.
You really dont need to manipulate any of the system cpu maps. They should You really dont need to manipulate any of the system cpu maps. They should
be read-only for most use. When setting up per-cpu resources almost always use be read-only for most use. When setting up per-cpu resources almost always use
cpu_possible_map/for_each_cpu() to iterate. cpu_possible_map/for_each_possible_cpu() to iterate.
Never use anything other than cpumask_t to represent bitmap of CPUs. Never use anything other than cpumask_t to represent bitmap of CPUs.
#include <linux/cpumask.h> #include <linux/cpumask.h>
for_each_cpu - Iterate over cpu_possible_map for_each_possible_cpu - Iterate over cpu_possible_map
for_each_online_cpu - Iterate over cpu_online_map for_each_online_cpu - Iterate over cpu_online_map
for_each_present_cpu - Iterate over cpu_present_map for_each_present_cpu - Iterate over cpu_present_map
for_each_cpu_mask(x,mask) - Iterate over some random collection of cpu mask. for_each_cpu_mask(x,mask) - Iterate over some random collection of cpu mask.
......
...@@ -4,8 +4,9 @@ ...@@ -4,8 +4,9 @@
Copyright (C) 2004 BULL SA. Copyright (C) 2004 BULL SA.
Written by Simon.Derr@bull.net Written by Simon.Derr@bull.net
Portions Copyright (c) 2004 Silicon Graphics, Inc. Portions Copyright (c) 2004-2006 Silicon Graphics, Inc.
Modified by Paul Jackson <pj@sgi.com> Modified by Paul Jackson <pj@sgi.com>
Modified by Christoph Lameter <clameter@sgi.com>
CONTENTS: CONTENTS:
========= =========
...@@ -17,7 +18,8 @@ CONTENTS: ...@@ -17,7 +18,8 @@ CONTENTS:
1.4 What are exclusive cpusets ? 1.4 What are exclusive cpusets ?
1.5 What does notify_on_release do ? 1.5 What does notify_on_release do ?
1.6 What is memory_pressure ? 1.6 What is memory_pressure ?
1.7 How do I use cpusets ? 1.7 What is memory spread ?
1.8 How do I use cpusets ?
2. Usage Examples and Syntax 2. Usage Examples and Syntax
2.1 Basic Usage 2.1 Basic Usage
2.2 Adding/removing cpus 2.2 Adding/removing cpus
...@@ -90,7 +92,8 @@ This can be especially valuable on: ...@@ -90,7 +92,8 @@ This can be especially valuable on:
These subsets, or "soft partitions" must be able to be dynamically These subsets, or "soft partitions" must be able to be dynamically
adjusted, as the job mix changes, without impacting other concurrently adjusted, as the job mix changes, without impacting other concurrently
executing jobs. executing jobs. The location of the running jobs pages may also be moved
when the memory locations are changed.
The kernel cpuset patch provides the minimum essential kernel The kernel cpuset patch provides the minimum essential kernel
mechanisms required to efficiently implement such subsets. It mechanisms required to efficiently implement such subsets. It
...@@ -102,8 +105,8 @@ memory allocator code. ...@@ -102,8 +105,8 @@ memory allocator code.
1.3 How are cpusets implemented ? 1.3 How are cpusets implemented ?
--------------------------------- ---------------------------------
Cpusets provide a Linux kernel (2.6.7 and above) mechanism to constrain Cpusets provide a Linux kernel mechanism to constrain which CPUs and
which CPUs and Memory Nodes are used by a process or set of processes. Memory Nodes are used by a process or set of processes.
The Linux kernel already has a pair of mechanisms to specify on which The Linux kernel already has a pair of mechanisms to specify on which
CPUs a task may be scheduled (sched_setaffinity) and on which Memory CPUs a task may be scheduled (sched_setaffinity) and on which Memory
...@@ -315,7 +318,78 @@ the tasks in the cpuset, in units of reclaims attempted per second, ...@@ -315,7 +318,78 @@ the tasks in the cpuset, in units of reclaims attempted per second,
times 1000. times 1000.
1.7 How do I use cpusets ? 1.7 What is memory spread ?
---------------------------
There are two boolean flag files per cpuset that control where the
kernel allocates pages for the file system buffers and related in
kernel data structures. They are called 'memory_spread_page' and
'memory_spread_slab'.
If the per-cpuset boolean flag file 'memory_spread_page' is set, then
the kernel will spread the file system buffers (page cache) evenly
over all the nodes that the faulting task is allowed to use, instead
of preferring to put those pages on the node where the task is running.
If the per-cpuset boolean flag file 'memory_spread_slab' is set,
then the kernel will spread some file system related slab caches,
such as for inodes and dentries evenly over all the nodes that the
faulting task is allowed to use, instead of preferring to put those
pages on the node where the task is running.
The setting of these flags does not affect anonymous data segment or
stack segment pages of a task.
By default, both kinds of memory spreading are off, and memory
pages are allocated on the node local to where the task is running,
except perhaps as modified by the tasks NUMA mempolicy or cpuset
configuration, so long as sufficient free memory pages are available.
When new cpusets are created, they inherit the memory spread settings
of their parent.
Setting memory spreading causes allocations for the affected page
or slab caches to ignore the tasks NUMA mempolicy and be spread
instead. Tasks using mbind() or set_mempolicy() calls to set NUMA
mempolicies will not notice any change in these calls as a result of
their containing tasks memory spread settings. If memory spreading
is turned off, then the currently specified NUMA mempolicy once again
applies to memory page allocations.
Both 'memory_spread_page' and 'memory_spread_slab' are boolean flag
files. By default they contain "0", meaning that the feature is off
for that cpuset. If a "1" is written to that file, then that turns
the named feature on.
The implementation is simple.
Setting the flag 'memory_spread_page' turns on a per-process flag
PF_SPREAD_PAGE for each task that is in that cpuset or subsequently
joins that cpuset. The page allocation calls for the page cache
is modified to perform an inline check for this PF_SPREAD_PAGE task
flag, and if set, a call to a new routine cpuset_mem_spread_node()
returns the node to prefer for the allocation.
Similarly, setting 'memory_spread_cache' turns on the flag
PF_SPREAD_SLAB, and appropriately marked slab caches will allocate
pages from the node returned by cpuset_mem_spread_node().
The cpuset_mem_spread_node() routine is also simple. It uses the
value of a per-task rotor cpuset_mem_spread_rotor to select the next
node in the current tasks mems_allowed to prefer for the allocation.
This memory placement policy is also known (in other contexts) as
round-robin or interleave.
This policy can provide substantial improvements for jobs that need
to place thread local data on the corresponding node, but that need
to access large file system data sets that need to be spread across
the several nodes in the jobs cpuset in order to fit. Without this
policy, especially for jobs that might have one thread reading in the
data set, the memory allocation across the nodes in the jobs cpuset
can become very uneven.
1.8 How do I use cpusets ?
-------------------------- --------------------------
In order to minimize the impact of cpusets on critical kernel In order to minimize the impact of cpusets on critical kernel
...@@ -371,22 +445,17 @@ cpusets memory placement policy 'mems' subsequently changes. ...@@ -371,22 +445,17 @@ cpusets memory placement policy 'mems' subsequently changes.
If the cpuset flag file 'memory_migrate' is set true, then when If the cpuset flag file 'memory_migrate' is set true, then when
tasks are attached to that cpuset, any pages that task had tasks are attached to that cpuset, any pages that task had
allocated to it on nodes in its previous cpuset are migrated allocated to it on nodes in its previous cpuset are migrated
to the tasks new cpuset. Depending on the implementation, to the tasks new cpuset. The relative placement of the page within
this migration may either be done by swapping the page out, the cpuset is preserved during these migration operations if possible.
so that the next time the page is referenced, it will be paged For example if the page was on the second valid node of the prior cpuset
into the tasks new cpuset, usually on the node where it was then the page will be placed on the second valid node of the new cpuset.
referenced, or this migration may be done by directly copying
the pages from the tasks previous cpuset to the new cpuset,
where possible to the same node, relative to the new cpuset,
as the node that held the page, relative to the old cpuset.
Also if 'memory_migrate' is set true, then if that cpusets Also if 'memory_migrate' is set true, then if that cpusets
'mems' file is modified, pages allocated to tasks in that 'mems' file is modified, pages allocated to tasks in that
cpuset, that were on nodes in the previous setting of 'mems', cpuset, that were on nodes in the previous setting of 'mems',
will be moved to nodes in the new setting of 'mems.' Again, will be moved to nodes in the new setting of 'mems.'
depending on the implementation, this might be done by swapping, Pages that were not in the tasks prior cpuset, or in the cpusets
or by direct copying. In either case, pages that were not in prior 'mems' setting, will not be moved.
the tasks prior cpuset, or in the cpusets prior 'mems' setting,
will not be moved.
There is an exception to the above. If hotplug functionality is used There is an exception to the above. If hotplug functionality is used
to remove all the CPUs that are currently assigned to a cpuset, to remove all the CPUs that are currently assigned to a cpuset,
...@@ -434,16 +503,6 @@ and then start a subshell 'sh' in that cpuset: ...@@ -434,16 +503,6 @@ and then start a subshell 'sh' in that cpuset:
# The next line should display '/Charlie' # The next line should display '/Charlie'
cat /proc/self/cpuset cat /proc/self/cpuset
In the case that a change of cpuset includes wanting to move already
allocated memory pages, consider further the work of IWAMOTO
Toshihiro <iwamoto@valinux.co.jp> for page remapping and memory
hotremoval, which can be found at:
http://people.valinux.co.jp/~iwamoto/mh.html
The integration of cpusets with such memory migration is not yet
available.
In the future, a C library interface to cpusets will likely be In the future, a C library interface to cpusets will likely be
available. For now, the only way to query or modify cpusets is available. For now, the only way to query or modify cpusets is
via the cpuset file system, using the various cd, mkdir, echo, cat, via the cpuset file system, using the various cd, mkdir, echo, cat,
......
Export cpu topology info by sysfs. Items (attributes) are similar Export cpu topology info via sysfs. Items (attributes) are similar
to /proc/cpuinfo. to /proc/cpuinfo.
1) /sys/devices/system/cpu/cpuX/topology/physical_package_id: 1) /sys/devices/system/cpu/cpuX/topology/physical_package_id:
...@@ -12,7 +12,7 @@ represent the thread siblings to cpu X in the same core; ...@@ -12,7 +12,7 @@ represent the thread siblings to cpu X in the same core;
represent the thread siblings to cpu X in the same physical package; represent the thread siblings to cpu X in the same physical package;
To implement it in an architecture-neutral way, a new source file, To implement it in an architecture-neutral way, a new source file,
driver/base/topology.c, is to export the 5 attributes. drivers/base/topology.c, is to export the 4 attributes.
If one architecture wants to support this feature, it just needs to If one architecture wants to support this feature, it just needs to
implement 4 defines, typically in file include/asm-XXX/topology.h. implement 4 defines, typically in file include/asm-XXX/topology.h.
......
...@@ -21,7 +21,7 @@ within the computer system. In the initial release, memory Correctable Errors ...@@ -21,7 +21,7 @@ within the computer system. In the initial release, memory Correctable Errors
Detecting CE events, then harvesting those events and reporting them, Detecting CE events, then harvesting those events and reporting them,
CAN be a predictor of future UE events. With CE events, the system can CAN be a predictor of future UE events. With CE events, the system can
continue to operate, but with less safety. Preventive maintainence and continue to operate, but with less safety. Preventive maintenance and
proactive part replacement of memory DIMMs exhibiting CEs can reduce proactive part replacement of memory DIMMs exhibiting CEs can reduce
the likelihood of the dreaded UE events and system 'panics'. the likelihood of the dreaded UE events and system 'panics'.
...@@ -29,13 +29,13 @@ the likelihood of the dreaded UE events and system 'panics'. ...@@ -29,13 +29,13 @@ the likelihood of the dreaded UE events and system 'panics'.
In addition, PCI Bus Parity and SERR Errors are scanned for on PCI devices In addition, PCI Bus Parity and SERR Errors are scanned for on PCI devices
in order to determine if errors are occurring on data transfers. in order to determine if errors are occurring on data transfers.
The presence of PCI Parity errors must be examined with a grain of salt. The presence of PCI Parity errors must be examined with a grain of salt.
There are several addin adapters that do NOT follow the PCI specification There are several add-in adapters that do NOT follow the PCI specification
with regards to Parity generation and reporting. The specification says with regards to Parity generation and reporting. The specification says
the vendor should tie the parity status bits to 0 if they do not intend the vendor should tie the parity status bits to 0 if they do not intend
to generate parity. Some vendors do not do this, and thus the parity bit to generate parity. Some vendors do not do this, and thus the parity bit
can "float" giving false positives. can "float" giving false positives.
The PCI Parity EDAC device has the ability to "skip" known flakey The PCI Parity EDAC device has the ability to "skip" known flaky
cards during the parity scan. These are set by the parity "blacklist" cards during the parity scan. These are set by the parity "blacklist"
interface in the sysfs for PCI Parity. (See the PCI section in the sysfs interface in the sysfs for PCI Parity. (See the PCI section in the sysfs
section below.) There is also a parity "whitelist" which is used as section below.) There is also a parity "whitelist" which is used as
...@@ -101,7 +101,7 @@ Memory Controller (mc) Model ...@@ -101,7 +101,7 @@ Memory Controller (mc) Model
First a background on the memory controller's model abstracted in EDAC. First a background on the memory controller's model abstracted in EDAC.
Each mc device controls a set of DIMM memory modules. These modules are Each mc device controls a set of DIMM memory modules. These modules are
layed out in a Chip-Select Row (csrowX) and Channel table (chX). There can laid out in a Chip-Select Row (csrowX) and Channel table (chX). There can
be multiple csrows and two channels. be multiple csrows and two channels.
Memory controllers allow for several csrows, with 8 csrows being a typical value. Memory controllers allow for several csrows, with 8 csrows being a typical value.
...@@ -131,7 +131,7 @@ for memory DIMMs: ...@@ -131,7 +131,7 @@ for memory DIMMs:
DIMM_B1 DIMM_B1
Labels for these slots are usually silk screened on the motherboard. Slots Labels for these slots are usually silk screened on the motherboard. Slots
labeled 'A' are channel 0 in this example. Slots labled 'B' labeled 'A' are channel 0 in this example. Slots labeled 'B'
are channel 1. Notice that there are two csrows possible on a are channel 1. Notice that there are two csrows possible on a
physical DIMM. These csrows are allocated their csrow assignment physical DIMM. These csrows are allocated their csrow assignment
based on the slot into which the memory DIMM is placed. Thus, when 1 DIMM based on the slot into which the memory DIMM is placed. Thus, when 1 DIMM
...@@ -140,7 +140,7 @@ is placed in each Channel, the csrows cross both DIMMs. ...@@ -140,7 +140,7 @@ is placed in each Channel, the csrows cross both DIMMs.
Memory DIMMs come single or dual "ranked". A rank is a populated csrow. Memory DIMMs come single or dual "ranked". A rank is a populated csrow.
Thus, 2 single ranked DIMMs, placed in slots DIMM_A0 and DIMM_B0 above Thus, 2 single ranked DIMMs, placed in slots DIMM_A0 and DIMM_B0 above
will have 1 csrow, csrow0. csrow1 will be empty. On the other hand, will have 1 csrow, csrow0. csrow1 will be empty. On the other hand,
when 2 dual ranked DIMMs are similiaryly placed, then both csrow0 and when 2 dual ranked DIMMs are similarly placed, then both csrow0 and
csrow1 will be populated. The pattern repeats itself for csrow2 and csrow1 will be populated. The pattern repeats itself for csrow2 and
csrow3. csrow3.
...@@ -246,7 +246,7 @@ Module Version read-only attribute file: ...@@ -246,7 +246,7 @@ Module Version read-only attribute file:
'mc_version' 'mc_version'
The EDAC CORE modules's version and compile date are shown here to The EDAC CORE module's version and compile date are shown here to
indicate what EDAC is running. indicate what EDAC is running.
...@@ -423,7 +423,7 @@ Total memory managed by this csrow attribute file: ...@@ -423,7 +423,7 @@ Total memory managed by this csrow attribute file:
'size_mb' 'size_mb'
This attribute file displays, in count of megabytes, of memory This attribute file displays, in count of megabytes, of memory
that this csrow contatins. that this csrow contains.
Memory Type attribute file: Memory Type attribute file:
...@@ -557,7 +557,7 @@ On Header Type 00 devices the primary status is looked at ...@@ -557,7 +557,7 @@ On Header Type 00 devices the primary status is looked at
for any parity error regardless of whether Parity is enabled on the for any parity error regardless of whether Parity is enabled on the
device. (The spec indicates parity is generated in some cases). device. (The spec indicates parity is generated in some cases).
On Header Type 01 bridges, the secondary status register is also On Header Type 01 bridges, the secondary status register is also
looked at to see if parity ocurred on the bus on the other side of looked at to see if parity occurred on the bus on the other side of
the bridge. the bridge.
...@@ -588,7 +588,7 @@ Panic on PCI PARITY Error: ...@@ -588,7 +588,7 @@ Panic on PCI PARITY Error:
'panic_on_pci_parity' 'panic_on_pci_parity'
This control files enables or disables panic'ing when a parity This control files enables or disables panicking when a parity
error has been detected. error has been detected.
...@@ -616,12 +616,12 @@ PCI Device Whitelist: ...@@ -616,12 +616,12 @@ PCI Device Whitelist:
This control file allows for an explicit list of PCI devices to be This control file allows for an explicit list of PCI devices to be
scanned for parity errors. Only devices found on this list will scanned for parity errors. Only devices found on this list will
be examined. The list is a line of hexadecimel VENDOR and DEVICE be examined. The list is a line of hexadecimal VENDOR and DEVICE
ID tuples: ID tuples:
1022:7450,1434:16a6 1022:7450,1434:16a6
One or more can be inserted, seperated by a comma. One or more can be inserted, separated by a comma.
To write the above list doing the following as one command line: To write the above list doing the following as one command line:
...@@ -639,11 +639,11 @@ PCI Device Blacklist: ...@@ -639,11 +639,11 @@ PCI Device Blacklist:
This control file allows for a list of PCI devices to be This control file allows for a list of PCI devices to be
skipped for scanning. skipped for scanning.
The list is a line of hexadecimel VENDOR and DEVICE ID tuples: The list is a line of hexadecimal VENDOR and DEVICE ID tuples:
1022:7450,1434:16a6 1022:7450,1434:16a6
One or more can be inserted, seperated by a comma. One or more can be inserted, separated by a comma.
To write the above list doing the following as one command line: To write the above list doing the following as one command line:
...@@ -651,14 +651,14 @@ PCI Device Blacklist: ...@@ -651,14 +651,14 @@ PCI Device Blacklist:
> /sys/devices/system/edac/pci/pci_parity_blacklist > /sys/devices/system/edac/pci/pci_parity_blacklist
To display what the whitelist current contatins, To display what the whitelist currently contains,
simply 'cat' the same file. simply 'cat' the same file.
======================================================================= =======================================================================
PCI Vendor and Devices IDs can be obtained with the lspci command. Using PCI Vendor and Devices IDs can be obtained with the lspci command. Using
the -n option lspci will display the vendor and device IDs. The system the -n option lspci will display the vendor and device IDs. The system
adminstrator will have to determine which devices should be scanned or administrator will have to determine which devices should be scanned or
skipped. skipped.
...@@ -669,5 +669,5 @@ Turn OFF a whitelist by an empty echo command: ...@@ -669,5 +669,5 @@ Turn OFF a whitelist by an empty echo command:
echo > /sys/devices/system/edac/pci/pci_parity_whitelist echo > /sys/devices/system/edac/pci/pci_parity_whitelist
and any previous blacklist will be utililzed. and any previous blacklist will be utilized.
HOWTO: Get An Avermedia DVB-T working under Linux HOWTO: Get An Avermedia DVB-T working under Linux
______________________________________________ ______________________________________________
...@@ -137,11 +136,8 @@ Getting the card going ...@@ -137,11 +136,8 @@ Getting the card going
To power up the card, load the following modules in the To power up the card, load the following modules in the
following order: following order:
* insmod dvb-core.o * modprobe bttv (normally loaded automatically)
* modprobe bttv.o * modprobe dvb-bt8xx (or place dvb-bt8xx in /etc/modules)
* insmod bt878.o
* insmod dvb-bt8xx.o
* insmod sp887x.o
Insertion of these modules into the running kernel will Insertion of these modules into the running kernel will
activate the appropriate DVB device nodes. It is then possible activate the appropriate DVB device nodes. It is then possible
...@@ -302,4 +298,4 @@ Further Update ...@@ -302,4 +298,4 @@ Further Update
Many thanks to Nigel Pearson for the updates to this document Many thanks to Nigel Pearson for the updates to this document
since the recent revision of the driver. since the recent revision of the driver.
January 29th 2004 February 14th 2006
How to get the Nebula, PCTV, FusionHDTV Lite and Twinhan DST cards working How to get the bt8xx cards working
========================================================================== ==================================
This class of cards has a bt878a as the PCI interface, and 1) General information
require the bttv driver. ======================
Please pay close attention to the warning about the bttv module This class of cards has a bt878a as the PCI interface, and require the bttv driver
options below for the DST card. for accessing the i2c bus and the gpio pins of the bt8xx chipset.
Please see Documentation/dvb/cards.txt => o Cards based on the Conexant Bt8xx PCI bridge:
1) General informations Compiling kernel please enable:
======================= a.)"Device drivers" => "Multimedia devices" => "Video For Linux" => "BT848 Video For Linux"
b.)"Device drivers" => "Multimedia devices" => "Digital Video Broadcasting Devices"
These drivers require the bttv driver to provide the means to access => "DVB for Linux" "DVB Core Support" "Bt8xx based PCI Cards"
the i2c bus and the gpio pins of the bt8xx chipset.
Because of this, you need to enable
"Device drivers" => "Multimedia devices"
=> "Video For Linux" => "BT848 Video For Linux"
Furthermore you need to enable
"Device drivers" => "Multimedia devices" => "Digital Video Broadcasting Devices"
=> "DVB for Linux" "DVB Core Support" "BT8xx based PCI cards"
2) Loading Modules 2) Loading Modules
================== ==================
In general you need to load the bttv driver, which will handle the gpio and In default cases bttv is loaded automatically.
i2c communication for us, plus the common dvb-bt8xx device driver. To load the backend either place dvb-bt8xx in etc/modules, or apply manually:
The frontends for Nebula (nxt6000), Pinnacle PCTV (cx24110), TwinHan (dst),
FusionHDTV DVB-T Lite (mt352) and FusionHDTV5 Lite (lgdt330x) are loaded
automatically by the dvb-bt8xx device driver.
3a) Nebula / Pinnacle PCTV / FusionHDTV Lite
---------------------------------------------
$ modprobe bttv (normally bttv is being loaded automatically by kmod)
$ modprobe dvb-bt8xx
(or just place dvb-bt8xx in /etc/modules for automatic loading)
3b) TwinHan and Clones
--------------------------
$ modprobe bttv card=0x71 $ modprobe dvb-bt8xx
$ modprobe dvb-bt8xx
$ modprobe dst
The value 0x71 will override the PCI type detection for dvb-bt8xx, All frontends will be loaded automatically.
which is necessary for TwinHan cards. Omission of this parameter might result People running udev please see Documentation/dvb/udev.txt.
in a system lockup.
If you're having an older card (blue color PCB) and card=0x71 locks up In the following cases overriding the PCI type detection for dvb-bt8xx might be necessary:
your machine, try using 0x68, too. If that does not work, ask on the
mailing list.
The DST module takes a couple of useful parameters. 2a) Running TwinHan and Clones
------------------------------
verbose takes values 0 to 4. These values control the verbosity level, $ modprobe bttv card=113
and can be used to debug also. $ modprobe dvb-bt8xx
$ modprobe dst
verbose=0 means complete disabling of messages Useful parameters for verbosity level and debugging the dst module:
1 only error messages are displayed
2 notifications are also displayed
3 informational messages are also displayed
4 debug setting
dst_addons takes values 0 and 0x20. A value of 0 means it is a FTA card. verbose=0: messages are disabled
0x20 means it has a Conditional Access slot. 1: only error messages are displayed
2: notifications are displayed
3: other useful messages are displayed
4: debug setting
dst_addons=0: card is a free to air (FTA) card only
0x20: card has a conditional access slot for scrambled channels
The autodetected values are determined by the cards 'response string' The autodetected values are determined by the cards' "response string".
which you can see in your logs e.g. In your logs see f. ex.: dst_get_device_id: Recognize [DSTMCI].
For bug reports please send in a complete log with verbose=4 activated.
Please also see Documentation/dvb/ci.txt.
dst_get_device_id: Recognise [DSTMCI] 2b) Running multiple cards
If you need to sent in bug reports on the dst, please do send in a complete
log with the verbose=4 module parameter. For general usage, the default setting
of verbose=1 is ideal.
4) Multiple cards
-------------------------- --------------------------
If you happen to be running multiple cards, it would be advisable to load Examples of card ID's:
the bttv module with the card id. This would help to solve any module loading
problems that you might face.
For example, if you have a Twinhan and Clones card along with a FusionHDTV5 Lite
$ modprobe bttv card=0x71 card=0x87 Pinnacle PCTV Sat: 94
Nebula Electronics Digi TV: 104
Here the order of the card id is important and should be the same as that of the pcHDTV HD-2000 TV: 112
physical order of the cards. Here card=0x71 represents the Twinhan and clones Twinhan DST and clones: 113
and card=0x87 represents Fusion HDTV5 Lite. These arguments can also be Avermedia AverTV DVB-T 771: 123
specified in decimal, rather than hex: Avermedia AverTV DVB-T 761: 124
DViCO FusionHDTV DVB-T Lite: 128
DViCO FusionHDTV 5 Lite: 135
Notice: The order of the card ID should be uprising:
Example:
$ modprobe bttv card=113 card=135 $ modprobe bttv card=113 card=135
$ modprobe dvb-bt8xx
Some examples of card-id's For a full list of card ID's please see Documentation/video4linux/CARDLIST.bttv.
In case of further problems send questions to the mailing list: www.linuxdvb.org.
Pinnacle Sat 0x5e (94)
Nebula Digi TV 0x68 (104)
PC HDTV 0x70 (112)
Twinhan 0x71 (113)
FusionHDTV DVB-T Lite 0x80 (128)
FusionHDTV5 Lite 0x87 (135)
For a full list of card-id's, see the V4L Documentation within the kernel
source: linux/Documentation/video4linux/CARDLIST.bttv
If you have problems with this please do ask on the mailing list.
--
Authors: Richard Walker, Authors: Richard Walker,
Jamie Honan, Jamie Honan,
Michael Hunold, Michael Hunold,
Manu Abraham, Manu Abraham,
Uwe Bugla,
Michael Krufky Michael Krufky
...@@ -21,8 +21,9 @@ ...@@ -21,8 +21,9 @@
use File::Temp qw/ tempdir /; use File::Temp qw/ tempdir /;
use IO::Handle; use IO::Handle;
@components = ( "sp8870", "sp887x", "tda10045", "tda10046", "av7110", "dec2000t", @components = ( "sp8870", "sp887x", "tda10045", "tda10046",
"dec2540t", "dec3000s", "vp7041", "dibusb", "nxt2002", "nxt2004", "tda10046lifeview", "av7110", "dec2000t", "dec2540t",
"dec3000s", "vp7041", "dibusb", "nxt2002", "nxt2004",
"or51211", "or51132_qam", "or51132_vsb", "bluebird"); "or51211", "or51132_qam", "or51132_vsb", "bluebird");
# Check args # Check args
...@@ -126,6 +127,24 @@ sub tda10046 { ...@@ -126,6 +127,24 @@ sub tda10046 {
$outfile; $outfile;
} }
sub tda10046lifeview {
my $sourcefile = "Drv_2.11.02.zip";
my $url = "http://www.lifeview.com.tw/drivers/pci_card/FlyDVB-T/$sourcefile";
my $hash = "1ea24dee4eea8fe971686981f34fd2e0";
my $outfile = "dvb-fe-tda10046.fw";
my $tmpdir = tempdir(DIR => "/tmp", CLEANUP => 1);
checkstandard();
wgetfile($sourcefile, $url);
unzip($sourcefile, $tmpdir);
extract("$tmpdir/LVHybrid.sys", 0x8b088, 24602, "$tmpdir/fwtmp");
verify("$tmpdir/fwtmp", $hash);
copy("$tmpdir/fwtmp", $outfile);
$outfile;
}
sub av7110 { sub av7110 {
my $sourcefile = "dvb-ttpci-01.fw-261d"; my $sourcefile = "dvb-ttpci-01.fw-261d";
my $url = "http://www.linuxtv.org/downloads/firmware/$sourcefile"; my $url = "http://www.linuxtv.org/downloads/firmware/$sourcefile";
...@@ -227,7 +246,7 @@ sub vp7041 { ...@@ -227,7 +246,7 @@ sub vp7041 {
} }
sub dibusb { sub dibusb {
my $url = "http://www.linuxtv.org/downloads/firmware/dvb-dibusb-5.0.0.11.fw"; my $url = "http://www.linuxtv.org/downloads/firmware/dvb-usb-dibusb-5.0.0.11.fw";
my $outfile = "dvb-dibusb-5.0.0.11.fw"; my $outfile = "dvb-dibusb-5.0.0.11.fw";
my $hash = "fa490295a527360ca16dcdf3224ca243"; my $hash = "fa490295a527360ca16dcdf3224ca243";
......
...@@ -20,11 +20,23 @@ http://linuxtv.org/downloads/ ...@@ -20,11 +20,23 @@ http://linuxtv.org/downloads/
What's inside this directory: What's inside this directory:
"avermedia.txt"
contains detailed information about the
Avermedia DVB-T cards. See also "bt8xx.txt".
"bt8xx.txt"
contains detailed information about the
various bt8xx based "budget" DVB cards.
"cards.txt" "cards.txt"
contains a list of supported hardware. contains a list of supported hardware.
"ci.txt"
contains detailed information about the
CI module as part from TwinHan cards and Clones.
"contributors.txt" "contributors.txt"
is the who-is-who of DVB development is the who-is-who of DVB development.
"faq.txt" "faq.txt"
contains frequently asked questions and their answers. contains frequently asked questions and their answers.
...@@ -34,19 +46,17 @@ script to download and extract firmware for those devices ...@@ -34,19 +46,17 @@ script to download and extract firmware for those devices
that require it. that require it.
"ttusb-dec.txt" "ttusb-dec.txt"
contains detailed informations about the contains detailed information about the
TT DEC2000/DEC3000 USB DVB hardware. TT DEC2000/DEC3000 USB DVB hardware.
"bt8xx.txt"
contains detailed installation instructions for the
various bt8xx based "budget" DVB cards
(Nebula, Pinnacle PCTV, Twinhan DST)
"README.dibusb"
contains detailed information about adapters
based on DiBcom reference design.
"udev.txt" "udev.txt"
how to get DVB and udev up and running. how to get DVB and udev up and running.
"README.dvb-usb"
contains detailed information about the DVB USB cards.
"README.flexcop"
contains detailed information about the
Technisat- and Flexcop B2C2 drivers.
Good luck and have fun! Good luck and have fun!
...@@ -116,9 +116,13 @@ Who: Harald Welte <laforge@netfilter.org> ...@@ -116,9 +116,13 @@ Who: Harald Welte <laforge@netfilter.org>
--------------------------- ---------------------------
What: EXPORT_SYMBOL(lookup_hash) What: remove EXPORT_SYMBOL(kernel_thread)
When: January 2006 When: August 2006
Why: Too low-level interface. Use lookup_one_len or lookup_create instead. Files: arch/*/kernel/*_ksyms.c
Why: kernel_thread is a low-level implementation detail. Drivers should
use the <linux/kthread.h> API instead which shields them from
implementation details and provides a higherlevel interface that
prevents bugs and code duplication
Who: Christoph Hellwig <hch@lst.de> Who: Christoph Hellwig <hch@lst.de>
--------------------------- ---------------------------
...@@ -151,10 +155,10 @@ Who: Ralf Baechle <ralf@linux-mips.org> ...@@ -151,10 +155,10 @@ Who: Ralf Baechle <ralf@linux-mips.org>
--------------------------- ---------------------------
What: Legacy /proc/pci interface (PCI_LEGACY_PROC) What: eepro100 network driver
When: March 2006 When: January 2007
Why: deprecated since 2.5.53 in favor of lspci(8) Why: replaced by the e100 driver
Who: Adrian Bunk <bunk@stusta.de> Who: Adrian Bunk <bunk@stusta.de>
--------------------------- ---------------------------
...@@ -165,6 +169,18 @@ Who: Richard Knutsson <ricknu-0@student.ltu.se> and Greg Kroah-Hartman <gregkh@s ...@@ -165,6 +169,18 @@ Who: Richard Knutsson <ricknu-0@student.ltu.se> and Greg Kroah-Hartman <gregkh@s
--------------------------- ---------------------------
What: Usage of invalid timevals in setitimer
When: March 2007
Why: POSIX requires to validate timevals in the setitimer call. This
was never done by Linux. The invalid (e.g. negative timevals) were
silently converted to more or less random timeouts and intervals.
Until the removal a per boot limited number of warnings is printed
and the timevals are sanitized.
Who: Thomas Gleixner <tglx@linutronix.de>
---------------------------
What: I2C interface of the it87 driver What: I2C interface of the it87 driver
When: January 2007 When: January 2007
Why: The ISA interface is faster and should be always available. The I2C Why: The ISA interface is faster and should be always available. The I2C
...@@ -174,6 +190,17 @@ Who: Jean Delvare <khali@linux-fr.org> ...@@ -174,6 +190,17 @@ Who: Jean Delvare <khali@linux-fr.org>
--------------------------- ---------------------------
What: remove EXPORT_SYMBOL(tasklist_lock)
When: August 2006
Files: kernel/fork.c
Why: tasklist_lock protects the kernel internal task list. Modules have
no business looking at it, and all instances in drivers have been due
to use of too-lowlevel APIs. Having this symbol exported prevents
moving to more scalable locking schemes for the task list.
Who: Christoph Hellwig <hch@lst.de>
---------------------------
What: mount/umount uevents What: mount/umount uevents
When: February 2007 When: February 2007
Why: These events are not correct, and do not properly let userspace know Why: These events are not correct, and do not properly let userspace know
...@@ -189,3 +216,33 @@ Why: Board specific code doesn't build anymore since ~2.6.0 and no ...@@ -189,3 +216,33 @@ Why: Board specific code doesn't build anymore since ~2.6.0 and no
users have complained indicating there is no more need for these users have complained indicating there is no more need for these
boards. This should really be considered a last call. boards. This should really be considered a last call.
Who: Ralf Baechle <ralf@linux-mips.org> Who: Ralf Baechle <ralf@linux-mips.org>
---------------------------
What: USB driver API moves to EXPORT_SYMBOL_GPL
When: Febuary 2008
Files: include/linux/usb.h, drivers/usb/core/driver.c
Why: The USB subsystem has changed a lot over time, and it has been
possible to create userspace USB drivers using usbfs/libusb/gadgetfs
that operate as fast as the USB bus allows. Because of this, the USB
subsystem will not be allowing closed source kernel drivers to
register with it, after this grace period is over. If anyone needs
any help in converting their closed source drivers over to use the
userspace filesystems, please contact the
linux-usb-devel@lists.sourceforge.net mailing list, and the developers
there will be glad to help you out.
Who: Greg Kroah-Hartman <gregkh@suse.de>
---------------------------
What: find_trylock_page
When: January 2007
Why: The interface no longer has any callers left in the kernel. It
is an odd interface (compared with other find_*_page functions), in
that it does not take a refcount to the page, only the page lock.
It should be replaced with find_get_page or find_lock_page if possible.
This feature removal can be reevaluated if users of the interface
cannot cleanly use something else.
Who: Nick Piggin <npiggin@suse.de>
---------------------------
00-INDEX 00-INDEX
- this file (info on some of the filesystems supported by linux). - this file (info on some of the filesystems supported by linux).
Exporting
- explanation of how to make filesystems exportable.
Locking Locking
- info on locking rules as they pertain to Linux VFS. - info on locking rules as they pertain to Linux VFS.
adfs.txt adfs.txt
- info and mount options for the Acorn Advanced Disc Filing System. - info and mount options for the Acorn Advanced Disc Filing System.
afs.txt
- info and examples for the distributed AFS (Andrew File System) fs.
affs.txt affs.txt
- info and mount options for the Amiga Fast File System. - info and mount options for the Amiga Fast File System.
automount-support.txt
- information about filesystem automount support.
befs.txt
- information about the BeOS filesystem for Linux.
bfs.txt bfs.txt
- info for the SCO UnixWare Boot Filesystem (BFS). - info for the SCO UnixWare Boot Filesystem (BFS).
cifs.txt cifs.txt
- description of the CIFS filesystem - description of the CIFS filesystem.
coda.txt coda.txt
- description of the CODA filesystem. - description of the CODA filesystem.
configfs/ configfs/
- directory containing configfs documentation and example code. - directory containing configfs documentation and example code.
cramfs.txt cramfs.txt
- info on the cram filesystem for small storage (ROMs etc) - info on the cram filesystem for small storage (ROMs etc).
dentry-locking.txt
- info on the RCU-based dcache locking model.
devfs/ devfs/
- directory containing devfs documentation. - directory containing devfs documentation.
directory-locking
- info about the locking scheme used for directory operations.
dlmfs.txt dlmfs.txt
- info on the userspace interface to the OCFS2 DLM. - info on the userspace interface to the OCFS2 DLM.
ext2.txt ext2.txt
- info, mount options and specifications for the Ext2 filesystem. - info, mount options and specifications for the Ext2 filesystem.
ext3.txt
- info, mount options and specifications for the Ext3 filesystem.
files.txt
- info on file management in the Linux kernel.
fuse.txt
- info on the Filesystem in User SpacE including mount options.
hfs.txt
- info on the Macintosh HFS Filesystem for Linux.
hpfs.txt hpfs.txt
- info and mount options for the OS/2 HPFS. - info and mount options for the OS/2 HPFS.
isofs.txt isofs.txt
...@@ -32,23 +52,43 @@ ncpfs.txt ...@@ -32,23 +52,43 @@ ncpfs.txt
- info on Novell Netware(tm) filesystem using NCP protocol. - info on Novell Netware(tm) filesystem using NCP protocol.
ntfs.txt ntfs.txt
- info and mount options for the NTFS filesystem (Windows NT). - info and mount options for the NTFS filesystem (Windows NT).
proc.txt
- info on Linux's /proc filesystem.
ocfs2.txt ocfs2.txt
- info and mount options for the OCFS2 clustered filesystem. - info and mount options for the OCFS2 clustered filesystem.
porting
- various information on filesystem porting.
proc.txt
- info on Linux's /proc filesystem.
ramfs-rootfs-initramfs.txt
- info on the 'in memory' filesystems ramfs, rootfs and initramfs.
reiser4.txt
- info on the Reiser4 filesystem based on dancing tree algorithms.
relayfs.txt
- info on relayfs, for efficient streaming from kernel to user space.
romfs.txt romfs.txt
- Description of the ROMFS filesystem. - description of the ROMFS filesystem.
smbfs.txt smbfs.txt
- info on using filesystems with the SMB protocol (Windows 3.11 and NT) - info on using filesystems with the SMB protocol (Win 3.11 and NT).
spufs.txt
- info and mount options for the SPU filesystem used on Cell.
sysfs-pci.txt
- info on accessing PCI device resources through sysfs.
sysfs.txt
- info on sysfs, a ram-based filesystem for exporting kernel objects.
sysv-fs.txt sysv-fs.txt
- info on the SystemV/V7/Xenix/Coherent filesystem. - info on the SystemV/V7/Xenix/Coherent filesystem.
tmpfs.txt
- info on tmpfs, a filesystem that holds all files in virtual memory.
udf.txt udf.txt
- info and mount options for the UDF filesystem. - info and mount options for the UDF filesystem.
ufs.txt ufs.txt
- info on the ufs filesystem. - info on the ufs filesystem.
v9fs.txt
- v9fs is a Unix implementation of the Plan 9 9p remote fs protocol.
vfat.txt vfat.txt
- info on using the VFAT filesystem used in Windows NT and Windows 95 - info on using the VFAT filesystem used in Windows NT and Windows 95
vfs.txt vfs.txt
- Overview of the Virtual File System - overview of the Virtual File System
xfs.txt xfs.txt
- info and mount options for the XFS filesystem. - info and mount options for the XFS filesystem.
xip.txt
- info on execute-in-place for file mappings.
V9FS: 9P2000 for Linux v9fs: Plan 9 Resource Sharing for Linux
====================== =======================================
ABOUT ABOUT
===== =====
...@@ -9,18 +9,19 @@ v9fs is a Unix implementation of the Plan 9 9p remote filesystem protocol. ...@@ -9,18 +9,19 @@ v9fs is a Unix implementation of the Plan 9 9p remote filesystem protocol.
This software was originally developed by Ron Minnich <rminnich@lanl.gov> This software was originally developed by Ron Minnich <rminnich@lanl.gov>
and Maya Gokhale <maya@lanl.gov>. Additional development by Greg Watson and Maya Gokhale <maya@lanl.gov>. Additional development by Greg Watson
<gwatson@lanl.gov> and most recently Eric Van Hensbergen <gwatson@lanl.gov> and most recently Eric Van Hensbergen
<ericvh@gmail.com> and Latchesar Ionkov <lucho@ionkov.net>. <ericvh@gmail.com>, Latchesar Ionkov <lucho@ionkov.net> and Russ Cox
<rsc@swtch.com>.
USAGE USAGE
===== =====
For remote file server: For remote file server:
mount -t 9P 10.10.1.2 /mnt/9 mount -t 9p 10.10.1.2 /mnt/9
For Plan 9 From User Space applications (http://swtch.com/plan9) For Plan 9 From User Space applications (http://swtch.com/plan9)
mount -t 9P `namespace`/acme /mnt/9 -o proto=unix,name=$USER mount -t 9p `namespace`/acme /mnt/9 -o proto=unix,uname=$USER
OPTIONS OPTIONS
======= =======
...@@ -32,7 +33,7 @@ OPTIONS ...@@ -32,7 +33,7 @@ OPTIONS
fd - used passed file descriptors for connection fd - used passed file descriptors for connection
(see rfdno and wfdno) (see rfdno and wfdno)
name=name user name to attempt mount as on the remote server. The uname=name user name to attempt mount as on the remote server. The
server may override or ignore this value. Certain user server may override or ignore this value. Certain user
names may require authentication. names may require authentication.
...@@ -42,7 +43,7 @@ OPTIONS ...@@ -42,7 +43,7 @@ OPTIONS
debug=n specifies debug level. The debug level is a bitmask. debug=n specifies debug level. The debug level is a bitmask.
0x01 = display verbose error messages 0x01 = display verbose error messages
0x02 = developer debug (DEBUG_CURRENT) 0x02 = developer debug (DEBUG_CURRENT)
0x04 = display 9P trace 0x04 = display 9p trace
0x08 = display VFS trace 0x08 = display VFS trace
0x10 = display Marshalling debug 0x10 = display Marshalling debug
0x20 = display RPC debug 0x20 = display RPC debug
...@@ -53,11 +54,11 @@ OPTIONS ...@@ -53,11 +54,11 @@ OPTIONS
wfdno=n the file descriptor for writing with proto=fd wfdno=n the file descriptor for writing with proto=fd
maxdata=n the number of bytes to use for 9P packet payload (msize) maxdata=n the number of bytes to use for 9p packet payload (msize)
port=n port to connect to on the remote server port=n port to connect to on the remote server
noextend force legacy mode (no 9P2000.u semantics) noextend force legacy mode (no 9p2000.u semantics)
uid attempt to mount as a particular uid uid attempt to mount as a particular uid
...@@ -72,7 +73,7 @@ OPTIONS ...@@ -72,7 +73,7 @@ OPTIONS
RESOURCES RESOURCES
========= =========
The Linux version of the 9P server is now maintained under the npfs project The Linux version of the 9p server is now maintained under the npfs project
on sourceforge (http://sourceforge.net/projects/npfs). on sourceforge (http://sourceforge.net/projects/npfs).
There are user and developer mailing lists available through the v9fs project There are user and developer mailing lists available through the v9fs project
......
...@@ -9,9 +9,9 @@ when using discs encoded using Microsoft's Joliet extensions. ...@@ -9,9 +9,9 @@ when using discs encoded using Microsoft's Joliet extensions.
iocharset=name Character set to use for converting from Unicode to iocharset=name Character set to use for converting from Unicode to
ASCII. Joliet filenames are stored in Unicode format, but ASCII. Joliet filenames are stored in Unicode format, but
Unix for the most part doesn't know how to deal with Unicode. Unix for the most part doesn't know how to deal with Unicode.
There is also an option of doing UTF8 translations with the There is also an option of doing UTF-8 translations with the
utf8 option. utf8 option.
utf8 Encode Unicode names in UTF8 format. Default is no. utf8 Encode Unicode names in UTF-8 format. Default is no.
Mount options unique to the isofs filesystem. Mount options unique to the isofs filesystem.
block=512 Set the block size for the disk to 512 bytes block=512 Set the block size for the disk to 512 bytes
......
...@@ -6,7 +6,7 @@ The following mount options are supported: ...@@ -6,7 +6,7 @@ The following mount options are supported:
iocharset=name Character set to use for converting from Unicode to iocharset=name Character set to use for converting from Unicode to
ASCII. The default is to do no conversion. Use ASCII. The default is to do no conversion. Use
iocharset=utf8 for UTF8 translations. This requires iocharset=utf8 for UTF-8 translations. This requires
CONFIG_NLS_UTF8 to be set in the kernel .config file. CONFIG_NLS_UTF8 to be set in the kernel .config file.
iocharset=none specifies the default behavior explicitly. iocharset=none specifies the default behavior explicitly.
......
...@@ -457,6 +457,11 @@ ChangeLog ...@@ -457,6 +457,11 @@ ChangeLog
Note, a technical ChangeLog aimed at kernel hackers is in fs/ntfs/ChangeLog. Note, a technical ChangeLog aimed at kernel hackers is in fs/ntfs/ChangeLog.
2.1.27:
- Implement page migration support so the kernel can move memory used
by NTFS files and directories around for management purposes.
- Add support for writing to sparse files created with Windows XP SP2.
- Many minor improvements and bug fixes.
2.1.26: 2.1.26:
- Implement support for sector sizes above 512 bytes (up to the maximum - Implement support for sector sizes above 512 bytes (up to the maximum
supported by NTFS which is 4096 bytes). supported by NTFS which is 4096 bytes).
......
...@@ -121,7 +121,7 @@ Table 1-1: Process specific entries in /proc ...@@ -121,7 +121,7 @@ Table 1-1: Process specific entries in /proc
.............................................................................. ..............................................................................
File Content File Content
cmdline Command line arguments cmdline Command line arguments
cpu Current and last cpu in wich it was executed (2.4)(smp) cpu Current and last cpu in which it was executed (2.4)(smp)
cwd Link to the current working directory cwd Link to the current working directory
environ Values of environment variables environ Values of environment variables
exe Link to the executable of this process exe Link to the executable of this process
...@@ -309,13 +309,13 @@ is the same by default: ...@@ -309,13 +309,13 @@ is the same by default:
> cat /proc/irq/0/smp_affinity > cat /proc/irq/0/smp_affinity
ffffffff ffffffff
It's a bitmask, in wich you can specify wich CPUs can handle the IRQ, you can It's a bitmask, in which you can specify which CPUs can handle the IRQ, you can
set it by doing: set it by doing:
> echo 1 > /proc/irq/prof_cpu_mask > echo 1 > /proc/irq/prof_cpu_mask
This means that only the first CPU will handle the IRQ, but you can also echo 5 This means that only the first CPU will handle the IRQ, but you can also echo 5
wich means that only the first and fourth CPU can handle the IRQ. which means that only the first and fourth CPU can handle the IRQ.
The way IRQs are routed is handled by the IO-APIC, and it's Round Robin The way IRQs are routed is handled by the IO-APIC, and it's Round Robin
between all the CPUs which are allowed to handle it. As usual the kernel has between all the CPUs which are allowed to handle it. As usual the kernel has
......
...@@ -26,6 +26,20 @@ The following mount options are supported: ...@@ -26,6 +26,20 @@ The following mount options are supported:
nostrict Unset strict conformance nostrict Unset strict conformance
iocharset= Set the NLS character set iocharset= Set the NLS character set
The uid= and gid= options need a bit more explaining. They will accept a
decimal numeric value which will be used as the default ID for that mount.
They will also accept the string "ignore" and "forget". For files on the disk
that are owned by nobody ( -1 ), they will instead look as if they are owned
by the default ID. The ignore option causes the default ID to override all
IDs on the disk, not just -1. The forget option causes all IDs to be written
to disk as -1, so when the media is later remounted, they will appear to be
owned by whatever default ID it is mounted with at that time.
For typical desktop use of removable media, you should set the ID to that
of the interactively logged on user, and also specify both the forget and
ignore options. This way the interactive user will always see the files
on the disk as belonging to him.
The remaining are for debugging and disaster recovery: The remaining are for debugging and disaster recovery:
novrs Skip volume sequence recognition novrs Skip volume sequence recognition
......
...@@ -28,16 +28,16 @@ iocharset=name -- Character set to use for converting between the ...@@ -28,16 +28,16 @@ iocharset=name -- Character set to use for converting between the
know how to deal with Unicode. know how to deal with Unicode.
By default, FAT_DEFAULT_IOCHARSET setting is used. By default, FAT_DEFAULT_IOCHARSET setting is used.
There is also an option of doing UTF8 translations There is also an option of doing UTF-8 translations
with the utf8 option. with the utf8 option.
NOTE: "iocharset=utf8" is not recommended. If unsure, NOTE: "iocharset=utf8" is not recommended. If unsure,
you should consider the following option instead. you should consider the following option instead.
utf8=<bool> -- UTF8 is the filesystem safe version of Unicode that utf8=<bool> -- UTF-8 is the filesystem safe version of Unicode that
is used by the console. It can be be enabled for the is used by the console. It can be be enabled for the
filesystem with this option. If 'uni_xlate' gets set, filesystem with this option. If 'uni_xlate' gets set,
UTF8 gets disabled. UTF-8 gets disabled.
uni_xlate=<bool> -- Translate unhandled Unicode characters to special uni_xlate=<bool> -- Translate unhandled Unicode characters to special
escaped sequences. This would let you backup and escaped sequences. This would let you backup and
......
...@@ -230,10 +230,15 @@ only called from a process context (i.e. not from an interrupt handler ...@@ -230,10 +230,15 @@ only called from a process context (i.e. not from an interrupt handler
or bottom half). or bottom half).
alloc_inode: this method is called by inode_alloc() to allocate memory alloc_inode: this method is called by inode_alloc() to allocate memory
for struct inode and initialize it. for struct inode and initialize it. If this function is not
defined, a simple 'struct inode' is allocated. Normally
alloc_inode will be used to allocate a larger structure which
contains a 'struct inode' embedded within it.
destroy_inode: this method is called by destroy_inode() to release destroy_inode: this method is called by destroy_inode() to release
resources allocated for struct inode. resources allocated for struct inode. It is only required if
->alloc_inode was defined and simply undoes anything done by
->alloc_inode.
read_inode: this method is called to read a specific inode from the read_inode: this method is called to read a specific inode from the
mounted filesystem. The i_ino member in the struct inode is mounted filesystem. The i_ino member in the struct inode is
...@@ -443,14 +448,81 @@ otherwise noted. ...@@ -443,14 +448,81 @@ otherwise noted.
The Address Space Object The Address Space Object
======================== ========================
The address space object is used to identify pages in the page cache. The address space object is used to group and manage pages in the page
cache. It can be used to keep track of the pages in a file (or
anything else) and also track the mapping of sections of the file into
process address spaces.
There are a number of distinct yet related services that an
address-space can provide. These include communicating memory
pressure, page lookup by address, and keeping track of pages tagged as
Dirty or Writeback.
The first can be used independently to the others. The VM can try to
either write dirty pages in order to clean them, or release clean
pages in order to reuse them. To do this it can call the ->writepage
method on dirty pages, and ->releasepage on clean pages with
PagePrivate set. Clean pages without PagePrivate and with no external
references will be released without notice being given to the
address_space.
To achieve this functionality, pages need to be placed on an LRU with
lru_cache_add and mark_page_active needs to be called whenever the
page is used.
Pages are normally kept in a radix tree index by ->index. This tree
maintains information about the PG_Dirty and PG_Writeback status of
each page, so that pages with either of these flags can be found
quickly.
The Dirty tag is primarily used by mpage_writepages - the default
->writepages method. It uses the tag to find dirty pages to call
->writepage on. If mpage_writepages is not used (i.e. the address
provides its own ->writepages) , the PAGECACHE_TAG_DIRTY tag is
almost unused. write_inode_now and sync_inode do use it (through
__sync_single_inode) to check if ->writepages has been successful in
writing out the whole address_space.
The Writeback tag is used by filemap*wait* and sync_page* functions,
via wait_on_page_writeback_range, to wait for all writeback to
complete. While waiting ->sync_page (if defined) will be called on
each page that is found to require writeback.
An address_space handler may attach extra information to a page,
typically using the 'private' field in the 'struct page'. If such
information is attached, the PG_Private flag should be set. This will
cause various VM routines to make extra calls into the address_space
handler to deal with that data.
An address space acts as an intermediate between storage and
application. Data is read into the address space a whole page at a
time, and provided to the application either by copying of the page,
or by memory-mapping the page.
Data is written into the address space by the application, and then
written-back to storage typically in whole pages, however the
address_space has finer control of write sizes.
The read process essentially only requires 'readpage'. The write
process is more complicated and uses prepare_write/commit_write or
set_page_dirty to write data into the address_space, and writepage,
sync_page, and writepages to writeback data to storage.
Adding and removing pages to/from an address_space is protected by the
inode's i_mutex.
When data is written to a page, the PG_Dirty flag should be set. It
typically remains set until writepage asks for it to be written. This
should clear PG_Dirty and set PG_Writeback. It can be actually
written at any point after PG_Dirty is clear. Once it is known to be
safe, PG_Writeback is cleared.
Writeback makes use of a writeback_control structure...
struct address_space_operations struct address_space_operations
------------------------------- -------------------------------
This describes how the VFS can manipulate mapping of a file to page cache in This describes how the VFS can manipulate mapping of a file to page cache in
your filesystem. As of kernel 2.6.13, the following members are defined: your filesystem. As of kernel 2.6.16, the following members are defined:
struct address_space_operations { struct address_space_operations {
int (*writepage)(struct page *page, struct writeback_control *wbc); int (*writepage)(struct page *page, struct writeback_control *wbc);
...@@ -469,47 +541,148 @@ struct address_space_operations { ...@@ -469,47 +541,148 @@ struct address_space_operations {
loff_t offset, unsigned long nr_segs); loff_t offset, unsigned long nr_segs);
struct page* (*get_xip_page)(struct address_space *, sector_t, struct page* (*get_xip_page)(struct address_space *, sector_t,
int); int);
/* migrate the contents of a page to the specified target */
int (*migratepage) (struct page *, struct page *);
}; };
writepage: called by the VM write a dirty page to backing store. writepage: called by the VM to write a dirty page to backing store.
This may happen for data integrity reasons (i.e. 'sync'), or
to free up memory (flush). The difference can be seen in
wbc->sync_mode.
The PG_Dirty flag has been cleared and PageLocked is true.
writepage should start writeout, should set PG_Writeback,
and should make sure the page is unlocked, either synchronously
or asynchronously when the write operation completes.
If wbc->sync_mode is WB_SYNC_NONE, ->writepage doesn't have to
try too hard if there are problems, and may choose to write out
other pages from the mapping if that is easier (e.g. due to
internal dependencies). If it chooses not to start writeout, it
should return AOP_WRITEPAGE_ACTIVATE so that the VM will not keep
calling ->writepage on that page.
See the file "Locking" for more details.
readpage: called by the VM to read a page from backing store. readpage: called by the VM to read a page from backing store.
The page will be Locked when readpage is called, and should be
unlocked and marked uptodate once the read completes.
If ->readpage discovers that it needs to unlock the page for
some reason, it can do so, and then return AOP_TRUNCATED_PAGE.
In this case, the page will be relocated, relocked and if
that all succeeds, ->readpage will be called again.
sync_page: called by the VM to notify the backing store to perform all sync_page: called by the VM to notify the backing store to perform all
queued I/O operations for a page. I/O operations for other pages queued I/O operations for a page. I/O operations for other pages
associated with this address_space object may also be performed. associated with this address_space object may also be performed.
This function is optional and is called only for pages with
PG_Writeback set while waiting for the writeback to complete.
writepages: called by the VM to write out pages associated with the writepages: called by the VM to write out pages associated with the
address_space object. address_space object. If wbc->sync_mode is WBC_SYNC_ALL, then
the writeback_control will specify a range of pages that must be
written out. If it is WBC_SYNC_NONE, then a nr_to_write is given
and that many pages should be written if possible.
If no ->writepages is given, then mpage_writepages is used
instead. This will choose pages from the address space that are
tagged as DIRTY and will pass them to ->writepage.
set_page_dirty: called by the VM to set a page dirty. set_page_dirty: called by the VM to set a page dirty.
This is particularly needed if an address space attaches
private data to a page, and that data needs to be updated when
a page is dirtied. This is called, for example, when a memory
mapped page gets modified.
If defined, it should set the PageDirty flag, and the
PAGECACHE_TAG_DIRTY tag in the radix tree.
readpages: called by the VM to read pages associated with the address_space readpages: called by the VM to read pages associated with the address_space
object. object. This is essentially just a vector version of
readpage. Instead of just one page, several pages are
requested.
readpages is only used for read-ahead, so read errors are
ignored. If anything goes wrong, feel free to give up.
prepare_write: called by the generic write path in VM to set up a write prepare_write: called by the generic write path in VM to set up a write
request for a page. request for a page. This indicates to the address space that
the given range of bytes is about to be written. The
commit_write: called by the generic write path in VM to write page to address_space should check that the write will be able to
its backing store. complete, by allocating space if necessary and doing any other
internal housekeeping. If the write will update parts of
any basic-blocks on storage, then those blocks should be
pre-read (if they haven't been read already) so that the
updated blocks can be written out properly.
The page will be locked. If prepare_write wants to unlock the
page it, like readpage, may do so and return
AOP_TRUNCATED_PAGE.
In this case the prepare_write will be retried one the lock is
regained.
commit_write: If prepare_write succeeds, new data will be copied
into the page and then commit_write will be called. It will
typically update the size of the file (if appropriate) and
mark the inode as dirty, and do any other related housekeeping
operations. It should avoid returning an error if possible -
errors should have been handled by prepare_write.
bmap: called by the VFS to map a logical block offset within object to bmap: called by the VFS to map a logical block offset within object to
physical block number. This method is use by for the legacy FIBMAP physical block number. This method is used by the FIBMAP
ioctl. Other uses are discouraged. ioctl and for working with swap-files. To be able to swap to
a file, the file must have a stable mapping to a block
invalidatepage: called by the VM on truncate to disassociate a page from its device. The swap system does not go through the filesystem
address_space mapping. but instead uses bmap to find out where the blocks in the file
are and uses those addresses directly.
releasepage: called by the VFS to release filesystem specific metadata from
a page.
invalidatepage: If a page has PagePrivate set, then invalidatepage
direct_IO: called by the VM for direct I/O writes and reads. will be called when part or all of the page is to be removed
from the address space. This generally corresponds to either a
truncation or a complete invalidation of the address space
(in the latter case 'offset' will always be 0).
Any private data associated with the page should be updated
to reflect this truncation. If offset is 0, then
the private data should be released, because the page
must be able to be completely discarded. This may be done by
calling the ->releasepage function, but in this case the
release MUST succeed.
releasepage: releasepage is called on PagePrivate pages to indicate
that the page should be freed if possible. ->releasepage
should remove any private data from the page and clear the
PagePrivate flag. It may also remove the page from the
address_space. If this fails for some reason, it may indicate
failure with a 0 return value.
This is used in two distinct though related cases. The first
is when the VM finds a clean page with no active users and
wants to make it a free page. If ->releasepage succeeds, the
page will be removed from the address_space and become free.
The second case if when a request has been made to invalidate
some or all pages in an address_space. This can happen
through the fadvice(POSIX_FADV_DONTNEED) system call or by the
filesystem explicitly requesting it as nfs and 9fs do (when
they believe the cache may be out of date with storage) by
calling invalidate_inode_pages2().
If the filesystem makes such a call, and needs to be certain
that all pages are invalidated, then its releasepage will
need to ensure this. Possibly it can clear the PageUptodate
bit if it cannot free private data yet.
direct_IO: called by the generic read/write routines to perform
direct_IO - that is IO requests which bypass the page cache
and transfer data directly between the storage and the
application's address space.
get_xip_page: called by the VM to translate a block number to a page. get_xip_page: called by the VM to translate a block number to a page.
The page is valid until the corresponding filesystem is unmounted. The page is valid until the corresponding filesystem is unmounted.
Filesystems that want to use execute-in-place (XIP) need to implement Filesystems that want to use execute-in-place (XIP) need to implement
it. An example implementation can be found in fs/ext2/xip.c. it. An example implementation can be found in fs/ext2/xip.c.
migrate_page: This is used to compact the physical memory usage.
If the VM wants to relocate a page (maybe off a memory card
that is signalling imminent failure) it will pass a new page
and an old page to this function. migrate_page should
transfer any private data across and update any references
that it has to the page.
The File Object The File Object
=============== ===============
......
...@@ -23,7 +23,6 @@ char __init inkernel_firmware[] = "let's say that this is firmware\n"; ...@@ -23,7 +23,6 @@ char __init inkernel_firmware[] = "let's say that this is firmware\n";
#endif #endif
static struct device ghost_device = { static struct device ghost_device = {
.name = "Ghost Device",
.bus_id = "ghost0", .bus_id = "ghost0",
}; };
...@@ -92,7 +91,7 @@ static void sample_probe_async(void) ...@@ -92,7 +91,7 @@ static void sample_probe_async(void)
{ {
/* Let's say that I can't sleep */ /* Let's say that I can't sleep */
int error; int error;
error = request_firmware_nowait (THIS_MODULE, error = request_firmware_nowait (THIS_MODULE, FW_ACTION_NOHOTPLUG,
"sample_driver_fw", &ghost_device, "sample_driver_fw", &ghost_device,
"my device pointer", "my device pointer",
sample_probe_async_cont); sample_probe_async_cont);
......
...@@ -172,7 +172,6 @@ static void fw_remove_class_device(struct class_device *class_dev) ...@@ -172,7 +172,6 @@ static void fw_remove_class_device(struct class_device *class_dev)
static struct class_device *class_dev; static struct class_device *class_dev;
static struct device my_device = { static struct device my_device = {
.name = "Sample Device",
.bus_id = "my_dev0", .bus_id = "my_dev0",
}; };
......
...@@ -18,6 +18,10 @@ Supported chips: ...@@ -18,6 +18,10 @@ Supported chips:
Prefix: 'w83637hf' Prefix: 'w83637hf'
Addresses scanned: ISA address retrieved from Super I/O registers Addresses scanned: ISA address retrieved from Super I/O registers
Datasheet: http://www.winbond.com/PDF/sheet/w83637hf.pdf Datasheet: http://www.winbond.com/PDF/sheet/w83637hf.pdf
* Winbond W83687THF
Prefix: 'w83687thf'
Addresses scanned: ISA address retrieved from Super I/O registers
Datasheet: Provided by Winbond on request
Authors: Authors:
Frodo Looijaard <frodol@dds.nl>, Frodo Looijaard <frodol@dds.nl>,
......
...@@ -36,6 +36,11 @@ Module parameters ...@@ -36,6 +36,11 @@ Module parameters
Use 'init=0' to bypass initializing the chip. Use 'init=0' to bypass initializing the chip.
Try this if your computer crashes when you load the module. Try this if your computer crashes when you load the module.
* reset int
(default 0)
The driver used to reset the chip on load, but does no more. Use
'reset=1' to restore the old behavior. Report if you need to do this.
force_subclients=bus,caddr,saddr,saddr force_subclients=bus,caddr,saddr,saddr
This is used to force the i2c addresses for subclients of This is used to force the i2c addresses for subclients of
a certain chip. Typical usage is `force_subclients=0,0x2d,0x4a,0x4b' a certain chip. Typical usage is `force_subclients=0,0x2d,0x4a,0x4b'
...@@ -123,6 +128,25 @@ When an alarm goes off, you can be warned by a beeping signal through ...@@ -123,6 +128,25 @@ When an alarm goes off, you can be warned by a beeping signal through
your computer speaker. It is possible to enable all beeping globally, your computer speaker. It is possible to enable all beeping globally,
or only the beeping for some alarms. or only the beeping for some alarms.
Individual alarm and beep bits:
0x000001: in0
0x000002: in1
0x000004: in2
0x000008: in3
0x000010: temp1
0x000020: temp2 (+temp3 on W83781D)
0x000040: fan1
0x000080: fan2
0x000100: in4
0x000200: in5
0x000400: in6
0x000800: fan3
0x001000: chassis
0x002000: temp3 (W83782D and W83627HF only)
0x010000: in7 (W83782D and W83627HF only)
0x020000: in8 (W83782D and W83627HF only)
If an alarm triggers, it will remain triggered until the hardware register If an alarm triggers, it will remain triggered until the hardware register
is read at least once. This means that the cause for the alarm may is read at least once. This means that the cause for the alarm may
already have disappeared! Note that in the current implementation, all already have disappeared! Note that in the current implementation, all
......
...@@ -4,7 +4,7 @@ Supported adapters: ...@@ -4,7 +4,7 @@ Supported adapters:
* Intel 82371AB PIIX4 and PIIX4E * Intel 82371AB PIIX4 and PIIX4E
* Intel 82443MX (440MX) * Intel 82443MX (440MX)
Datasheet: Publicly available at the Intel website Datasheet: Publicly available at the Intel website
* ServerWorks OSB4, CSB5 and CSB6 southbridges * ServerWorks OSB4, CSB5, CSB6 and HT-1000 southbridges
Datasheet: Only available via NDA from ServerWorks Datasheet: Only available via NDA from ServerWorks
* Standard Microsystems (SMSC) SLC90E66 (Victory66) southbridge * Standard Microsystems (SMSC) SLC90E66 (Victory66) southbridge
Datasheet: Publicly available at the SMSC website http://www.smsc.com Datasheet: Publicly available at the SMSC website http://www.smsc.com
......
...@@ -6,9 +6,10 @@ Module Parameters ...@@ -6,9 +6,10 @@ Module Parameters
----------------- -----------------
* base: int * base: int
Base addresses for the ACCESS.bus controllers Base addresses for the ACCESS.bus controllers on SCx200 and SC1100 devices
Description Description
----------- -----------
Enable the use of the ACCESS.bus controllers of a SCx200 processor. Enable the use of the ACCESS.bus controller on the Geode SCx200 and
SC1100 processors and the CS5535 and CS5536 Geode companion devices.
...@@ -78,8 +78,6 @@ Code Seq# Include File Comments ...@@ -78,8 +78,6 @@ Code Seq# Include File Comments
'#' 00-3F IEEE 1394 Subsystem Block for the entire subsystem '#' 00-3F IEEE 1394 Subsystem Block for the entire subsystem
'1' 00-1F <linux/timepps.h> PPS kit from Ulrich Windl '1' 00-1F <linux/timepps.h> PPS kit from Ulrich Windl
<ftp://ftp.de.kernel.org/pub/linux/daemons/ntp/PPS/> <ftp://ftp.de.kernel.org/pub/linux/daemons/ntp/PPS/>
'6' 00-10 <asm-i386/processor.h> Intel IA32 microcode update driver
<mailto:tigran@veritas.com>
'8' all SNP8023 advanced NIC card '8' all SNP8023 advanced NIC card
<mailto:mcr@solidum.com> <mailto:mcr@solidum.com>
'A' 00-1F linux/apm_bios.h 'A' 00-1F linux/apm_bios.h
......
...@@ -17,6 +17,7 @@ This document describes the Linux kernel Makefiles. ...@@ -17,6 +17,7 @@ This document describes the Linux kernel Makefiles.
--- 3.8 Command line dependency --- 3.8 Command line dependency
--- 3.9 Dependency tracking --- 3.9 Dependency tracking
--- 3.10 Special Rules --- 3.10 Special Rules
--- 3.11 $(CC) support functions
=== 4 Host Program support === 4 Host Program support
--- 4.1 Simple Host Program --- 4.1 Simple Host Program
...@@ -38,7 +39,6 @@ This document describes the Linux kernel Makefiles. ...@@ -38,7 +39,6 @@ This document describes the Linux kernel Makefiles.
--- 6.6 Commands useful for building a boot image --- 6.6 Commands useful for building a boot image
--- 6.7 Custom kbuild commands --- 6.7 Custom kbuild commands
--- 6.8 Preprocessing linker scripts --- 6.8 Preprocessing linker scripts
--- 6.9 $(CC) support functions
=== 7 Kbuild Variables === 7 Kbuild Variables
=== 8 Makefile language === 8 Makefile language
...@@ -106,9 +106,9 @@ This document is aimed towards normal developers and arch developers. ...@@ -106,9 +106,9 @@ This document is aimed towards normal developers and arch developers.
Most Makefiles within the kernel are kbuild Makefiles that use the Most Makefiles within the kernel are kbuild Makefiles that use the
kbuild infrastructure. This chapter introduce the syntax used in the kbuild infrastructure. This chapter introduce the syntax used in the
kbuild makefiles. kbuild makefiles.
The preferred name for the kbuild files is 'Kbuild' but 'Makefile' will The preferred name for the kbuild files are 'Makefile' but 'Kbuild' can
continue to be supported. All new developmen is expected to use the be used and if both a 'Makefile' and a 'Kbuild' file exists then the 'Kbuild'
Kbuild filename. file will be used.
Section 3.1 "Goal definitions" is a quick intro, further chapters provide Section 3.1 "Goal definitions" is a quick intro, further chapters provide
more details, with real examples. more details, with real examples.
...@@ -385,6 +385,102 @@ more details, with real examples. ...@@ -385,6 +385,102 @@ more details, with real examples.
to prerequisites are referenced with $(src) (because they are not to prerequisites are referenced with $(src) (because they are not
generated files). generated files).
--- 3.11 $(CC) support functions
The kernel may be build with several different versions of
$(CC), each supporting a unique set of features and options.
kbuild provide basic support to check for valid options for $(CC).
$(CC) is useally the gcc compiler, but other alternatives are
available.
as-option
as-option is used to check if $(CC) when used to compile
assembler (*.S) files supports the given option. An optional
second option may be specified if first option are not supported.
Example:
#arch/sh/Makefile
cflags-y += $(call as-option,-Wa$(comma)-isa=$(isa-y),)
In the above example cflags-y will be assinged the the option
-Wa$(comma)-isa=$(isa-y) if it is supported by $(CC).
The second argument is optional, and if supplied will be used
if first argument is not supported.
cc-option
cc-option is used to check if $(CC) support a given option, and not
supported to use an optional second option.
Example:
#arch/i386/Makefile
cflags-y += $(call cc-option,-march=pentium-mmx,-march=i586)
In the above example cflags-y will be assigned the option
-march=pentium-mmx if supported by $(CC), otherwise -march-i586.
The second argument to cc-option is optional, and if omitted
cflags-y will be assigned no value if first option is not supported.
cc-option-yn
cc-option-yn is used to check if gcc supports a given option
and return 'y' if supported, otherwise 'n'.
Example:
#arch/ppc/Makefile
biarch := $(call cc-option-yn, -m32)
aflags-$(biarch) += -a32
cflags-$(biarch) += -m32
In the above example $(biarch) is set to y if $(CC) supports the -m32
option. When $(biarch) equals to y the expanded variables $(aflags-y)
and $(cflags-y) will be assigned the values -a32 and -m32.
cc-option-align
gcc version >= 3.0 shifted type of options used to speify
alignment of functions, loops etc. $(cc-option-align) whrn used
as prefix to the align options will select the right prefix:
gcc < 3.00
cc-option-align = -malign
gcc >= 3.00
cc-option-align = -falign
Example:
CFLAGS += $(cc-option-align)-functions=4
In the above example the option -falign-functions=4 is used for
gcc >= 3.00. For gcc < 3.00 -malign-functions=4 is used.
cc-version
cc-version return a numerical version of the $(CC) compiler version.
The format is <major><minor> where both are two digits. So for example
gcc 3.41 would return 0341.
cc-version is useful when a specific $(CC) version is faulty in one
area, for example the -mregparm=3 were broken in some gcc version
even though the option was accepted by gcc.
Example:
#arch/i386/Makefile
cflags-y += $(shell \
if [ $(call cc-version) -ge 0300 ] ; then \
echo "-mregparm=3"; fi ;)
In the above example -mregparm=3 is only used for gcc version greater
than or equal to gcc 3.0.
cc-ifversion
cc-ifversion test the version of $(CC) and equals last argument if
version expression is true.
Example:
#fs/reiserfs/Makefile
EXTRA_CFLAGS := $(call cc-ifversion, -lt, 0402, -O1)
In this example EXTRA_CFLAGS will be assigned the value -O1 if the
$(CC) version is less than 4.2.
cc-ifversion takes all the shell operators:
-eq, -ne, -lt, -le, -gt, and -ge
The third parameter may be a text as in this example, but it may also
be an expanded variable or a macro.
=== 4 Host Program support === 4 Host Program support
...@@ -973,74 +1069,6 @@ When kbuild executes the following steps are followed (roughly): ...@@ -973,74 +1069,6 @@ When kbuild executes the following steps are followed (roughly):
architecture specific files. architecture specific files.
--- 6.9 $(CC) support functions
The kernel may be build with several different versions of
$(CC), each supporting a unique set of features and options.
kbuild provide basic support to check for valid options for $(CC).
$(CC) is useally the gcc compiler, but other alternatives are
available.
cc-option
cc-option is used to check if $(CC) support a given option, and not
supported to use an optional second option.
Example:
#arch/i386/Makefile
cflags-y += $(call cc-option,-march=pentium-mmx,-march=i586)
In the above example cflags-y will be assigned the option
-march=pentium-mmx if supported by $(CC), otherwise -march-i586.
The second argument to cc-option is optional, and if omitted
cflags-y will be assigned no value if first option is not supported.
cc-option-yn
cc-option-yn is used to check if gcc supports a given option
and return 'y' if supported, otherwise 'n'.
Example:
#arch/ppc/Makefile
biarch := $(call cc-option-yn, -m32)
aflags-$(biarch) += -a32
cflags-$(biarch) += -m32
In the above example $(biarch) is set to y if $(CC) supports the -m32
option. When $(biarch) equals to y the expanded variables $(aflags-y)
and $(cflags-y) will be assigned the values -a32 and -m32.
cc-option-align
gcc version >= 3.0 shifted type of options used to speify
alignment of functions, loops etc. $(cc-option-align) whrn used
as prefix to the align options will select the right prefix:
gcc < 3.00
cc-option-align = -malign
gcc >= 3.00
cc-option-align = -falign
Example:
CFLAGS += $(cc-option-align)-functions=4
In the above example the option -falign-functions=4 is used for
gcc >= 3.00. For gcc < 3.00 -malign-functions=4 is used.
cc-version
cc-version return a numerical version of the $(CC) compiler version.
The format is <major><minor> where both are two digits. So for example
gcc 3.41 would return 0341.
cc-version is useful when a specific $(CC) version is faulty in one
area, for example the -mregparm=3 were broken in some gcc version
even though the option was accepted by gcc.
Example:
#arch/i386/Makefile
cflags-y += $(shell \
if [ $(call cc-version) -ge 0300 ] ; then \
echo "-mregparm=3"; fi ;)
In the above example -mregparm=3 is only used for gcc version greater
than or equal to gcc 3.0.
=== 7 Kbuild Variables === 7 Kbuild Variables
The top Makefile exports the following variables: The top Makefile exports the following variables:
......
...@@ -13,6 +13,7 @@ In this document you will find information about: ...@@ -13,6 +13,7 @@ In this document you will find information about:
--- 2.2 Available targets --- 2.2 Available targets
--- 2.3 Available options --- 2.3 Available options
--- 2.4 Preparing the kernel tree for module build --- 2.4 Preparing the kernel tree for module build
--- 2.5 Building separate files for a module
=== 3. Example commands === 3. Example commands
=== 4. Creating a kbuild file for an external module === 4. Creating a kbuild file for an external module
=== 5. Include files === 5. Include files
...@@ -22,7 +23,10 @@ In this document you will find information about: ...@@ -22,7 +23,10 @@ In this document you will find information about:
=== 6. Module installation === 6. Module installation
--- 6.1 INSTALL_MOD_PATH --- 6.1 INSTALL_MOD_PATH
--- 6.2 INSTALL_MOD_DIR --- 6.2 INSTALL_MOD_DIR
=== 7. Module versioning === 7. Module versioning & Module.symvers
--- 7.1 Symbols fron the kernel (vmlinux + modules)
--- 7.2 Symbols and external modules
--- 7.3 Symbols from another external module
=== 8. Tips & Tricks === 8. Tips & Tricks
--- 8.1 Testing for CONFIG_FOO_BAR --- 8.1 Testing for CONFIG_FOO_BAR
...@@ -88,7 +92,8 @@ when building an external module. ...@@ -88,7 +92,8 @@ when building an external module.
make -C $KDIR M=$PWD modules_install make -C $KDIR M=$PWD modules_install
Install the external module(s). Install the external module(s).
Installation default is in /lib/modules/<kernel-version>/extra, Installation default is in /lib/modules/<kernel-version>/extra,
but may be prefixed with INSTALL_MOD_PATH - see separate chapter. but may be prefixed with INSTALL_MOD_PATH - see separate
chapter.
make -C $KDIR M=$PWD clean make -C $KDIR M=$PWD clean
Remove all generated files for the module - the kernel Remove all generated files for the module - the kernel
...@@ -131,6 +136,16 @@ when building an external module. ...@@ -131,6 +136,16 @@ when building an external module.
Therefore a full kernel build needs to be executed to make Therefore a full kernel build needs to be executed to make
module versioning work. module versioning work.
--- 2.5 Building separate files for a module
It is possible to build single files which is part of a module.
This works equal for the kernel, a module and even for external
modules.
Examples (module foo.ko, consist of bar.o, baz.o):
make -C $KDIR M=`pwd` bar.lst
make -C $KDIR M=`pwd` bar.o
make -C $KDIR M=`pwd` foo.ko
make -C $KDIR M=`pwd` /
=== 3. Example commands === 3. Example commands
...@@ -422,7 +437,7 @@ External modules are installed in the directory: ...@@ -422,7 +437,7 @@ External modules are installed in the directory:
=> Install dir: /lib/modules/$(KERNELRELEASE)/gandalf => Install dir: /lib/modules/$(KERNELRELEASE)/gandalf
=== 7. Module versioning === 7. Module versioning & Module.symvers
Module versioning is enabled by the CONFIG_MODVERSIONS tag. Module versioning is enabled by the CONFIG_MODVERSIONS tag.
...@@ -432,11 +447,80 @@ when a module is loaded/used then the CRC values contained in the kernel are ...@@ -432,11 +447,80 @@ when a module is loaded/used then the CRC values contained in the kernel are
compared with similar values in the module. If they are not equal then the compared with similar values in the module. If they are not equal then the
kernel refuses to load the module. kernel refuses to load the module.
During a kernel build a file named Module.symvers will be generated. This Module.symvers contains a list of all exported symbols from a kernel build.
file includes the symbol version of all symbols within the kernel. If the
Module.symvers file is saved from the last full kernel compile one does not --- 7.1 Symbols fron the kernel (vmlinux + modules)
have to do a full kernel compile to build a module version's compatible module.
During a kernel build a file named Module.symvers will be generated.
Module.symvers contains all exported symbols from the kernel and
compiled modules. For each symbols the corresponding CRC value
is stored too.
The syntax of the Module.symvers file is:
<CRC> <Symbol> <module>
Sample:
0x2d036834 scsi_remove_host drivers/scsi/scsi_mod
For a kernel build without CONFIG_MODVERSIONING enabled the crc
would read: 0x00000000
Module.symvers serve two purposes.
1) It list all exported symbols both from vmlinux and all modules
2) It list CRC if CONFIG_MODVERSION is enabled
--- 7.2 Symbols and external modules
When building an external module the build system needs access to
the symbols from the kernel to check if all external symbols are
defined. This is done in the MODPOST step and to obtain all
symbols modpost reads Module.symvers from the kernel.
If a Module.symvers file is present in the directory where
the external module is being build this file will be read too.
During the MODPOST step a new Module.symvers file will be written
containing all exported symbols that was not defined in the kernel.
--- 7.3 Symbols from another external module
Sometimes one external module uses exported symbols from another
external module. Kbuild needs to have full knowledge on all symbols
to avoid spitting out warnings about undefined symbols.
Two solutions exist to let kbuild know all symbols of more than
one external module.
The method with a top-level kbuild file is recommended but may be
impractical in certain situations.
Use a top-level Kbuild file
If you have two modules: 'foo', 'bar' and 'foo' needs symbols
from 'bar' then one can use a common top-level kbuild file so
both modules are compiled in same build.
Consider following directory layout:
./foo/ <= contains the foo module
./bar/ <= contains the bar module
The top-level Kbuild file would then look like:
#./Kbuild: (this file may also be named Makefile)
obj-y := foo/ bar/
Executing:
make -C $KDIR M=`pwd`
will then do the expected and compile both modules with full
knowledge on symbols from both modules.
Use an extra Module.symvers file
When an external module is build a Module.symvers file is
generated containing all exported symbols which are not
defined in the kernel.
To get access to symbols from module 'bar' one can copy the
Module.symvers file from the compilation of the 'bar' module
to the directory where the 'foo' module is build.
During the module build kbuild will read the Module.symvers
file in the directory of the external module and when the
build is finished a new Module.symvers file is created
containing the sum of all symbols defined and not part of the
kernel.
=== 8. Tips & Tricks === 8. Tips & Tricks
--- 8.1 Testing for CONFIG_FOO_BAR --- 8.1 Testing for CONFIG_FOO_BAR
......
...@@ -49,6 +49,7 @@ restrictions referred to are that the relevant option is valid if: ...@@ -49,6 +49,7 @@ restrictions referred to are that the relevant option is valid if:
MCA MCA bus support is enabled. MCA MCA bus support is enabled.
MDA MDA console support is enabled. MDA MDA console support is enabled.
MOUSE Appropriate mouse support is enabled. MOUSE Appropriate mouse support is enabled.
MSI Message Signaled Interrupts (PCI).
MTD MTD support is enabled. MTD MTD support is enabled.
NET Appropriate network support is enabled. NET Appropriate network support is enabled.
NUMA NUMA support is enabled. NUMA NUMA support is enabled.
...@@ -366,12 +367,17 @@ running once the system is up. ...@@ -366,12 +367,17 @@ running once the system is up.
tty<n> Use the virtual console device <n>. tty<n> Use the virtual console device <n>.
ttyS<n>[,options] ttyS<n>[,options]
ttyUSB0[,options]
Use the specified serial port. The options are of Use the specified serial port. The options are of
the form "bbbbpn", where "bbbb" is the baud rate, the form "bbbbpnf", where "bbbb" is the baud rate,
"p" is parity ("n", "o", or "e"), and "n" is bits. "p" is parity ("n", "o", or "e"), "n" is number of
Default is "9600n8". bits, and "f" is flow control ("r" for RTS or
omit it). Default is "9600n8".
See also Documentation/serial-console.txt. See Documentation/serial-console.txt for more
information. See
Documentation/networking/netconsole.txt for an
alternative.
uart,io,<addr>[,options] uart,io,<addr>[,options]
uart,mmio,<addr>[,options] uart,mmio,<addr>[,options]
...@@ -1008,7 +1014,9 @@ running once the system is up. ...@@ -1008,7 +1014,9 @@ running once the system is up.
noexec=on: enable non-executable mappings (default) noexec=on: enable non-executable mappings (default)
noexec=off: disable nn-executable mappings noexec=off: disable nn-executable mappings
nofxsr [BUGS=IA-32] nofxsr [BUGS=IA-32] Disables x86 floating point extended
register save and restore. The kernel will only save
legacy floating-point registers on task switch.
nohlt [BUGS=ARM] nohlt [BUGS=ARM]
...@@ -1053,6 +1061,8 @@ running once the system is up. ...@@ -1053,6 +1061,8 @@ running once the system is up.
nosbagart [IA-64] nosbagart [IA-64]
nosep [BUGS=IA-32] Disables x86 SYSENTER/SYSEXIT support.
nosmp [SMP] Tells an SMP kernel to act as a UP kernel. nosmp [SMP] Tells an SMP kernel to act as a UP kernel.
nosync [HW,M68K] Disables sync negotiation for all devices. nosync [HW,M68K] Disables sync negotiation for all devices.
...@@ -1122,6 +1132,11 @@ running once the system is up. ...@@ -1122,6 +1132,11 @@ running once the system is up.
pas16= [HW,SCSI] pas16= [HW,SCSI]
See header of drivers/scsi/pas16.c. See header of drivers/scsi/pas16.c.
pause_on_oops=
Halt all CPUs after the first oops has been printed for
the specified number of seconds. This is to be used if
your oopses keep scrolling off the screen.
pcbit= [HW,ISDN] pcbit= [HW,ISDN]
pcd. [PARIDE] pcd. [PARIDE]
...@@ -1143,6 +1158,9 @@ running once the system is up. ...@@ -1143,6 +1158,9 @@ running once the system is up.
Mechanism 2. Mechanism 2.
nommconf [IA-32,X86_64] Disable use of MMCONFIG for PCI nommconf [IA-32,X86_64] Disable use of MMCONFIG for PCI
Configuration Configuration
nomsi [MSI] If the PCI_MSI kernel config parameter is
enabled, this kernel boot option can be used to
disable the use of MSI interrupts system-wide.
nosort [IA-32] Don't sort PCI devices according to nosort [IA-32] Don't sort PCI devices according to
order given by the PCI BIOS. This sorting is order given by the PCI BIOS. This sorting is
done to get a device order compatible with done to get a device order compatible with
......
LED handling under Linux
========================
If you're reading this and thinking about keyboard leds, these are
handled by the input subsystem and the led class is *not* needed.
In its simplest form, the LED class just allows control of LEDs from
userspace. LEDs appear in /sys/class/leds/. The brightness file will
set the brightness of the LED (taking a value 0-255). Most LEDs don't
have hardware brightness support so will just be turned on for non-zero
brightness settings.
The class also introduces the optional concept of an LED trigger. A trigger
is a kernel based source of led events. Triggers can either be simple or
complex. A simple trigger isn't configurable and is designed to slot into
existing subsystems with minimal additional code. Examples are the ide-disk,
nand-disk and sharpsl-charge triggers. With led triggers disabled, the code
optimises away.
Complex triggers whilst available to all LEDs have LED specific
parameters and work on a per LED basis. The timer trigger is an example.
You can change triggers in a similar manner to the way an IO scheduler
is chosen (via /sys/class/leds/<device>/trigger). Trigger specific
parameters can appear in /sys/class/leds/<device> once a given trigger is
selected.
Design Philosophy
=================
The underlying design philosophy is simplicity. LEDs are simple devices
and the aim is to keep a small amount of code giving as much functionality
as possible. Please keep this in mind when suggesting enhancements.
LED Device Naming
=================
Is currently of the form:
"devicename:colour"
There have been calls for LED properties such as colour to be exported as
individual led class attributes. As a solution which doesn't incur as much
overhead, I suggest these become part of the device name. The naming scheme
above leaves scope for further attributes should they be needed.
Known Issues
============
The LED Trigger core cannot be a module as the simple trigger functions
would cause nightmare dependency issues. I see this as a minor issue
compared to the benefits the simple trigger functionality brings. The
rest of the LED subsystem can be modular.
Some leds can be programmed to flash in hardware. As this isn't a generic
LED device property, this should be exported as a device specific sysfs
attribute rather than part of the class if this functionality is required.
Future Development
==================
At the moment, a trigger can't be created specifically for a single LED.
There are a number of cases where a trigger might only be mappable to a
particular LED (ACPI?). The addition of triggers provided by the LED driver
should cover this option and be possible to add without breaking the
current interface.
...@@ -29,7 +29,7 @@ address is written to $4a, then the whole Byte is written to ...@@ -29,7 +29,7 @@ address is written to $4a, then the whole Byte is written to
$48, while it doesn't matter how often you're writing to $4a $48, while it doesn't matter how often you're writing to $4a
as long as $48 is not touched. After $48 has been written, as long as $48 is not touched. After $48 has been written,
the whole card disappears from $e8 and is mapped to the new the whole card disappears from $e8 and is mapped to the new
address just written. Make shure $4a is written before $48, address just written. Make sure $4a is written before $48,
otherwise your chance is only 1:16 to find the board :-). otherwise your chance is only 1:16 to find the board :-).
The local memory-map is even active when mapped to $e8: The local memory-map is even active when mapped to $e8:
......
此差异已折叠。
...@@ -92,8 +92,6 @@ routing.txt ...@@ -92,8 +92,6 @@ routing.txt
- the new routing mechanism - the new routing mechanism
shaper.txt shaper.txt
- info on the module that can shape/limit transmitted traffic. - info on the module that can shape/limit transmitted traffic.
sis900.txt
- SiS 900/7016 Fast Ethernet device driver info.
sk98lin.txt sk98lin.txt
- Marvell Yukon Chipset / SysKonnect SK-98xx compliant Gigabit - Marvell Yukon Chipset / SysKonnect SK-98xx compliant Gigabit
Ethernet Adapter family driver info Ethernet Adapter family driver info
......
...@@ -3,18 +3,18 @@ Intel(R) PRO/Wireless 2100 Driver for Linux in support of: ...@@ -3,18 +3,18 @@ Intel(R) PRO/Wireless 2100 Driver for Linux in support of:
Intel(R) PRO/Wireless 2100 Network Connection Intel(R) PRO/Wireless 2100 Network Connection
Copyright (C) 2003-2005, Intel Corporation Copyright (C) 2003-2006, Intel Corporation
README.ipw2100 README.ipw2100
Version: 1.1.3 Version: git-1.1.5
Date : October 17, 2005 Date : January 25, 2006
Index Index
----------------------------------------------- -----------------------------------------------
0. IMPORTANT INFORMATION BEFORE USING THIS DRIVER 0. IMPORTANT INFORMATION BEFORE USING THIS DRIVER
1. Introduction 1. Introduction
2. Release 1.1.3 Current Features 2. Release git-1.1.5 Current Features
3. Command Line Parameters 3. Command Line Parameters
4. Sysfs Helper Files 4. Sysfs Helper Files
5. Radio Kill Switch 5. Radio Kill Switch
...@@ -89,7 +89,7 @@ potential fixes and patches, as well as links to the development mailing list ...@@ -89,7 +89,7 @@ potential fixes and patches, as well as links to the development mailing list
for the driver project. for the driver project.
2. Release 1.1.3 Current Supported Features 2. Release git-1.1.5 Current Supported Features
----------------------------------------------- -----------------------------------------------
- Managed (BSS) and Ad-Hoc (IBSS) - Managed (BSS) and Ad-Hoc (IBSS)
- WEP (shared key and open) - WEP (shared key and open)
...@@ -270,7 +270,7 @@ For installation support on the ipw2100 1.1.0 driver on Linux kernels ...@@ -270,7 +270,7 @@ For installation support on the ipw2100 1.1.0 driver on Linux kernels
9. License 9. License
----------------------------------------------- -----------------------------------------------
Copyright(c) 2003 - 2005 Intel Corporation. All rights reserved. Copyright(c) 2003 - 2006 Intel Corporation. All rights reserved.
This program is free software; you can redistribute it and/or modify it This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License (version 2) as under the terms of the GNU General Public License (version 2) as
......
...@@ -10,7 +10,7 @@ both hardware adapters listed above. In this document the Intel(R) ...@@ -10,7 +10,7 @@ both hardware adapters listed above. In this document the Intel(R)
PRO/Wireless 2915ABG Driver for Linux will be used to reference the PRO/Wireless 2915ABG Driver for Linux will be used to reference the
unified driver. unified driver.
Copyright (C) 2004-2005, Intel Corporation Copyright (C) 2004-2006, Intel Corporation
README.ipw2200 README.ipw2200
...@@ -26,9 +26,11 @@ Index ...@@ -26,9 +26,11 @@ Index
1.2. Module parameters 1.2. Module parameters
1.3. Wireless Extension Private Methods 1.3. Wireless Extension Private Methods
1.4. Sysfs Helper Files 1.4. Sysfs Helper Files
1.5. Supported channels
2. Ad-Hoc Networking 2. Ad-Hoc Networking
3. Interacting with Wireless Tools 3. Interacting with Wireless Tools
3.1. iwconfig mode 3.1. iwconfig mode
3.2. iwconfig sens
4. About the Version Numbers 4. About the Version Numbers
5. Firmware installation 5. Firmware installation
6. Support 6. Support
...@@ -314,6 +316,35 @@ For the device level files, see /sys/bus/pci/drivers/ipw2200: ...@@ -314,6 +316,35 @@ For the device level files, see /sys/bus/pci/drivers/ipw2200:
running ifconfig and is therefore disabled by default. running ifconfig and is therefore disabled by default.
1.5. Supported channels
-----------------------------------------------
Upon loading the Intel(R) PRO/Wireless 2915ABG Driver for Linux, a
message stating the detected geography code and the number of 802.11
channels supported by the card will be displayed in the log.
The geography code corresponds to a regulatory domain as shown in the
table below.
Supported channels
Code Geography 802.11bg 802.11a
--- Restricted 11 0
ZZF Custom US/Canada 11 8
ZZD Rest of World 13 0
ZZA Custom USA & Europe & High 11 13
ZZB Custom NA & Europe 11 13
ZZC Custom Japan 11 4
ZZM Custom 11 0
ZZE Europe 13 19
ZZJ Custom Japan 14 4
ZZR Rest of World 14 0
ZZH High Band 13 4
ZZG Custom Europe 13 4
ZZK Europe 13 24
ZZL Europe 11 13
2. Ad-Hoc Networking 2. Ad-Hoc Networking
----------------------------------------------- -----------------------------------------------
...@@ -353,6 +384,15 @@ When configuring the mode of the adapter, all run-time configured parameters ...@@ -353,6 +384,15 @@ When configuring the mode of the adapter, all run-time configured parameters
are reset to the value used when the module was loaded. This includes are reset to the value used when the module was loaded. This includes
channels, rates, ESSID, etc. channels, rates, ESSID, etc.
3.2 iwconfig sens
-----------------------------------------------
The 'iwconfig ethX sens XX' command will not set the signal sensitivity
threshold, as described in iwconfig documentation, but rather the number
of consecutive missed beacons that will trigger handover, i.e. roaming
to another access point. At the same time, it will set the disassociation
threshold to 3 times the given value.
4. About the Version Numbers 4. About the Version Numbers
----------------------------------------------- -----------------------------------------------
...@@ -408,7 +448,7 @@ For general information and support, go to: ...@@ -408,7 +448,7 @@ For general information and support, go to:
7. License 7. License
----------------------------------------------- -----------------------------------------------
Copyright(c) 2003 - 2005 Intel Corporation. All rights reserved. Copyright(c) 2003 - 2006 Intel Corporation. All rights reserved.
This program is free software; you can redistribute it and/or modify it This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License version 2 as under the terms of the GNU General Public License version 2 as
......
To-do items for network drivers
-------------------------------
* Move ethernet crc routine to generic code
* (for 2.5) Integrate Jamal Hadi Salim's netdev Rx polling API change
* Audit all net drivers to make sure magic packet / wake-on-lan /
similar features are disabled in the driver by default.
* Audit all net drivers to make sure the module always prints out a
version string when loaded as a module, but only prints a version
string when built into the kernel if a device is detected.
* Add ETHTOOL_GDRVINFO ioctl support to all ethernet drivers.
* dmfe PCI DMA is totally wrong and only works on x86
此差异已折叠。
此差异已折叠。
此差异已折叠。
...@@ -87,7 +87,7 @@ ...@@ -87,7 +87,7 @@
* would fail and generate an error message in the system log. * would fail and generate an error message in the system log.
* - For opt_c: slave should not be set to the master's setting * - For opt_c: slave should not be set to the master's setting
* while it is running. It was already set during enslave. To * while it is running. It was already set during enslave. To
* simplify things, it is now handeled separately. * simplify things, it is now handled separately.
* *
* - 2003/12/01 - Shmulik Hen <shmulik.hen at intel dot com> * - 2003/12/01 - Shmulik Hen <shmulik.hen at intel dot com>
* - Code cleanup and style changes * - Code cleanup and style changes
......
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册