dect
/
linux-2.6
Archived
13
0
Fork 0

Merge branch 'x86/core' into cpus4096

This commit is contained in:
Ingo Molnar 2009-03-11 10:49:34 +01:00
commit d95c357812
3225 changed files with 94231 additions and 54856 deletions

View File

@ -92,6 +92,7 @@ Rudolf Marek <R.Marek@sh.cvut.cz>
Rui Saraiva <rmps@joel.ist.utl.pt> Rui Saraiva <rmps@joel.ist.utl.pt>
Sachin P Sant <ssant@in.ibm.com> Sachin P Sant <ssant@in.ibm.com>
Sam Ravnborg <sam@mars.ravnborg.org> Sam Ravnborg <sam@mars.ravnborg.org>
Sascha Hauer <s.hauer@pengutronix.de>
S.Çağlar Onur <caglar@pardus.org.tr> S.Çağlar Onur <caglar@pardus.org.tr>
Simon Kelley <simon@thekelleys.org.uk> Simon Kelley <simon@thekelleys.org.uk>
Stéphane Witzmann <stephane.witzmann@ubpmes.univ-bpclermont.fr> Stéphane Witzmann <stephane.witzmann@ubpmes.univ-bpclermont.fr>
@ -100,6 +101,7 @@ Tejun Heo <htejun@gmail.com>
Thomas Graf <tgraf@suug.ch> Thomas Graf <tgraf@suug.ch>
Tony Luck <tony.luck@intel.com> Tony Luck <tony.luck@intel.com>
Tsuneo Yoshioka <Tsuneo.Yoshioka@f-secure.com> Tsuneo Yoshioka <Tsuneo.Yoshioka@f-secure.com>
Uwe Kleine-König <Uwe.Kleine-Koenig@digi.com>
Uwe Kleine-König <ukleinek@informatik.uni-freiburg.de> Uwe Kleine-König <ukleinek@informatik.uni-freiburg.de>
Uwe Kleine-König <ukl@pengutronix.de>
Uwe Kleine-König <Uwe.Kleine-Koenig@digi.com>
Valdis Kletnieks <Valdis.Kletnieks@vt.edu> Valdis Kletnieks <Valdis.Kletnieks@vt.edu>

12
CREDITS
View File

@ -2166,7 +2166,6 @@ D: Initial implementation of VC's, pty's and select()
N: Pavel Machek N: Pavel Machek
E: pavel@ucw.cz E: pavel@ucw.cz
E: pavel@suse.cz
D: Softcursor for vga, hypertech cdrom support, vcsa bugfix, nbd D: Softcursor for vga, hypertech cdrom support, vcsa bugfix, nbd
D: sun4/330 port, capabilities for elf, speedup for rm on ext2, USB, D: sun4/330 port, capabilities for elf, speedup for rm on ext2, USB,
D: work on suspend-to-ram/disk, killing duplicates from ioctl32 D: work on suspend-to-ram/disk, killing duplicates from ioctl32
@ -3786,14 +3785,11 @@ S: The Netherlands
N: David Woodhouse N: David Woodhouse
E: dwmw2@infradead.org E: dwmw2@infradead.org
D: ARCnet stuff, Applicom board driver, SO_BINDTODEVICE, D: JFFS2 file system, Memory Technology Device subsystem,
D: some Alpha platform porting from 2.0, Memory Technology Devices,
D: Acquire watchdog timer, PC speaker driver maintenance,
D: various other stuff that annoyed me by not working. D: various other stuff that annoyed me by not working.
S: c/o Red Hat Engineering S: c/o Intel Corporation
S: Rustat House S: Pipers Way
S: 60 Clifton Road S: Swindon. SN3 1RJ
S: Cambridge. CB1 7EG
S: England S: England
N: Chris Wright N: Chris Wright

View File

@ -1,3 +1,46 @@
What: /sys/bus/pci/drivers/.../bind
Date: December 2003
Contact: linux-pci@vger.kernel.org
Description:
Writing a device location to this file will cause
the driver to attempt to bind to the device found at
this location. This is useful for overriding default
bindings. The format for the location is: DDDD:BB:DD.F.
That is Domain:Bus:Device.Function and is the same as
found in /sys/bus/pci/devices/. For example:
# echo 0000:00:19.0 > /sys/bus/pci/drivers/foo/bind
(Note: kernels before 2.6.28 may require echo -n).
What: /sys/bus/pci/drivers/.../unbind
Date: December 2003
Contact: linux-pci@vger.kernel.org
Description:
Writing a device location to this file will cause the
driver to attempt to unbind from the device found at
this location. This may be useful when overriding default
bindings. The format for the location is: DDDD:BB:DD.F.
That is Domain:Bus:Device.Function and is the same as
found in /sys/bus/pci/devices/. For example:
# echo 0000:00:19.0 > /sys/bus/pci/drivers/foo/unbind
(Note: kernels before 2.6.28 may require echo -n).
What: /sys/bus/pci/drivers/.../new_id
Date: December 2003
Contact: linux-pci@vger.kernel.org
Description:
Writing a device ID to this file will attempt to
dynamically add a new device ID to a PCI device driver.
This may allow the driver to support more hardware than
was included in the driver's static device ID support
table at compile time. The format for the device ID is:
VVVV DDDD SVVV SDDD CCCC MMMM PPPP. That is Vendor ID,
Device ID, Subsystem Vendor ID, Subsystem Device ID,
Class, Class Mask, and Private Driver Data. The Vendor ID
and Device ID fields are required, the rest are optional.
Upon successfully adding an ID, the driver will probe
for the device and attempt to bind to it. For example:
# echo "8086 10f5" > /sys/bus/pci/drivers/foo/new_id
What: /sys/bus/pci/devices/.../vpd What: /sys/bus/pci/devices/.../vpd
Date: February 2008 Date: February 2008
Contact: Ben Hutchings <bhutchings@solarflare.com> Contact: Ben Hutchings <bhutchings@solarflare.com>

View File

@ -1,6 +1,6 @@
What: /sys/firmware/memmap/ What: /sys/firmware/memmap/
Date: June 2008 Date: June 2008
Contact: Bernhard Walle <bwalle@suse.de> Contact: Bernhard Walle <bernhard.walle@gmx.de>
Description: Description:
On all platforms, the firmware provides a memory map which the On all platforms, the firmware provides a memory map which the
kernel reads. The resources from that memory map are registered kernel reads. The resources from that memory map are registered

View File

@ -33,10 +33,12 @@ o Gnu make 3.79.1 # make --version
o binutils 2.12 # ld -v o binutils 2.12 # ld -v
o util-linux 2.10o # fdformat --version o util-linux 2.10o # fdformat --version
o module-init-tools 0.9.10 # depmod -V o module-init-tools 0.9.10 # depmod -V
o e2fsprogs 1.29 # tune2fs o e2fsprogs 1.41.4 # e2fsck -V
o jfsutils 1.1.3 # fsck.jfs -V o jfsutils 1.1.3 # fsck.jfs -V
o reiserfsprogs 3.6.3 # reiserfsck -V 2>&1|grep reiserfsprogs o reiserfsprogs 3.6.3 # reiserfsck -V 2>&1|grep reiserfsprogs
o xfsprogs 2.6.0 # xfs_db -V o xfsprogs 2.6.0 # xfs_db -V
o squashfs-tools 4.0 # mksquashfs -version
o btrfs-progs 0.18 # btrfsck
o pcmciautils 004 # pccardctl -V o pcmciautils 004 # pccardctl -V
o quota-tools 3.09 # quota -V o quota-tools 3.09 # quota -V
o PPP 2.4.0 # pppd --version o PPP 2.4.0 # pppd --version

View File

@ -483,17 +483,25 @@ values. To do the latter, you can stick the following in your .emacs file:
(* (max steps 1) (* (max steps 1)
c-basic-offset))) c-basic-offset)))
(add-hook 'c-mode-common-hook
(lambda ()
;; Add kernel style
(c-add-style
"linux-tabs-only"
'("linux" (c-offsets-alist
(arglist-cont-nonempty
c-lineup-gcc-asm-reg
c-lineup-arglist-tabs-only))))))
(add-hook 'c-mode-hook (add-hook 'c-mode-hook
(lambda () (lambda ()
(let ((filename (buffer-file-name))) (let ((filename (buffer-file-name)))
;; Enable kernel mode for the appropriate files ;; Enable kernel mode for the appropriate files
(when (and filename (when (and filename
(string-match "~/src/linux-trees" filename)) (string-match (expand-file-name "~/src/linux-trees")
filename))
(setq indent-tabs-mode t) (setq indent-tabs-mode t)
(c-set-style "linux") (c-set-style "linux-tabs-only")))))
(c-set-offset 'arglist-cont-nonempty
'(c-lineup-gcc-asm-reg
c-lineup-arglist-tabs-only))))))
This will make emacs go better with the kernel coding style for C This will make emacs go better with the kernel coding style for C
files below ~/src/linux-trees. files below ~/src/linux-trees.

View File

@ -5,7 +5,7 @@
This document describes the DMA API. For a more gentle introduction This document describes the DMA API. For a more gentle introduction
phrased in terms of the pci_ equivalents (and actual examples) see phrased in terms of the pci_ equivalents (and actual examples) see
DMA-mapping.txt Documentation/PCI/PCI-DMA-mapping.txt.
This API is split into two pieces. Part I describes the API and the This API is split into two pieces. Part I describes the API and the
corresponding pci_ API. Part II describes the extensions to the API corresponding pci_ API. Part II describes the extensions to the API
@ -170,16 +170,15 @@ Returns: 0 if successful and a negative error if not.
u64 u64
dma_get_required_mask(struct device *dev) dma_get_required_mask(struct device *dev)
After setting the mask with dma_set_mask(), this API returns the This API returns the mask that the platform requires to
actual mask (within that already set) that the platform actually operate efficiently. Usually this means the returned mask
requires to operate efficiently. Usually this means the returned mask
is the minimum required to cover all of memory. Examining the is the minimum required to cover all of memory. Examining the
required mask gives drivers with variable descriptor sizes the required mask gives drivers with variable descriptor sizes the
opportunity to use smaller descriptors as necessary. opportunity to use smaller descriptors as necessary.
Requesting the required mask does not alter the current mask. If you Requesting the required mask does not alter the current mask. If you
wish to take advantage of it, you should issue another dma_set_mask() wish to take advantage of it, you should issue a dma_set_mask()
call to lower the mask again. call to set the mask to the value returned.
Part Id - Streaming DMA mappings Part Id - Streaming DMA mappings

View File

@ -6,7 +6,7 @@
# To add a new book the only step required is to add the book to the # To add a new book the only step required is to add the book to the
# list of DOCBOOKS. # list of DOCBOOKS.
DOCBOOKS := z8530book.xml mcabook.xml \ DOCBOOKS := z8530book.xml mcabook.xml device-drivers.xml \
kernel-hacking.xml kernel-locking.xml deviceiobook.xml \ kernel-hacking.xml kernel-locking.xml deviceiobook.xml \
procfs-guide.xml writing_usb_driver.xml networking.xml \ procfs-guide.xml writing_usb_driver.xml networking.xml \
kernel-api.xml filesystems.xml lsm.xml usb.xml kgdb.xml \ kernel-api.xml filesystems.xml lsm.xml usb.xml kgdb.xml \

View File

@ -0,0 +1,418 @@
<?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="LinuxDriversAPI">
<bookinfo>
<title>Linux Device Drivers</title>
<legalnotice>
<para>
This documentation 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>
<para>
For more details see the file COPYING in the source
distribution of Linux.
</para>
</legalnotice>
</bookinfo>
<toc></toc>
<chapter id="Basics">
<title>Driver Basics</title>
<sect1><title>Driver Entry and Exit points</title>
!Iinclude/linux/init.h
</sect1>
<sect1><title>Atomic and pointer manipulation</title>
!Iarch/x86/include/asm/atomic_32.h
!Iarch/x86/include/asm/unaligned.h
</sect1>
<sect1><title>Delaying, scheduling, and timer routines</title>
!Iinclude/linux/sched.h
!Ekernel/sched.c
!Ekernel/timer.c
</sect1>
<sect1><title>High-resolution timers</title>
!Iinclude/linux/ktime.h
!Iinclude/linux/hrtimer.h
!Ekernel/hrtimer.c
</sect1>
<sect1><title>Workqueues and Kevents</title>
!Ekernel/workqueue.c
</sect1>
<sect1><title>Internal Functions</title>
!Ikernel/exit.c
!Ikernel/signal.c
!Iinclude/linux/kthread.h
!Ekernel/kthread.c
</sect1>
<sect1><title>Kernel objects manipulation</title>
<!--
X!Iinclude/linux/kobject.h
-->
!Elib/kobject.c
</sect1>
<sect1><title>Kernel utility functions</title>
!Iinclude/linux/kernel.h
!Ekernel/printk.c
!Ekernel/panic.c
!Ekernel/sys.c
!Ekernel/rcupdate.c
</sect1>
<sect1><title>Device Resource Management</title>
!Edrivers/base/devres.c
</sect1>
</chapter>
<chapter id="devdrivers">
<title>Device drivers infrastructure</title>
<sect1><title>Device Drivers Base</title>
<!--
X!Iinclude/linux/device.h
-->
!Edrivers/base/driver.c
!Edrivers/base/core.c
!Edrivers/base/class.c
!Edrivers/base/firmware_class.c
!Edrivers/base/transport_class.c
<!-- Cannot be included, because
attribute_container_add_class_device_adapter
and attribute_container_classdev_to_container
exceed allowed 44 characters maximum
X!Edrivers/base/attribute_container.c
-->
!Edrivers/base/sys.c
<!--
X!Edrivers/base/interface.c
-->
!Edrivers/base/platform.c
!Edrivers/base/bus.c
</sect1>
<sect1><title>Device Drivers Power Management</title>
!Edrivers/base/power/main.c
</sect1>
<sect1><title>Device Drivers ACPI Support</title>
<!-- Internal functions only
X!Edrivers/acpi/sleep/main.c
X!Edrivers/acpi/sleep/wakeup.c
X!Edrivers/acpi/motherboard.c
X!Edrivers/acpi/bus.c
-->
!Edrivers/acpi/scan.c
!Idrivers/acpi/scan.c
<!-- No correct structured comments
X!Edrivers/acpi/pci_bind.c
-->
</sect1>
<sect1><title>Device drivers PnP support</title>
!Idrivers/pnp/core.c
<!-- No correct structured comments
X!Edrivers/pnp/system.c
-->
!Edrivers/pnp/card.c
!Idrivers/pnp/driver.c
!Edrivers/pnp/manager.c
!Edrivers/pnp/support.c
</sect1>
<sect1><title>Userspace IO devices</title>
!Edrivers/uio/uio.c
!Iinclude/linux/uio_driver.h
</sect1>
</chapter>
<chapter id="parportdev">
<title>Parallel Port Devices</title>
!Iinclude/linux/parport.h
!Edrivers/parport/ieee1284.c
!Edrivers/parport/share.c
!Idrivers/parport/daisy.c
</chapter>
<chapter id="message_devices">
<title>Message-based devices</title>
<sect1><title>Fusion message devices</title>
!Edrivers/message/fusion/mptbase.c
!Idrivers/message/fusion/mptbase.c
!Edrivers/message/fusion/mptscsih.c
!Idrivers/message/fusion/mptscsih.c
!Idrivers/message/fusion/mptctl.c
!Idrivers/message/fusion/mptspi.c
!Idrivers/message/fusion/mptfc.c
!Idrivers/message/fusion/mptlan.c
</sect1>
<sect1><title>I2O message devices</title>
!Iinclude/linux/i2o.h
!Idrivers/message/i2o/core.h
!Edrivers/message/i2o/iop.c
!Idrivers/message/i2o/iop.c
!Idrivers/message/i2o/config-osm.c
!Edrivers/message/i2o/exec-osm.c
!Idrivers/message/i2o/exec-osm.c
!Idrivers/message/i2o/bus-osm.c
!Edrivers/message/i2o/device.c
!Idrivers/message/i2o/device.c
!Idrivers/message/i2o/driver.c
!Idrivers/message/i2o/pci.c
!Idrivers/message/i2o/i2o_block.c
!Idrivers/message/i2o/i2o_scsi.c
!Idrivers/message/i2o/i2o_proc.c
</sect1>
</chapter>
<chapter id="snddev">
<title>Sound Devices</title>
!Iinclude/sound/core.h
!Esound/sound_core.c
!Iinclude/sound/pcm.h
!Esound/core/pcm.c
!Esound/core/device.c
!Esound/core/info.c
!Esound/core/rawmidi.c
!Esound/core/sound.c
!Esound/core/memory.c
!Esound/core/pcm_memory.c
!Esound/core/init.c
!Esound/core/isadma.c
!Esound/core/control.c
!Esound/core/pcm_lib.c
!Esound/core/hwdep.c
!Esound/core/pcm_native.c
!Esound/core/memalloc.c
<!-- FIXME: Removed for now since no structured comments in source
X!Isound/sound_firmware.c
-->
</chapter>
<chapter id="uart16x50">
<title>16x50 UART Driver</title>
!Iinclude/linux/serial_core.h
!Edrivers/serial/serial_core.c
!Edrivers/serial/8250.c
</chapter>
<chapter id="fbdev">
<title>Frame Buffer Library</title>
<para>
The frame buffer drivers depend heavily on four data structures.
These structures are declared in include/linux/fb.h. They are
fb_info, fb_var_screeninfo, fb_fix_screeninfo and fb_monospecs.
The last three can be made available to and from userland.
</para>
<para>
fb_info defines the current state of a particular video card.
Inside fb_info, there exists a fb_ops structure which is a
collection of needed functions to make fbdev and fbcon work.
fb_info is only visible to the kernel.
</para>
<para>
fb_var_screeninfo is used to describe the features of a video card
that are user defined. With fb_var_screeninfo, things such as
depth and the resolution may be defined.
</para>
<para>
The next structure is fb_fix_screeninfo. This defines the
properties of a card that are created when a mode is set and can't
be changed otherwise. A good example of this is the start of the
frame buffer memory. This "locks" the address of the frame buffer
memory, so that it cannot be changed or moved.
</para>
<para>
The last structure is fb_monospecs. In the old API, there was
little importance for fb_monospecs. This allowed for forbidden things
such as setting a mode of 800x600 on a fix frequency monitor. With
the new API, fb_monospecs prevents such things, and if used
correctly, can prevent a monitor from being cooked. fb_monospecs
will not be useful until kernels 2.5.x.
</para>
<sect1><title>Frame Buffer Memory</title>
!Edrivers/video/fbmem.c
</sect1>
<!--
<sect1><title>Frame Buffer Console</title>
X!Edrivers/video/console/fbcon.c
</sect1>
-->
<sect1><title>Frame Buffer Colormap</title>
!Edrivers/video/fbcmap.c
</sect1>
<!-- FIXME:
drivers/video/fbgen.c has no docs, which stuffs up the sgml. Comment
out until somebody adds docs. KAO
<sect1><title>Frame Buffer Generic Functions</title>
X!Idrivers/video/fbgen.c
</sect1>
KAO -->
<sect1><title>Frame Buffer Video Mode Database</title>
!Idrivers/video/modedb.c
!Edrivers/video/modedb.c
</sect1>
<sect1><title>Frame Buffer Macintosh Video Mode Database</title>
!Edrivers/video/macmodes.c
</sect1>
<sect1><title>Frame Buffer Fonts</title>
<para>
Refer to the file drivers/video/console/fonts.c for more information.
</para>
<!-- FIXME: Removed for now since no structured comments in source
X!Idrivers/video/console/fonts.c
-->
</sect1>
</chapter>
<chapter id="input_subsystem">
<title>Input Subsystem</title>
!Iinclude/linux/input.h
!Edrivers/input/input.c
!Edrivers/input/ff-core.c
!Edrivers/input/ff-memless.c
</chapter>
<chapter id="spi">
<title>Serial Peripheral Interface (SPI)</title>
<para>
SPI is the "Serial Peripheral Interface", widely used with
embedded systems because it is a simple and efficient
interface: basically a multiplexed shift register.
Its three signal wires hold a clock (SCK, often in the range
of 1-20 MHz), a "Master Out, Slave In" (MOSI) data line, and
a "Master In, Slave Out" (MISO) data line.
SPI is a full duplex protocol; for each bit shifted out the
MOSI line (one per clock) another is shifted in on the MISO line.
Those bits are assembled into words of various sizes on the
way to and from system memory.
An additional chipselect line is usually active-low (nCS);
four signals are normally used for each peripheral, plus
sometimes an interrupt.
</para>
<para>
The SPI bus facilities listed here provide a generalized
interface to declare SPI busses and devices, manage them
according to the standard Linux driver model, and perform
input/output operations.
At this time, only "master" side interfaces are supported,
where Linux talks to SPI peripherals and does not implement
such a peripheral itself.
(Interfaces to support implementing SPI slaves would
necessarily look different.)
</para>
<para>
The programming interface is structured around two kinds of driver,
and two kinds of device.
A "Controller Driver" abstracts the controller hardware, which may
be as simple as a set of GPIO pins or as complex as a pair of FIFOs
connected to dual DMA engines on the other side of the SPI shift
register (maximizing throughput). Such drivers bridge between
whatever bus they sit on (often the platform bus) and SPI, and
expose the SPI side of their device as a
<structname>struct spi_master</structname>.
SPI devices are children of that master, represented as a
<structname>struct spi_device</structname> and manufactured from
<structname>struct spi_board_info</structname> descriptors which
are usually provided by board-specific initialization code.
A <structname>struct spi_driver</structname> is called a
"Protocol Driver", and is bound to a spi_device using normal
driver model calls.
</para>
<para>
The I/O model is a set of queued messages. Protocol drivers
submit one or more <structname>struct spi_message</structname>
objects, which are processed and completed asynchronously.
(There are synchronous wrappers, however.) Messages are
built from one or more <structname>struct spi_transfer</structname>
objects, each of which wraps a full duplex SPI transfer.
A variety of protocol tweaking options are needed, because
different chips adopt very different policies for how they
use the bits transferred with SPI.
</para>
!Iinclude/linux/spi/spi.h
!Fdrivers/spi/spi.c spi_register_board_info
!Edrivers/spi/spi.c
</chapter>
<chapter id="i2c">
<title>I<superscript>2</superscript>C and SMBus Subsystem</title>
<para>
I<superscript>2</superscript>C (or without fancy typography, "I2C")
is an acronym for the "Inter-IC" bus, a simple bus protocol which is
widely used where low data rate communications suffice.
Since it's also a licensed trademark, some vendors use another
name (such as "Two-Wire Interface", TWI) for the same bus.
I2C only needs two signals (SCL for clock, SDA for data), conserving
board real estate and minimizing signal quality issues.
Most I2C devices use seven bit addresses, and bus speeds of up
to 400 kHz; there's a high speed extension (3.4 MHz) that's not yet
found wide use.
I2C is a multi-master bus; open drain signaling is used to
arbitrate between masters, as well as to handshake and to
synchronize clocks from slower clients.
</para>
<para>
The Linux I2C programming interfaces support only the master
side of bus interactions, not the slave side.
The programming interface is structured around two kinds of driver,
and two kinds of device.
An I2C "Adapter Driver" abstracts the controller hardware; it binds
to a physical device (perhaps a PCI device or platform_device) and
exposes a <structname>struct i2c_adapter</structname> representing
each I2C bus segment it manages.
On each I2C bus segment will be I2C devices represented by a
<structname>struct i2c_client</structname>. Those devices will
be bound to a <structname>struct i2c_driver</structname>,
which should follow the standard Linux driver model.
(At this writing, a legacy model is more widely used.)
There are functions to perform various I2C protocol operations; at
this writing all such functions are usable only from task context.
</para>
<para>
The System Management Bus (SMBus) is a sibling protocol. Most SMBus
systems are also I2C conformant. The electrical constraints are
tighter for SMBus, and it standardizes particular protocol messages
and idioms. Controllers that support I2C can also support most
SMBus operations, but SMBus controllers don't support all the protocol
options that an I2C controller will.
There are functions to perform various SMBus protocol operations,
either using I2C primitives or by issuing SMBus commands to
i2c_adapter devices which don't support those I2C operations.
</para>
!Iinclude/linux/i2c.h
!Fdrivers/i2c/i2c-boardinfo.c i2c_register_board_info
!Edrivers/i2c/i2c-core.c
</chapter>
</book>

View File

@ -38,58 +38,6 @@
<toc></toc> <toc></toc>
<chapter id="Basics">
<title>Driver Basics</title>
<sect1><title>Driver Entry and Exit points</title>
!Iinclude/linux/init.h
</sect1>
<sect1><title>Atomic and pointer manipulation</title>
!Iarch/x86/include/asm/atomic_32.h
!Iarch/x86/include/asm/unaligned.h
</sect1>
<sect1><title>Delaying, scheduling, and timer routines</title>
!Iinclude/linux/sched.h
!Ekernel/sched.c
!Ekernel/timer.c
</sect1>
<sect1><title>High-resolution timers</title>
!Iinclude/linux/ktime.h
!Iinclude/linux/hrtimer.h
!Ekernel/hrtimer.c
</sect1>
<sect1><title>Workqueues and Kevents</title>
!Ekernel/workqueue.c
</sect1>
<sect1><title>Internal Functions</title>
!Ikernel/exit.c
!Ikernel/signal.c
!Iinclude/linux/kthread.h
!Ekernel/kthread.c
</sect1>
<sect1><title>Kernel objects manipulation</title>
<!--
X!Iinclude/linux/kobject.h
-->
!Elib/kobject.c
</sect1>
<sect1><title>Kernel utility functions</title>
!Iinclude/linux/kernel.h
!Ekernel/printk.c
!Ekernel/panic.c
!Ekernel/sys.c
!Ekernel/rcupdate.c
</sect1>
<sect1><title>Device Resource Management</title>
!Edrivers/base/devres.c
</sect1>
</chapter>
<chapter id="adt"> <chapter id="adt">
<title>Data Types</title> <title>Data Types</title>
<sect1><title>Doubly Linked Lists</title> <sect1><title>Doubly Linked Lists</title>
@ -298,62 +246,6 @@ X!Earch/x86/kernel/mca_32.c
!Ikernel/acct.c !Ikernel/acct.c
</chapter> </chapter>
<chapter id="devdrivers">
<title>Device drivers infrastructure</title>
<sect1><title>Device Drivers Base</title>
<!--
X!Iinclude/linux/device.h
-->
!Edrivers/base/driver.c
!Edrivers/base/core.c
!Edrivers/base/class.c
!Edrivers/base/firmware_class.c
!Edrivers/base/transport_class.c
<!-- Cannot be included, because
attribute_container_add_class_device_adapter
and attribute_container_classdev_to_container
exceed allowed 44 characters maximum
X!Edrivers/base/attribute_container.c
-->
!Edrivers/base/sys.c
<!--
X!Edrivers/base/interface.c
-->
!Edrivers/base/platform.c
!Edrivers/base/bus.c
</sect1>
<sect1><title>Device Drivers Power Management</title>
!Edrivers/base/power/main.c
</sect1>
<sect1><title>Device Drivers ACPI Support</title>
<!-- Internal functions only
X!Edrivers/acpi/sleep/main.c
X!Edrivers/acpi/sleep/wakeup.c
X!Edrivers/acpi/motherboard.c
X!Edrivers/acpi/bus.c
-->
!Edrivers/acpi/scan.c
!Idrivers/acpi/scan.c
<!-- No correct structured comments
X!Edrivers/acpi/pci_bind.c
-->
</sect1>
<sect1><title>Device drivers PnP support</title>
!Idrivers/pnp/core.c
<!-- No correct structured comments
X!Edrivers/pnp/system.c
-->
!Edrivers/pnp/card.c
!Idrivers/pnp/driver.c
!Edrivers/pnp/manager.c
!Edrivers/pnp/support.c
</sect1>
<sect1><title>Userspace IO devices</title>
!Edrivers/uio/uio.c
!Iinclude/linux/uio_driver.h
</sect1>
</chapter>
<chapter id="blkdev"> <chapter id="blkdev">
<title>Block Devices</title> <title>Block Devices</title>
!Eblock/blk-core.c !Eblock/blk-core.c
@ -381,275 +273,6 @@ X!Edrivers/pnp/system.c
!Edrivers/char/misc.c !Edrivers/char/misc.c
</chapter> </chapter>
<chapter id="parportdev">
<title>Parallel Port Devices</title>
!Iinclude/linux/parport.h
!Edrivers/parport/ieee1284.c
!Edrivers/parport/share.c
!Idrivers/parport/daisy.c
</chapter>
<chapter id="message_devices">
<title>Message-based devices</title>
<sect1><title>Fusion message devices</title>
!Edrivers/message/fusion/mptbase.c
!Idrivers/message/fusion/mptbase.c
!Edrivers/message/fusion/mptscsih.c
!Idrivers/message/fusion/mptscsih.c
!Idrivers/message/fusion/mptctl.c
!Idrivers/message/fusion/mptspi.c
!Idrivers/message/fusion/mptfc.c
!Idrivers/message/fusion/mptlan.c
</sect1>
<sect1><title>I2O message devices</title>
!Iinclude/linux/i2o.h
!Idrivers/message/i2o/core.h
!Edrivers/message/i2o/iop.c
!Idrivers/message/i2o/iop.c
!Idrivers/message/i2o/config-osm.c
!Edrivers/message/i2o/exec-osm.c
!Idrivers/message/i2o/exec-osm.c
!Idrivers/message/i2o/bus-osm.c
!Edrivers/message/i2o/device.c
!Idrivers/message/i2o/device.c
!Idrivers/message/i2o/driver.c
!Idrivers/message/i2o/pci.c
!Idrivers/message/i2o/i2o_block.c
!Idrivers/message/i2o/i2o_scsi.c
!Idrivers/message/i2o/i2o_proc.c
</sect1>
</chapter>
<chapter id="snddev">
<title>Sound Devices</title>
!Iinclude/sound/core.h
!Esound/sound_core.c
!Iinclude/sound/pcm.h
!Esound/core/pcm.c
!Esound/core/device.c
!Esound/core/info.c
!Esound/core/rawmidi.c
!Esound/core/sound.c
!Esound/core/memory.c
!Esound/core/pcm_memory.c
!Esound/core/init.c
!Esound/core/isadma.c
!Esound/core/control.c
!Esound/core/pcm_lib.c
!Esound/core/hwdep.c
!Esound/core/pcm_native.c
!Esound/core/memalloc.c
<!-- FIXME: Removed for now since no structured comments in source
X!Isound/sound_firmware.c
-->
</chapter>
<chapter id="uart16x50">
<title>16x50 UART Driver</title>
!Iinclude/linux/serial_core.h
!Edrivers/serial/serial_core.c
!Edrivers/serial/8250.c
</chapter>
<chapter id="fbdev">
<title>Frame Buffer Library</title>
<para>
The frame buffer drivers depend heavily on four data structures.
These structures are declared in include/linux/fb.h. They are
fb_info, fb_var_screeninfo, fb_fix_screeninfo and fb_monospecs.
The last three can be made available to and from userland.
</para>
<para>
fb_info defines the current state of a particular video card.
Inside fb_info, there exists a fb_ops structure which is a
collection of needed functions to make fbdev and fbcon work.
fb_info is only visible to the kernel.
</para>
<para>
fb_var_screeninfo is used to describe the features of a video card
that are user defined. With fb_var_screeninfo, things such as
depth and the resolution may be defined.
</para>
<para>
The next structure is fb_fix_screeninfo. This defines the
properties of a card that are created when a mode is set and can't
be changed otherwise. A good example of this is the start of the
frame buffer memory. This "locks" the address of the frame buffer
memory, so that it cannot be changed or moved.
</para>
<para>
The last structure is fb_monospecs. In the old API, there was
little importance for fb_monospecs. This allowed for forbidden things
such as setting a mode of 800x600 on a fix frequency monitor. With
the new API, fb_monospecs prevents such things, and if used
correctly, can prevent a monitor from being cooked. fb_monospecs
will not be useful until kernels 2.5.x.
</para>
<sect1><title>Frame Buffer Memory</title>
!Edrivers/video/fbmem.c
</sect1>
<!--
<sect1><title>Frame Buffer Console</title>
X!Edrivers/video/console/fbcon.c
</sect1>
-->
<sect1><title>Frame Buffer Colormap</title>
!Edrivers/video/fbcmap.c
</sect1>
<!-- FIXME:
drivers/video/fbgen.c has no docs, which stuffs up the sgml. Comment
out until somebody adds docs. KAO
<sect1><title>Frame Buffer Generic Functions</title>
X!Idrivers/video/fbgen.c
</sect1>
KAO -->
<sect1><title>Frame Buffer Video Mode Database</title>
!Idrivers/video/modedb.c
!Edrivers/video/modedb.c
</sect1>
<sect1><title>Frame Buffer Macintosh Video Mode Database</title>
!Edrivers/video/macmodes.c
</sect1>
<sect1><title>Frame Buffer Fonts</title>
<para>
Refer to the file drivers/video/console/fonts.c for more information.
</para>
<!-- FIXME: Removed for now since no structured comments in source
X!Idrivers/video/console/fonts.c
-->
</sect1>
</chapter>
<chapter id="input_subsystem">
<title>Input Subsystem</title>
!Iinclude/linux/input.h
!Edrivers/input/input.c
!Edrivers/input/ff-core.c
!Edrivers/input/ff-memless.c
</chapter>
<chapter id="spi">
<title>Serial Peripheral Interface (SPI)</title>
<para>
SPI is the "Serial Peripheral Interface", widely used with
embedded systems because it is a simple and efficient
interface: basically a multiplexed shift register.
Its three signal wires hold a clock (SCK, often in the range
of 1-20 MHz), a "Master Out, Slave In" (MOSI) data line, and
a "Master In, Slave Out" (MISO) data line.
SPI is a full duplex protocol; for each bit shifted out the
MOSI line (one per clock) another is shifted in on the MISO line.
Those bits are assembled into words of various sizes on the
way to and from system memory.
An additional chipselect line is usually active-low (nCS);
four signals are normally used for each peripheral, plus
sometimes an interrupt.
</para>
<para>
The SPI bus facilities listed here provide a generalized
interface to declare SPI busses and devices, manage them
according to the standard Linux driver model, and perform
input/output operations.
At this time, only "master" side interfaces are supported,
where Linux talks to SPI peripherals and does not implement
such a peripheral itself.
(Interfaces to support implementing SPI slaves would
necessarily look different.)
</para>
<para>
The programming interface is structured around two kinds of driver,
and two kinds of device.
A "Controller Driver" abstracts the controller hardware, which may
be as simple as a set of GPIO pins or as complex as a pair of FIFOs
connected to dual DMA engines on the other side of the SPI shift
register (maximizing throughput). Such drivers bridge between
whatever bus they sit on (often the platform bus) and SPI, and
expose the SPI side of their device as a
<structname>struct spi_master</structname>.
SPI devices are children of that master, represented as a
<structname>struct spi_device</structname> and manufactured from
<structname>struct spi_board_info</structname> descriptors which
are usually provided by board-specific initialization code.
A <structname>struct spi_driver</structname> is called a
"Protocol Driver", and is bound to a spi_device using normal
driver model calls.
</para>
<para>
The I/O model is a set of queued messages. Protocol drivers
submit one or more <structname>struct spi_message</structname>
objects, which are processed and completed asynchronously.
(There are synchronous wrappers, however.) Messages are
built from one or more <structname>struct spi_transfer</structname>
objects, each of which wraps a full duplex SPI transfer.
A variety of protocol tweaking options are needed, because
different chips adopt very different policies for how they
use the bits transferred with SPI.
</para>
!Iinclude/linux/spi/spi.h
!Fdrivers/spi/spi.c spi_register_board_info
!Edrivers/spi/spi.c
</chapter>
<chapter id="i2c">
<title>I<superscript>2</superscript>C and SMBus Subsystem</title>
<para>
I<superscript>2</superscript>C (or without fancy typography, "I2C")
is an acronym for the "Inter-IC" bus, a simple bus protocol which is
widely used where low data rate communications suffice.
Since it's also a licensed trademark, some vendors use another
name (such as "Two-Wire Interface", TWI) for the same bus.
I2C only needs two signals (SCL for clock, SDA for data), conserving
board real estate and minimizing signal quality issues.
Most I2C devices use seven bit addresses, and bus speeds of up
to 400 kHz; there's a high speed extension (3.4 MHz) that's not yet
found wide use.
I2C is a multi-master bus; open drain signaling is used to
arbitrate between masters, as well as to handshake and to
synchronize clocks from slower clients.
</para>
<para>
The Linux I2C programming interfaces support only the master
side of bus interactions, not the slave side.
The programming interface is structured around two kinds of driver,
and two kinds of device.
An I2C "Adapter Driver" abstracts the controller hardware; it binds
to a physical device (perhaps a PCI device or platform_device) and
exposes a <structname>struct i2c_adapter</structname> representing
each I2C bus segment it manages.
On each I2C bus segment will be I2C devices represented by a
<structname>struct i2c_client</structname>. Those devices will
be bound to a <structname>struct i2c_driver</structname>,
which should follow the standard Linux driver model.
(At this writing, a legacy model is more widely used.)
There are functions to perform various I2C protocol operations; at
this writing all such functions are usable only from task context.
</para>
<para>
The System Management Bus (SMBus) is a sibling protocol. Most SMBus
systems are also I2C conformant. The electrical constraints are
tighter for SMBus, and it standardizes particular protocol messages
and idioms. Controllers that support I2C can also support most
SMBus operations, but SMBus controllers don't support all the protocol
options that an I2C controller will.
There are functions to perform various SMBus protocol operations,
either using I2C primitives or by issuing SMBus commands to
i2c_adapter devices which don't support those I2C operations.
</para>
!Iinclude/linux/i2c.h
!Fdrivers/i2c/i2c-boardinfo.c i2c_register_board_info
!Edrivers/i2c/i2c-core.c
</chapter>
<chapter id="clk"> <chapter id="clk">
<title>Clock Framework</title> <title>Clock Framework</title>

View File

@ -41,6 +41,12 @@ GPL version 2.
</abstract> </abstract>
<revhistory> <revhistory>
<revision>
<revnumber>0.7</revnumber>
<date>2008-12-23</date>
<authorinitials>hjk</authorinitials>
<revremark>Added generic platform drivers and offset attribute.</revremark>
</revision>
<revision> <revision>
<revnumber>0.6</revnumber> <revnumber>0.6</revnumber>
<date>2008-12-05</date> <date>2008-12-05</date>
@ -312,6 +318,16 @@ interested in translating it, please email me
pointed to by addr. pointed to by addr.
</para> </para>
</listitem> </listitem>
<listitem>
<para>
<filename>offset</filename>: The offset, in bytes, that has to be
added to the pointer returned by <function>mmap()</function> to get
to the actual device memory. This is important if the device's memory
is not page aligned. Remember that pointers returned by
<function>mmap()</function> are always page aligned, so it is good
style to always add this offset.
</para>
</listitem>
</itemizedlist> </itemizedlist>
<para> <para>
@ -594,6 +610,78 @@ framework to set up sysfs files for this region. Simply leave it alone.
</para> </para>
</sect1> </sect1>
<sect1 id="using_uio_pdrv">
<title>Using uio_pdrv for platform devices</title>
<para>
In many cases, UIO drivers for platform devices can be handled in a
generic way. In the same place where you define your
<varname>struct platform_device</varname>, you simply also implement
your interrupt handler and fill your
<varname>struct uio_info</varname>. A pointer to this
<varname>struct uio_info</varname> is then used as
<varname>platform_data</varname> for your platform device.
</para>
<para>
You also need to set up an array of <varname>struct resource</varname>
containing addresses and sizes of your memory mappings. This
information is passed to the driver using the
<varname>.resource</varname> and <varname>.num_resources</varname>
elements of <varname>struct platform_device</varname>.
</para>
<para>
You now have to set the <varname>.name</varname> element of
<varname>struct platform_device</varname> to
<varname>"uio_pdrv"</varname> to use the generic UIO platform device
driver. This driver will fill the <varname>mem[]</varname> array
according to the resources given, and register the device.
</para>
<para>
The advantage of this approach is that you only have to edit a file
you need to edit anyway. You do not have to create an extra driver.
</para>
</sect1>
<sect1 id="using_uio_pdrv_genirq">
<title>Using uio_pdrv_genirq for platform devices</title>
<para>
Especially in embedded devices, you frequently find chips where the
irq pin is tied to its own dedicated interrupt line. In such cases,
where you can be really sure the interrupt is not shared, we can take
the concept of <varname>uio_pdrv</varname> one step further and use a
generic interrupt handler. That's what
<varname>uio_pdrv_genirq</varname> does.
</para>
<para>
The setup for this driver is the same as described above for
<varname>uio_pdrv</varname>, except that you do not implement an
interrupt handler. The <varname>.handler</varname> element of
<varname>struct uio_info</varname> must remain
<varname>NULL</varname>. The <varname>.irq_flags</varname> element
must not contain <varname>IRQF_SHARED</varname>.
</para>
<para>
You will set the <varname>.name</varname> element of
<varname>struct platform_device</varname> to
<varname>"uio_pdrv_genirq"</varname> to use this driver.
</para>
<para>
The generic interrupt handler of <varname>uio_pdrv_genirq</varname>
will simply disable the interrupt line using
<function>disable_irq_nosync()</function>. After doing its work,
userspace can reenable the interrupt by writing 0x00000001 to the UIO
device file. The driver already implements an
<function>irq_control()</function> to make this possible, you must not
implement your own.
</para>
<para>
Using <varname>uio_pdrv_genirq</varname> not only saves a few lines of
interrupt handler code. You also do not need to know anything about
the chip's internal registers to create the kernel part of the driver.
All you need to know is the irq number of the pin the chip is
connected to.
</para>
</sect1>
</chapter> </chapter>
<chapter id="userspace_driver" xreflabel="Writing a driver in user space"> <chapter id="userspace_driver" xreflabel="Writing a driver in user space">

View File

@ -1,6 +1,6 @@
[ NOTE: The virt_to_bus() and bus_to_virt() functions have been [ NOTE: The virt_to_bus() and bus_to_virt() functions have been
superseded by the functionality provided by the PCI DMA superseded by the functionality provided by the PCI DMA interface
interface (see Documentation/DMA-mapping.txt). They continue (see Documentation/PCI/PCI-DMA-mapping.txt). They continue
to be documented below for historical purposes, but new code to be documented below for historical purposes, but new code
must not use them. --davidm 00/12/12 ] must not use them. --davidm 00/12/12 ]

View File

@ -93,7 +93,7 @@ the PCI Express Port Bus driver from loading a service driver.
int pcie_port_service_register(struct pcie_port_service_driver *new) int pcie_port_service_register(struct pcie_port_service_driver *new)
This API replaces the Linux Driver Model's pci_module_init API. A This API replaces the Linux Driver Model's pci_register_driver API. A
service driver should always calls pcie_port_service_register at service driver should always calls pcie_port_service_register at
module init. Note that after service driver being loaded, calls module init. Note that after service driver being loaded, calls
such as pci_enable_device(dev) and pci_set_master(dev) are no longer such as pci_enable_device(dev) and pci_set_master(dev) are no longer

View File

@ -298,3 +298,15 @@ over a rather long period of time, but improvements are always welcome!
Note that, rcu_assign_pointer() and rcu_dereference() relate to Note that, rcu_assign_pointer() and rcu_dereference() relate to
SRCU just as they do to other forms of RCU. SRCU just as they do to other forms of RCU.
15. The whole point of call_rcu(), synchronize_rcu(), and friends
is to wait until all pre-existing readers have finished before
carrying out some otherwise-destructive operation. It is
therefore critically important to -first- remove any path
that readers can follow that could be affected by the
destructive operation, and -only- -then- invoke call_rcu(),
synchronize_rcu(), or friends.
Because these primitives only wait for pre-existing readers,
it is the caller's responsibility to guarantee safety to
any subsequent readers.

View File

@ -392,6 +392,10 @@ int main(int argc, char *argv[])
goto err; goto err;
} }
} }
if (!maskset && !tid && !containerset) {
usage();
goto err;
}
do { do {
int i; int i;

View File

@ -186,8 +186,9 @@ a virtual address mapping (unlike the earlier scheme of virtual address
do not have a corresponding kernel virtual address space mapping) and do not have a corresponding kernel virtual address space mapping) and
low-memory pages. low-memory pages.
Note: Please refer to DMA-mapping.txt for a discussion on PCI high mem DMA Note: Please refer to Documentation/PCI/PCI-DMA-mapping.txt for a discussion
aspects and mapping of scatter gather lists, and support for 64 bit PCI. on PCI high mem DMA aspects and mapping of scatter gather lists, and support
for 64 bit PCI.
Special handling is required only for cases where i/o needs to happen on Special handling is required only for cases where i/o needs to happen on
pages at physical memory addresses beyond what the device can support. In these pages at physical memory addresses beyond what the device can support. In these
@ -953,14 +954,14 @@ elevator_allow_merge_fn called whenever the block layer determines
results in some sort of conflict internally, results in some sort of conflict internally,
this hook allows it to do that. this hook allows it to do that.
elevator_dispatch_fn fills the dispatch queue with ready requests. elevator_dispatch_fn* fills the dispatch queue with ready requests.
I/O schedulers are free to postpone requests by I/O schedulers are free to postpone requests by
not filling the dispatch queue unless @force not filling the dispatch queue unless @force
is non-zero. Once dispatched, I/O schedulers is non-zero. Once dispatched, I/O schedulers
are not allowed to manipulate the requests - are not allowed to manipulate the requests -
they belong to generic dispatch queue. they belong to generic dispatch queue.
elevator_add_req_fn called to add a new request into the scheduler elevator_add_req_fn* called to add a new request into the scheduler
elevator_queue_empty_fn returns true if the merge queue is empty. elevator_queue_empty_fn returns true if the merge queue is empty.
Drivers shouldn't use this, but rather check Drivers shouldn't use this, but rather check
@ -990,7 +991,7 @@ elevator_activate_req_fn Called when device driver first sees a request.
elevator_deactivate_req_fn Called when device driver decides to delay elevator_deactivate_req_fn Called when device driver decides to delay
a request by requeueing it. a request by requeueing it.
elevator_init_fn elevator_init_fn*
elevator_exit_fn Allocate and free any elevator specific storage elevator_exit_fn Allocate and free any elevator specific storage
for a queue. for a queue.

View File

@ -0,0 +1,63 @@
Queue sysfs files
=================
This text file will detail the queue files that are located in the sysfs tree
for each block device. Note that stacked devices typically do not export
any settings, since their queue merely functions are a remapping target.
These files are the ones found in the /sys/block/xxx/queue/ directory.
Files denoted with a RO postfix are readonly and the RW postfix means
read-write.
hw_sector_size (RO)
-------------------
This is the hardware sector size of the device, in bytes.
max_hw_sectors_kb (RO)
----------------------
This is the maximum number of kilobytes supported in a single data transfer.
max_sectors_kb (RW)
-------------------
This is the maximum number of kilobytes that the block layer will allow
for a filesystem request. Must be smaller than or equal to the maximum
size allowed by the hardware.
nomerges (RW)
-------------
This enables the user to disable the lookup logic involved with IO merging
requests in the block layer. Merging may still occur through a direct
1-hit cache, since that comes for (almost) free. The IO scheduler will not
waste cycles doing tree/hash lookups for merges if nomerges is 1. Defaults
to 0, enabling all merges.
nr_requests (RW)
----------------
This controls how many requests may be allocated in the block layer for
read or write requests. Note that the total allocated number may be twice
this amount, since it applies only to reads or writes (not the accumulated
sum).
read_ahead_kb (RW)
------------------
Maximum number of kilobytes to read-ahead for filesystems on this block
device.
rq_affinity (RW)
----------------
If this option is enabled, the block layer will migrate request completions
to the CPU that originally submitted the request. For some workloads
this provides a significant reduction in CPU cycles due to caching effects.
scheduler (RW)
--------------
When read, this file will display the current and available IO schedulers
for this block device. The currently active IO scheduler will be enclosed
in [] brackets. Writing an IO scheduler name to this file will switch
control of this block device to that new IO scheduler. Note that writing
an IO scheduler name to this file will attempt to load that IO scheduler
module, if it isn't already present in the system.
Jens Axboe <jens.axboe@oracle.com>, February 2009

View File

@ -1,7 +1,8 @@
CGROUPS CGROUPS
------- -------
Written by Paul Menage <menage@google.com> based on Documentation/cpusets.txt Written by Paul Menage <menage@google.com> based on
Documentation/cgroups/cpusets.txt
Original copyright statements from cpusets.txt: Original copyright statements from cpusets.txt:
Portions Copyright (C) 2004 BULL SA. Portions Copyright (C) 2004 BULL SA.
@ -68,7 +69,7 @@ On their own, the only use for cgroups is for simple job
tracking. The intention is that other subsystems hook into the generic tracking. The intention is that other subsystems hook into the generic
cgroup support to provide new attributes for cgroups, such as cgroup support to provide new attributes for cgroups, such as
accounting/limiting the resources which processes in a cgroup can accounting/limiting the resources which processes in a cgroup can
access. For example, cpusets (see Documentation/cpusets.txt) allows access. For example, cpusets (see Documentation/cgroups/cpusets.txt) allows
you to associate a set of CPUs and a set of memory nodes with the you to associate a set of CPUs and a set of memory nodes with the
tasks in each cgroup. tasks in each cgroup.
@ -251,10 +252,8 @@ cgroup file system directories.
When a task is moved from one cgroup to another, it gets a new When a task is moved from one cgroup to another, it gets a new
css_set pointer - if there's an already existing css_set with the css_set pointer - if there's an already existing css_set with the
desired collection of cgroups then that group is reused, else a new desired collection of cgroups then that group is reused, else a new
css_set is allocated. Note that the current implementation uses a css_set is allocated. The appropriate existing css_set is located by
linear search to locate an appropriate existing css_set, so isn't looking into a hash table.
very efficient. A future version will use a hash table for better
performance.
To allow access from a cgroup to the css_sets (and hence tasks) To allow access from a cgroup to the css_sets (and hence tasks)
that comprise it, a set of cg_cgroup_link objects form a lattice; that comprise it, a set of cg_cgroup_link objects form a lattice;

View File

@ -142,7 +142,7 @@ into the rest of the kernel, none in performance critical paths:
- in fork and exit, to attach and detach a task from its cpuset. - in fork and exit, to attach and detach a task from its cpuset.
- in sched_setaffinity, to mask the requested CPUs by what's - in sched_setaffinity, to mask the requested CPUs by what's
allowed in that tasks cpuset. allowed in that tasks cpuset.
- in sched.c migrate_all_tasks(), to keep migrating tasks within - in sched.c migrate_live_tasks(), to keep migrating tasks within
the CPUs allowed by their cpuset, if possible. the CPUs allowed by their cpuset, if possible.
- in the mbind and set_mempolicy system calls, to mask the requested - in the mbind and set_mempolicy system calls, to mask the requested
Memory Nodes by what's allowed in that tasks cpuset. Memory Nodes by what's allowed in that tasks cpuset.
@ -175,6 +175,10 @@ files describing that cpuset:
- mem_exclusive flag: is memory placement exclusive? - mem_exclusive flag: is memory placement exclusive?
- mem_hardwall flag: is memory allocation hardwalled - mem_hardwall flag: is memory allocation hardwalled
- memory_pressure: measure of how much paging pressure in cpuset - memory_pressure: measure of how much paging pressure in cpuset
- memory_spread_page flag: if set, spread page cache evenly on allowed nodes
- memory_spread_slab flag: if set, spread slab cache evenly on allowed nodes
- sched_load_balance flag: if set, load balance within CPUs on that cpuset
- sched_relax_domain_level: the searching range when migrating tasks
In addition, the root cpuset only has the following file: In addition, the root cpuset only has the following file:
- memory_pressure_enabled flag: compute memory_pressure? - memory_pressure_enabled flag: compute memory_pressure?
@ -252,7 +256,7 @@ is causing.
This is useful both on tightly managed systems running a wide mix of This is useful both on tightly managed systems running a wide mix of
submitted jobs, which may choose to terminate or re-prioritize jobs that submitted jobs, which may choose to terminate or re-prioritize jobs that
are trying to use more memory than allowed on the nodes assigned them, are trying to use more memory than allowed on the nodes assigned to them,
and with tightly coupled, long running, massively parallel scientific and with tightly coupled, long running, massively parallel scientific
computing jobs that will dramatically fail to meet required performance computing jobs that will dramatically fail to meet required performance
goals if they start to use more memory than allowed to them. goals if they start to use more memory than allowed to them.
@ -378,7 +382,7 @@ as cpusets and sched_setaffinity.
The algorithmic cost of load balancing and its impact on key shared The algorithmic cost of load balancing and its impact on key shared
kernel data structures such as the task list increases more than kernel data structures such as the task list increases more than
linearly with the number of CPUs being balanced. So the scheduler linearly with the number of CPUs being balanced. So the scheduler
has support to partition the systems CPUs into a number of sched has support to partition the systems CPUs into a number of sched
domains such that it only load balances within each sched domain. domains such that it only load balances within each sched domain.
Each sched domain covers some subset of the CPUs in the system; Each sched domain covers some subset of the CPUs in the system;
no two sched domains overlap; some CPUs might not be in any sched no two sched domains overlap; some CPUs might not be in any sched
@ -485,17 +489,22 @@ of CPUs allowed to a cpuset having 'sched_load_balance' enabled.
The internal kernel cpuset to scheduler interface passes from the The internal kernel cpuset to scheduler interface passes from the
cpuset code to the scheduler code a partition of the load balanced cpuset code to the scheduler code a partition of the load balanced
CPUs in the system. This partition is a set of subsets (represented CPUs in the system. This partition is a set of subsets (represented
as an array of cpumask_t) of CPUs, pairwise disjoint, that cover all as an array of struct cpumask) of CPUs, pairwise disjoint, that cover
the CPUs that must be load balanced. all the CPUs that must be load balanced.
Whenever the 'sched_load_balance' flag changes, or CPUs come or go The cpuset code builds a new such partition and passes it to the
from a cpuset with this flag enabled, or a cpuset with this flag scheduler sched domain setup code, to have the sched domains rebuilt
enabled is removed, the cpuset code builds a new such partition and as necessary, whenever:
passes it to the scheduler sched domain setup code, to have the sched - the 'sched_load_balance' flag of a cpuset with non-empty CPUs changes,
domains rebuilt as necessary. - or CPUs come or go from a cpuset with this flag enabled,
- or 'sched_relax_domain_level' value of a cpuset with non-empty CPUs
and with this flag enabled changes,
- or a cpuset with non-empty CPUs and with this flag enabled is removed,
- or a cpu is offlined/onlined.
This partition exactly defines what sched domains the scheduler should This partition exactly defines what sched domains the scheduler should
setup - one sched domain for each element (cpumask_t) in the partition. setup - one sched domain for each element (struct cpumask) in the
partition.
The scheduler remembers the currently active sched domain partitions. The scheduler remembers the currently active sched domain partitions.
When the scheduler routine partition_sched_domains() is invoked from When the scheduler routine partition_sched_domains() is invoked from
@ -559,7 +568,7 @@ domain, the largest value among those is used. Be careful, if one
requests 0 and others are -1 then 0 is used. requests 0 and others are -1 then 0 is used.
Note that modifying this file will have both good and bad effects, Note that modifying this file will have both good and bad effects,
and whether it is acceptable or not will be depend on your situation. and whether it is acceptable or not depends on your situation.
Don't modify this file if you are not sure. Don't modify this file if you are not sure.
If your situation is: If your situation is:
@ -600,19 +609,15 @@ to allocate a page of memory for that task.
If a cpuset has its 'cpus' modified, then each task in that cpuset If a cpuset has its 'cpus' modified, then each task in that cpuset
will have its allowed CPU placement changed immediately. Similarly, will have its allowed CPU placement changed immediately. Similarly,
if a tasks pid is written to a cpusets 'tasks' file, in either its if a tasks pid is written to another cpusets 'tasks' file, then its
current cpuset or another cpuset, then its allowed CPU placement is allowed CPU placement is changed immediately. If such a task had been
changed immediately. If such a task had been bound to some subset bound to some subset of its cpuset using the sched_setaffinity() call,
of its cpuset using the sched_setaffinity() call, the task will be the task will be allowed to run on any CPU allowed in its new cpuset,
allowed to run on any CPU allowed in its new cpuset, negating the negating the effect of the prior sched_setaffinity() call.
affect of the prior sched_setaffinity() call.
In summary, the memory placement of a task whose cpuset is changed is In summary, the memory placement of a task whose cpuset is changed is
updated by the kernel, on the next allocation of a page for that task, updated by the kernel, on the next allocation of a page for that task,
but the processor placement is not updated, until that tasks pid is and the processor placement is updated immediately.
rewritten to the 'tasks' file of its cpuset. This is done to avoid
impacting the scheduler code in the kernel with a check for changes
in a tasks processor placement.
Normally, once a page is allocated (given a physical page Normally, once a page is allocated (given a physical page
of main memory) then that page stays on whatever node it of main memory) then that page stays on whatever node it
@ -681,10 +686,14 @@ 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 future, a C library interface to cpusets will likely be There are ways to query or modify cpusets:
available. For now, the only way to query or modify cpusets is - via the cpuset file system directly, using the various cd, mkdir, echo,
via the cpuset file system, using the various cd, mkdir, echo, cat, cat, rmdir commands from the shell, or their equivalent from C.
rmdir commands from the shell, or their equivalent from C. - via the C library libcpuset.
- via the C library libcgroup.
(http://sourceforge.net/proects/libcg/)
- via the python application cset.
(http://developer.novell.com/wiki/index.php/Cpuset)
The sched_setaffinity calls can also be done at the shell prompt using The sched_setaffinity calls can also be done at the shell prompt using
SGI's runon or Robert Love's taskset. The mbind and set_mempolicy SGI's runon or Robert Love's taskset. The mbind and set_mempolicy
@ -756,7 +765,7 @@ mount -t cpuset X /dev/cpuset
is equivalent to is equivalent to
mount -t cgroup -ocpuset X /dev/cpuset mount -t cgroup -ocpuset,noprefix X /dev/cpuset
echo "/sbin/cpuset_release_agent" > /dev/cpuset/release_agent echo "/sbin/cpuset_release_agent" > /dev/cpuset/release_agent
2.2 Adding/removing cpus 2.2 Adding/removing cpus

View File

@ -1,12 +1,12 @@
Memory Resource Controller(Memcg) Implementation Memo. Memory Resource Controller(Memcg) Implementation Memo.
Last Updated: 2008/12/15 Last Updated: 2009/1/19
Base Kernel Version: based on 2.6.28-rc8-mm. Base Kernel Version: based on 2.6.29-rc2.
Because VM is getting complex (one of reasons is memcg...), memcg's behavior Because VM is getting complex (one of reasons is memcg...), memcg's behavior
is complex. This is a document for memcg's internal behavior. is complex. This is a document for memcg's internal behavior.
Please note that implementation details can be changed. Please note that implementation details can be changed.
(*) Topics on API should be in Documentation/controllers/memory.txt) (*) Topics on API should be in Documentation/cgroups/memory.txt)
0. How to record usage ? 0. How to record usage ?
2 objects are used. 2 objects are used.
@ -340,3 +340,23 @@ Under below explanation, we assume CONFIG_MEM_RES_CTRL_SWAP=y.
# mount -t cgroup none /cgroup -t cpuset,memory,cpu,devices # mount -t cgroup none /cgroup -t cpuset,memory,cpu,devices
and do task move, mkdir, rmdir etc...under this. and do task move, mkdir, rmdir etc...under this.
9.7 swapoff.
Besides management of swap is one of complicated parts of memcg,
call path of swap-in at swapoff is not same as usual swap-in path..
It's worth to be tested explicitly.
For example, test like following is good.
(Shell-A)
# mount -t cgroup none /cgroup -t memory
# mkdir /cgroup/test
# echo 40M > /cgroup/test/memory.limit_in_bytes
# echo 0 > /cgroup/test/tasks
Run malloc(100M) program under this. You'll see 60M of swaps.
(Shell-B)
# move all tasks in /cgroup/test to /cgroup
# /sbin/swapoff -a
# rmdir /test/cgroup
# kill malloc task.
Of course, tmpfs v.s. swapoff test should be tested, too.

View File

@ -137,7 +137,7 @@ static void cn_test_timer_func(unsigned long __data)
memcpy(m + 1, data, m->len); memcpy(m + 1, data, m->len);
cn_netlink_send(m, 0, gfp_any()); cn_netlink_send(m, 0, GFP_ATOMIC);
kfree(m); kfree(m);
} }
@ -160,10 +160,8 @@ static int cn_test_init(void)
goto err_out; goto err_out;
} }
init_timer(&cn_test_timer); setup_timer(&cn_test_timer, cn_test_timer_func, 0);
cn_test_timer.function = cn_test_timer_func;
cn_test_timer.expires = jiffies + HZ; cn_test_timer.expires = jiffies + HZ;
cn_test_timer.data = 0;
add_timer(&cn_test_timer); add_timer(&cn_test_timer);
return 0; return 0;

View File

@ -195,19 +195,3 @@ scaling_setspeed. By "echoing" a new frequency into this
you can change the speed of the CPU, you can change the speed of the CPU,
but only within the limits of but only within the limits of
scaling_min_freq and scaling_max_freq. scaling_min_freq and scaling_max_freq.
3.2 Deprecated Interfaces
-------------------------
Depending on your kernel configuration, you might find the following
cpufreq-related files:
/proc/cpufreq
/proc/sys/cpu/*/speed
/proc/sys/cpu/*/speed-min
/proc/sys/cpu/*/speed-max
These are files for deprecated interfaces to cpufreq, which offer far
less functionality. Because of this, these interfaces aren't described
here.

View File

@ -127,9 +127,11 @@ void unlock_device(struct device * dev);
Attributes Attributes
~~~~~~~~~~ ~~~~~~~~~~
struct device_attribute { struct device_attribute {
struct attribute attr; struct attribute attr;
ssize_t (*show)(struct device * dev, char * buf, size_t count, loff_t off); ssize_t (*show)(struct device *dev, struct device_attribute *attr,
ssize_t (*store)(struct device * dev, const char * buf, size_t count, loff_t off); char *buf);
ssize_t (*store)(struct device *dev, struct device_attribute *attr,
const char *buf, size_t count);
}; };
Attributes of devices can be exported via drivers using a simple Attributes of devices can be exported via drivers using a simple

View File

@ -1,205 +0,0 @@
This README escorted the skystar2-driver rewriting procedure. It describes the
state of the new flexcop-driver set and some internals are written down here
too.
This document hopefully describes things about the flexcop and its
device-offsprings. Goal was to write an easy-to-write and easy-to-read set of
drivers based on the skystar2.c and other information.
Remark: flexcop-pci.c was a copy of skystar2.c, but every line has been
touched and rewritten.
History & News
==============
2005-04-01 - correct USB ISOC transfers (thanks to Vadim Catana)
General coding processing
=========================
We should proceed as follows (as long as no one complains):
0) Think before start writing code!
1) rewriting the skystar2.c with the help of the flexcop register descriptions
and splitting up the files to a pci-bus-part and a flexcop-part.
The new driver will be called b2c2-flexcop-pci.ko/b2c2-flexcop-usb.ko for the
device-specific part and b2c2-flexcop.ko for the common flexcop-functions.
2) Search for errors in the leftover of flexcop-pci.c (compare with pluto2.c
and other pci drivers)
3) make some beautification (see 'Improvements when rewriting (refactoring) is
done')
4) Testing the new driver and maybe substitute the skystar2.c with it, to reach
a wider tester audience.
5) creating an usb-bus-part using the already written flexcop code for the pci
card.
Idea: create a kernel-object for the flexcop and export all important
functions. This option saves kernel-memory, but maybe a lot of functions have
to be exported to kernel namespace.
Current situation
=================
0) Done :)
1) Done (some minor issues left)
2) Done
3) Not ready yet, more information is necessary
4) next to be done (see the table below)
5) USB driver is working (yes, there are some minor issues)
What seems to be ready?
-----------------------
1) Rewriting
1a) i2c is cut off from the flexcop-pci.c and seems to work
1b) moved tuner and demod stuff from flexcop-pci.c to flexcop-tuner-fe.c
1c) moved lnb and diseqc stuff from flexcop-pci.c to flexcop-tuner-fe.c
1e) eeprom (reading MAC address)
1d) sram (no dynamic sll size detection (commented out) (using default as JJ told me))
1f) misc. register accesses for reading parameters (e.g. resetting, revision)
1g) pid/mac filter (flexcop-hw-filter.c)
1i) dvb-stuff initialization in flexcop.c (done)
1h) dma stuff (now just using the size-irq, instead of all-together, to be done)
1j) remove flexcop initialization from flexcop-pci.c completely (done)
1l) use a well working dma IRQ method (done, see 'Known bugs and problems and TODO')
1k) cleanup flexcop-files (remove unused EXPORT_SYMBOLs, make static from
non-static where possible, moved code to proper places)
2) Search for errors in the leftover of flexcop-pci.c (partially done)
5a) add MAC address reading
5c) feeding of ISOC data to the software demux (format of the isochronous data
and speed optimization, no real error) (thanks to Vadim Catana)
What to do in the near future?
--------------------------------------
(no special order here)
5) USB driver
5b) optimize isoc-transfer (submitting/killing isoc URBs when transfer is starting)
Testing changes
---------------
O = item is working
P = item is partially working
X = item is not working
N = item does not apply here
<empty field> = item need to be examined
| PCI | USB
item | mt352 | nxt2002 | stv0299 | mt312 | mt352 | nxt2002 | stv0299 | mt312
-------+-------+---------+---------+-------+-------+---------+---------+-------
1a) | O | | | | N | N | N | N
1b) | O | | | | | | O |
1c) | N | N | | | N | N | O |
1d) | O | O
1e) | O | O
1f) | P
1g) | O
1h) | P |
1i) | O | N
1j) | O | N
1l) | O | N
2) | O | N
5a) | N | O
5b)* | N |
5c) | N | O
* - not done yet
Known bugs and problems and TODO
--------------------------------
1g/h/l) when pid filtering is enabled on the pci card
DMA usage currently:
The DMA is splitted in 2 equal-sized subbuffers. The Flexcop writes to first
address and triggers an IRQ when it's full and starts writing to the second
address. When the second address is full, the IRQ is triggered again, and
the flexcop writes to first address again, and so on.
The buffersize of each address is currently 640*188 bytes.
Problem is, when using hw-pid-filtering and doing some low-bandwidth
operation (like scanning) the buffers won't be filled enough to trigger
the IRQ. That's why:
When PID filtering is activated, the timer IRQ is used. Every 1.97 ms the IRQ
is triggered. Is the current write address of DMA1 different to the one
during the last IRQ, then the data is passed to the demuxer.
There is an additional DMA-IRQ-method: packet count IRQ. This isn't
implemented correctly yet.
The solution is to disable HW PID filtering, but I don't know how the DVB
API software demux behaves on slow systems with 45MBit/s TS.
Solved bugs :)
--------------
1g) pid-filtering (somehow pid index 4 and 5 (EMM_PID and ECM_PID) aren't
working)
SOLUTION: also index 0 was affected, because net_translation is done for
these indexes by default
5b) isochronous transfer does only work in the first attempt (for the Sky2PC
USB, Air2PC is working) SOLUTION: the flexcop was going asleep and never really
woke up again (don't know if this need fixes, see
flexcop-fe-tuner.c:flexcop_sleep)
NEWS: when the driver is loaded and unloaded and loaded again (w/o doing
anything in the while the driver is loaded the first time), no transfers take
place anymore.
Improvements when rewriting (refactoring) is done
=================================================
- split sleeping of the flexcop (misc_204.ACPI3_sig = 1;) from lnb_control
(enable sleeping for other demods than dvb-s)
- add support for CableStar (stv0297 Microtune 203x/ALPS) (almost done, incompatibilities with the Nexus-CA)
Debugging
---------
- add verbose debugging to skystar2.c (dump the reg_dw_data) and compare it
with this flexcop, this is important, because i2c is now using the
flexcop_ibi_value union from flexcop-reg.h (do you have a better idea for
that, please tell us so).
Everything which is identical in the following table, can be put into a common
flexcop-module.
PCI USB
-------------------------------------------------------------------------------
Different:
Register access: accessing IO memory USB control message
I2C bus: I2C bus of the FC USB control message
Data transfer: DMA isochronous transfer
EEPROM transfer: through i2c bus not clear yet
Identical:
Streaming: accessing registers
PID Filtering: accessing registers
Sram destinations: accessing registers
Tuner/Demod: I2C bus
DVB-stuff: can be written for common use
Acknowledgements (just for the rewriting part)
================
Bjarne Steinsbo thought a lot in the first place of the pci part for this code
sharing idea.
Andreas Oberritter for providing a recent PCI initialization template
(pluto2.c).
Boleslaw Ciesielski for pointing out a problem with firmware loader.
Vadim Catana for correcting the USB transfer.
comments, critics and ideas to linux-dvb@linuxtv.org.

View File

@ -1,5 +1,5 @@
How to set up the Technisat devices How to set up the Technisat/B2C2 Flexcop devices
=================================== ================================================
1) Find out what device you have 1) Find out what device you have
================================ ================================
@ -16,54 +16,60 @@ DVB: registering frontend 0 (Conexant CX24123/CX24109)...
If the Technisat is the only TV device in your box get rid of unnecessary modules and check this one: If the Technisat is the only TV device in your box get rid of unnecessary modules and check this one:
"Multimedia devices" => "Customise analog and hybrid tuner modules to build" "Multimedia devices" => "Customise analog and hybrid tuner modules to build"
In this directory uncheck every driver which is activated there. In this directory uncheck every driver which is activated there (except "Simple tuner support" for case 9 only).
Then please activate: Then please activate:
2a) Main module part: 2a) Main module part:
a.)"Multimedia devices" => "DVB/ATSC adapters" => "Technisat/B2C2 FlexcopII(b) and FlexCopIII adapters" a.)"Multimedia devices" => "DVB/ATSC adapters" => "Technisat/B2C2 FlexcopII(b) and FlexCopIII adapters"
b.)"Multimedia devices" => "DVB/ATSC adapters" => "Technisat/B2C2 FlexcopII(b) and FlexCopIII adapters" => "Technisat/B2C2 Air/Sky/Cable2PC PCI" in case of a PCI card OR b.)"Multimedia devices" => "DVB/ATSC adapters" => "Technisat/B2C2 FlexcopII(b) and FlexCopIII adapters" => "Technisat/B2C2 Air/Sky/Cable2PC PCI" in case of a PCI card
OR
c.)"Multimedia devices" => "DVB/ATSC adapters" => "Technisat/B2C2 FlexcopII(b) and FlexCopIII adapters" => "Technisat/B2C2 Air/Sky/Cable2PC USB" in case of an USB 1.1 adapter c.)"Multimedia devices" => "DVB/ATSC adapters" => "Technisat/B2C2 FlexcopII(b) and FlexCopIII adapters" => "Technisat/B2C2 Air/Sky/Cable2PC USB" in case of an USB 1.1 adapter
d.)"Multimedia devices" => "DVB/ATSC adapters" => "Technisat/B2C2 FlexcopII(b) and FlexCopIII adapters" => "Enable debug for the B2C2 FlexCop drivers" d.)"Multimedia devices" => "DVB/ATSC adapters" => "Technisat/B2C2 FlexcopII(b) and FlexCopIII adapters" => "Enable debug for the B2C2 FlexCop drivers"
Notice: d.) is helpful for troubleshooting Notice: d.) is helpful for troubleshooting
2b) Frontend module part: 2b) Frontend module part:
1.) Revision 2.3: 1.) SkyStar DVB-S Revision 2.3:
a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build" a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build"
b.)"Multimedia devices" => "Customise DVB frontends" => "Zarlink VP310/MT312/ZL10313 based" b.)"Multimedia devices" => "Customise DVB frontends" => "Zarlink VP310/MT312/ZL10313 based"
2.) Revision 2.6: 2.) SkyStar DVB-S Revision 2.6:
a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build" a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build"
b.)"Multimedia devices" => "Customise DVB frontends" => "ST STV0299 based" b.)"Multimedia devices" => "Customise DVB frontends" => "ST STV0299 based"
3.) Revision 2.7: 3.) SkyStar DVB-S Revision 2.7:
a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build" a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build"
b.)"Multimedia devices" => "Customise DVB frontends" => "Samsung S5H1420 based" b.)"Multimedia devices" => "Customise DVB frontends" => "Samsung S5H1420 based"
c.)"Multimedia devices" => "Customise DVB frontends" => "Integrant ITD1000 Zero IF tuner for DVB-S/DSS" c.)"Multimedia devices" => "Customise DVB frontends" => "Integrant ITD1000 Zero IF tuner for DVB-S/DSS"
d.)"Multimedia devices" => "Customise DVB frontends" => "ISL6421 SEC controller" d.)"Multimedia devices" => "Customise DVB frontends" => "ISL6421 SEC controller"
4.) Revision 2.8: 4.) SkyStar DVB-S Revision 2.8:
a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build" a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build"
b.)"Multimedia devices" => "Customise DVB frontends" => "Conexant CX24113/CX24128 tuner for DVB-S/DSS" b.)"Multimedia devices" => "Customise DVB frontends" => "Conexant CX24113/CX24128 tuner for DVB-S/DSS"
c.)"Multimedia devices" => "Customise DVB frontends" => "Conexant CX24123 based" c.)"Multimedia devices" => "Customise DVB frontends" => "Conexant CX24123 based"
d.)"Multimedia devices" => "Customise DVB frontends" => "ISL6421 SEC controller" d.)"Multimedia devices" => "Customise DVB frontends" => "ISL6421 SEC controller"
5.) DVB-T card: 5.) AirStar DVB-T card:
a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build" a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build"
b.)"Multimedia devices" => "Customise DVB frontends" => "Zarlink MT352 based" b.)"Multimedia devices" => "Customise DVB frontends" => "Zarlink MT352 based"
6.) DVB-C card: 6.) CableStar DVB-C card:
a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build" a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build"
b.)"Multimedia devices" => "Customise DVB frontends" => "ST STV0297 based" b.)"Multimedia devices" => "Customise DVB frontends" => "ST STV0297 based"
7.) ATSC card 1st generation: 7.) AirStar ATSC card 1st generation:
a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build" a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build"
b.)"Multimedia devices" => "Customise DVB frontends" => "Broadcom BCM3510" b.)"Multimedia devices" => "Customise DVB frontends" => "Broadcom BCM3510"
8.) ATSC card 2nd generation: 8.) AirStar ATSC card 2nd generation:
a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build" a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build"
b.)"Multimedia devices" => "Customise DVB frontends" => "NxtWave Communications NXT2002/NXT2004 based" b.)"Multimedia devices" => "Customise DVB frontends" => "NxtWave Communications NXT2002/NXT2004 based"
c.)"Multimedia devices" => "Customise DVB frontends" => "LG Electronics LGDT3302/LGDT3303 based" c.)"Multimedia devices" => "Customise DVB frontends" => "Generic I2C PLL based tuners"
Author: Uwe Bugla <uwe.bugla@gmx.de> December 2008 9.) AirStar ATSC card 3rd generation:
a.)"Multimedia devices" => "Customise DVB frontends" => "Customise the frontend modules to build"
b.)"Multimedia devices" => "Customise DVB frontends" => "LG Electronics LGDT3302/LGDT3303 based"
c.)"Multimedia devices" => "Customise analog and hybrid tuner modules to build" => "Simple tuner support"
Author: Uwe Bugla <uwe.bugla@gmx.de> February 2009

View File

@ -335,3 +335,12 @@ Why: In 2.6.18 the Secmark concept was introduced to replace the "compat_net"
Secmark, it is time to deprecate the older mechanism and start the Secmark, it is time to deprecate the older mechanism and start the
process of removing the old code. process of removing the old code.
Who: Paul Moore <paul.moore@hp.com> Who: Paul Moore <paul.moore@hp.com>
---------------------------
What: sysfs ui for changing p4-clockmod parameters
When: September 2009
Why: See commits 129f8ae9b1b5be94517da76009ea956e89104ce8 and
e088e4c9cdb618675874becb91b2fd581ee707e6.
Removal is subject to fixing any remaining bugs in ACPI which may
cause the thermal throttling not to happen at the right time.
Who: Dave Jones <davej@redhat.com>, Matthew Garrett <mjg@redhat.com>

View File

@ -251,7 +251,7 @@ NFS/RDMA Setup
Instruct the server to listen on the RDMA transport: Instruct the server to listen on the RDMA transport:
$ echo rdma 2050 > /proc/fs/nfsd/portlist $ echo rdma 20049 > /proc/fs/nfsd/portlist
- On the client system - On the client system
@ -263,7 +263,7 @@ NFS/RDMA Setup
Regardless of how the client was built (module or built-in), use this Regardless of how the client was built (module or built-in), use this
command to mount the NFS/RDMA server: command to mount the NFS/RDMA server:
$ mount -o rdma,port=2050 <IPoIB-server-name-or-address>:/<export> /mnt $ mount -o rdma,port=20049 <IPoIB-server-name-or-address>:/<export> /mnt
To verify that the mount is using RDMA, run "cat /proc/mounts" and check To verify that the mount is using RDMA, run "cat /proc/mounts" and check
the "proto" field for the given mount. the "proto" field for the given mount.

View File

@ -1371,292 +1371,8 @@ auto_msgmni default value is 1.
2.4 /proc/sys/vm - The virtual memory subsystem 2.4 /proc/sys/vm - The virtual memory subsystem
----------------------------------------------- -----------------------------------------------
The files in this directory can be used to tune the operation of the virtual Please see: Documentation/sysctls/vm.txt for a description of these
memory (VM) subsystem of the Linux kernel. entries.
vfs_cache_pressure
------------------
Controls the tendency of the kernel to reclaim the memory which is used for
caching of directory and inode objects.
At the default value of vfs_cache_pressure=100 the kernel will attempt to
reclaim dentries and inodes at a "fair" rate with respect to pagecache and
swapcache reclaim. Decreasing vfs_cache_pressure causes the kernel to prefer
to retain dentry and inode caches. Increasing vfs_cache_pressure beyond 100
causes the kernel to prefer to reclaim dentries and inodes.
dirty_background_bytes
----------------------
Contains the amount of dirty memory at which the pdflush background writeback
daemon will start writeback.
If dirty_background_bytes is written, dirty_background_ratio becomes a function
of its value (dirty_background_bytes / the amount of dirtyable system memory).
dirty_background_ratio
----------------------
Contains, as a percentage of the dirtyable system memory (free pages + mapped
pages + file cache, not including locked pages and HugePages), the number of
pages at which the pdflush background writeback daemon will start writing out
dirty data.
If dirty_background_ratio is written, dirty_background_bytes becomes a function
of its value (dirty_background_ratio * the amount of dirtyable system memory).
dirty_bytes
-----------
Contains the amount of dirty memory at which a process generating disk writes
will itself start writeback.
If dirty_bytes is written, dirty_ratio becomes a function of its value
(dirty_bytes / the amount of dirtyable system memory).
dirty_ratio
-----------
Contains, as a percentage of the dirtyable system memory (free pages + mapped
pages + file cache, not including locked pages and HugePages), the number of
pages at which a process which is generating disk writes will itself start
writing out dirty data.
If dirty_ratio is written, dirty_bytes becomes a function of its value
(dirty_ratio * the amount of dirtyable system memory).
dirty_writeback_centisecs
-------------------------
The pdflush writeback daemons will periodically wake up and write `old' data
out to disk. This tunable expresses the interval between those wakeups, in
100'ths of a second.
Setting this to zero disables periodic writeback altogether.
dirty_expire_centisecs
----------------------
This tunable is used to define when dirty data is old enough to be eligible
for writeout by the pdflush daemons. It is expressed in 100'ths of a second.
Data which has been dirty in-memory for longer than this interval will be
written out next time a pdflush daemon wakes up.
highmem_is_dirtyable
--------------------
Only present if CONFIG_HIGHMEM is set.
This defaults to 0 (false), meaning that the ratios set above are calculated
as a percentage of lowmem only. This protects against excessive scanning
in page reclaim, swapping and general VM distress.
Setting this to 1 can be useful on 32 bit machines where you want to make
random changes within an MMAPed file that is larger than your available
lowmem without causing large quantities of random IO. Is is safe if the
behavior of all programs running on the machine is known and memory will
not be otherwise stressed.
legacy_va_layout
----------------
If non-zero, this sysctl disables the new 32-bit mmap mmap layout - the kernel
will use the legacy (2.4) layout for all processes.
lowmem_reserve_ratio
---------------------
For some specialised workloads on highmem machines it is dangerous for
the kernel to allow process memory to be allocated from the "lowmem"
zone. This is because that memory could then be pinned via the mlock()
system call, or by unavailability of swapspace.
And on large highmem machines this lack of reclaimable lowmem memory
can be fatal.
So the Linux page allocator has a mechanism which prevents allocations
which _could_ use highmem from using too much lowmem. This means that
a certain amount of lowmem is defended from the possibility of being
captured into pinned user memory.
(The same argument applies to the old 16 megabyte ISA DMA region. This
mechanism will also defend that region from allocations which could use
highmem or lowmem).
The `lowmem_reserve_ratio' tunable determines how aggressive the kernel is
in defending these lower zones.
If you have a machine which uses highmem or ISA DMA and your
applications are using mlock(), or if you are running with no swap then
you probably should change the lowmem_reserve_ratio setting.
The lowmem_reserve_ratio is an array. You can see them by reading this file.
-
% cat /proc/sys/vm/lowmem_reserve_ratio
256 256 32
-
Note: # of this elements is one fewer than number of zones. Because the highest
zone's value is not necessary for following calculation.
But, these values are not used directly. The kernel calculates # of protection
pages for each zones from them. These are shown as array of protection pages
in /proc/zoneinfo like followings. (This is an example of x86-64 box).
Each zone has an array of protection pages like this.
-
Node 0, zone DMA
pages free 1355
min 3
low 3
high 4
:
:
numa_other 0
protection: (0, 2004, 2004, 2004)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pagesets
cpu: 0 pcp: 0
:
-
These protections are added to score to judge whether this zone should be used
for page allocation or should be reclaimed.
In this example, if normal pages (index=2) are required to this DMA zone and
pages_high is used for watermark, the kernel judges this zone should not be
used because pages_free(1355) is smaller than watermark + protection[2]
(4 + 2004 = 2008). If this protection value is 0, this zone would be used for
normal page requirement. If requirement is DMA zone(index=0), protection[0]
(=0) is used.
zone[i]'s protection[j] is calculated by following expression.
(i < j):
zone[i]->protection[j]
= (total sums of present_pages from zone[i+1] to zone[j] on the node)
/ lowmem_reserve_ratio[i];
(i = j):
(should not be protected. = 0;
(i > j):
(not necessary, but looks 0)
The default values of lowmem_reserve_ratio[i] are
256 (if zone[i] means DMA or DMA32 zone)
32 (others).
As above expression, they are reciprocal number of ratio.
256 means 1/256. # of protection pages becomes about "0.39%" of total present
pages of higher zones on the node.
If you would like to protect more pages, smaller values are effective.
The minimum value is 1 (1/1 -> 100%).
page-cluster
------------
page-cluster controls the number of pages which are written to swap in
a single attempt. The swap I/O size.
It is a logarithmic value - setting it to zero means "1 page", setting
it to 1 means "2 pages", setting it to 2 means "4 pages", etc.
The default value is three (eight pages at a time). There may be some
small benefits in tuning this to a different value if your workload is
swap-intensive.
overcommit_memory
-----------------
Controls overcommit of system memory, possibly allowing processes
to allocate (but not use) more memory than is actually available.
0 - Heuristic overcommit handling. Obvious overcommits of
address space are refused. Used for a typical system. It
ensures a seriously wild allocation fails while allowing
overcommit to reduce swap usage. root is allowed to
allocate slightly more memory in this mode. This is the
default.
1 - Always overcommit. Appropriate for some scientific
applications.
2 - Don't overcommit. The total address space commit
for the system is not permitted to exceed swap plus a
configurable percentage (default is 50) of physical RAM.
Depending on the percentage you use, in most situations
this means a process will not be killed while attempting
to use already-allocated memory but will receive errors
on memory allocation as appropriate.
overcommit_ratio
----------------
Percentage of physical memory size to include in overcommit calculations
(see above.)
Memory allocation limit = swapspace + physmem * (overcommit_ratio / 100)
swapspace = total size of all swap areas
physmem = size of physical memory in system
nr_hugepages and hugetlb_shm_group
----------------------------------
nr_hugepages configures number of hugetlb page reserved for the system.
hugetlb_shm_group contains group id that is allowed to create SysV shared
memory segment using hugetlb page.
hugepages_treat_as_movable
--------------------------
This parameter is only useful when kernelcore= is specified at boot time to
create ZONE_MOVABLE for pages that may be reclaimed or migrated. Huge pages
are not movable so are not normally allocated from ZONE_MOVABLE. A non-zero
value written to hugepages_treat_as_movable allows huge pages to be allocated
from ZONE_MOVABLE.
Once enabled, the ZONE_MOVABLE is treated as an area of memory the huge
pages pool can easily grow or shrink within. Assuming that applications are
not running that mlock() a lot of memory, it is likely the huge pages pool
can grow to the size of ZONE_MOVABLE by repeatedly entering the desired value
into nr_hugepages and triggering page reclaim.
laptop_mode
-----------
laptop_mode is a knob that controls "laptop mode". All the things that are
controlled by this knob are discussed in Documentation/laptops/laptop-mode.txt.
block_dump
----------
block_dump enables block I/O debugging when set to a nonzero value. More
information on block I/O debugging is in Documentation/laptops/laptop-mode.txt.
swap_token_timeout
------------------
This file contains valid hold time of swap out protection token. The Linux
VM has token based thrashing control mechanism and uses the token to prevent
unnecessary page faults in thrashing situation. The unit of the value is
second. The value would be useful to tune thrashing behavior.
drop_caches
-----------
Writing to this will cause the kernel to drop clean caches, dentries and
inodes from memory, causing that memory to become free.
To free pagecache:
echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
echo 3 > /proc/sys/vm/drop_caches
As this is a non-destructive operation and dirty objects are not freeable, the
user should run `sync' first.
2.5 /proc/sys/dev - Device specific parameters 2.5 /proc/sys/dev - Device specific parameters
@ -2311,6 +2027,34 @@ increase the likelihood of this process being killed by the oom-killer. Valid
values are in the range -16 to +15, plus the special value -17, which disables values are in the range -16 to +15, plus the special value -17, which disables
oom-killing altogether for this process. oom-killing altogether for this process.
The process to be killed in an out-of-memory situation is selected among all others
based on its badness score. This value equals the original memory size of the process
and is then updated according to its CPU time (utime + stime) and the
run time (uptime - start time). The longer it runs the smaller is the score.
Badness score is divided by the square root of the CPU time and then by
the double square root of the run time.
Swapped out tasks are killed first. Half of each child's memory size is added to
the parent's score if they do not share the same memory. Thus forking servers
are the prime candidates to be killed. Having only one 'hungry' child will make
parent less preferable than the child.
/proc/<pid>/oom_score shows process' current badness score.
The following heuristics are then applied:
* if the task was reniced, its score doubles
* superuser or direct hardware access tasks (CAP_SYS_ADMIN, CAP_SYS_RESOURCE
or CAP_SYS_RAWIO) have their score divided by 4
* if oom condition happened in one cpuset and checked task does not belong
to it, its score is divided by 8
* the resulting score is multiplied by two to the power of oom_adj, i.e.
points <<= oom_adj when it is positive and
points >>= -(oom_adj) otherwise
The task with the highest badness score is then selected and its children
are killed, process itself will be killed in an OOM situation when it does
not have children or some of them disabled oom like described above.
2.13 /proc/<pid>/oom_score - Display current oom-killer score 2.13 /proc/<pid>/oom_score - Display current oom-killer score
------------------------------------------------------------- -------------------------------------------------------------

View File

@ -22,7 +22,7 @@ Squashfs filesystem features versus Cramfs:
Squashfs Cramfs Squashfs Cramfs
Max filesystem size: 2^64 16 MiB Max filesystem size: 2^64 256 MiB
Max file size: ~ 2 TiB 16 MiB Max file size: ~ 2 TiB 16 MiB
Max files: unlimited unlimited Max files: unlimited unlimited
Max directories: unlimited unlimited Max directories: unlimited unlimited

View File

@ -9,6 +9,7 @@ that support it. For example, a given bus might look like this:
| |-- class | |-- class
| |-- config | |-- config
| |-- device | |-- device
| |-- enable
| |-- irq | |-- irq
| |-- local_cpus | |-- local_cpus
| |-- resource | |-- resource
@ -32,6 +33,7 @@ files, each with their own function.
class PCI class (ascii, ro) class PCI class (ascii, ro)
config PCI config space (binary, rw) config PCI config space (binary, rw)
device PCI device (ascii, ro) device PCI device (ascii, ro)
enable Whether the device is enabled (ascii, rw)
irq IRQ number (ascii, ro) irq IRQ number (ascii, ro)
local_cpus nearby CPU mask (cpumask, ro) local_cpus nearby CPU mask (cpumask, ro)
resource PCI resource host addresses (ascii, ro) resource PCI resource host addresses (ascii, ro)
@ -57,10 +59,19 @@ used to do actual device programming from userspace. Note that some platforms
don't support mmapping of certain resources, so be sure to check the return don't support mmapping of certain resources, so be sure to check the return
value from any attempted mmap. value from any attempted mmap.
The 'enable' file provides a counter that indicates how many times the device
has been enabled. If the 'enable' file currently returns '4', and a '1' is
echoed into it, it will then return '5'. Echoing a '0' into it will decrease
the count. Even when it returns to 0, though, some of the initialisation
may not be reversed.
The 'rom' file is special in that it provides read-only access to the device's The 'rom' file is special in that it provides read-only access to the device's
ROM file, if available. It's disabled by default, however, so applications ROM file, if available. It's disabled by default, however, so applications
should write the string "1" to the file to enable it before attempting a read should write the string "1" to the file to enable it before attempting a read
call, and disable it following the access by writing "0" to the file. call, and disable it following the access by writing "0" to the file. Note
that the device must be enabled for a rom read to return data succesfully.
In the event a driver is not bound to the device, it can be enabled using the
'enable' file, documented above.
Accessing legacy resources through sysfs Accessing legacy resources through sysfs
---------------------------------------- ----------------------------------------

View File

@ -2,8 +2,10 @@
sysfs - _The_ filesystem for exporting kernel objects. sysfs - _The_ filesystem for exporting kernel objects.
Patrick Mochel <mochel@osdl.org> Patrick Mochel <mochel@osdl.org>
Mike Murphy <mamurph@cs.clemson.edu>
10 January 2003 Revised: 22 February 2009
Original: 10 January 2003
What it is: What it is:
@ -64,12 +66,13 @@ An attribute definition is simply:
struct attribute { struct attribute {
char * name; char * name;
struct module *owner;
mode_t mode; mode_t mode;
}; };
int sysfs_create_file(struct kobject * kobj, struct attribute * attr); int sysfs_create_file(struct kobject * kobj, const struct attribute * attr);
void sysfs_remove_file(struct kobject * kobj, struct attribute * attr); void sysfs_remove_file(struct kobject * kobj, const struct attribute * attr);
A bare attribute contains no means to read or write the value of the A bare attribute contains no means to read or write the value of the
@ -80,9 +83,11 @@ a specific object type.
For example, the driver model defines struct device_attribute like: For example, the driver model defines struct device_attribute like:
struct device_attribute { struct device_attribute {
struct attribute attr; struct attribute attr;
ssize_t (*show)(struct device * dev, char * buf); ssize_t (*show)(struct device *dev, struct device_attribute *attr,
ssize_t (*store)(struct device * dev, const char * buf); char *buf);
ssize_t (*store)(struct device *dev, struct device_attribute *attr,
const char *buf, size_t count);
}; };
int device_create_file(struct device *, struct device_attribute *); int device_create_file(struct device *, struct device_attribute *);
@ -90,12 +95,8 @@ void device_remove_file(struct device *, struct device_attribute *);
It also defines this helper for defining device attributes: It also defines this helper for defining device attributes:
#define DEVICE_ATTR(_name, _mode, _show, _store) \ #define DEVICE_ATTR(_name, _mode, _show, _store) \
struct device_attribute dev_attr_##_name = { \ struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store)
.attr = {.name = __stringify(_name) , .mode = _mode }, \
.show = _show, \
.store = _store, \
};
For example, declaring For example, declaring
@ -107,9 +108,9 @@ static struct device_attribute dev_attr_foo = {
.attr = { .attr = {
.name = "foo", .name = "foo",
.mode = S_IWUSR | S_IRUGO, .mode = S_IWUSR | S_IRUGO,
.show = show_foo,
.store = store_foo,
}, },
.show = show_foo,
.store = store_foo,
}; };
@ -161,10 +162,12 @@ To read or write attributes, show() or store() methods must be
specified when declaring the attribute. The method types should be as specified when declaring the attribute. The method types should be as
simple as those defined for device attributes: simple as those defined for device attributes:
ssize_t (*show)(struct device * dev, char * buf); ssize_t (*show)(struct device * dev, struct device_attribute * attr,
ssize_t (*store)(struct device * dev, const char * buf); char * buf);
ssize_t (*store)(struct device * dev, struct device_attribute * attr,
const char * buf);
IOW, they should take only an object and a buffer as parameters. IOW, they should take only an object, an attribute, and a buffer as parameters.
sysfs allocates a buffer of size (PAGE_SIZE) and passes it to the sysfs allocates a buffer of size (PAGE_SIZE) and passes it to the
@ -299,14 +302,16 @@ The following interface layers currently exist in sysfs:
Structure: Structure:
struct device_attribute { struct device_attribute {
struct attribute attr; struct attribute attr;
ssize_t (*show)(struct device * dev, char * buf); ssize_t (*show)(struct device *dev, struct device_attribute *attr,
ssize_t (*store)(struct device * dev, const char * buf); char *buf);
ssize_t (*store)(struct device *dev, struct device_attribute *attr,
const char *buf, size_t count);
}; };
Declaring: Declaring:
DEVICE_ATTR(_name, _str, _mode, _show, _store); DEVICE_ATTR(_name, _mode, _show, _store);
Creation/Removal: Creation/Removal:
@ -342,7 +347,8 @@ Structure:
struct driver_attribute { struct driver_attribute {
struct attribute attr; struct attribute attr;
ssize_t (*show)(struct device_driver *, char * buf); ssize_t (*show)(struct device_driver *, char * buf);
ssize_t (*store)(struct device_driver *, const char * buf); ssize_t (*store)(struct device_driver *, const char * buf,
size_t count);
}; };
Declaring: Declaring:

View File

@ -79,13 +79,6 @@ Mount options
(*) == default. (*) == default.
norm_unmount (*) commit on unmount; the journal is committed
when the file-system is unmounted so that the
next mount does not have to replay the journal
and it becomes very fast;
fast_unmount do not commit on unmount; this option makes
unmount faster, but the next mount slower
because of the need to replay the journal.
bulk_read read more in one go to take advantage of flash bulk_read read more in one go to take advantage of flash
media that read faster sequentially media that read faster sequentially
no_bulk_read (*) do not bulk-read no_bulk_read (*) do not bulk-read

View File

@ -0,0 +1,87 @@
This describes the interface for the ADT7475 driver:
(there are 4 fans, numbered fan1 to fan4):
fanX_input Read the current speed of the fan (in RPMs)
fanX_min Read/write the minimum speed of the fan. Dropping
below this sets an alarm.
(there are three PWMs, numbered pwm1 to pwm3):
pwmX Read/write the current duty cycle of the PWM. Writes
only have effect when auto mode is turned off (see
below). Range is 0 - 255.
pwmX_enable Fan speed control method:
0 - No control (fan at full speed)
1 - Manual fan speed control (using pwm[1-*])
2 - Automatic fan speed control
pwmX_auto_channels_temp Select which channels affect this PWM
1 - TEMP1 controls PWM
2 - TEMP2 controls PWM
4 - TEMP3 controls PWM
6 - TEMP2 and TEMP3 control PWM
7 - All three inputs control PWM
pwmX_freq Read/write the PWM frequency in Hz. The number
should be one of the following:
11 Hz
14 Hz
22 Hz
29 Hz
35 Hz
44 Hz
58 Hz
88 Hz
pwmX_auto_point1_pwm Read/write the minimum PWM duty cycle in automatic mode
pwmX_auto_point2_pwm Read/write the maximum PWM duty cycle in automatic mode
(there are three temperature settings numbered temp1 to temp3):
tempX_input Read the current temperature. The value is in milli
degrees of Celsius.
tempX_max Read/write the upper temperature limit - exceeding this
will cause an alarm.
tempX_min Read/write the lower temperature limit - exceeding this
will cause an alarm.
tempX_offset Read/write the temperature adjustment offset
tempX_crit Read/write the THERM limit for remote1.
tempX_crit_hyst Set the temperature value below crit where the
fans will stay on - this helps drive the temperature
low enough so it doesn't stay near the edge and
cause THERM to keep tripping.
tempX_auto_point1_temp Read/write the minimum temperature where the fans will
turn on in automatic mode.
tempX_auto_point2_temp Read/write the maximum temperature over which the fans
will run in automatic mode. tempX_auto_point1_temp
and tempX_auto_point2_temp together define the
range of automatic control.
tempX_alarm Read a 1 if the max/min alarm is set
tempX_fault Read a 1 if either temp1 or temp3 diode has a fault
(There are two voltage settings, in1 and in2):
inX_input Read the current voltage on VCC. Value is in
millivolts.
inX_min read/write the minimum voltage limit.
Dropping below this causes an alarm.
inX_max read/write the maximum voltage limit.
Exceeding this causes an alarm.
inX_alarm Read a 1 if the max/min alarm is set.

View File

@ -0,0 +1,101 @@
/* Disk protection for HP machines.
*
* Copyright 2008 Eric Piel
* Copyright 2009 Pavel Machek <pavel@suse.cz>
*
* GPLv2.
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <string.h>
#include <stdint.h>
#include <errno.h>
#include <signal.h>
void write_int(char *path, int i)
{
char buf[1024];
int fd = open(path, O_RDWR);
if (fd < 0) {
perror("open");
exit(1);
}
sprintf(buf, "%d", i);
if (write(fd, buf, strlen(buf)) != strlen(buf)) {
perror("write");
exit(1);
}
close(fd);
}
void set_led(int on)
{
write_int("/sys/class/leds/hp::hddprotect/brightness", on);
}
void protect(int seconds)
{
write_int("/sys/block/sda/device/unload_heads", seconds*1000);
}
int on_ac(void)
{
// /sys/class/power_supply/AC0/online
}
int lid_open(void)
{
// /proc/acpi/button/lid/LID/state
}
void ignore_me(void)
{
protect(0);
set_led(0);
}
int main(int argc, char* argv[])
{
int fd, ret;
fd = open("/dev/freefall", O_RDONLY);
if (fd < 0) {
perror("open");
return EXIT_FAILURE;
}
signal(SIGALRM, ignore_me);
for (;;) {
unsigned char count;
ret = read(fd, &count, sizeof(count));
alarm(0);
if ((ret == -1) && (errno == EINTR)) {
/* Alarm expired, time to unpark the heads */
continue;
}
if (ret != sizeof(count)) {
perror("read");
break;
}
protect(21);
set_led(1);
if (1 || on_ac() || lid_open()) {
alarm(2);
} else {
alarm(20);
}
}
close(fd);
return EXIT_SUCCESS;
}

View File

@ -13,23 +13,34 @@ Author:
Description Description
----------- -----------
This driver provides support for the accelerometer found in various HP laptops This driver provides support for the accelerometer found in various HP
sporting the feature officially called "HP Mobile Data Protection System 3D" or laptops sporting the feature officially called "HP Mobile Data
"HP 3D DriveGuard". It detect automatically laptops with this sensor. Known models Protection System 3D" or "HP 3D DriveGuard". It detect automatically
(for now the HP 2133, nc6420, nc2510, nc8510, nc84x0, nw9440 and nx9420) will laptops with this sensor. Known models (for now the HP 2133, nc6420,
have their axis automatically oriented on standard way (eg: you can directly nc2510, nc8510, nc84x0, nw9440 and nx9420) will have their axis
play neverball). The accelerometer data is readable via automatically oriented on standard way (eg: you can directly play
neverball). The accelerometer data is readable via
/sys/devices/platform/lis3lv02d. /sys/devices/platform/lis3lv02d.
Sysfs attributes under /sys/devices/platform/lis3lv02d/: Sysfs attributes under /sys/devices/platform/lis3lv02d/:
position - 3D position that the accelerometer reports. Format: "(x,y,z)" position - 3D position that the accelerometer reports. Format: "(x,y,z)"
calibrate - read: values (x, y, z) that are used as the base for input class device operation. calibrate - read: values (x, y, z) that are used as the base for input
write: forces the base to be recalibrated with the current position. class device operation.
write: forces the base to be recalibrated with the current
position.
rate - reports the sampling rate of the accelerometer device in HZ rate - reports the sampling rate of the accelerometer device in HZ
This driver also provides an absolute input class device, allowing This driver also provides an absolute input class device, allowing
the laptop to act as a pinball machine-esque joystick. the laptop to act as a pinball machine-esque joystick.
Another feature of the driver is misc device called "freefall" that
acts similar to /dev/rtc and reacts on free-fall interrupts received
from the device. It supports blocking operations, poll/select and
fasync operation modes. You must read 1 bytes from the device. The
result is number of free-fall interrupts since the last successful
read (or 255 if number of interrupts would not fit).
Axes orientation Axes orientation
---------------- ----------------
@ -39,11 +50,12 @@ the accelerometer are converted into a "standard" organisation of the axes
* When the laptop is horizontal the position reported is about 0 for X and Y * When the laptop is horizontal the position reported is about 0 for X and Y
and a positive value for Z and a positive value for Z
* If the left side is elevated, X increases (becomes positive) * If the left side is elevated, X increases (becomes positive)
* If the front side (where the touchpad is) is elevated, Y decreases (becomes negative) * If the front side (where the touchpad is) is elevated, Y decreases
(becomes negative)
* If the laptop is put upside-down, Z becomes negative * If the laptop is put upside-down, Z becomes negative
If your laptop model is not recognized (cf "dmesg"), you can send an email to the If your laptop model is not recognized (cf "dmesg"), you can send an
authors to add it to the database. When reporting a new laptop, please include email to the authors to add it to the database. When reporting a new
the output of "dmidecode" plus the value of /sys/devices/platform/lis3lv02d/position laptop, please include the output of "dmidecode" plus the value of
in these four cases. /sys/devices/platform/lis3lv02d/position in these four cases.

View File

@ -12,11 +12,11 @@ file at first.
================================== ==================================
これは、 これは、
linux-2.6.24/Documentation/stable_kernel_rules.txt linux-2.6.29/Documentation/stable_kernel_rules.txt
の和訳です。 の和訳です。
翻訳団体: JF プロジェクト < http://www.linux.or.jp/JF/ > 翻訳団体: JF プロジェクト < http://www.linux.or.jp/JF/ >
翻訳日: 2007/12/30 翻訳日: 2009/1/14
翻訳者: Tsugikazu Shibata <tshibata at ab dot jp dot nec dot com> 翻訳者: Tsugikazu Shibata <tshibata at ab dot jp dot nec dot com>
校正者: 武井伸光さん、<takei at webmasters dot gr dot jp> 校正者: 武井伸光さん、<takei at webmasters dot gr dot jp>
かねこさん (Seiji Kaneko) <skaneko at a2 dot mbn dot or dot jp> かねこさん (Seiji Kaneko) <skaneko at a2 dot mbn dot or dot jp>
@ -38,12 +38,15 @@ linux-2.6.24/Documentation/stable_kernel_rules.txt
- ビルドエラー(CONFIG_BROKENになっているものを除く), oops, ハング、デー - ビルドエラー(CONFIG_BROKENになっているものを除く), oops, ハング、デー
タ破壊、現実のセキュリティ問題、その他 "ああ、これはダメだね"という タ破壊、現実のセキュリティ問題、その他 "ああ、これはダメだね"という
ようなものを修正しなければならない。短く言えば、重大な問題。 ようなものを修正しなければならない。短く言えば、重大な問題。
- 新しい device ID とクオークも受け入れられる。
- どのように競合状態が発生するかの説明も一緒に書かれていない限り、 - どのように競合状態が発生するかの説明も一緒に書かれていない限り、
"理論的には競合状態になる"ようなものは不可。 "理論的には競合状態になる"ようなものは不可。
- いかなる些細な修正も含めることはできない。(スペルの修正、空白のクリー - いかなる些細な修正も含めることはできない。(スペルの修正、空白のクリー
ンアップなど) ンアップなど)
- 対応するサブシステムメンテナが受け入れたものでなければならない。
- Documentation/SubmittingPatches の規則に従ったものでなければならない。 - Documentation/SubmittingPatches の規則に従ったものでなければならない。
- パッチ自体か同等の修正が Linus のツリーに既に存在しなければならない。
  Linus のツリーでのコミットID を -stable へのパッチ投稿の際に引用す
ること。
-stable ツリーにパッチを送付する手続き- -stable ツリーにパッチを送付する手続き-
@ -52,8 +55,10 @@ linux-2.6.24/Documentation/stable_kernel_rules.txt
- 送信者はパッチがキューに受け付けられた際には ACK を、却下された場合 - 送信者はパッチがキューに受け付けられた際には ACK を、却下された場合
には NAK を受け取る。この反応は開発者たちのスケジュールによって、数 には NAK を受け取る。この反応は開発者たちのスケジュールによって、数
日かかる場合がある。 日かかる場合がある。
- もし受け取られたら、パッチは他の開発者たちのレビューのために - もし受け取られたら、パッチは他の開発者たちと関連するサブシステムの
-stable キューに追加される。 メンテナーによるレビューのために -stable キューに追加される。
- パッチに stable@kernel.org のアドレスが付加されているときには、それ
が Linus のツリーに入る時に自動的に stable チームに email される。
- セキュリティパッチはこのエイリアス (stable@kernel.org) に送られるべ - セキュリティパッチはこのエイリアス (stable@kernel.org) に送られるべ
きではなく、代わりに security@kernel.org のアドレスに送られる。 きではなく、代わりに security@kernel.org のアドレスに送られる。

View File

@ -3,7 +3,7 @@ Environment variables
KCPPFLAGS KCPPFLAGS
-------------------------------------------------- --------------------------------------------------
Additional options to pass when preprocessing. The preprocessing options Additional options to pass when preprocessing. The preprocessing options
will be used in all cases where kbuild do preprocessing including will be used in all cases where kbuild does preprocessing including
building C files and assembler files. building C files and assembler files.
KAFLAGS KAFLAGS
@ -16,7 +16,7 @@ Additional options to the C compiler.
KBUILD_VERBOSE KBUILD_VERBOSE
-------------------------------------------------- --------------------------------------------------
Set the kbuild verbosity. Can be assinged same values as "V=...". Set the kbuild verbosity. Can be assigned same values as "V=...".
See make help for the full list. See make help for the full list.
Setting "V=..." takes precedence over KBUILD_VERBOSE. Setting "V=..." takes precedence over KBUILD_VERBOSE.
@ -35,14 +35,14 @@ KBUILD_OUTPUT
-------------------------------------------------- --------------------------------------------------
Specify the output directory when building the kernel. Specify the output directory when building the kernel.
The output directory can also be specificed using "O=...". The output directory can also be specificed using "O=...".
Setting "O=..." takes precedence over KBUILD_OUTPUT Setting "O=..." takes precedence over KBUILD_OUTPUT.
ARCH ARCH
-------------------------------------------------- --------------------------------------------------
Set ARCH to the architecture to be built. Set ARCH to the architecture to be built.
In most cases the name of the architecture is the same as the In most cases the name of the architecture is the same as the
directory name found in the arch/ directory. directory name found in the arch/ directory.
But some architectures suach as x86 and sparc has aliases. But some architectures such as x86 and sparc have aliases.
x86: i386 for 32 bit, x86_64 for 64 bit x86: i386 for 32 bit, x86_64 for 64 bit
sparc: sparc for 32 bit, sparc64 for 64 bit sparc: sparc for 32 bit, sparc64 for 64 bit
@ -63,7 +63,7 @@ CF is often used on the command-line like this:
INSTALL_PATH INSTALL_PATH
-------------------------------------------------- --------------------------------------------------
INSTALL_PATH specifies where to place the updated kernel and system map INSTALL_PATH specifies where to place the updated kernel and system map
images. Default is /boot, but you can set it to other values images. Default is /boot, but you can set it to other values.
MODLIB MODLIB
@ -90,7 +90,7 @@ INSTALL_MOD_STRIP will used as the options to the strip command.
INSTALL_FW_PATH INSTALL_FW_PATH
-------------------------------------------------- --------------------------------------------------
INSTALL_FW_PATH specify where to install the firmware blobs. INSTALL_FW_PATH specifies where to install the firmware blobs.
The default value is: The default value is:
$(INSTALL_MOD_PATH)/lib/firmware $(INSTALL_MOD_PATH)/lib/firmware
@ -99,7 +99,7 @@ The value can be overridden in which case the default value is ignored.
INSTALL_HDR_PATH INSTALL_HDR_PATH
-------------------------------------------------- --------------------------------------------------
INSTALL_HDR_PATH specify where to install user space headers when INSTALL_HDR_PATH specifies where to install user space headers when
executing "make headers_*". executing "make headers_*".
The default value is: The default value is:
@ -112,22 +112,23 @@ The value can be overridden in which case the default value is ignored.
KBUILD_MODPOST_WARN KBUILD_MODPOST_WARN
-------------------------------------------------- --------------------------------------------------
KBUILD_MODPOST_WARN can be set to avoid error out in case of undefined KBUILD_MODPOST_WARN can be set to avoid errors in case of undefined
symbols in the final module linking stage. symbols in the final module linking stage. It changes such errors
into warnings.
KBUILD_MODPOST_FINAL KBUILD_MODPOST_NOFINAL
-------------------------------------------------- --------------------------------------------------
KBUILD_MODPOST_NOFINAL can be set to skip the final link of modules. KBUILD_MODPOST_NOFINAL can be set to skip the final link of modules.
This is solely usefull to speed up test compiles. This is solely useful to speed up test compiles.
KBUILD_EXTRA_SYMBOLS KBUILD_EXTRA_SYMBOLS
-------------------------------------------------- --------------------------------------------------
For modules use symbols from another modules. For modules that use symbols from other modules.
See more details in modules.txt. See more details in modules.txt.
ALLSOURCE_ARCHS ALLSOURCE_ARCHS
-------------------------------------------------- --------------------------------------------------
For tags/TAGS/cscope targets, you can specify more than one archs For tags/TAGS/cscope targets, you can specify more than one arch
to be included in the databases, separated by blankspace. e.g. to be included in the databases, separated by blank space. E.g.:
$ make ALLSOURCE_ARCHS="x86 mips arm" tags $ make ALLSOURCE_ARCHS="x86 mips arm" tags

View File

@ -43,7 +43,8 @@ Only comments so marked will be considered by the kernel-doc scripts,
and any comment so marked must be in kernel-doc format. Do not use and any comment so marked must be in kernel-doc format. Do not use
"/**" to be begin a comment block unless the comment block contains "/**" to be begin a comment block unless the comment block contains
kernel-doc formatted comments. The closing comment marker for kernel-doc formatted comments. The closing comment marker for
kernel-doc comments can be either "*/" or "**/". kernel-doc comments can be either "*/" or "**/", but "*/" is
preferred in the Linux kernel tree.
Kernel-doc comments should be placed just before the function Kernel-doc comments should be placed just before the function
or data structure being described. or data structure being described.
@ -63,7 +64,7 @@ Example kernel-doc function comment:
* comment lines. * comment lines.
* *
* The longer description can have multiple paragraphs. * The longer description can have multiple paragraphs.
**/ */
The first line, with the short description, must be on a single line. The first line, with the short description, must be on a single line.
@ -85,7 +86,7 @@ Example kernel-doc data structure comment.
* perhaps with more lines and words. * perhaps with more lines and words.
* *
* Longer description of this structure. * Longer description of this structure.
**/ */
The kernel-doc function comments describe each parameter to the The kernel-doc function comments describe each parameter to the
function, in order, with the @name lines. function, in order, with the @name lines.

View File

@ -114,7 +114,7 @@ In addition, the following text indicates that the option:
Parameters denoted with BOOT are actually interpreted by the boot Parameters denoted with BOOT are actually interpreted by the boot
loader, and have no meaning to the kernel directly. loader, and have no meaning to the kernel directly.
Do not modify the syntax of boot loader parameters without extreme Do not modify the syntax of boot loader parameters without extreme
need or coordination with <Documentation/x86/i386/boot.txt>. need or coordination with <Documentation/x86/boot.txt>.
There are also arch-specific kernel-parameters not documented here. There are also arch-specific kernel-parameters not documented here.
See for example <Documentation/x86/x86_64/boot-options.txt>. See for example <Documentation/x86/x86_64/boot-options.txt>.
@ -134,7 +134,7 @@ and is between 256 and 4096 characters. It is defined in the file
acpi= [HW,ACPI,X86-64,i386] acpi= [HW,ACPI,X86-64,i386]
Advanced Configuration and Power Interface Advanced Configuration and Power Interface
Format: { force | off | ht | strict | noirq } Format: { force | off | ht | strict | noirq | rsdt }
force -- enable ACPI if default was off force -- enable ACPI if default was off
off -- disable ACPI if default was on off -- disable ACPI if default was on
noirq -- do not use ACPI for IRQ routing noirq -- do not use ACPI for IRQ routing
@ -577,9 +577,6 @@ and is between 256 and 4096 characters. It is defined in the file
a memory unit (amount[KMG]). See also a memory unit (amount[KMG]). See also
Documentation/kdump/kdump.txt for a example. Documentation/kdump/kdump.txt for a example.
cs4232= [HW,OSS]
Format: <io>,<irq>,<dma>,<dma2>,<mpuio>,<mpuirq>
cs89x0_dma= [HW,NET] cs89x0_dma= [HW,NET]
Format: <dma> Format: <dma>
@ -732,10 +729,6 @@ and is between 256 and 4096 characters. It is defined in the file
Default value is 0. Default value is 0.
Value can be changed at runtime via /selinux/enforce. Value can be changed at runtime via /selinux/enforce.
es1371= [HW,OSS]
Format: <spdif>,[<nomix>,[<amplifier>]]
See also header of sound/oss/es1371.c.
ether= [HW,NET] Ethernet cards parameters ether= [HW,NET] Ethernet cards parameters
This option is obsoleted by the "netdev=" option, which This option is obsoleted by the "netdev=" option, which
has equivalent usage. See its documentation for details. has equivalent usage. See its documentation for details.
@ -875,8 +868,10 @@ and is between 256 and 4096 characters. It is defined in the file
icn= [HW,ISDN] icn= [HW,ISDN]
Format: <io>[,<membase>[,<icn_id>[,<icn_id2>]]] Format: <io>[,<membase>[,<icn_id>[,<icn_id2>]]]
ide= [HW] (E)IDE subsystem ide-core.nodma= [HW] (E)IDE subsystem
Format: ide=nodma or ide=doubler Format: =0.0 to prevent dma on hda, =0.1 hdb =1.0 hdc
.vlb_clock .pci_clock .noflush .noprobe .nowerr .cdrom
.chs .ignore_cable are additional options
See Documentation/ide/ide.txt. See Documentation/ide/ide.txt.
idebus= [HW] (E)IDE subsystem - VLB/PCI bus speed idebus= [HW] (E)IDE subsystem - VLB/PCI bus speed
@ -944,6 +939,8 @@ and is between 256 and 4096 characters. It is defined in the file
intel_iommu= [DMAR] Intel IOMMU driver (DMAR) option intel_iommu= [DMAR] Intel IOMMU driver (DMAR) option
on
Enable intel iommu driver.
off off
Disable intel iommu driver. Disable intel iommu driver.
igfx_off [Default Off] igfx_off [Default Off]
@ -1313,8 +1310,13 @@ and is between 256 and 4096 characters. It is defined in the file
memtest= [KNL,X86] Enable memtest memtest= [KNL,X86] Enable memtest
Format: <integer> Format: <integer>
range: 0,4 : pattern number
default : 0 <disable> default : 0 <disable>
Specifies the number of memtest passes to be
performed. Each pass selects another test
pattern from a given set of patterns. Memtest
fills the memory with this pattern, validates
memory contents and reserves bad memory
regions that are detected.
meye.*= [HW] Set MotionEye Camera parameters meye.*= [HW] Set MotionEye Camera parameters
See Documentation/video4linux/meye.txt. See Documentation/video4linux/meye.txt.
@ -2454,7 +2456,7 @@ and is between 256 and 4096 characters. It is defined in the file
See Documentation/fb/modedb.txt. See Documentation/fb/modedb.txt.
vga= [BOOT,X86-32] Select a particular video mode vga= [BOOT,X86-32] Select a particular video mode
See Documentation/x86/i386/boot.txt and See Documentation/x86/boot.txt and
Documentation/svga.txt. Documentation/svga.txt.
Use vga=ask for menu. Use vga=ask for menu.
This is actually a boot loader parameter; the value is This is actually a boot loader parameter; the value is

View File

@ -1,7 +1,7 @@
ThinkPad ACPI Extras Driver ThinkPad ACPI Extras Driver
Version 0.21 Version 0.22
May 29th, 2008 November 23rd, 2008
Borislav Deianov <borislav@users.sf.net> Borislav Deianov <borislav@users.sf.net>
Henrique de Moraes Holschuh <hmh@hmh.eng.br> Henrique de Moraes Holschuh <hmh@hmh.eng.br>
@ -16,7 +16,8 @@ supported by the generic Linux ACPI drivers.
This driver used to be named ibm-acpi until kernel 2.6.21 and release This driver used to be named ibm-acpi until kernel 2.6.21 and release
0.13-20070314. It used to be in the drivers/acpi tree, but it was 0.13-20070314. It used to be in the drivers/acpi tree, but it was
moved to the drivers/misc tree and renamed to thinkpad-acpi for kernel moved to the drivers/misc tree and renamed to thinkpad-acpi for kernel
2.6.22, and release 0.14. 2.6.22, and release 0.14. It was moved to drivers/platform/x86 for
kernel 2.6.29 and release 0.22.
The driver is named "thinkpad-acpi". In some places, like module The driver is named "thinkpad-acpi". In some places, like module
names, "thinkpad_acpi" is used because of userspace issues. names, "thinkpad_acpi" is used because of userspace issues.
@ -1412,6 +1413,24 @@ Sysfs notes:
rfkill controller switch "tpacpi_wwan_sw": refer to rfkill controller switch "tpacpi_wwan_sw": refer to
Documentation/rfkill.txt for details. Documentation/rfkill.txt for details.
EXPERIMENTAL: UWB
-----------------
This feature is marked EXPERIMENTAL because it has not been extensively
tested and validated in various ThinkPad models yet. The feature may not
work as expected. USE WITH CAUTION! To use this feature, you need to supply
the experimental=1 parameter when loading the module.
sysfs rfkill class: switch "tpacpi_uwb_sw"
This feature exports an rfkill controller for the UWB device, if one is
present and enabled in the BIOS.
Sysfs notes:
rfkill controller switch "tpacpi_uwb_sw": refer to
Documentation/rfkill.txt for details.
Multiple Commands, Module Parameters Multiple Commands, Module Parameters
------------------------------------ ------------------------------------

View File

@ -1,5 +1,5 @@
# This creates the demonstration utility "lguest" which runs a Linux guest. # This creates the demonstration utility "lguest" which runs a Linux guest.
CFLAGS:=-Wall -Wmissing-declarations -Wmissing-prototypes -O3 -I../../include -I../../arch/x86/include CFLAGS:=-Wall -Wmissing-declarations -Wmissing-prototypes -O3 -I../../include -I../../arch/x86/include -U_FORTIFY_SOURCE
LDLIBS:=-lz LDLIBS:=-lz
all: lguest all: lguest

View File

@ -52,14 +52,12 @@ Two files are introduced:
b) 'drivers/ide/mips/au1xxx-ide.c' b) 'drivers/ide/mips/au1xxx-ide.c'
contains the functionality of the AU1XXX IDE driver contains the functionality of the AU1XXX IDE driver
Four configs variables are introduced: Following extra configs variables are introduced:
CONFIG_BLK_DEV_IDE_AU1XXX_PIO_DBDMA - enable the PIO+DBDMA mode CONFIG_BLK_DEV_IDE_AU1XXX_PIO_DBDMA - enable the PIO+DBDMA mode
CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA - enable the MWDMA mode CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA - enable the MWDMA mode
CONFIG_BLK_DEV_IDE_AU1XXX_BURSTABLE_ON - set Burstable FIFO in DBDMA CONFIG_BLK_DEV_IDE_AU1XXX_BURSTABLE_ON - set Burstable FIFO in DBDMA
controller controller
CONFIG_BLK_DEV_IDE_AU1XXX_SEQTS_PER_RQ - maximum transfer size
per descriptor
SUPPORTED IDE MODES SUPPORTED IDE MODES
@ -87,7 +85,6 @@ CONFIG_BLK_DEV_IDEDMA_PCI=y
CONFIG_IDEDMA_PCI_AUTO=y CONFIG_IDEDMA_PCI_AUTO=y
CONFIG_BLK_DEV_IDE_AU1XXX=y CONFIG_BLK_DEV_IDE_AU1XXX=y
CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA=y CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA=y
CONFIG_BLK_DEV_IDE_AU1XXX_SEQTS_PER_RQ=128
CONFIG_BLK_DEV_IDEDMA=y CONFIG_BLK_DEV_IDEDMA=y
CONFIG_IDEDMA_AUTO=y CONFIG_IDEDMA_AUTO=y
@ -105,7 +102,6 @@ CONFIG_BLK_DEV_IDEDMA_PCI=y
CONFIG_IDEDMA_PCI_AUTO=y CONFIG_IDEDMA_PCI_AUTO=y
CONFIG_BLK_DEV_IDE_AU1XXX=y CONFIG_BLK_DEV_IDE_AU1XXX=y
CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA=y CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA=y
CONFIG_BLK_DEV_IDE_AU1XXX_SEQTS_PER_RQ=128
CONFIG_BLK_DEV_IDEDMA=y CONFIG_BLK_DEV_IDEDMA=y
CONFIG_IDEDMA_AUTO=y CONFIG_IDEDMA_AUTO=y

View File

@ -2,14 +2,14 @@
IP-Aliasing: IP-Aliasing:
============ ============
IP-aliases are additional IP-addresses/masks hooked up to a base IP-aliases are an obsolete way to manage multiple IP-addresses/masks
interface by adding a colon and a string when running ifconfig. per interface. Newer tools such as iproute2 support multiple
address/prefixes per interface, but aliases are still supported
for backwards compatibility.
An alias is formed by adding a colon and a string when running ifconfig.
This string is usually numeric, but this is not a must. This string is usually numeric, but this is not a must.
IP-Aliases are avail if CONFIG_INET (`standard' IPv4 networking)
is configured in the kernel.
o Alias creation. o Alias creation.
Alias creation is done by 'magic' interface naming: eg. to create a Alias creation is done by 'magic' interface naming: eg. to create a
200.1.1.1 alias for eth0 ... 200.1.1.1 alias for eth0 ...
@ -38,16 +38,3 @@ o Relationship with main device
If the base device is shut down the added aliases will be deleted If the base device is shut down the added aliases will be deleted
too. too.
Contact
-------
Please finger or e-mail me:
Juan Jose Ciarlante <jjciarla@raiz.uncu.edu.ar>
Updated by Erik Schoenfelder <schoenfr@gaertner.DE>
; local variables:
; mode: indented-text
; mode: auto-fill
; end:

View File

@ -0,0 +1,35 @@
Options for the ipv6 module are supplied as parameters at load time.
Module options may be given as command line arguments to the insmod
or modprobe command, but are usually specified in either the
/etc/modules.conf or /etc/modprobe.conf configuration file, or in a
distro-specific configuration file.
The available ipv6 module parameters are listed below. If a parameter
is not specified the default value is used.
The parameters are as follows:
disable
Specifies whether to load the IPv6 module, but disable all
its functionality. This might be used when another module
has a dependency on the IPv6 module being loaded, but no
IPv6 addresses or operations are desired.
The possible values and their effects are:
0
IPv6 is enabled.
This is the default value.
1
IPv6 is disabled.
No IPv6 addresses will be added to interfaces, and
it will not be possible to open an IPv6 socket.
A reboot is required to enable IPv6.

View File

@ -51,7 +51,8 @@ Built-in netconsole starts immediately after the TCP stack is
initialized and attempts to bring up the supplied dev at the supplied initialized and attempts to bring up the supplied dev at the supplied
address. address.
The remote host can run either 'netcat -u -l -p <port>' or syslogd. The remote host can run either 'netcat -u -l -p <port>',
'nc -l -u <port>' or syslogd.
Dynamic reconfiguration: Dynamic reconfiguration:
======================== ========================

View File

@ -0,0 +1,180 @@
MPC5200 Device Tree Bindings
----------------------------
(c) 2006-2009 Secret Lab Technologies Ltd
Grant Likely <grant.likely@secretlab.ca>
Naming conventions
------------------
For mpc5200 on-chip devices, the format for each compatible value is
<chip>-<device>[-<mode>]. The OS should be able to match a device driver
to the device based solely on the compatible value. If two drivers
match on the compatible list; the 'most compatible' driver should be
selected.
The split between the MPC5200 and the MPC5200B leaves a bit of a
conundrum. How should the compatible property be set up to provide
maximum compatibility information; but still accurately describe the
chip? For the MPC5200; the answer is easy. Most of the SoC devices
originally appeared on the MPC5200. Since they didn't exist anywhere
else; the 5200 compatible properties will contain only one item;
"fsl,mpc5200-<device>".
The 5200B is almost the same as the 5200, but not quite. It fixes
silicon bugs and it adds a small number of enhancements. Most of the
devices either provide exactly the same interface as on the 5200. A few
devices have extra functions but still have a backwards compatible mode.
To express this information as completely as possible, 5200B device trees
should have two items in the compatible list:
compatible = "fsl,mpc5200b-<device>","fsl,mpc5200-<device>";
It is *strongly* recommended that 5200B device trees follow this convention
(instead of only listing the base mpc5200 item).
ie. ethernet on mpc5200: compatible = "fsl,mpc5200-fec";
ethernet on mpc5200b: compatible = "fsl,mpc5200b-fec", "fsl,mpc5200-fec";
Modal devices, like PSCs, also append the configured function to the
end of the compatible field. ie. A PSC in i2s mode would specify
"fsl,mpc5200-psc-i2s", not "fsl,mpc5200-i2s". This convention is chosen to
avoid naming conflicts with non-psc devices providing the same
function. For example, "fsl,mpc5200-spi" and "fsl,mpc5200-psc-spi" describe
the mpc5200 simple spi device and a PSC spi mode respectively.
At the time of writing, exact chip may be either 'fsl,mpc5200' or
'fsl,mpc5200b'.
The soc node
------------
This node describes the on chip SOC peripherals. Every mpc5200 based
board will have this node, and as such there is a common naming
convention for SOC devices.
Required properties:
name description
---- -----------
ranges Memory range of the internal memory mapped registers.
Should be <0 [baseaddr] 0xc000>
reg Should be <[baseaddr] 0x100>
compatible mpc5200: "fsl,mpc5200-immr"
mpc5200b: "fsl,mpc5200b-immr"
system-frequency 'fsystem' frequency in Hz; XLB, IPB, USB and PCI
clocks are derived from the fsystem clock.
bus-frequency IPB bus frequency in Hz. Clock rate
used by most of the soc devices.
soc child nodes
---------------
Any on chip SOC devices available to Linux must appear as soc5200 child nodes.
Note: The tables below show the value for the mpc5200. A mpc5200b device
tree should use the "fsl,mpc5200b-<device>","fsl,mpc5200-<device>" form.
Required soc5200 child nodes:
name compatible Description
---- ---------- -----------
cdm@<addr> fsl,mpc5200-cdm Clock Distribution
interrupt-controller@<addr> fsl,mpc5200-pic need an interrupt
controller to boot
bestcomm@<addr> fsl,mpc5200-bestcomm Bestcomm DMA controller
Recommended soc5200 child nodes; populate as needed for your board
name compatible Description
---- ---------- -----------
timer@<addr> fsl,mpc5200-gpt General purpose timers
gpio@<addr> fsl,mpc5200-gpio MPC5200 simple gpio controller
gpio@<addr> fsl,mpc5200-gpio-wkup MPC5200 wakeup gpio controller
rtc@<addr> fsl,mpc5200-rtc Real time clock
mscan@<addr> fsl,mpc5200-mscan CAN bus controller
pci@<addr> fsl,mpc5200-pci PCI bridge
serial@<addr> fsl,mpc5200-psc-uart PSC in serial mode
i2s@<addr> fsl,mpc5200-psc-i2s PSC in i2s mode
ac97@<addr> fsl,mpc5200-psc-ac97 PSC in ac97 mode
spi@<addr> fsl,mpc5200-psc-spi PSC in spi mode
irda@<addr> fsl,mpc5200-psc-irda PSC in IrDA mode
spi@<addr> fsl,mpc5200-spi MPC5200 spi device
ethernet@<addr> fsl,mpc5200-fec MPC5200 ethernet device
ata@<addr> fsl,mpc5200-ata IDE ATA interface
i2c@<addr> fsl,mpc5200-i2c I2C controller
usb@<addr> fsl,mpc5200-ohci,ohci-be USB controller
xlb@<addr> fsl,mpc5200-xlb XLB arbitrator
fsl,mpc5200-gpt nodes
---------------------
On the mpc5200 and 5200b, GPT0 has a watchdog timer function. If the board
design supports the internal wdt, then the device node for GPT0 should
include the empty property 'fsl,has-wdt'.
An mpc5200-gpt can be used as a single line GPIO controller. To do so,
add the following properties to the gpt node:
gpio-controller;
#gpio-cells = <2>;
When referencing the GPIO line from another node, the first cell must always
be zero and the second cell represents the gpio flags and described in the
gpio device tree binding.
An mpc5200-gpt can be used as a single line edge sensitive interrupt
controller. To do so, add the following properties to the gpt node:
interrupt-controller;
#interrupt-cells = <1>;
When referencing the IRQ line from another node, the cell represents the
sense mode; 1 for edge rising, 2 for edge falling.
fsl,mpc5200-psc nodes
---------------------
The PSCs should include a cell-index which is the index of the PSC in
hardware. cell-index is used to determine which shared SoC registers to
use when setting up PSC clocking. cell-index number starts at '0'. ie:
PSC1 has 'cell-index = <0>'
PSC4 has 'cell-index = <3>'
PSC in i2s mode: The mpc5200 and mpc5200b PSCs are not compatible when in
i2s mode. An 'mpc5200b-psc-i2s' node cannot include 'mpc5200-psc-i2s' in the
compatible field.
fsl,mpc5200-gpio and fsl,mpc5200-gpio-wkup nodes
------------------------------------------------
Each GPIO controller node should have the empty property gpio-controller and
#gpio-cells set to 2. First cell is the GPIO number which is interpreted
according to the bit numbers in the GPIO control registers. The second cell
is for flags which is currently unused.
fsl,mpc5200-fec nodes
---------------------
The FEC node can specify one of the following properties to configure
the MII link:
- fsl,7-wire-mode - An empty property that specifies the link uses 7-wire
mode instead of MII
- current-speed - Specifies that the MII should be configured for a fixed
speed. This property should contain two cells. The
first cell specifies the speed in Mbps and the second
should be '0' for half duplex and '1' for full duplex
- phy-handle - Contains a phandle to an Ethernet PHY.
Interrupt controller (fsl,mpc5200-pic) node
-------------------------------------------
The mpc5200 pic binding splits hardware IRQ numbers into two levels. The
split reflects the layout of the PIC hardware itself, which groups
interrupts into one of three groups; CRIT, MAIN or PERP. Also, the
Bestcomm dma engine has it's own set of interrupt sources which are
cascaded off of peripheral interrupt 0, which the driver interprets as a
fourth group, SDMA.
The interrupts property for device nodes using the mpc5200 pic consists
of three cells; <L1 L2 level>
L1 := [CRIT=0, MAIN=1, PERP=2, SDMA=3]
L2 := interrupt number; directly mapped from the value in the
"ICTL PerStat, MainStat, CritStat Encoded Register"
level := [LEVEL_HIGH=0, EDGE_RISING=1, EDGE_FALLING=2, LEVEL_LOW=3]
For external IRQs, use the following interrupt property values (how to
specify external interrupts is a frequently asked question):
External interrupts:
external irq0: interrupts = <0 0 n>;
external irq1: interrupts = <1 1 n>;
external irq2: interrupts = <1 2 n>;
external irq3: interrupts = <1 3 n>;
'n' is sense (0: level high, 1: edge rising, 2: edge falling 3: level low)

View File

@ -1,277 +0,0 @@
MPC5200 Device Tree Bindings
----------------------------
(c) 2006-2007 Secret Lab Technologies Ltd
Grant Likely <grant.likely at secretlab.ca>
********** DRAFT ***********
* WARNING: Do not depend on the stability of these bindings just yet.
* The MPC5200 device tree conventions are still in flux
* Keep an eye on the linuxppc-dev mailing list for more details
********** DRAFT ***********
I - Introduction
================
Boards supported by the arch/powerpc architecture require device tree be
passed by the boot loader to the kernel at boot time. The device tree
describes what devices are present on the board and how they are
connected. The device tree can either be passed as a binary blob (as
described in Documentation/powerpc/booting-without-of.txt), or passed
by Open Firmware (IEEE 1275) compatible firmware using an OF compatible
client interface API.
This document specifies the requirements on the device-tree for mpc5200
based boards. These requirements are above and beyond the details
specified in either the Open Firmware spec or booting-without-of.txt
All new mpc5200-based boards are expected to match this document. In
cases where this document is not sufficient to support a new board port,
this document should be updated as part of adding the new board support.
II - Philosophy
===============
The core of this document is naming convention. The whole point of
defining this convention is to reduce or eliminate the number of
special cases required to support a 5200 board. If all 5200 boards
follow the same convention, then generic 5200 support code will work
rather than coding special cases for each new board.
This section tries to capture the thought process behind why the naming
convention is what it is.
1. names
---------
There is strong convention/requirements already established for children
of the root node. 'cpus' describes the processor cores, 'memory'
describes memory, and 'chosen' provides boot configuration. Other nodes
are added to describe devices attached to the processor local bus.
Following convention already established with other system-on-chip
processors, 5200 device trees should use the name 'soc5200' for the
parent node of on chip devices, and the root node should be its parent.
Child nodes are typically named after the configured function. ie.
the FEC node is named 'ethernet', and a PSC in uart mode is named 'serial'.
2. device_type property
-----------------------
similar to the node name convention above; the device_type reflects the
configured function of a device. ie. 'serial' for a uart and 'spi' for
an spi controller. However, while node names *should* reflect the
configured function, device_type *must* match the configured function
exactly.
3. compatible property
----------------------
Since device_type isn't enough to match devices to drivers, there also
needs to be a naming convention for the compatible property. Compatible
is an list of device descriptions sorted from specific to generic. For
the mpc5200, the required format for each compatible value is
<chip>-<device>[-<mode>]. The OS should be able to match a device driver
to the device based solely on the compatible value. If two drivers
match on the compatible list; the 'most compatible' driver should be
selected.
The split between the MPC5200 and the MPC5200B leaves a bit of a
conundrum. How should the compatible property be set up to provide
maximum compatibility information; but still accurately describe the
chip? For the MPC5200; the answer is easy. Most of the SoC devices
originally appeared on the MPC5200. Since they didn't exist anywhere
else; the 5200 compatible properties will contain only one item;
"mpc5200-<device>".
The 5200B is almost the same as the 5200, but not quite. It fixes
silicon bugs and it adds a small number of enhancements. Most of the
devices either provide exactly the same interface as on the 5200. A few
devices have extra functions but still have a backwards compatible mode.
To express this information as completely as possible, 5200B device trees
should have two items in the compatible list;
"mpc5200b-<device>\0mpc5200-<device>". It is *strongly* recommended
that 5200B device trees follow this convention (instead of only listing
the base mpc5200 item).
If another chip appear on the market with one of the mpc5200 SoC
devices, then the compatible list should include mpc5200-<device>.
ie. ethernet on mpc5200: compatible = "mpc5200-ethernet"
ethernet on mpc5200b: compatible = "mpc5200b-ethernet\0mpc5200-ethernet"
Modal devices, like PSCs, also append the configured function to the
end of the compatible field. ie. A PSC in i2s mode would specify
"mpc5200-psc-i2s", not "mpc5200-i2s". This convention is chosen to
avoid naming conflicts with non-psc devices providing the same
function. For example, "mpc5200-spi" and "mpc5200-psc-spi" describe
the mpc5200 simple spi device and a PSC spi mode respectively.
If the soc device is more generic and present on other SOCs, the
compatible property can specify the more generic device type also.
ie. mscan: compatible = "mpc5200-mscan\0fsl,mscan";
At the time of writing, exact chip may be either 'mpc5200' or
'mpc5200b'.
Device drivers should always try to match as generically as possible.
III - Structure
===============
The device tree for an mpc5200 board follows the structure defined in
booting-without-of.txt with the following additional notes:
0) the root node
----------------
Typical root description node; see booting-without-of
1) The cpus node
----------------
The cpus node follows the basic layout described in booting-without-of.
The bus-frequency property holds the XLB bus frequency
The clock-frequency property holds the core frequency
2) The memory node
------------------
Typical memory description node; see booting-without-of.
3) The soc5200 node
-------------------
This node describes the on chip SOC peripherals. Every mpc5200 based
board will have this node, and as such there is a common naming
convention for SOC devices.
Required properties:
name type description
---- ---- -----------
device_type string must be "soc"
ranges int should be <0 baseaddr baseaddr+10000>
reg int must be <baseaddr 10000>
compatible string mpc5200: "mpc5200-soc"
mpc5200b: "mpc5200b-soc\0mpc5200-soc"
system-frequency int Fsystem frequency; source of all
other clocks.
bus-frequency int IPB bus frequency in HZ. Clock rate
used by most of the soc devices.
#interrupt-cells int must be <3>.
Recommended properties:
name type description
---- ---- -----------
model string Exact model of the chip;
ie: model="fsl,mpc5200"
revision string Silicon revision of chip
ie: revision="M08A"
The 'model' and 'revision' properties are *strongly* recommended. Having
them presence acts as a bit of a safety net for working around as yet
undiscovered bugs on one version of silicon. For example, device drivers
can use the model and revision properties to decide if a bug fix should
be turned on.
4) soc5200 child nodes
----------------------
Any on chip SOC devices available to Linux must appear as soc5200 child nodes.
Note: The tables below show the value for the mpc5200. A mpc5200b device
tree should use the "mpc5200b-<device>\0mpc5200-<device> form.
Required soc5200 child nodes:
name device_type compatible Description
---- ----------- ---------- -----------
cdm@<addr> cdm mpc5200-cmd Clock Distribution
pic@<addr> interrupt-controller mpc5200-pic need an interrupt
controller to boot
bestcomm@<addr> dma-controller mpc5200-bestcomm 5200 pic also requires
the bestcomm device
Recommended soc5200 child nodes; populate as needed for your board
name device_type compatible Description
---- ----------- ---------- -----------
gpt@<addr> gpt fsl,mpc5200-gpt General purpose timers
gpt@<addr> gpt fsl,mpc5200-gpt-gpio General purpose
timers in GPIO mode
gpio@<addr> fsl,mpc5200-gpio MPC5200 simple gpio
controller
gpio@<addr> fsl,mpc5200-gpio-wkup MPC5200 wakeup gpio
controller
rtc@<addr> rtc mpc5200-rtc Real time clock
mscan@<addr> mscan mpc5200-mscan CAN bus controller
pci@<addr> pci mpc5200-pci PCI bridge
serial@<addr> serial mpc5200-psc-uart PSC in serial mode
i2s@<addr> sound mpc5200-psc-i2s PSC in i2s mode
ac97@<addr> sound mpc5200-psc-ac97 PSC in ac97 mode
spi@<addr> spi mpc5200-psc-spi PSC in spi mode
irda@<addr> irda mpc5200-psc-irda PSC in IrDA mode
spi@<addr> spi mpc5200-spi MPC5200 spi device
ethernet@<addr> network mpc5200-fec MPC5200 ethernet device
ata@<addr> ata mpc5200-ata IDE ATA interface
i2c@<addr> i2c mpc5200-i2c I2C controller
usb@<addr> usb-ohci-be mpc5200-ohci,ohci-be USB controller
xlb@<addr> xlb mpc5200-xlb XLB arbitrator
Important child node properties
name type description
---- ---- -----------
cell-index int When multiple devices are present, is the
index of the device in the hardware (ie. There
are 6 PSC on the 5200 numbered PSC1 to PSC6)
PSC1 has 'cell-index = <0>'
PSC4 has 'cell-index = <3>'
5) General Purpose Timer nodes (child of soc5200 node)
On the mpc5200 and 5200b, GPT0 has a watchdog timer function. If the board
design supports the internal wdt, then the device node for GPT0 should
include the empty property 'fsl,has-wdt'.
6) PSC nodes (child of soc5200 node)
PSC nodes can define the optional 'port-number' property to force assignment
order of serial ports. For example, PSC5 might be physically connected to
the port labeled 'COM1' and PSC1 wired to 'COM1'. In this case, PSC5 would
have a "port-number = <0>" property, and PSC1 would have "port-number = <1>".
PSC in i2s mode: The mpc5200 and mpc5200b PSCs are not compatible when in
i2s mode. An 'mpc5200b-psc-i2s' node cannot include 'mpc5200-psc-i2s' in the
compatible field.
7) GPIO controller nodes
Each GPIO controller node should have the empty property gpio-controller and
#gpio-cells set to 2. First cell is the GPIO number which is interpreted
according to the bit numbers in the GPIO control registers. The second cell
is for flags which is currently unsused.
8) FEC nodes
The FEC node can specify one of the following properties to configure
the MII link:
"fsl,7-wire-mode" - An empty property that specifies the link uses 7-wire
mode instead of MII
"current-speed" - Specifies that the MII should be configured for a fixed
speed. This property should contain two cells. The
first cell specifies the speed in Mbps and the second
should be '0' for half duplex and '1' for full duplex
"phy-handle" - Contains a phandle to an Ethernet PHY.
IV - Extra Notes
================
1. Interrupt mapping
--------------------
The mpc5200 pic driver splits hardware IRQ numbers into two levels. The
split reflects the layout of the PIC hardware itself, which groups
interrupts into one of three groups; CRIT, MAIN or PERP. Also, the
Bestcomm dma engine has it's own set of interrupt sources which are
cascaded off of peripheral interrupt 0, which the driver interprets as a
fourth group, SDMA.
The interrupts property for device nodes using the mpc5200 pic consists
of three cells; <L1 L2 level>
L1 := [CRIT=0, MAIN=1, PERP=2, SDMA=3]
L2 := interrupt number; directly mapped from the value in the
"ICTL PerStat, MainStat, CritStat Encoded Register"
level := [LEVEL_HIGH=0, EDGE_RISING=1, EDGE_FALLING=2, LEVEL_LOW=3]
2. Shared registers
-------------------
Some SoC devices share registers between them. ie. the i2c devices use
a single clock control register, and almost all device are affected by
the port_config register. Devices which need to manipulate shared regs
should look to the parent SoC node. The soc node is responsible
for arbitrating all shared register access.

View File

@ -231,7 +231,7 @@ CPU bandwidth control purposes:
This options needs CONFIG_CGROUPS to be defined, and lets the administrator This options needs CONFIG_CGROUPS to be defined, and lets the administrator
create arbitrary groups of tasks, using the "cgroup" pseudo filesystem. See create arbitrary groups of tasks, using the "cgroup" pseudo filesystem. See
Documentation/cgroups.txt for more information about this filesystem. Documentation/cgroups/cgroups.txt for more information about this filesystem.
Only one of these options to group tasks can be chosen and not both. Only one of these options to group tasks can be chosen and not both.

View File

@ -4,7 +4,7 @@ Introduction
============ ============
The Chelsio T3 ASIC based Adapters (S310, S320, S302, S304, Mezz cards, etc. The Chelsio T3 ASIC based Adapters (S310, S320, S302, S304, Mezz cards, etc.
series of products) supports iSCSI acceleration and iSCSI Direct Data Placement series of products) support iSCSI acceleration and iSCSI Direct Data Placement
(DDP) where the hardware handles the expensive byte touching operations, such (DDP) where the hardware handles the expensive byte touching operations, such
as CRC computation and verification, and direct DMA to the final host memory as CRC computation and verification, and direct DMA to the final host memory
destination: destination:
@ -31,9 +31,9 @@ destination:
the TCP segments onto the wire. It handles TCP retransmission if the TCP segments onto the wire. It handles TCP retransmission if
needed. needed.
On receving, S3 h/w recovers the iSCSI PDU by reassembling TCP On receiving, S3 h/w recovers the iSCSI PDU by reassembling TCP
segments, separating the header and data, calculating and verifying segments, separating the header and data, calculating and verifying
the digests, then forwards the header to the host. The payload data, the digests, then forwarding the header to the host. The payload data,
if possible, will be directly placed into the pre-posted host DDP if possible, will be directly placed into the pre-posted host DDP
buffer. Otherwise, the payload data will be sent to the host too. buffer. Otherwise, the payload data will be sent to the host too.
@ -68,9 +68,8 @@ The following steps need to be taken to accelerates the open-iscsi initiator:
sure the ip address is unique in the network. sure the ip address is unique in the network.
3. edit /etc/iscsi/iscsid.conf 3. edit /etc/iscsi/iscsid.conf
The default setting for MaxRecvDataSegmentLength (131072) is too big, The default setting for MaxRecvDataSegmentLength (131072) is too big;
replace "node.conn[0].iscsi.MaxRecvDataSegmentLength" to be a value no replace with a value no bigger than 15360 (for example 8192):
bigger than 15360 (for example 8192):
node.conn[0].iscsi.MaxRecvDataSegmentLength = 8192 node.conn[0].iscsi.MaxRecvDataSegmentLength = 8192

View File

@ -275,7 +275,8 @@ STAC9200
dell-m25 Dell Inspiron E1505n dell-m25 Dell Inspiron E1505n
dell-m26 Dell Inspiron 1501 dell-m26 Dell Inspiron 1501
dell-m27 Dell Inspiron E1705/9400 dell-m27 Dell Inspiron E1705/9400
gateway Gateway laptops with EAPD control gateway-m4 Gateway laptops with EAPD control
gateway-m4-2 Gateway laptops with EAPD control
panasonic Panasonic CF-74 panasonic Panasonic CF-74
STAC9205/9254 STAC9205/9254
@ -302,6 +303,7 @@ STAC9220/9221
macbook-pro Intel Mac Book Pro 2nd generation (eq. type 3) macbook-pro Intel Mac Book Pro 2nd generation (eq. type 3)
imac-intel Intel iMac (eq. type 2) imac-intel Intel iMac (eq. type 2)
imac-intel-20 Intel iMac (newer version) (eq. type 3) imac-intel-20 Intel iMac (newer version) (eq. type 3)
ecs202 ECS/PC chips
dell-d81 Dell (unknown) dell-d81 Dell (unknown)
dell-d82 Dell (unknown) dell-d82 Dell (unknown)
dell-m81 Dell (unknown) dell-m81 Dell (unknown)
@ -310,9 +312,13 @@ STAC9220/9221
STAC9202/9250/9251 STAC9202/9250/9251
================== ==================
ref Reference board, base config ref Reference board, base config
m1 Some Gateway MX series laptops (NX560XL)
m1-2 Some Gateway MX series laptops (MX6453)
m2 Some Gateway MX series laptops (M255)
m2-2 Some Gateway MX series laptops m2-2 Some Gateway MX series laptops
m3 Some Gateway MX series laptops
m5 Some Gateway MX series laptops (MP6954)
m6 Some Gateway NX series laptops m6 Some Gateway NX series laptops
pa6 Gateway NX860 series
STAC9227/9228/9229/927x STAC9227/9228/9229/927x
======================= =======================
@ -329,6 +335,7 @@ STAC92HD71B*
dell-m4-1 Dell desktops dell-m4-1 Dell desktops
dell-m4-2 Dell desktops dell-m4-2 Dell desktops
dell-m4-3 Dell desktops dell-m4-3 Dell desktops
hp-m4 HP dv laptops
STAC92HD73* STAC92HD73*
=========== ===========
@ -337,10 +344,12 @@ STAC92HD73*
dell-m6-amic Dell desktops/laptops with analog mics dell-m6-amic Dell desktops/laptops with analog mics
dell-m6-dmic Dell desktops/laptops with digital mics dell-m6-dmic Dell desktops/laptops with digital mics
dell-m6 Dell desktops/laptops with both type of mics dell-m6 Dell desktops/laptops with both type of mics
dell-eq Dell desktops/laptops
STAC92HD83* STAC92HD83*
=========== ===========
ref Reference board ref Reference board
mic-ref Reference board with power managment for ports
STAC9872 STAC9872
======== ========

View File

@ -1,12 +1,13 @@
Documentation for /proc/sys/vm/* kernel version 2.2.10 Documentation for /proc/sys/vm/* kernel version 2.6.29
(c) 1998, 1999, Rik van Riel <riel@nl.linux.org> (c) 1998, 1999, Rik van Riel <riel@nl.linux.org>
(c) 2008 Peter W. Morreale <pmorreale@novell.com>
For general info and legal blurb, please look in README. For general info and legal blurb, please look in README.
============================================================== ==============================================================
This file contains the documentation for the sysctl files in This file contains the documentation for the sysctl files in
/proc/sys/vm and is valid for Linux kernel version 2.2. /proc/sys/vm and is valid for Linux kernel version 2.6.29.
The files in this directory can be used to tune the operation The files in this directory can be used to tune the operation
of the virtual memory (VM) subsystem of the Linux kernel and of the virtual memory (VM) subsystem of the Linux kernel and
@ -16,83 +17,244 @@ Default values and initialization routines for most of these
files can be found in mm/swap.c. files can be found in mm/swap.c.
Currently, these files are in /proc/sys/vm: Currently, these files are in /proc/sys/vm:
- overcommit_memory
- page-cluster - block_dump
- dirty_ratio - dirty_background_bytes
- dirty_background_ratio - dirty_background_ratio
- dirty_bytes
- dirty_expire_centisecs - dirty_expire_centisecs
- dirty_ratio
- dirty_writeback_centisecs - dirty_writeback_centisecs
- highmem_is_dirtyable (only if CONFIG_HIGHMEM set) - drop_caches
- hugepages_treat_as_movable
- hugetlb_shm_group
- laptop_mode
- legacy_va_layout
- lowmem_reserve_ratio
- max_map_count - max_map_count
- min_free_kbytes - min_free_kbytes
- laptop_mode
- block_dump
- drop-caches
- zone_reclaim_mode
- min_unmapped_ratio
- min_slab_ratio - min_slab_ratio
- panic_on_oom - min_unmapped_ratio
- oom_dump_tasks - mmap_min_addr
- oom_kill_allocating_task
- mmap_min_address
- numa_zonelist_order
- nr_hugepages - nr_hugepages
- nr_overcommit_hugepages - nr_overcommit_hugepages
- nr_trim_pages (only if CONFIG_MMU=n) - nr_pdflush_threads
- nr_trim_pages (only if CONFIG_MMU=n)
- numa_zonelist_order
- oom_dump_tasks
- oom_kill_allocating_task
- overcommit_memory
- overcommit_ratio
- page-cluster
- panic_on_oom
- percpu_pagelist_fraction
- stat_interval
- swappiness
- vfs_cache_pressure
- zone_reclaim_mode
============================================================== ==============================================================
dirty_bytes, dirty_ratio, dirty_background_bytes, block_dump
dirty_background_ratio, dirty_expire_centisecs,
dirty_writeback_centisecs, highmem_is_dirtyable,
vfs_cache_pressure, laptop_mode, block_dump, swap_token_timeout,
drop-caches, hugepages_treat_as_movable:
See Documentation/filesystems/proc.txt block_dump enables block I/O debugging when set to a nonzero value. More
information on block I/O debugging is in Documentation/laptops/laptop-mode.txt.
============================================================== ==============================================================
overcommit_memory: dirty_background_bytes
This value contains a flag that enables memory overcommitment. Contains the amount of dirty memory at which the pdflush background writeback
daemon will start writeback.
When this flag is 0, the kernel attempts to estimate the amount If dirty_background_bytes is written, dirty_background_ratio becomes a function
of free memory left when userspace requests more memory. of its value (dirty_background_bytes / the amount of dirtyable system memory).
When this flag is 1, the kernel pretends there is always enough
memory until it actually runs out.
When this flag is 2, the kernel uses a "never overcommit"
policy that attempts to prevent any overcommit of memory.
This feature can be very useful because there are a lot of
programs that malloc() huge amounts of memory "just-in-case"
and don't use much of it.
The default value is 0.
See Documentation/vm/overcommit-accounting and
security/commoncap.c::cap_vm_enough_memory() for more information.
============================================================== ==============================================================
overcommit_ratio: dirty_background_ratio
When overcommit_memory is set to 2, the committed address Contains, as a percentage of total system memory, the number of pages at which
space is not permitted to exceed swap plus this percentage the pdflush background writeback daemon will start writing out dirty data.
of physical RAM. See above.
============================================================== ==============================================================
page-cluster: dirty_bytes
The Linux VM subsystem avoids excessive disk seeks by reading Contains the amount of dirty memory at which a process generating disk writes
multiple pages on a page fault. The number of pages it reads will itself start writeback.
is dependent on the amount of memory in your machine.
The number of pages the kernel reads in at once is equal to If dirty_bytes is written, dirty_ratio becomes a function of its value
2 ^ page-cluster. Values above 2 ^ 5 don't make much sense (dirty_bytes / the amount of dirtyable system memory).
for swap because we only cluster swap data in 32-page groups.
==============================================================
dirty_expire_centisecs
This tunable is used to define when dirty data is old enough to be eligible
for writeout by the pdflush daemons. It is expressed in 100'ths of a second.
Data which has been dirty in-memory for longer than this interval will be
written out next time a pdflush daemon wakes up.
==============================================================
dirty_ratio
Contains, as a percentage of total system memory, the number of pages at which
a process which is generating disk writes will itself start writing out dirty
data.
==============================================================
dirty_writeback_centisecs
The pdflush writeback daemons will periodically wake up and write `old' data
out to disk. This tunable expresses the interval between those wakeups, in
100'ths of a second.
Setting this to zero disables periodic writeback altogether.
==============================================================
drop_caches
Writing to this will cause the kernel to drop clean caches, dentries and
inodes from memory, causing that memory to become free.
To free pagecache:
echo 1 > /proc/sys/vm/drop_caches
To free dentries and inodes:
echo 2 > /proc/sys/vm/drop_caches
To free pagecache, dentries and inodes:
echo 3 > /proc/sys/vm/drop_caches
As this is a non-destructive operation and dirty objects are not freeable, the
user should run `sync' first.
==============================================================
hugepages_treat_as_movable
This parameter is only useful when kernelcore= is specified at boot time to
create ZONE_MOVABLE for pages that may be reclaimed or migrated. Huge pages
are not movable so are not normally allocated from ZONE_MOVABLE. A non-zero
value written to hugepages_treat_as_movable allows huge pages to be allocated
from ZONE_MOVABLE.
Once enabled, the ZONE_MOVABLE is treated as an area of memory the huge
pages pool can easily grow or shrink within. Assuming that applications are
not running that mlock() a lot of memory, it is likely the huge pages pool
can grow to the size of ZONE_MOVABLE by repeatedly entering the desired value
into nr_hugepages and triggering page reclaim.
==============================================================
hugetlb_shm_group
hugetlb_shm_group contains group id that is allowed to create SysV
shared memory segment using hugetlb page.
==============================================================
laptop_mode
laptop_mode is a knob that controls "laptop mode". All the things that are
controlled by this knob are discussed in Documentation/laptops/laptop-mode.txt.
==============================================================
legacy_va_layout
If non-zero, this sysctl disables the new 32-bit mmap mmap layout - the kernel
will use the legacy (2.4) layout for all processes.
==============================================================
lowmem_reserve_ratio
For some specialised workloads on highmem machines it is dangerous for
the kernel to allow process memory to be allocated from the "lowmem"
zone. This is because that memory could then be pinned via the mlock()
system call, or by unavailability of swapspace.
And on large highmem machines this lack of reclaimable lowmem memory
can be fatal.
So the Linux page allocator has a mechanism which prevents allocations
which _could_ use highmem from using too much lowmem. This means that
a certain amount of lowmem is defended from the possibility of being
captured into pinned user memory.
(The same argument applies to the old 16 megabyte ISA DMA region. This
mechanism will also defend that region from allocations which could use
highmem or lowmem).
The `lowmem_reserve_ratio' tunable determines how aggressive the kernel is
in defending these lower zones.
If you have a machine which uses highmem or ISA DMA and your
applications are using mlock(), or if you are running with no swap then
you probably should change the lowmem_reserve_ratio setting.
The lowmem_reserve_ratio is an array. You can see them by reading this file.
-
% cat /proc/sys/vm/lowmem_reserve_ratio
256 256 32
-
Note: # of this elements is one fewer than number of zones. Because the highest
zone's value is not necessary for following calculation.
But, these values are not used directly. The kernel calculates # of protection
pages for each zones from them. These are shown as array of protection pages
in /proc/zoneinfo like followings. (This is an example of x86-64 box).
Each zone has an array of protection pages like this.
-
Node 0, zone DMA
pages free 1355
min 3
low 3
high 4
:
:
numa_other 0
protection: (0, 2004, 2004, 2004)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pagesets
cpu: 0 pcp: 0
:
-
These protections are added to score to judge whether this zone should be used
for page allocation or should be reclaimed.
In this example, if normal pages (index=2) are required to this DMA zone and
pages_high is used for watermark, the kernel judges this zone should not be
used because pages_free(1355) is smaller than watermark + protection[2]
(4 + 2004 = 2008). If this protection value is 0, this zone would be used for
normal page requirement. If requirement is DMA zone(index=0), protection[0]
(=0) is used.
zone[i]'s protection[j] is calculated by following expression.
(i < j):
zone[i]->protection[j]
= (total sums of present_pages from zone[i+1] to zone[j] on the node)
/ lowmem_reserve_ratio[i];
(i = j):
(should not be protected. = 0;
(i > j):
(not necessary, but looks 0)
The default values of lowmem_reserve_ratio[i] are
256 (if zone[i] means DMA or DMA32 zone)
32 (others).
As above expression, they are reciprocal number of ratio.
256 means 1/256. # of protection pages becomes about "0.39%" of total present
pages of higher zones on the node.
If you would like to protect more pages, smaller values are effective.
The minimum value is 1 (1/1 -> 100%).
============================================================== ==============================================================
@ -113,9 +275,9 @@ The default value is 65536.
min_free_kbytes: min_free_kbytes:
This is used to force the Linux VM to keep a minimum number This is used to force the Linux VM to keep a minimum number
of kilobytes free. The VM uses this number to compute a pages_min of kilobytes free. The VM uses this number to compute a pages_min
value for each lowmem zone in the system. Each lowmem zone gets value for each lowmem zone in the system. Each lowmem zone gets
a number of reserved free pages based proportionally on its size. a number of reserved free pages based proportionally on its size.
Some minimal amount of memory is needed to satisfy PF_MEMALLOC Some minimal amount of memory is needed to satisfy PF_MEMALLOC
@ -124,73 +286,6 @@ become subtly broken, and prone to deadlock under high loads.
Setting this too high will OOM your machine instantly. Setting this too high will OOM your machine instantly.
==============================================================
percpu_pagelist_fraction
This is the fraction of pages at most (high mark pcp->high) in each zone that
are allocated for each per cpu page list. The min value for this is 8. It
means that we don't allow more than 1/8th of pages in each zone to be
allocated in any single per_cpu_pagelist. This entry only changes the value
of hot per cpu pagelists. User can specify a number like 100 to allocate
1/100th of each zone to each per cpu page list.
The batch value of each per cpu pagelist is also updated as a result. It is
set to pcp->high/4. The upper limit of batch is (PAGE_SHIFT * 8)
The initial value is zero. Kernel does not use this value at boot time to set
the high water marks for each per cpu page list.
===============================================================
zone_reclaim_mode:
Zone_reclaim_mode allows someone to set more or less aggressive approaches to
reclaim memory when a zone runs out of memory. If it is set to zero then no
zone reclaim occurs. Allocations will be satisfied from other zones / nodes
in the system.
This is value ORed together of
1 = Zone reclaim on
2 = Zone reclaim writes dirty pages out
4 = Zone reclaim swaps pages
zone_reclaim_mode is set during bootup to 1 if it is determined that pages
from remote zones will cause a measurable performance reduction. The
page allocator will then reclaim easily reusable pages (those page
cache pages that are currently not used) before allocating off node pages.
It may be beneficial to switch off zone reclaim if the system is
used for a file server and all of memory should be used for caching files
from disk. In that case the caching effect is more important than
data locality.
Allowing zone reclaim to write out pages stops processes that are
writing large amounts of data from dirtying pages on other nodes. Zone
reclaim will write out dirty pages if a zone fills up and so effectively
throttle the process. This may decrease the performance of a single process
since it cannot use all of system memory to buffer the outgoing writes
anymore but it preserve the memory on other nodes so that the performance
of other processes running on other nodes will not be affected.
Allowing regular swap effectively restricts allocations to the local
node unless explicitly overridden by memory policies or cpuset
configurations.
=============================================================
min_unmapped_ratio:
This is available only on NUMA kernels.
A percentage of the total pages in each zone. Zone reclaim will only
occur if more than this percentage of pages are file backed and unmapped.
This is to insure that a minimal amount of local pages is still available for
file I/O even if the node is overallocated.
The default is 1 percent.
============================================================= =============================================================
min_slab_ratio: min_slab_ratio:
@ -211,69 +306,16 @@ and may not be fast.
============================================================= =============================================================
panic_on_oom min_unmapped_ratio:
This enables or disables panic on out-of-memory feature. This is available only on NUMA kernels.
If this is set to 0, the kernel will kill some rogue process, A percentage of the total pages in each zone. Zone reclaim will only
called oom_killer. Usually, oom_killer can kill rogue processes and occur if more than this percentage of pages are file backed and unmapped.
system will survive. This is to insure that a minimal amount of local pages is still available for
file I/O even if the node is overallocated.
If this is set to 1, the kernel panics when out-of-memory happens. The default is 1 percent.
However, if a process limits using nodes by mempolicy/cpusets,
and those nodes become memory exhaustion status, one process
may be killed by oom-killer. No panic occurs in this case.
Because other nodes' memory may be free. This means system total status
may be not fatal yet.
If this is set to 2, the kernel panics compulsorily even on the
above-mentioned.
The default value is 0.
1 and 2 are for failover of clustering. Please select either
according to your policy of failover.
=============================================================
oom_dump_tasks
Enables a system-wide task dump (excluding kernel threads) to be
produced when the kernel performs an OOM-killing and includes such
information as pid, uid, tgid, vm size, rss, cpu, oom_adj score, and
name. This is helpful to determine why the OOM killer was invoked
and to identify the rogue task that caused it.
If this is set to zero, this information is suppressed. On very
large systems with thousands of tasks it may not be feasible to dump
the memory state information for each one. Such systems should not
be forced to incur a performance penalty in OOM conditions when the
information may not be desired.
If this is set to non-zero, this information is shown whenever the
OOM killer actually kills a memory-hogging task.
The default value is 0.
=============================================================
oom_kill_allocating_task
This enables or disables killing the OOM-triggering task in
out-of-memory situations.
If this is set to zero, the OOM killer will scan through the entire
tasklist and select a task based on heuristics to kill. This normally
selects a rogue memory-hogging task that frees up a large amount of
memory when killed.
If this is set to non-zero, the OOM killer simply kills the task that
triggered the out-of-memory condition. This avoids the expensive
tasklist scan.
If panic_on_oom is selected, it takes precedence over whatever value
is used in oom_kill_allocating_task.
The default value is 0.
============================================================== ==============================================================
@ -290,6 +332,50 @@ against future potential kernel bugs.
============================================================== ==============================================================
nr_hugepages
Change the minimum size of the hugepage pool.
See Documentation/vm/hugetlbpage.txt
==============================================================
nr_overcommit_hugepages
Change the maximum size of the hugepage pool. The maximum is
nr_hugepages + nr_overcommit_hugepages.
See Documentation/vm/hugetlbpage.txt
==============================================================
nr_pdflush_threads
The current number of pdflush threads. This value is read-only.
The value changes according to the number of dirty pages in the system.
When neccessary, additional pdflush threads are created, one per second, up to
nr_pdflush_threads_max.
==============================================================
nr_trim_pages
This is available only on NOMMU kernels.
This value adjusts the excess page trimming behaviour of power-of-2 aligned
NOMMU mmap allocations.
A value of 0 disables trimming of allocations entirely, while a value of 1
trims excess pages aggressively. Any value >= 1 acts as the watermark where
trimming of allocations is initiated.
The default value is 1.
See Documentation/nommu-mmap.txt for more information.
==============================================================
numa_zonelist_order numa_zonelist_order
This sysctl is only for NUMA. This sysctl is only for NUMA.
@ -335,34 +421,199 @@ this is causing problems for your system/application.
============================================================== ==============================================================
nr_hugepages oom_dump_tasks
Change the minimum size of the hugepage pool. Enables a system-wide task dump (excluding kernel threads) to be
produced when the kernel performs an OOM-killing and includes such
information as pid, uid, tgid, vm size, rss, cpu, oom_adj score, and
name. This is helpful to determine why the OOM killer was invoked
and to identify the rogue task that caused it.
See Documentation/vm/hugetlbpage.txt If this is set to zero, this information is suppressed. On very
large systems with thousands of tasks it may not be feasible to dump
the memory state information for each one. Such systems should not
be forced to incur a performance penalty in OOM conditions when the
information may not be desired.
If this is set to non-zero, this information is shown whenever the
OOM killer actually kills a memory-hogging task.
The default value is 0.
============================================================== ==============================================================
nr_overcommit_hugepages oom_kill_allocating_task
Change the maximum size of the hugepage pool. The maximum is This enables or disables killing the OOM-triggering task in
nr_hugepages + nr_overcommit_hugepages. out-of-memory situations.
See Documentation/vm/hugetlbpage.txt If this is set to zero, the OOM killer will scan through the entire
tasklist and select a task based on heuristics to kill. This normally
selects a rogue memory-hogging task that frees up a large amount of
memory when killed.
If this is set to non-zero, the OOM killer simply kills the task that
triggered the out-of-memory condition. This avoids the expensive
tasklist scan.
If panic_on_oom is selected, it takes precedence over whatever value
is used in oom_kill_allocating_task.
The default value is 0.
============================================================== ==============================================================
nr_trim_pages overcommit_memory:
This is available only on NOMMU kernels. This value contains a flag that enables memory overcommitment.
This value adjusts the excess page trimming behaviour of power-of-2 aligned When this flag is 0, the kernel attempts to estimate the amount
NOMMU mmap allocations. of free memory left when userspace requests more memory.
A value of 0 disables trimming of allocations entirely, while a value of 1 When this flag is 1, the kernel pretends there is always enough
trims excess pages aggressively. Any value >= 1 acts as the watermark where memory until it actually runs out.
trimming of allocations is initiated.
The default value is 1. When this flag is 2, the kernel uses a "never overcommit"
policy that attempts to prevent any overcommit of memory.
See Documentation/nommu-mmap.txt for more information. This feature can be very useful because there are a lot of
programs that malloc() huge amounts of memory "just-in-case"
and don't use much of it.
The default value is 0.
See Documentation/vm/overcommit-accounting and
security/commoncap.c::cap_vm_enough_memory() for more information.
==============================================================
overcommit_ratio:
When overcommit_memory is set to 2, the committed address
space is not permitted to exceed swap plus this percentage
of physical RAM. See above.
==============================================================
page-cluster
page-cluster controls the number of pages which are written to swap in
a single attempt. The swap I/O size.
It is a logarithmic value - setting it to zero means "1 page", setting
it to 1 means "2 pages", setting it to 2 means "4 pages", etc.
The default value is three (eight pages at a time). There may be some
small benefits in tuning this to a different value if your workload is
swap-intensive.
=============================================================
panic_on_oom
This enables or disables panic on out-of-memory feature.
If this is set to 0, the kernel will kill some rogue process,
called oom_killer. Usually, oom_killer can kill rogue processes and
system will survive.
If this is set to 1, the kernel panics when out-of-memory happens.
However, if a process limits using nodes by mempolicy/cpusets,
and those nodes become memory exhaustion status, one process
may be killed by oom-killer. No panic occurs in this case.
Because other nodes' memory may be free. This means system total status
may be not fatal yet.
If this is set to 2, the kernel panics compulsorily even on the
above-mentioned.
The default value is 0.
1 and 2 are for failover of clustering. Please select either
according to your policy of failover.
=============================================================
percpu_pagelist_fraction
This is the fraction of pages at most (high mark pcp->high) in each zone that
are allocated for each per cpu page list. The min value for this is 8. It
means that we don't allow more than 1/8th of pages in each zone to be
allocated in any single per_cpu_pagelist. This entry only changes the value
of hot per cpu pagelists. User can specify a number like 100 to allocate
1/100th of each zone to each per cpu page list.
The batch value of each per cpu pagelist is also updated as a result. It is
set to pcp->high/4. The upper limit of batch is (PAGE_SHIFT * 8)
The initial value is zero. Kernel does not use this value at boot time to set
the high water marks for each per cpu page list.
==============================================================
stat_interval
The time interval between which vm statistics are updated. The default
is 1 second.
==============================================================
swappiness
This control is used to define how aggressive the kernel will swap
memory pages. Higher values will increase agressiveness, lower values
descrease the amount of swap.
The default value is 60.
==============================================================
vfs_cache_pressure
------------------
Controls the tendency of the kernel to reclaim the memory which is used for
caching of directory and inode objects.
At the default value of vfs_cache_pressure=100 the kernel will attempt to
reclaim dentries and inodes at a "fair" rate with respect to pagecache and
swapcache reclaim. Decreasing vfs_cache_pressure causes the kernel to prefer
to retain dentry and inode caches. Increasing vfs_cache_pressure beyond 100
causes the kernel to prefer to reclaim dentries and inodes.
==============================================================
zone_reclaim_mode:
Zone_reclaim_mode allows someone to set more or less aggressive approaches to
reclaim memory when a zone runs out of memory. If it is set to zero then no
zone reclaim occurs. Allocations will be satisfied from other zones / nodes
in the system.
This is value ORed together of
1 = Zone reclaim on
2 = Zone reclaim writes dirty pages out
4 = Zone reclaim swaps pages
zone_reclaim_mode is set during bootup to 1 if it is determined that pages
from remote zones will cause a measurable performance reduction. The
page allocator will then reclaim easily reusable pages (those page
cache pages that are currently not used) before allocating off node pages.
It may be beneficial to switch off zone reclaim if the system is
used for a file server and all of memory should be used for caching files
from disk. In that case the caching effect is more important than
data locality.
Allowing zone reclaim to write out pages stops processes that are
writing large amounts of data from dirtying pages on other nodes. Zone
reclaim will write out dirty pages if a zone fills up and so effectively
throttle the process. This may decrease the performance of a single process
since it cannot use all of system memory to buffer the outgoing writes
anymore but it preserve the memory on other nodes so that the performance
of other processes running on other nodes will not be affected.
Allowing regular swap effectively restricts allocations to the local
node unless explicitly overridden by memory policies or cpuset
configurations.
============ End of Document =================================

View File

@ -1,6 +1,5 @@
Linux Magic System Request Key Hacks Linux Magic System Request Key Hacks
Documentation for sysrq.c Documentation for sysrq.c
Last update: 2007-AUG-04
* What is the magic SysRq key? * What is the magic SysRq key?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@ -211,6 +210,24 @@ within a function called by handle_sysrq, you must be aware that you are in
a lock (you are also in an interrupt handler, which means don't sleep!), so a lock (you are also in an interrupt handler, which means don't sleep!), so
you must call __handle_sysrq_nolock instead. you must call __handle_sysrq_nolock instead.
* When I hit a SysRq key combination only the header appears on the console?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sysrq output is subject to the same console loglevel control as all
other console output. This means that if the kernel was booted 'quiet'
as is common on distro kernels the output may not appear on the actual
console, even though it will appear in the dmesg buffer, and be accessible
via the dmesg command and to the consumers of /proc/kmsg. As a specific
exception the header line from the sysrq command is passed to all console
consumers as if the current loglevel was maximum. If only the header
is emitted it is almost certain that the kernel loglevel is too low.
Should you require the output on the console channel then you will need
to temporarily up the console loglevel using alt-sysrq-8 or:
echo 8 > /proc/sysrq-trigger
Remember to return the loglevel to normal after triggering the sysrq
command you are interested in.
* I have more questions, who can I ask? * I have more questions, who can I ask?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
And I'll answer any questions about the registration system you got, also And I'll answer any questions about the registration system you got, also

View File

@ -78,12 +78,10 @@ to view your kernel log and look for "mmiotrace has lost events" warning. If
events were lost, the trace is incomplete. You should enlarge the buffers and events were lost, the trace is incomplete. You should enlarge the buffers and
try again. Buffers are enlarged by first seeing how large the current buffers try again. Buffers are enlarged by first seeing how large the current buffers
are: are:
$ cat /debug/tracing/trace_entries $ cat /debug/tracing/buffer_size_kb
gives you a number. Approximately double this number and write it back, for gives you a number. Approximately double this number and write it back, for
instance: instance:
$ echo 0 > /debug/tracing/tracing_enabled $ echo 128000 > /debug/tracing/buffer_size_kb
$ echo 128000 > /debug/tracing/trace_entries
$ echo 1 > /debug/tracing/tracing_enabled
Then start again from the top. Then start again from the top.
If you are doing a trace for a driver project, e.g. Nouveau, you should also If you are doing a trace for a driver project, e.g. Nouveau, you should also

View File

@ -6,8 +6,9 @@ in the kernel usb programming guide (kerneldoc, from the source code).
API OVERVIEW API OVERVIEW
The big picture is that USB drivers can continue to ignore most DMA issues, The big picture is that USB drivers can continue to ignore most DMA issues,
though they still must provide DMA-ready buffers (see DMA-mapping.txt). though they still must provide DMA-ready buffers (see
That's how they've worked through the 2.4 (and earlier) kernels. Documentation/PCI/PCI-DMA-mapping.txt). That's how they've worked through
the 2.4 (and earlier) kernels.
OR: they can now be DMA-aware. OR: they can now be DMA-aware.
@ -62,8 +63,8 @@ and effects like cache-trashing can impose subtle penalties.
force a consistent memory access ordering by using memory barriers. It's force a consistent memory access ordering by using memory barriers. It's
not using a streaming DMA mapping, so it's good for small transfers on not using a streaming DMA mapping, so it's good for small transfers on
systems where the I/O would otherwise thrash an IOMMU mapping. (See systems where the I/O would otherwise thrash an IOMMU mapping. (See
Documentation/DMA-mapping.txt for definitions of "coherent" and "streaming" Documentation/PCI/PCI-DMA-mapping.txt for definitions of "coherent" and
DMA mappings.) "streaming" DMA mappings.)
Asking for 1/Nth of a page (as well as asking for N pages) is reasonably Asking for 1/Nth of a page (as well as asking for N pages) is reasonably
space-efficient. space-efficient.
@ -93,7 +94,7 @@ WORKING WITH EXISTING BUFFERS
Existing buffers aren't usable for DMA without first being mapped into the Existing buffers aren't usable for DMA without first being mapped into the
DMA address space of the device. However, most buffers passed to your DMA address space of the device. However, most buffers passed to your
driver can safely be used with such DMA mapping. (See the first section driver can safely be used with such DMA mapping. (See the first section
of DMA-mapping.txt, titled "What memory is DMA-able?") of Documentation/PCI/PCI-DMA-mapping.txt, titled "What memory is DMA-able?")
- When you're using scatterlists, you can map everything at once. On some - When you're using scatterlists, you can map everything at once. On some
systems, this kicks in an IOMMU and turns the scatterlists into single systems, this kicks in an IOMMU and turns the scatterlists into single

View File

@ -4,12 +4,21 @@
* *
* Compile with: * Compile with:
* gcc -s -Wall -Wstrict-prototypes v4lgrab.c -o v4lgrab * gcc -s -Wall -Wstrict-prototypes v4lgrab.c -o v4lgrab
* Use as: * Use as:
* v4lgrab >image.ppm * v4lgrab >image.ppm
* *
* Copyright (C) 1998-05-03, Phil Blundell <philb@gnu.org> * Copyright (C) 1998-05-03, Phil Blundell <philb@gnu.org>
* Copied from http://www.tazenda.demon.co.uk/phil/vgrabber.c * Copied from http://www.tazenda.demon.co.uk/phil/vgrabber.c
* with minor modifications (Dave Forrest, drf5n@virginia.edu). * with minor modifications (Dave Forrest, drf5n@virginia.edu).
*
*
* For some cameras you may need to pre-load libv4l to perform
* the necessary decompression, e.g.:
*
* export LD_PRELOAD=/usr/lib/libv4l/v4l1compat.so
* ./v4lgrab >image.ppm
*
* see http://hansdegoede.livejournal.com/3636.html for details.
* *
*/ */
@ -24,7 +33,7 @@
#include <linux/types.h> #include <linux/types.h>
#include <linux/videodev.h> #include <linux/videodev.h>
#define FILE "/dev/video0" #define VIDEO_DEV "/dev/video0"
/* Stole this from tvset.c */ /* Stole this from tvset.c */
@ -90,7 +99,7 @@ int get_brightness_adj(unsigned char *image, long size, int *brightness) {
int main(int argc, char ** argv) int main(int argc, char ** argv)
{ {
int fd = open(FILE, O_RDONLY), f; int fd = open(VIDEO_DEV, O_RDONLY), f;
struct video_capability cap; struct video_capability cap;
struct video_window win; struct video_window win;
struct video_picture vpic; struct video_picture vpic;
@ -100,13 +109,13 @@ int main(int argc, char ** argv)
unsigned int i, src_depth; unsigned int i, src_depth;
if (fd < 0) { if (fd < 0) {
perror(FILE); perror(VIDEO_DEV);
exit(1); exit(1);
} }
if (ioctl(fd, VIDIOCGCAP, &cap) < 0) { if (ioctl(fd, VIDIOCGCAP, &cap) < 0) {
perror("VIDIOGCAP"); perror("VIDIOGCAP");
fprintf(stderr, "(" FILE " not a video4linux device?)\n"); fprintf(stderr, "(" VIDEO_DEV " not a video4linux device?)\n");
close(fd); close(fd);
exit(1); exit(1);
} }

View File

@ -158,7 +158,7 @@ Offset Proto Name Meaning
0202/4 2.00+ header Magic signature "HdrS" 0202/4 2.00+ header Magic signature "HdrS"
0206/2 2.00+ version Boot protocol version supported 0206/2 2.00+ version Boot protocol version supported
0208/4 2.00+ realmode_swtch Boot loader hook (see below) 0208/4 2.00+ realmode_swtch Boot loader hook (see below)
020C/2 2.00+ start_sys The load-low segment (0x1000) (obsolete) 020C/2 2.00+ start_sys_seg The load-low segment (0x1000) (obsolete)
020E/2 2.00+ kernel_version Pointer to kernel version string 020E/2 2.00+ kernel_version Pointer to kernel version string
0210/1 2.00+ type_of_loader Boot loader identifier 0210/1 2.00+ type_of_loader Boot loader identifier
0211/1 2.00+ loadflags Boot protocol option flags 0211/1 2.00+ loadflags Boot protocol option flags
@ -170,10 +170,11 @@ Offset Proto Name Meaning
0224/2 2.01+ heap_end_ptr Free memory after setup end 0224/2 2.01+ heap_end_ptr Free memory after setup end
0226/2 N/A pad1 Unused 0226/2 N/A pad1 Unused
0228/4 2.02+ cmd_line_ptr 32-bit pointer to the kernel command line 0228/4 2.02+ cmd_line_ptr 32-bit pointer to the kernel command line
022C/4 2.03+ initrd_addr_max Highest legal initrd address 022C/4 2.03+ ramdisk_max Highest legal initrd address
0230/4 2.05+ kernel_alignment Physical addr alignment required for kernel 0230/4 2.05+ kernel_alignment Physical addr alignment required for kernel
0234/1 2.05+ relocatable_kernel Whether kernel is relocatable or not 0234/1 2.05+ relocatable_kernel Whether kernel is relocatable or not
0235/3 N/A pad2 Unused 0235/1 N/A pad2 Unused
0236/2 N/A pad3 Unused
0238/4 2.06+ cmdline_size Maximum size of the kernel command line 0238/4 2.06+ cmdline_size Maximum size of the kernel command line
023C/4 2.07+ hardware_subarch Hardware subarchitecture 023C/4 2.07+ hardware_subarch Hardware subarchitecture
0240/8 2.07+ hardware_subarch_data Subarchitecture-specific data 0240/8 2.07+ hardware_subarch_data Subarchitecture-specific data
@ -299,14 +300,14 @@ Protocol: 2.00+
e.g. 0x0204 for version 2.04, and 0x0a11 for a hypothetical version e.g. 0x0204 for version 2.04, and 0x0a11 for a hypothetical version
10.17. 10.17.
Field name: readmode_swtch Field name: realmode_swtch
Type: modify (optional) Type: modify (optional)
Offset/size: 0x208/4 Offset/size: 0x208/4
Protocol: 2.00+ Protocol: 2.00+
Boot loader hook (see ADVANCED BOOT LOADER HOOKS below.) Boot loader hook (see ADVANCED BOOT LOADER HOOKS below.)
Field name: start_sys Field name: start_sys_seg
Type: read Type: read
Offset/size: 0x20c/2 Offset/size: 0x20c/2
Protocol: 2.00+ Protocol: 2.00+
@ -468,7 +469,7 @@ Protocol: 2.02+
zero, the kernel will assume that your boot loader does not support zero, the kernel will assume that your boot loader does not support
the 2.02+ protocol. the 2.02+ protocol.
Field name: initrd_addr_max Field name: ramdisk_max
Type: read Type: read
Offset/size: 0x22c/4 Offset/size: 0x22c/4
Protocol: 2.03+ Protocol: 2.03+
@ -542,7 +543,10 @@ Protocol: 2.08+
The payload may be compressed. The format of both the compressed and The payload may be compressed. The format of both the compressed and
uncompressed data should be determined using the standard magic uncompressed data should be determined using the standard magic
numbers. Currently only gzip compressed ELF is used. numbers. The currently supported compression formats are gzip
(magic numbers 1F 8B or 1F 9E), bzip2 (magic number 42 5A) and LZMA
(magic number 5D 00). The uncompressed payload is currently always ELF
(magic number 7F 45 4C 46).
Field name: payload_length Field name: payload_length
Type: read Type: read

View File

@ -0,0 +1,101 @@
Mini-HOWTO for using the earlyprintk=dbgp boot option with a
USB2 Debug port key and a debug cable, on x86 systems.
You need two computers, the 'USB debug key' special gadget and
and two USB cables, connected like this:
[host/target] <-------> [USB debug key] <-------> [client/console]
1. There are three specific hardware requirements:
a.) Host/target system needs to have USB debug port capability.
You can check this capability by looking at a 'Debug port' bit in
the lspci -vvv output:
# lspci -vvv
...
00:1d.7 USB Controller: Intel Corporation 82801H (ICH8 Family) USB2 EHCI Controller #1 (rev 03) (prog-if 20 [EHCI])
Subsystem: Lenovo ThinkPad T61
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx-
Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin D routed to IRQ 19
Region 0: Memory at fe227000 (32-bit, non-prefetchable) [size=1K]
Capabilities: [50] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=375mA PME(D0+,D1-,D2-,D3hot+,D3cold+)
Status: D0 PME-Enable- DSel=0 DScale=0 PME+
Capabilities: [58] Debug port: BAR=1 offset=00a0
^^^^^^^^^^^ <==================== [ HERE ]
Kernel driver in use: ehci_hcd
Kernel modules: ehci-hcd
...
( If your system does not list a debug port capability then you probably
wont be able to use the USB debug key. )
b.) You also need a Netchip USB debug cable/key:
http://www.plxtech.com/products/NET2000/NET20DC/default.asp
This is a small blue plastic connector with two USB connections,
it draws power from its USB connections.
c.) Thirdly, you need a second client/console system with a regular USB port.
2. Software requirements:
a.) On the host/target system:
You need to enable the following kernel config option:
CONFIG_EARLY_PRINTK_DBGP=y
And you need to add the boot command line: "earlyprintk=dbgp".
(If you are using Grub, append it to the 'kernel' line in
/etc/grub.conf)
NOTE: normally earlyprintk console gets turned off once the
regular console is alive - use "earlyprintk=dbgp,keep" to keep
this channel open beyond early bootup. This can be useful for
debugging crashes under Xorg, etc.
b.) On the client/console system:
You should enable the following kernel config option:
CONFIG_USB_SERIAL_DEBUG=y
On the next bootup with the modified kernel you should
get a /dev/ttyUSBx device(s).
Now this channel of kernel messages is ready to be used: start
your favorite terminal emulator (minicom, etc.) and set
it up to use /dev/ttyUSB0 - or use a raw 'cat /dev/ttyUSBx' to
see the raw output.
c.) On Nvidia Southbridge based systems: the kernel will try to probe
and find out which port has debug device connected.
3. Testing that it works fine:
You can test the output by using earlyprintk=dbgp,keep and provoking
kernel messages on the host/target system. You can provoke a harmless
kernel message by for example doing:
echo h > /proc/sysrq-trigger
On the host/target system you should see this help line in "dmesg" output:
SysRq : HELP : loglevel(0-9) reBoot Crashdump terminate-all-tasks(E) memory-full-oom-kill(F) kill-all-tasks(I) saK show-backtrace-all-active-cpus(L) show-memory-usage(M) nice-all-RT-tasks(N) powerOff show-registers(P) show-all-timers(Q) unRaw Sync show-task-states(T) Unmount show-blocked-tasks(W) dump-ftrace-buffer(Z)
On the client/console system do:
cat /dev/ttyUSB0
And you should see the help line above displayed shortly after you've
provoked it on the host system.
If it does not work then please ask about it on the linux-kernel@vger.kernel.org
mailing list or contact the x86 maintainers.

View File

@ -692,6 +692,13 @@ M: kernel@wantstofly.org
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only) L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
S: Maintained S: Maintained
ARM/NUVOTON W90X900 ARM ARCHITECTURE
P: Wan ZongShun
M: mcuos.com@gmail.com
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
W: http://www.mcuos.com
S: Maintained
ARPD SUPPORT ARPD SUPPORT
P: Jonathan Layes P: Jonathan Layes
L: netdev@vger.kernel.org L: netdev@vger.kernel.org
@ -911,7 +918,7 @@ S: Maintained
BLACKFIN ARCHITECTURE BLACKFIN ARCHITECTURE
P: Bryan Wu P: Bryan Wu
M: cooloney@kernel.org M: cooloney@kernel.org
L: uclinux-dist-devel@blackfin.uclinux.org (subscribers-only) L: uclinux-dist-devel@blackfin.uclinux.org
W: http://blackfin.uclinux.org W: http://blackfin.uclinux.org
S: Supported S: Supported
@ -1021,6 +1028,14 @@ M: mb@bu3sch.de
W: http://bu3sch.de/btgpio.php W: http://bu3sch.de/btgpio.php
S: Maintained S: Maintained
BTRFS FILE SYSTEM
P: Chris Mason
M: chris.mason@oracle.com
L: linux-btrfs@vger.kernel.org
W: http://btrfs.wiki.kernel.org/
T: git kernel.org:/pub/scm/linux/kernel/git/mason/btrfs-unstable.git
S: Maintained
BTTV VIDEO4LINUX DRIVER BTTV VIDEO4LINUX DRIVER
P: Mauro Carvalho Chehab P: Mauro Carvalho Chehab
M: mchehab@infradead.org M: mchehab@infradead.org
@ -1194,6 +1209,8 @@ S: Supported
CONTROL GROUPS (CGROUPS) CONTROL GROUPS (CGROUPS)
P: Paul Menage P: Paul Menage
M: menage@google.com M: menage@google.com
P: Li Zefan
M: lizf@cn.fujitsu.com
L: containers@lists.linux-foundation.org L: containers@lists.linux-foundation.org
S: Maintained S: Maintained
@ -1581,6 +1598,13 @@ L: bluesmoke-devel@lists.sourceforge.net
W: bluesmoke.sourceforge.net W: bluesmoke.sourceforge.net
S: Maintained S: Maintained
EDAC-I5400
P: Mauro Carvalho Chehab
M: mchehab@redhat.com
L: bluesmoke-devel@lists.sourceforge.net
W: bluesmoke.sourceforge.net
S: Maintained
EDAC-I82975X EDAC-I82975X
P: Ranganathan Desikan P: Ranganathan Desikan
P: Arvind R. P: Arvind R.
@ -1814,6 +1838,14 @@ M: hch@infradead.org
W: ftp://ftp.openlinux.org/pub/people/hch/vxfs W: ftp://ftp.openlinux.org/pub/people/hch/vxfs
S: Maintained S: Maintained
FREEZER
P: Pavel Machek
M: pavel@suse.cz
P: Rafael J. Wysocki
M: rjw@sisk.pl
L: linux-pm@lists.linux-foundation.org
S: Supported
FTRACE FTRACE
P: Steven Rostedt P: Steven Rostedt
M: rostedt@goodmis.org M: rostedt@goodmis.org
@ -1880,10 +1912,10 @@ W: http://gigaset307x.sourceforge.net/
S: Maintained S: Maintained
HARD DRIVE ACTIVE PROTECTION SYSTEM (HDAPS) DRIVER HARD DRIVE ACTIVE PROTECTION SYSTEM (HDAPS) DRIVER
P: Robert Love P: Frank Seidel
M: rlove@rlove.org M: frank@f-seidel.de
M: linux-kernel@vger.kernel.org L: lm-sensors@lm-sensors.org
W: http://www.kernel.org/pub/linux/kernel/people/rml/hdaps/ W: http://www.kernel.org/pub/linux/kernel/people/fseidel/hdaps/
S: Maintained S: Maintained
GSPCA FINEPIX SUBDRIVER GSPCA FINEPIX SUBDRIVER
@ -1976,7 +2008,7 @@ S: Maintained
HIBERNATION (aka Software Suspend, aka swsusp) HIBERNATION (aka Software Suspend, aka swsusp)
P: Pavel Machek P: Pavel Machek
M: pavel@suse.cz M: pavel@ucw.cz
P: Rafael J. Wysocki P: Rafael J. Wysocki
M: rjw@sisk.pl M: rjw@sisk.pl
L: linux-pm@lists.linux-foundation.org L: linux-pm@lists.linux-foundation.org
@ -2087,7 +2119,8 @@ M: khali@linux-fr.org
P: Ben Dooks (embedded platforms) P: Ben Dooks (embedded platforms)
M: ben-linux@fluff.org M: ben-linux@fluff.org
L: linux-i2c@vger.kernel.org L: linux-i2c@vger.kernel.org
T: quilt http://khali.linux-fr.org/devel/linux-2.6/jdelvare-i2c/ W: http://i2c.wiki.kernel.org/
T: quilt kernel.org/pub/linux/kernel/people/jdelvare/linux-2.6/jdelvare-i2c/
S: Maintained S: Maintained
I2C-TINY-USB DRIVER I2C-TINY-USB DRIVER
@ -2196,7 +2229,7 @@ P: Sean Hefty
M: sean.hefty@intel.com M: sean.hefty@intel.com
P: Hal Rosenstock P: Hal Rosenstock
M: hal.rosenstock@gmail.com M: hal.rosenstock@gmail.com
L: general@lists.openfabrics.org L: general@lists.openfabrics.org (moderated for non-subscribers)
W: http://www.openib.org/ W: http://www.openib.org/
T: git kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git T: git kernel.org:/pub/scm/linux/kernel/git/roland/infiniband.git
S: Supported S: Supported
@ -2431,7 +2464,7 @@ S: Maintained
ISDN SUBSYSTEM ISDN SUBSYSTEM
P: Karsten Keil P: Karsten Keil
M: kkeil@suse.de M: isdn@linux-pingi.de
L: isdn4linux@listserv.isdn4linux.de (subscribers-only) L: isdn4linux@listserv.isdn4linux.de (subscribers-only)
W: http://www.isdn4linux.de W: http://www.isdn4linux.de
T: git kernel.org:/pub/scm/linux/kernel/kkeil/isdn-2.6.git T: git kernel.org:/pub/scm/linux/kernel/kkeil/isdn-2.6.git
@ -2820,8 +2853,6 @@ S: Maintained
MAC80211 MAC80211
P: Johannes Berg P: Johannes Berg
M: johannes@sipsolutions.net M: johannes@sipsolutions.net
P: Michael Wu
M: flamingice@sourmilk.net
L: linux-wireless@vger.kernel.org L: linux-wireless@vger.kernel.org
W: http://linuxwireless.org/ W: http://linuxwireless.org/
T: git kernel.org:/pub/scm/linux/kernel/git/linville/wireless-2.6.git T: git kernel.org:/pub/scm/linux/kernel/git/linville/wireless-2.6.git
@ -3303,8 +3334,8 @@ P: Jeremy Fitzhardinge
M: jeremy@xensource.com M: jeremy@xensource.com
P: Chris Wright P: Chris Wright
M: chrisw@sous-sol.org M: chrisw@sous-sol.org
P: Zachary Amsden P: Alok Kataria
M: zach@vmware.com M: akataria@vmware.com
P: Rusty Russell P: Rusty Russell
M: rusty@rustcorp.com.au M: rusty@rustcorp.com.au
L: virtualization@lists.osdl.org L: virtualization@lists.osdl.org
@ -3515,6 +3546,12 @@ S: Maintained
PXA MMCI DRIVER PXA MMCI DRIVER
S: Orphan S: Orphan
PXA RTC DRIVER
P: Robert Jarzmik
M: robert.jarzmik@free.fr
L: rtc-linux@googlegroups.com
S: Maintained
QLOGIC QLA2XXX FC-SCSI DRIVER QLOGIC QLA2XXX FC-SCSI DRIVER
P: Andrew Vasquez P: Andrew Vasquez
M: linux-driver@qlogic.com M: linux-driver@qlogic.com
@ -4142,7 +4179,7 @@ SUSPEND TO RAM
P: Len Brown P: Len Brown
M: len.brown@intel.com M: len.brown@intel.com
P: Pavel Machek P: Pavel Machek
M: pavel@suse.cz M: pavel@ucw.cz
P: Rafael J. Wysocki P: Rafael J. Wysocki
M: rjw@sisk.pl M: rjw@sisk.pl
L: linux-pm@lists.linux-foundation.org L: linux-pm@lists.linux-foundation.org
@ -4263,8 +4300,8 @@ P: Rajiv Andrade
M: srajiv@linux.vnet.ibm.com M: srajiv@linux.vnet.ibm.com
W: http://tpmdd.sourceforge.net W: http://tpmdd.sourceforge.net
P: Marcel Selhorst P: Marcel Selhorst
M: tpm@selhorst.net M: m.selhorst@sirrix.com
W: http://www.prosec.rub.de/tpm/ W: http://www.sirrix.com
L: tpmdd-devel@lists.sourceforge.net (moderated for non-subscribers) L: tpmdd-devel@lists.sourceforge.net (moderated for non-subscribers)
S: Maintained S: Maintained
@ -4827,6 +4864,7 @@ P: Ingo Molnar
M: mingo@redhat.com M: mingo@redhat.com
P: H. Peter Anvin P: H. Peter Anvin
M: hpa@zytor.com M: hpa@zytor.com
M: x86@kernel.org
L: linux-kernel@vger.kernel.org L: linux-kernel@vger.kernel.org
T: git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-x86.git T: git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-x86.git
S: Maintained S: Maintained
@ -4842,11 +4880,11 @@ S: Supported
XFS FILESYSTEM XFS FILESYSTEM
P: Silicon Graphics Inc P: Silicon Graphics Inc
P: Tim Shimmin P: Bill O'Donnell
M: xfs-masters@oss.sgi.com M: xfs-masters@oss.sgi.com
L: xfs@oss.sgi.com L: xfs@oss.sgi.com
W: http://oss.sgi.com/projects/xfs W: http://oss.sgi.com/projects/xfs
T: git git://oss.sgi.com:8090/xfs/xfs-2.6.git T: git://oss.sgi.com/xfs/xfs.git
S: Supported S: Supported
XILINX SYSTEMACE DRIVER XILINX SYSTEMACE DRIVER
@ -4893,11 +4931,11 @@ L: zd1211-devs@lists.sourceforge.net (subscribers-only)
S: Maintained S: Maintained
ZR36067 VIDEO FOR LINUX DRIVER ZR36067 VIDEO FOR LINUX DRIVER
P: Ronald Bultje
M: rbultje@ronald.bitfreak.net
L: mjpeg-users@lists.sourceforge.net L: mjpeg-users@lists.sourceforge.net
L: linux-media@vger.kernel.org
W: http://mjpeg.sourceforge.net/driver-zoran/ W: http://mjpeg.sourceforge.net/driver-zoran/
S: Maintained T: Mercurial http://linuxtv.org/hg/v4l-dvb
S: Odd Fixes
ZS DECSTATION Z85C30 SERIAL DRIVER ZS DECSTATION Z85C30 SERIAL DRIVER
P: Maciej W. Rozycki P: Maciej W. Rozycki

View File

@ -1,7 +1,7 @@
VERSION = 2 VERSION = 2
PATCHLEVEL = 6 PATCHLEVEL = 6
SUBLEVEL = 29 SUBLEVEL = 29
EXTRAVERSION = -rc1 EXTRAVERSION = -rc7
NAME = Erotic Pickled Herring NAME = Erotic Pickled Herring
# *DOCUMENTATION* # *DOCUMENTATION*
@ -213,6 +213,10 @@ endif
# Where to locate arch specific headers # Where to locate arch specific headers
hdr-arch := $(SRCARCH) hdr-arch := $(SRCARCH)
ifeq ($(ARCH),m68knommu)
hdr-arch := m68k
endif
KCONFIG_CONFIG ?= .config KCONFIG_CONFIG ?= .config
# SHELL used by kbuild # SHELL used by kbuild
@ -385,6 +389,7 @@ PHONY += outputmakefile
# output directory. # output directory.
outputmakefile: outputmakefile:
ifneq ($(KBUILD_SRC),) ifneq ($(KBUILD_SRC),)
$(Q)ln -fsn $(srctree) source
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \ $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \
$(srctree) $(objtree) $(VERSION) $(PATCHLEVEL) $(srctree) $(objtree) $(VERSION) $(PATCHLEVEL)
endif endif
@ -528,8 +533,9 @@ KBUILD_CFLAGS += $(call cc-option,-Wframe-larger-than=${CONFIG_FRAME_WARN})
endif endif
# Force gcc to behave correct even for buggy distributions # Force gcc to behave correct even for buggy distributions
# Arch Makefiles may override this setting ifndef CONFIG_CC_STACKPROTECTOR
KBUILD_CFLAGS += $(call cc-option, -fno-stack-protector) KBUILD_CFLAGS += $(call cc-option, -fno-stack-protector)
endif
ifdef CONFIG_FRAME_POINTER ifdef CONFIG_FRAME_POINTER
KBUILD_CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls KBUILD_CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls
@ -606,25 +612,20 @@ export INSTALL_PATH ?= /boot
MODLIB = $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE) MODLIB = $(INSTALL_MOD_PATH)/lib/modules/$(KERNELRELEASE)
export MODLIB export MODLIB
strip-symbols := $(srctree)/scripts/strip-symbols \
$(wildcard $(srctree)/arch/$(ARCH)/scripts/strip-symbols)
# #
# INSTALL_MOD_STRIP, if defined, will cause modules to be stripped while # INSTALL_MOD_STRIP, if defined, will cause modules to be
# they get installed. If INSTALL_MOD_STRIP is '1', then the default # stripped after they are installed. If INSTALL_MOD_STRIP is '1', then
# options (see below) will be used. Otherwise, INSTALL_MOD_STRIP will # the default option --strip-debug will be used. Otherwise,
# be used as the option(s) to the objcopy command. # INSTALL_MOD_STRIP will used as the options to the strip command.
ifdef INSTALL_MOD_STRIP ifdef INSTALL_MOD_STRIP
ifeq ($(INSTALL_MOD_STRIP),1) ifeq ($(INSTALL_MOD_STRIP),1)
mod_strip_cmd = $(OBJCOPY) --strip-debug mod_strip_cmd = $(STRIP) --strip-debug
ifeq ($(CONFIG_KALLSYMS_ALL),$(CONFIG_KALLSYMS_STRIP_GENERATED))
mod_strip_cmd += --wildcard $(addprefix --strip-symbols ,$(strip-symbols))
endif
else else
mod_strip_cmd = $(OBJCOPY) $(INSTALL_MOD_STRIP) mod_strip_cmd = $(STRIP) $(INSTALL_MOD_STRIP)
endif # INSTALL_MOD_STRIP=1 endif # INSTALL_MOD_STRIP=1
else else
mod_strip_cmd = false mod_strip_cmd = true
endif # INSTALL_MOD_STRIP endif # INSTALL_MOD_STRIP
export mod_strip_cmd export mod_strip_cmd
@ -754,7 +755,6 @@ last_kallsyms := 2
endif endif
kallsyms.o := .tmp_kallsyms$(last_kallsyms).o kallsyms.o := .tmp_kallsyms$(last_kallsyms).o
kallsyms.h := $(wildcard include/config/kallsyms/*.h) $(wildcard include/config/kallsyms/*/*.h)
define verify_kallsyms define verify_kallsyms
$(Q)$(if $($(quiet)cmd_sysmap), \ $(Q)$(if $($(quiet)cmd_sysmap), \
@ -779,41 +779,24 @@ endef
# Generate .S file with all kernel symbols # Generate .S file with all kernel symbols
quiet_cmd_kallsyms = KSYM $@ quiet_cmd_kallsyms = KSYM $@
cmd_kallsyms = { test $* -eq 0 || $(NM) -n $<; } \ cmd_kallsyms = $(NM) -n $< | $(KALLSYMS) \
| $(KALLSYMS) $(if $(CONFIG_KALLSYMS_ALL),--all-symbols) >$@ $(if $(CONFIG_KALLSYMS_ALL),--all-symbols) > $@
quiet_cmd_kstrip = STRIP $@ .tmp_kallsyms1.o .tmp_kallsyms2.o .tmp_kallsyms3.o: %.o: %.S scripts FORCE
cmd_kstrip = $(OBJCOPY) --wildcard $(addprefix --strip$(if $(CONFIG_RELOCATABLE),-unneeded)-symbols ,$(filter %/scripts/strip-symbols,$^)) $< $@
$(foreach n,0 1 2 3,.tmp_kallsyms$(n).o): KBUILD_AFLAGS += -Wa,--strip-local-absolute
$(foreach n,0 1 2 3,.tmp_kallsyms$(n).o): %.o: %.S scripts FORCE
$(call if_changed_dep,as_o_S) $(call if_changed_dep,as_o_S)
ifeq ($(CONFIG_KALLSYMS_STRIP_GENERATED),y) .tmp_kallsyms%.S: .tmp_vmlinux% $(KALLSYMS)
strip-ext := .stripped
endif
.tmp_kallsyms%.S: .tmp_vmlinux%$(strip-ext) $(KALLSYMS) $(kallsyms.h)
$(call cmd,kallsyms) $(call cmd,kallsyms)
# make -jN seems to have problems with intermediate files, see bug #3330.
.SECONDARY: $(foreach n,1 2 3,.tmp_vmlinux$(n).stripped)
.tmp_vmlinux%.stripped: .tmp_vmlinux% $(strip-symbols) $(kallsyms.h)
$(call cmd,kstrip)
ifneq ($(CONFIG_DEBUG_INFO),y)
.tmp_vmlinux%: LDFLAGS_vmlinux += -S
endif
# .tmp_vmlinux1 must be complete except kallsyms, so update vmlinux version # .tmp_vmlinux1 must be complete except kallsyms, so update vmlinux version
.tmp_vmlinux%: $(vmlinux-lds) $(vmlinux-all) FORCE .tmp_vmlinux1: $(vmlinux-lds) $(vmlinux-all) FORCE
$(if $(filter 1,$*),$(call if_changed_rule,ksym_ld),$(call if_changed,vmlinux__)) $(call if_changed_rule,ksym_ld)
.tmp_vmlinux0$(strip-ext): .tmp_vmlinux2: $(vmlinux-lds) $(vmlinux-all) .tmp_kallsyms1.o FORCE
$(Q)echo "placeholder" >$@ $(call if_changed,vmlinux__)
.tmp_vmlinux1: .tmp_kallsyms0.o .tmp_vmlinux3: $(vmlinux-lds) $(vmlinux-all) .tmp_kallsyms2.o FORCE
.tmp_vmlinux2: .tmp_kallsyms1.o $(call if_changed,vmlinux__)
.tmp_vmlinux3: .tmp_kallsyms2.o
# Needs to visit scripts/ before $(KALLSYMS) can be used. # Needs to visit scripts/ before $(KALLSYMS) can be used.
$(KALLSYMS): scripts ; $(KALLSYMS): scripts ;
@ -965,7 +948,6 @@ ifneq ($(KBUILD_SRC),)
mkdir -p include2; \ mkdir -p include2; \
ln -fsn $(srctree)/include/asm-$(SRCARCH) include2/asm; \ ln -fsn $(srctree)/include/asm-$(SRCARCH) include2/asm; \
fi fi
ln -fsn $(srctree) source
endif endif
# prepare2 creates a makefile if using a separate output directory # prepare2 creates a makefile if using a separate output directory

2
README
View File

@ -188,7 +188,7 @@ CONFIGURING the kernel:
values to random values. values to random values.
You can find more information on using the Linux kernel config tools You can find more information on using the Linux kernel config tools
in Documentation/kbuild/make-configs.txt. in Documentation/kbuild/kconfig.txt.
NOTES on "make config": NOTES on "make config":
- having unnecessary drivers will make the kernel bigger, and can - having unnecessary drivers will make the kernel bigger, and can

View File

@ -62,6 +62,9 @@ config HAVE_EFFICIENT_UNALIGNED_ACCESS
See Documentation/unaligned-memory-access.txt for more See Documentation/unaligned-memory-access.txt for more
information on the topic of unaligned memory accesses. information on the topic of unaligned memory accesses.
config HAVE_SYSCALL_WRAPPERS
bool
config KRETPROBES config KRETPROBES
def_bool y def_bool y
depends on KPROBES && HAVE_KRETPROBES depends on KPROBES && HAVE_KRETPROBES

View File

@ -8,6 +8,7 @@ config ALPHA
select HAVE_AOUT select HAVE_AOUT
select HAVE_IDE select HAVE_IDE
select HAVE_OPROFILE select HAVE_OPROFILE
select HAVE_SYSCALL_WRAPPERS
help help
The Alpha is a 64-bit general-purpose processor designed and The Alpha is a 64-bit general-purpose processor designed and
marketed by the Digital Equipment Corporation of blessed memory, marketed by the Digital Equipment Corporation of blessed memory,

View File

@ -9,4 +9,3 @@ unifdef-y += console.h
unifdef-y += fpu.h unifdef-y += fpu.h
unifdef-y += sysinfo.h unifdef-y += sysinfo.h
unifdef-y += compiler.h unifdef-y += compiler.h
unifdef-y += swab.h

View File

@ -8,17 +8,12 @@
/* ??? Would be nice to use .gprel32 here, but we can't be sure that the /* ??? Would be nice to use .gprel32 here, but we can't be sure that the
function loaded the GP, so this could fail in modules. */ function loaded the GP, so this could fail in modules. */
static inline void ATTRIB_NORET __BUG(const char *file, int line) #define BUG() do { \
{ __asm__ __volatile__( \
__asm__ __volatile__( "call_pal %0 # bugchk\n\t" \
"call_pal %0 # bugchk\n\t" ".long %1\n\t.8byte %2" \
".long %1\n\t.8byte %2" : : "i"(PAL_bugchk), "i"(__LINE__), "i"(__FILE__)); \
: : "i" (PAL_bugchk), "i"(line), "i"(file)); for ( ; ; ); } while (0)
for ( ; ; )
;
}
#define BUG() __BUG(__FILE__, __LINE__)
#define HAVE_ARCH_BUG #define HAVE_ARCH_BUG
#endif #endif

View File

@ -1,7 +1,6 @@
#ifndef _ALPHA_BYTEORDER_H #ifndef _ALPHA_BYTEORDER_H
#define _ALPHA_BYTEORDER_H #define _ALPHA_BYTEORDER_H
#include <asm/swab.h>
#include <linux/byteorder/little_endian.h> #include <linux/byteorder/little_endian.h>
#endif /* _ALPHA_BYTEORDER_H */ #endif /* _ALPHA_BYTEORDER_H */

View File

@ -29,6 +29,8 @@
#else /* no PCI - no IOMMU. */ #else /* no PCI - no IOMMU. */
#include <asm/io.h> /* for virt_to_phys() */
struct scatterlist; struct scatterlist;
void *dma_alloc_coherent(struct device *dev, size_t size, void *dma_alloc_coherent(struct device *dev, size_t size,
dma_addr_t *dma_handle, gfp_t gfp); dma_addr_t *dma_handle, gfp_t gfp);

View File

@ -21,6 +21,7 @@ struct pci_dev;
struct pci_ops; struct pci_ops;
struct pci_controller; struct pci_controller;
struct _alpha_agp_info; struct _alpha_agp_info;
struct rtc_time;
struct alpha_machine_vector struct alpha_machine_vector
{ {
@ -94,6 +95,9 @@ struct alpha_machine_vector
struct _alpha_agp_info *(*agp_info)(void); struct _alpha_agp_info *(*agp_info)(void);
unsigned int (*rtc_get_time)(struct rtc_time *);
int (*rtc_set_time)(struct rtc_time *);
const char *vector_name; const char *vector_name;
/* NUMA information */ /* NUMA information */

View File

@ -50,7 +50,12 @@ pmd_free(struct mm_struct *mm, pmd_t *pmd)
free_page((unsigned long)pmd); free_page((unsigned long)pmd);
} }
extern pte_t *pte_alloc_one_kernel(struct mm_struct *mm, unsigned long addr); static inline pte_t *
pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
{
pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO);
return pte;
}
static inline void static inline void
pte_free_kernel(struct mm_struct *mm, pte_t *pte) pte_free_kernel(struct mm_struct *mm, pte_t *pte)

View File

@ -1,9 +1,15 @@
#ifndef _ALPHA_RTC_H #ifndef _ALPHA_RTC_H
#define _ALPHA_RTC_H #define _ALPHA_RTC_H
/* #if defined(CONFIG_ALPHA_GENERIC)
* Alpha uses the default access methods for the RTC. # define get_rtc_time alpha_mv.rtc_get_time
*/ # define set_rtc_time alpha_mv.rtc_set_time
#else
# if defined(CONFIG_ALPHA_MARVEL) && defined(CONFIG_SMP)
# define get_rtc_time marvel_get_rtc_time
# define set_rtc_time marvel_set_rtc_time
# endif
#endif
#include <asm-generic/rtc.h> #include <asm-generic/rtc.h>

View File

@ -1,6 +1,8 @@
#ifndef _ALPHA_STATFS_H #ifndef _ALPHA_STATFS_H
#define _ALPHA_STATFS_H #define _ALPHA_STATFS_H
#include <linux/types.h>
/* Alpha is the only 64-bit platform with 32-bit statfs. And doesn't /* Alpha is the only 64-bit platform with 32-bit statfs. And doesn't
even seem to implement statfs64 */ even seem to implement statfs64 */
#define __statfs_word __u32 #define __statfs_word __u32

View File

@ -1,7 +1,7 @@
#ifndef _ALPHA_SWAB_H #ifndef _ALPHA_SWAB_H
#define _ALPHA_SWAB_H #define _ALPHA_SWAB_H
#include <asm/types.h> #include <linux/types.h>
#include <linux/compiler.h> #include <linux/compiler.h>
#include <asm/compiler.h> #include <asm/compiler.h>

1
arch/alpha/kernel/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
vmlinux.lds

View File

@ -658,16 +658,8 @@ __marvel_rtc_io(u8 b, unsigned long addr, int write)
rtc_access.data = bcd2bin(b); rtc_access.data = bcd2bin(b);
rtc_access.function = 0x48 + !write; /* GET/PUT_TOY */ rtc_access.function = 0x48 + !write; /* GET/PUT_TOY */
#ifdef CONFIG_SMP
if (smp_processor_id() != boot_cpuid)
smp_call_function_single(boot_cpuid,
__marvel_access_rtc,
&rtc_access, 1);
else
__marvel_access_rtc(&rtc_access);
#else
__marvel_access_rtc(&rtc_access); __marvel_access_rtc(&rtc_access);
#endif
ret = bin2bcd(rtc_access.data); ret = bin2bcd(rtc_access.data);
break; break;

View File

@ -896,9 +896,9 @@ sys_getxpid:
.end sys_getxpid .end sys_getxpid
.align 4 .align 4
.globl sys_pipe .globl sys_alpha_pipe
.ent sys_pipe .ent sys_alpha_pipe
sys_pipe: sys_alpha_pipe:
lda $sp, -16($sp) lda $sp, -16($sp)
stq $26, 0($sp) stq $26, 0($sp)
.prologue 0 .prologue 0
@ -916,7 +916,7 @@ sys_pipe:
stq $1, 80+16($sp) stq $1, 80+16($sp)
1: lda $sp, 16($sp) 1: lda $sp, 16($sp)
ret ret
.end sys_pipe .end sys_alpha_pipe
.align 4 .align 4
.globl sys_execve .globl sys_execve
@ -933,7 +933,7 @@ sys_execve:
osf_sigprocmask: osf_sigprocmask:
.prologue 0 .prologue 0
mov $sp, $18 mov $sp, $18
jmp $31, do_osf_sigprocmask jmp $31, sys_osf_sigprocmask
.end osf_sigprocmask .end osf_sigprocmask
.align 4 .align 4

View File

@ -63,6 +63,8 @@ init_srm_irqs(long max, unsigned long ignore_mask)
{ {
long i; long i;
if (NR_IRQS <= 16)
return;
for (i = 16; i < max; ++i) { for (i = 16; i < max; ++i) {
if (i < 64 && ((ignore_mask >> i) & 1)) if (i < 64 && ((ignore_mask >> i) & 1))
continue; continue;

View File

@ -40,7 +40,10 @@
#define CAT1(x,y) x##y #define CAT1(x,y) x##y
#define CAT(x,y) CAT1(x,y) #define CAT(x,y) CAT1(x,y)
#define DO_DEFAULT_RTC .rtc_port = 0x70 #define DO_DEFAULT_RTC \
.rtc_port = 0x70, \
.rtc_get_time = common_get_rtc_time, \
.rtc_set_time = common_set_rtc_time
#define DO_EV4_MMU \ #define DO_EV4_MMU \
.max_asn = EV4_MAX_ASN, \ .max_asn = EV4_MAX_ASN, \

View File

@ -54,8 +54,7 @@ extern int do_pipe(int *);
* identical to OSF as we don't return 0 on success, but doing otherwise * identical to OSF as we don't return 0 on success, but doing otherwise
* would require changes to libc. Hopefully this is good enough. * would require changes to libc. Hopefully this is good enough.
*/ */
asmlinkage unsigned long SYSCALL_DEFINE1(osf_brk, unsigned long, brk)
osf_brk(unsigned long brk)
{ {
unsigned long retval = sys_brk(brk); unsigned long retval = sys_brk(brk);
if (brk && brk != retval) if (brk && brk != retval)
@ -66,9 +65,9 @@ osf_brk(unsigned long brk)
/* /*
* This is pure guess-work.. * This is pure guess-work..
*/ */
asmlinkage int SYSCALL_DEFINE4(osf_set_program_attributes, unsigned long, text_start,
osf_set_program_attributes(unsigned long text_start, unsigned long text_len, unsigned long, text_len, unsigned long, bss_start,
unsigned long bss_start, unsigned long bss_len) unsigned long, bss_len)
{ {
struct mm_struct *mm; struct mm_struct *mm;
@ -146,9 +145,9 @@ Efault:
return -EFAULT; return -EFAULT;
} }
asmlinkage int SYSCALL_DEFINE4(osf_getdirentries, unsigned int, fd,
osf_getdirentries(unsigned int fd, struct osf_dirent __user *dirent, struct osf_dirent __user *, dirent, unsigned int, count,
unsigned int count, long __user *basep) long __user *, basep)
{ {
int error; int error;
struct file *file; struct file *file;
@ -177,9 +176,9 @@ osf_getdirentries(unsigned int fd, struct osf_dirent __user *dirent,
#undef NAME_OFFSET #undef NAME_OFFSET
asmlinkage unsigned long SYSCALL_DEFINE6(osf_mmap, unsigned long, addr, unsigned long, len,
osf_mmap(unsigned long addr, unsigned long len, unsigned long prot, unsigned long, prot, unsigned long, flags, unsigned long, fd,
unsigned long flags, unsigned long fd, unsigned long off) unsigned long, off)
{ {
struct file *file = NULL; struct file *file = NULL;
unsigned long ret = -EBADF; unsigned long ret = -EBADF;
@ -254,8 +253,8 @@ do_osf_statfs(struct dentry * dentry, struct osf_statfs __user *buffer,
return error; return error;
} }
asmlinkage int SYSCALL_DEFINE3(osf_statfs, char __user *, pathname,
osf_statfs(char __user *pathname, struct osf_statfs __user *buffer, unsigned long bufsiz) struct osf_statfs __user *, buffer, unsigned long, bufsiz)
{ {
struct path path; struct path path;
int retval; int retval;
@ -268,8 +267,8 @@ osf_statfs(char __user *pathname, struct osf_statfs __user *buffer, unsigned lon
return retval; return retval;
} }
asmlinkage int SYSCALL_DEFINE3(osf_fstatfs, unsigned long, fd,
osf_fstatfs(unsigned long fd, struct osf_statfs __user *buffer, unsigned long bufsiz) struct osf_statfs __user *, buffer, unsigned long, bufsiz)
{ {
struct file *file; struct file *file;
int retval; int retval;
@ -368,8 +367,8 @@ osf_procfs_mount(char *dirname, struct procfs_args __user *args, int flags)
return do_mount("", dirname, "proc", flags, NULL); return do_mount("", dirname, "proc", flags, NULL);
} }
asmlinkage int SYSCALL_DEFINE4(osf_mount, unsigned long, typenr, char __user *, path,
osf_mount(unsigned long typenr, char __user *path, int flag, void __user *data) int, flag, void __user *, data)
{ {
int retval = -EINVAL; int retval = -EINVAL;
char *name; char *name;
@ -399,8 +398,7 @@ osf_mount(unsigned long typenr, char __user *path, int flag, void __user *data)
return retval; return retval;
} }
asmlinkage int SYSCALL_DEFINE1(osf_utsname, char __user *, name)
osf_utsname(char __user *name)
{ {
int error; int error;
@ -423,14 +421,12 @@ osf_utsname(char __user *name)
return error; return error;
} }
asmlinkage unsigned long SYSCALL_DEFINE0(getpagesize)
sys_getpagesize(void)
{ {
return PAGE_SIZE; return PAGE_SIZE;
} }
asmlinkage unsigned long SYSCALL_DEFINE0(getdtablesize)
sys_getdtablesize(void)
{ {
return sysctl_nr_open; return sysctl_nr_open;
} }
@ -438,8 +434,7 @@ sys_getdtablesize(void)
/* /*
* For compatibility with OSF/1 only. Use utsname(2) instead. * For compatibility with OSF/1 only. Use utsname(2) instead.
*/ */
asmlinkage int SYSCALL_DEFINE2(osf_getdomainname, char __user *, name, int, namelen)
osf_getdomainname(char __user *name, int namelen)
{ {
unsigned len; unsigned len;
int i; int i;
@ -527,8 +522,8 @@ enum pl_code {
PL_DEL = 5, PL_FDEL = 6 PL_DEL = 5, PL_FDEL = 6
}; };
asmlinkage long SYSCALL_DEFINE2(osf_proplist_syscall, enum pl_code, code,
osf_proplist_syscall(enum pl_code code, union pl_args __user *args) union pl_args __user *, args)
{ {
long error; long error;
int __user *min_buf_size_ptr; int __user *min_buf_size_ptr;
@ -567,8 +562,8 @@ osf_proplist_syscall(enum pl_code code, union pl_args __user *args)
return error; return error;
} }
asmlinkage int SYSCALL_DEFINE2(osf_sigstack, struct sigstack __user *, uss,
osf_sigstack(struct sigstack __user *uss, struct sigstack __user *uoss) struct sigstack __user *, uoss)
{ {
unsigned long usp = rdusp(); unsigned long usp = rdusp();
unsigned long oss_sp = current->sas_ss_sp + current->sas_ss_size; unsigned long oss_sp = current->sas_ss_sp + current->sas_ss_size;
@ -608,8 +603,7 @@ osf_sigstack(struct sigstack __user *uss, struct sigstack __user *uoss)
return error; return error;
} }
asmlinkage long SYSCALL_DEFINE3(osf_sysinfo, int, command, char __user *, buf, long, count)
osf_sysinfo(int command, char __user *buf, long count)
{ {
char *sysinfo_table[] = { char *sysinfo_table[] = {
utsname()->sysname, utsname()->sysname,
@ -647,9 +641,8 @@ osf_sysinfo(int command, char __user *buf, long count)
return err; return err;
} }
asmlinkage unsigned long SYSCALL_DEFINE5(osf_getsysinfo, unsigned long, op, void __user *, buffer,
osf_getsysinfo(unsigned long op, void __user *buffer, unsigned long nbytes, unsigned long, nbytes, int __user *, start, void __user *, arg)
int __user *start, void __user *arg)
{ {
unsigned long w; unsigned long w;
struct percpu_struct *cpu; struct percpu_struct *cpu;
@ -705,9 +698,8 @@ osf_getsysinfo(unsigned long op, void __user *buffer, unsigned long nbytes,
return -EOPNOTSUPP; return -EOPNOTSUPP;
} }
asmlinkage unsigned long SYSCALL_DEFINE5(osf_setsysinfo, unsigned long, op, void __user *, buffer,
osf_setsysinfo(unsigned long op, void __user *buffer, unsigned long nbytes, unsigned long, nbytes, int __user *, start, void __user *, arg)
int __user *start, void __user *arg)
{ {
switch (op) { switch (op) {
case SSI_IEEE_FP_CONTROL: { case SSI_IEEE_FP_CONTROL: {
@ -880,8 +872,8 @@ jiffies_to_timeval32(unsigned long jiffies, struct timeval32 *value)
value->tv_sec = jiffies / HZ; value->tv_sec = jiffies / HZ;
} }
asmlinkage int SYSCALL_DEFINE2(osf_gettimeofday, struct timeval32 __user *, tv,
osf_gettimeofday(struct timeval32 __user *tv, struct timezone __user *tz) struct timezone __user *, tz)
{ {
if (tv) { if (tv) {
struct timeval ktv; struct timeval ktv;
@ -896,8 +888,8 @@ osf_gettimeofday(struct timeval32 __user *tv, struct timezone __user *tz)
return 0; return 0;
} }
asmlinkage int SYSCALL_DEFINE2(osf_settimeofday, struct timeval32 __user *, tv,
osf_settimeofday(struct timeval32 __user *tv, struct timezone __user *tz) struct timezone __user *, tz)
{ {
struct timespec kts; struct timespec kts;
struct timezone ktz; struct timezone ktz;
@ -916,8 +908,7 @@ osf_settimeofday(struct timeval32 __user *tv, struct timezone __user *tz)
return do_sys_settimeofday(tv ? &kts : NULL, tz ? &ktz : NULL); return do_sys_settimeofday(tv ? &kts : NULL, tz ? &ktz : NULL);
} }
asmlinkage int SYSCALL_DEFINE2(osf_getitimer, int, which, struct itimerval32 __user *, it)
osf_getitimer(int which, struct itimerval32 __user *it)
{ {
struct itimerval kit; struct itimerval kit;
int error; int error;
@ -929,8 +920,8 @@ osf_getitimer(int which, struct itimerval32 __user *it)
return error; return error;
} }
asmlinkage int SYSCALL_DEFINE3(osf_setitimer, int, which, struct itimerval32 __user *, in,
osf_setitimer(int which, struct itimerval32 __user *in, struct itimerval32 __user *out) struct itimerval32 __user *, out)
{ {
struct itimerval kin, kout; struct itimerval kin, kout;
int error; int error;
@ -952,8 +943,8 @@ osf_setitimer(int which, struct itimerval32 __user *in, struct itimerval32 __use
} }
asmlinkage int SYSCALL_DEFINE2(osf_utimes, char __user *, filename,
osf_utimes(char __user *filename, struct timeval32 __user *tvs) struct timeval32 __user *, tvs)
{ {
struct timespec tv[2]; struct timespec tv[2];
@ -979,9 +970,8 @@ osf_utimes(char __user *filename, struct timeval32 __user *tvs)
#define MAX_SELECT_SECONDS \ #define MAX_SELECT_SECONDS \
((unsigned long) (MAX_SCHEDULE_TIMEOUT / HZ)-1) ((unsigned long) (MAX_SCHEDULE_TIMEOUT / HZ)-1)
asmlinkage int SYSCALL_DEFINE5(osf_select, int, n, fd_set __user *, inp, fd_set __user *, outp,
osf_select(int n, fd_set __user *inp, fd_set __user *outp, fd_set __user *exp, fd_set __user *, exp, struct timeval32 __user *, tvp)
struct timeval32 __user *tvp)
{ {
struct timespec end_time, *to = NULL; struct timespec end_time, *to = NULL;
if (tvp) { if (tvp) {
@ -1026,8 +1016,7 @@ struct rusage32 {
long ru_nivcsw; /* involuntary " */ long ru_nivcsw; /* involuntary " */
}; };
asmlinkage int SYSCALL_DEFINE2(osf_getrusage, int, who, struct rusage32 __user *, ru)
osf_getrusage(int who, struct rusage32 __user *ru)
{ {
struct rusage32 r; struct rusage32 r;
@ -1053,9 +1042,8 @@ osf_getrusage(int who, struct rusage32 __user *ru)
return copy_to_user(ru, &r, sizeof(r)) ? -EFAULT : 0; return copy_to_user(ru, &r, sizeof(r)) ? -EFAULT : 0;
} }
asmlinkage long SYSCALL_DEFINE4(osf_wait4, pid_t, pid, int __user *, ustatus, int, options,
osf_wait4(pid_t pid, int __user *ustatus, int options, struct rusage32 __user *, ur)
struct rusage32 __user *ur)
{ {
struct rusage r; struct rusage r;
long ret, err; long ret, err;
@ -1101,8 +1089,8 @@ osf_wait4(pid_t pid, int __user *ustatus, int options,
* seems to be a timeval pointer, and I suspect the second * seems to be a timeval pointer, and I suspect the second
* one is the time remaining.. Ho humm.. No documentation. * one is the time remaining.. Ho humm.. No documentation.
*/ */
asmlinkage int SYSCALL_DEFINE2(osf_usleep_thread, struct timeval32 __user *, sleep,
osf_usleep_thread(struct timeval32 __user *sleep, struct timeval32 __user *remain) struct timeval32 __user *, remain)
{ {
struct timeval tmp; struct timeval tmp;
unsigned long ticks; unsigned long ticks;
@ -1155,8 +1143,7 @@ struct timex32 {
int :32; int :32; int :32; int :32; int :32; int :32; int :32; int :32;
}; };
asmlinkage int SYSCALL_DEFINE1(old_adjtimex, struct timex32 __user *, txc_p)
sys_old_adjtimex(struct timex32 __user *txc_p)
{ {
struct timex txc; struct timex txc;
int ret; int ret;
@ -1267,8 +1254,8 @@ osf_fix_iov_len(const struct iovec __user *iov, unsigned long count)
return 0; return 0;
} }
asmlinkage ssize_t SYSCALL_DEFINE3(osf_readv, unsigned long, fd,
osf_readv(unsigned long fd, const struct iovec __user * vector, unsigned long count) const struct iovec __user *, vector, unsigned long, count)
{ {
if (unlikely(personality(current->personality) == PER_OSF4)) if (unlikely(personality(current->personality) == PER_OSF4))
if (osf_fix_iov_len(vector, count)) if (osf_fix_iov_len(vector, count))
@ -1276,8 +1263,8 @@ osf_readv(unsigned long fd, const struct iovec __user * vector, unsigned long co
return sys_readv(fd, vector, count); return sys_readv(fd, vector, count);
} }
asmlinkage ssize_t SYSCALL_DEFINE3(osf_writev, unsigned long, fd,
osf_writev(unsigned long fd, const struct iovec __user * vector, unsigned long count) const struct iovec __user *, vector, unsigned long, count)
{ {
if (unlikely(personality(current->personality) == PER_OSF4)) if (unlikely(personality(current->personality) == PER_OSF4))
if (osf_fix_iov_len(vector, count)) if (osf_fix_iov_len(vector, count))

View File

@ -109,7 +109,8 @@ sys_pciconfig_write(unsigned long bus, unsigned long dfn,
/* Stubs for the routines in pci_iommu.c: */ /* Stubs for the routines in pci_iommu.c: */
void * void *
pci_alloc_consistent(struct pci_dev *pdev, size_t size, dma_addr_t *dma_addrp) __pci_alloc_consistent(struct pci_dev *pdev, size_t size,
dma_addr_t *dma_addrp, gfp_t gfp)
{ {
return NULL; return NULL;
} }

View File

@ -93,8 +93,8 @@ common_shutdown_1(void *generic_ptr)
if (cpuid != boot_cpuid) { if (cpuid != boot_cpuid) {
flags |= 0x00040000UL; /* "remain halted" */ flags |= 0x00040000UL; /* "remain halted" */
*pflags = flags; *pflags = flags;
cpu_clear(cpuid, cpu_present_map); set_cpu_present(cpuid, false);
cpu_clear(cpuid, cpu_possible_map); set_cpu_possible(cpuid, false);
halt(); halt();
} }
#endif #endif
@ -120,8 +120,8 @@ common_shutdown_1(void *generic_ptr)
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
/* Wait for the secondaries to halt. */ /* Wait for the secondaries to halt. */
cpu_clear(boot_cpuid, cpu_present_map); set_cpu_present(boot_cpuid, false);
cpu_clear(boot_cpuid, cpu_possible_map); set_cpu_possible(boot_cpuid, false);
while (cpus_weight(cpu_present_map)) while (cpus_weight(cpu_present_map))
barrier(); barrier();
#endif #endif

View File

@ -145,6 +145,8 @@ extern void smp_percpu_timer_interrupt(struct pt_regs *);
extern irqreturn_t timer_interrupt(int irq, void *dev); extern irqreturn_t timer_interrupt(int irq, void *dev);
extern void common_init_rtc(void); extern void common_init_rtc(void);
extern unsigned long est_cycle_freq; extern unsigned long est_cycle_freq;
extern unsigned int common_get_rtc_time(struct rtc_time *time);
extern int common_set_rtc_time(struct rtc_time *time);
/* smc37c93x.c */ /* smc37c93x.c */
extern void SMC93x_Init(void); extern void SMC93x_Init(void);

View File

@ -19,6 +19,7 @@
#include <linux/tty.h> #include <linux/tty.h>
#include <linux/binfmts.h> #include <linux/binfmts.h>
#include <linux/bitops.h> #include <linux/bitops.h>
#include <linux/syscalls.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
#include <asm/sigcontext.h> #include <asm/sigcontext.h>
@ -51,8 +52,8 @@ static void do_signal(struct pt_regs *, struct switch_stack *,
* Note that we don't need to acquire the kernel lock for SMP * Note that we don't need to acquire the kernel lock for SMP
* operation, as all of this is local to this thread. * operation, as all of this is local to this thread.
*/ */
asmlinkage unsigned long SYSCALL_DEFINE3(osf_sigprocmask, int, how, unsigned long, newmask,
do_osf_sigprocmask(int how, unsigned long newmask, struct pt_regs *regs) struct pt_regs *, regs)
{ {
unsigned long oldmask = -EINVAL; unsigned long oldmask = -EINVAL;
@ -81,9 +82,9 @@ do_osf_sigprocmask(int how, unsigned long newmask, struct pt_regs *regs)
return oldmask; return oldmask;
} }
asmlinkage int SYSCALL_DEFINE3(osf_sigaction, int, sig,
osf_sigaction(int sig, const struct osf_sigaction __user *act, const struct osf_sigaction __user *, act,
struct osf_sigaction __user *oact) struct osf_sigaction __user *, oact)
{ {
struct k_sigaction new_ka, old_ka; struct k_sigaction new_ka, old_ka;
int ret; int ret;
@ -112,10 +113,9 @@ osf_sigaction(int sig, const struct osf_sigaction __user *act,
return ret; return ret;
} }
asmlinkage long SYSCALL_DEFINE5(rt_sigaction, int, sig, const struct sigaction __user *, act,
sys_rt_sigaction(int sig, const struct sigaction __user *act, struct sigaction __user *, oact,
struct sigaction __user *oact, size_t, sigsetsize, void __user *, restorer)
size_t sigsetsize, void __user *restorer)
{ {
struct k_sigaction new_ka, old_ka; struct k_sigaction new_ka, old_ka;
int ret; int ret;

View File

@ -121,10 +121,11 @@ smp_callin(void)
{ {
int cpuid = hard_smp_processor_id(); int cpuid = hard_smp_processor_id();
if (cpu_test_and_set(cpuid, cpu_online_map)) { if (cpu_online(cpuid)) {
printk("??, cpu 0x%x already present??\n", cpuid); printk("??, cpu 0x%x already present??\n", cpuid);
BUG(); BUG();
} }
set_cpu_online(cpuid, true);
/* Turn on machine checks. */ /* Turn on machine checks. */
wrmces(7); wrmces(7);
@ -435,8 +436,8 @@ setup_smp(void)
((char *)cpubase + i*hwrpb->processor_size); ((char *)cpubase + i*hwrpb->processor_size);
if ((cpu->flags & 0x1cc) == 0x1cc) { if ((cpu->flags & 0x1cc) == 0x1cc) {
smp_num_probed++; smp_num_probed++;
cpu_set(i, cpu_possible_map); set_cpu_possible(i, true);
cpu_set(i, cpu_present_map); set_cpu_present(i, true);
cpu->pal_revision = boot_cpu_palrev; cpu->pal_revision = boot_cpu_palrev;
} }
@ -469,8 +470,8 @@ smp_prepare_cpus(unsigned int max_cpus)
/* Nothing to do on a UP box, or when told not to. */ /* Nothing to do on a UP box, or when told not to. */
if (smp_num_probed == 1 || max_cpus == 0) { if (smp_num_probed == 1 || max_cpus == 0) {
cpu_possible_map = cpumask_of_cpu(boot_cpuid); init_cpu_possible(cpumask_of(boot_cpuid));
cpu_present_map = cpumask_of_cpu(boot_cpuid); init_cpu_present(cpumask_of(boot_cpuid));
printk(KERN_INFO "SMP mode deactivated.\n"); printk(KERN_INFO "SMP mode deactivated.\n");
return; return;
} }

View File

@ -261,6 +261,8 @@ struct alpha_machine_vector jensen_mv __initmv = {
.machine_check = jensen_machine_check, .machine_check = jensen_machine_check,
.max_isa_dma_address = ALPHA_MAX_ISA_DMA_ADDRESS, .max_isa_dma_address = ALPHA_MAX_ISA_DMA_ADDRESS,
.rtc_port = 0x170, .rtc_port = 0x170,
.rtc_get_time = common_get_rtc_time,
.rtc_set_time = common_set_rtc_time,
.nr_irqs = 16, .nr_irqs = 16,
.device_interrupt = jensen_device_interrupt, .device_interrupt = jensen_device_interrupt,

View File

@ -23,6 +23,7 @@
#include <asm/hwrpb.h> #include <asm/hwrpb.h>
#include <asm/tlbflush.h> #include <asm/tlbflush.h>
#include <asm/vga.h> #include <asm/vga.h>
#include <asm/rtc.h>
#include "proto.h" #include "proto.h"
#include "err_impl.h" #include "err_impl.h"
@ -426,6 +427,57 @@ marvel_init_rtc(void)
init_rtc_irq(); init_rtc_irq();
} }
struct marvel_rtc_time {
struct rtc_time *time;
int retval;
};
#ifdef CONFIG_SMP
static void
smp_get_rtc_time(void *data)
{
struct marvel_rtc_time *mrt = data;
mrt->retval = __get_rtc_time(mrt->time);
}
static void
smp_set_rtc_time(void *data)
{
struct marvel_rtc_time *mrt = data;
mrt->retval = __set_rtc_time(mrt->time);
}
#endif
static unsigned int
marvel_get_rtc_time(struct rtc_time *time)
{
#ifdef CONFIG_SMP
struct marvel_rtc_time mrt;
if (smp_processor_id() != boot_cpuid) {
mrt.time = time;
smp_call_function_single(boot_cpuid, smp_get_rtc_time, &mrt, 1);
return mrt.retval;
}
#endif
return __get_rtc_time(time);
}
static int
marvel_set_rtc_time(struct rtc_time *time)
{
#ifdef CONFIG_SMP
struct marvel_rtc_time mrt;
if (smp_processor_id() != boot_cpuid) {
mrt.time = time;
smp_call_function_single(boot_cpuid, smp_set_rtc_time, &mrt, 1);
return mrt.retval;
}
#endif
return __set_rtc_time(time);
}
static void static void
marvel_smp_callin(void) marvel_smp_callin(void)
{ {
@ -466,7 +518,9 @@ marvel_smp_callin(void)
struct alpha_machine_vector marvel_ev7_mv __initmv = { struct alpha_machine_vector marvel_ev7_mv __initmv = {
.vector_name = "MARVEL/EV7", .vector_name = "MARVEL/EV7",
DO_EV7_MMU, DO_EV7_MMU,
DO_DEFAULT_RTC, .rtc_port = 0x70,
.rtc_get_time = marvel_get_rtc_time,
.rtc_set_time = marvel_set_rtc_time,
DO_MARVEL_IO, DO_MARVEL_IO,
.machine_check = marvel_machine_check, .machine_check = marvel_machine_check,
.max_isa_dma_address = ALPHA_MAX_ISA_DMA_ADDRESS, .max_isa_dma_address = ALPHA_MAX_ISA_DMA_ADDRESS,

View File

@ -245,6 +245,10 @@ nautilus_init_pci(void)
IRONGATE0->pci_mem = pci_mem; IRONGATE0->pci_mem = pci_mem;
pci_bus_assign_resources(bus); pci_bus_assign_resources(bus);
/* pci_common_swizzle() relies on bus->self being NULL
for the root bus, so just clear it. */
bus->self = NULL;
pci_fixup_irqs(alpha_mv.pci_swizzle, alpha_mv.pci_map_irq); pci_fixup_irqs(alpha_mv.pci_swizzle, alpha_mv.pci_map_irq);
} }

View File

@ -17,7 +17,7 @@ sys_call_table:
.quad sys_write .quad sys_write
.quad alpha_ni_syscall /* 5 */ .quad alpha_ni_syscall /* 5 */
.quad sys_close .quad sys_close
.quad osf_wait4 .quad sys_osf_wait4
.quad alpha_ni_syscall .quad alpha_ni_syscall
.quad sys_link .quad sys_link
.quad sys_unlink /* 10 */ .quad sys_unlink /* 10 */
@ -27,11 +27,11 @@ sys_call_table:
.quad sys_mknod .quad sys_mknod
.quad sys_chmod /* 15 */ .quad sys_chmod /* 15 */
.quad sys_chown .quad sys_chown
.quad osf_brk .quad sys_osf_brk
.quad alpha_ni_syscall .quad alpha_ni_syscall
.quad sys_lseek .quad sys_lseek
.quad sys_getxpid /* 20 */ .quad sys_getxpid /* 20 */
.quad osf_mount .quad sys_osf_mount
.quad sys_umount .quad sys_umount
.quad sys_setuid .quad sys_setuid
.quad sys_getxuid .quad sys_getxuid
@ -52,8 +52,8 @@ sys_call_table:
.quad sys_setpgid .quad sys_setpgid
.quad alpha_ni_syscall /* 40 */ .quad alpha_ni_syscall /* 40 */
.quad sys_dup .quad sys_dup
.quad sys_pipe .quad sys_alpha_pipe
.quad osf_set_program_attributes .quad sys_osf_set_program_attributes
.quad alpha_ni_syscall .quad alpha_ni_syscall
.quad sys_open /* 45 */ .quad sys_open /* 45 */
.quad alpha_ni_syscall .quad alpha_ni_syscall
@ -81,7 +81,7 @@ sys_call_table:
.quad sys_newlstat .quad sys_newlstat
.quad alpha_ni_syscall .quad alpha_ni_syscall
.quad alpha_ni_syscall /* 70 */ .quad alpha_ni_syscall /* 70 */
.quad osf_mmap .quad sys_osf_mmap
.quad alpha_ni_syscall .quad alpha_ni_syscall
.quad sys_munmap .quad sys_munmap
.quad sys_mprotect .quad sys_mprotect
@ -94,17 +94,17 @@ sys_call_table:
.quad sys_setgroups /* 80 */ .quad sys_setgroups /* 80 */
.quad alpha_ni_syscall .quad alpha_ni_syscall
.quad sys_setpgid .quad sys_setpgid
.quad osf_setitimer .quad sys_osf_setitimer
.quad alpha_ni_syscall .quad alpha_ni_syscall
.quad alpha_ni_syscall /* 85 */ .quad alpha_ni_syscall /* 85 */
.quad osf_getitimer .quad sys_osf_getitimer
.quad sys_gethostname .quad sys_gethostname
.quad sys_sethostname .quad sys_sethostname
.quad sys_getdtablesize .quad sys_getdtablesize
.quad sys_dup2 /* 90 */ .quad sys_dup2 /* 90 */
.quad sys_newfstat .quad sys_newfstat
.quad sys_fcntl .quad sys_fcntl
.quad osf_select .quad sys_osf_select
.quad sys_poll .quad sys_poll
.quad sys_fsync /* 95 */ .quad sys_fsync /* 95 */
.quad sys_setpriority .quad sys_setpriority
@ -123,22 +123,22 @@ sys_call_table:
.quad alpha_ni_syscall .quad alpha_ni_syscall
.quad alpha_ni_syscall /* 110 */ .quad alpha_ni_syscall /* 110 */
.quad sys_sigsuspend .quad sys_sigsuspend
.quad osf_sigstack .quad sys_osf_sigstack
.quad sys_recvmsg .quad sys_recvmsg
.quad sys_sendmsg .quad sys_sendmsg
.quad alpha_ni_syscall /* 115 */ .quad alpha_ni_syscall /* 115 */
.quad osf_gettimeofday .quad sys_osf_gettimeofday
.quad osf_getrusage .quad sys_osf_getrusage
.quad sys_getsockopt .quad sys_getsockopt
.quad alpha_ni_syscall .quad alpha_ni_syscall
#ifdef CONFIG_OSF4_COMPAT #ifdef CONFIG_OSF4_COMPAT
.quad osf_readv /* 120 */ .quad sys_osf_readv /* 120 */
.quad osf_writev .quad sys_osf_writev
#else #else
.quad sys_readv /* 120 */ .quad sys_readv /* 120 */
.quad sys_writev .quad sys_writev
#endif #endif
.quad osf_settimeofday .quad sys_osf_settimeofday
.quad sys_fchown .quad sys_fchown
.quad sys_fchmod .quad sys_fchmod
.quad sys_recvfrom /* 125 */ .quad sys_recvfrom /* 125 */
@ -154,7 +154,7 @@ sys_call_table:
.quad sys_socketpair /* 135 */ .quad sys_socketpair /* 135 */
.quad sys_mkdir .quad sys_mkdir
.quad sys_rmdir .quad sys_rmdir
.quad osf_utimes .quad sys_osf_utimes
.quad alpha_ni_syscall .quad alpha_ni_syscall
.quad alpha_ni_syscall /* 140 */ .quad alpha_ni_syscall /* 140 */
.quad sys_getpeername .quad sys_getpeername
@ -172,16 +172,16 @@ sys_call_table:
.quad alpha_ni_syscall .quad alpha_ni_syscall
.quad alpha_ni_syscall .quad alpha_ni_syscall
.quad alpha_ni_syscall /* 155 */ .quad alpha_ni_syscall /* 155 */
.quad osf_sigaction .quad sys_osf_sigaction
.quad alpha_ni_syscall .quad alpha_ni_syscall
.quad alpha_ni_syscall .quad alpha_ni_syscall
.quad osf_getdirentries .quad sys_osf_getdirentries
.quad osf_statfs /* 160 */ .quad sys_osf_statfs /* 160 */
.quad osf_fstatfs .quad sys_osf_fstatfs
.quad alpha_ni_syscall .quad alpha_ni_syscall
.quad alpha_ni_syscall .quad alpha_ni_syscall
.quad alpha_ni_syscall .quad alpha_ni_syscall
.quad osf_getdomainname /* 165 */ .quad sys_osf_getdomainname /* 165 */
.quad sys_setdomainname .quad sys_setdomainname
.quad alpha_ni_syscall .quad alpha_ni_syscall
.quad alpha_ni_syscall .quad alpha_ni_syscall
@ -224,7 +224,7 @@ sys_call_table:
.quad sys_semctl .quad sys_semctl
.quad sys_semget /* 205 */ .quad sys_semget /* 205 */
.quad sys_semop .quad sys_semop
.quad osf_utsname .quad sys_osf_utsname
.quad sys_lchown .quad sys_lchown
.quad sys_shmat .quad sys_shmat
.quad sys_shmctl /* 210 */ .quad sys_shmctl /* 210 */
@ -258,23 +258,23 @@ sys_call_table:
.quad alpha_ni_syscall .quad alpha_ni_syscall
.quad alpha_ni_syscall .quad alpha_ni_syscall
.quad alpha_ni_syscall /* 240 */ .quad alpha_ni_syscall /* 240 */
.quad osf_sysinfo .quad sys_osf_sysinfo
.quad alpha_ni_syscall .quad alpha_ni_syscall
.quad alpha_ni_syscall .quad alpha_ni_syscall
.quad osf_proplist_syscall .quad sys_osf_proplist_syscall
.quad alpha_ni_syscall /* 245 */ .quad alpha_ni_syscall /* 245 */
.quad alpha_ni_syscall .quad alpha_ni_syscall
.quad alpha_ni_syscall .quad alpha_ni_syscall
.quad alpha_ni_syscall .quad alpha_ni_syscall
.quad alpha_ni_syscall .quad alpha_ni_syscall
.quad alpha_ni_syscall /* 250 */ .quad alpha_ni_syscall /* 250 */
.quad osf_usleep_thread .quad sys_osf_usleep_thread
.quad alpha_ni_syscall .quad alpha_ni_syscall
.quad alpha_ni_syscall .quad alpha_ni_syscall
.quad sys_sysfs .quad sys_sysfs
.quad alpha_ni_syscall /* 255 */ .quad alpha_ni_syscall /* 255 */
.quad osf_getsysinfo .quad sys_osf_getsysinfo
.quad osf_setsysinfo .quad sys_osf_setsysinfo
.quad alpha_ni_syscall .quad alpha_ni_syscall
.quad alpha_ni_syscall .quad alpha_ni_syscall
.quad alpha_ni_syscall /* 260 */ .quad alpha_ni_syscall /* 260 */

View File

@ -46,6 +46,7 @@
#include <asm/io.h> #include <asm/io.h>
#include <asm/hwrpb.h> #include <asm/hwrpb.h>
#include <asm/8253pit.h> #include <asm/8253pit.h>
#include <asm/rtc.h>
#include <linux/mc146818rtc.h> #include <linux/mc146818rtc.h>
#include <linux/time.h> #include <linux/time.h>
@ -180,6 +181,15 @@ common_init_rtc(void)
init_rtc_irq(); init_rtc_irq();
} }
unsigned int common_get_rtc_time(struct rtc_time *time)
{
return __get_rtc_time(time);
}
int common_set_rtc_time(struct rtc_time *time)
{
return __set_rtc_time(time);
}
/* Validate a computed cycle counter result against the known bounds for /* Validate a computed cycle counter result against the known bounds for
the given processor core. There's too much brokenness in the way of the given processor core. There's too much brokenness in the way of

View File

@ -59,13 +59,6 @@ pgd_alloc(struct mm_struct *mm)
return ret; return ret;
} }
pte_t *
pte_alloc_one_kernel(struct mm_struct *mm, unsigned long address)
{
pte_t *pte = (pte_t *)__get_free_page(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO);
return pte;
}
/* /*
* BAD_PAGE is the page that is used for page faults when linux * BAD_PAGE is the page that is used for page faults when linux
@ -196,9 +189,21 @@ callback_init(void * kernel_end)
if (alpha_using_srm) { if (alpha_using_srm) {
static struct vm_struct console_remap_vm; static struct vm_struct console_remap_vm;
unsigned long vaddr = VMALLOC_START; unsigned long nr_pages = 0;
unsigned long vaddr;
unsigned long i, j; unsigned long i, j;
/* calculate needed size */
for (i = 0; i < crb->map_entries; ++i)
nr_pages += crb->map[i].count;
/* register the vm area */
console_remap_vm.flags = VM_ALLOC;
console_remap_vm.size = nr_pages << PAGE_SHIFT;
vm_area_register_early(&console_remap_vm, PAGE_SIZE);
vaddr = (unsigned long)console_remap_vm.addr;
/* Set up the third level PTEs and update the virtual /* Set up the third level PTEs and update the virtual
addresses of the CRB entries. */ addresses of the CRB entries. */
for (i = 0; i < crb->map_entries; ++i) { for (i = 0; i < crb->map_entries; ++i) {
@ -220,12 +225,6 @@ callback_init(void * kernel_end)
vaddr += PAGE_SIZE; vaddr += PAGE_SIZE;
} }
} }
/* Let vmalloc know that we've allocated some space. */
console_remap_vm.flags = VM_ALLOC;
console_remap_vm.addr = (void *) VMALLOC_START;
console_remap_vm.size = vaddr - VMALLOC_START;
vmlist = &console_remap_vm;
} }
callback_init_done = 1; callback_init_done = 1;

View File

@ -24,6 +24,15 @@
static LIST_HEAD(clocks); static LIST_HEAD(clocks);
static DEFINE_MUTEX(clocks_mutex); static DEFINE_MUTEX(clocks_mutex);
/*
* Find the correct struct clk for the device and connection ID.
* We do slightly fuzzy matching here:
* An entry with a NULL ID is assumed to be a wildcard.
* If an entry has a device ID, it must match
* If an entry has a connection ID, it must match
* Then we take the most specific entry - with the following
* order of precidence: dev+con > dev only > con only.
*/
static struct clk *clk_find(const char *dev_id, const char *con_id) static struct clk *clk_find(const char *dev_id, const char *con_id)
{ {
struct clk_lookup *p; struct clk_lookup *p;
@ -31,13 +40,17 @@ static struct clk *clk_find(const char *dev_id, const char *con_id)
int match, best = 0; int match, best = 0;
list_for_each_entry(p, &clocks, node) { list_for_each_entry(p, &clocks, node) {
if ((p->dev_id && !dev_id) || (p->con_id && !con_id))
continue;
match = 0; match = 0;
if (p->dev_id) if (p->dev_id) {
match += 2 * (strcmp(p->dev_id, dev_id) == 0); if (!dev_id || strcmp(p->dev_id, dev_id))
if (p->con_id) continue;
match += 1 * (strcmp(p->con_id, con_id) == 0); match += 2;
}
if (p->con_id) {
if (!con_id || strcmp(p->con_id, con_id))
continue;
match += 1;
}
if (match == 0) if (match == 0)
continue; continue;

View File

@ -719,8 +719,8 @@ CONFIG_I2C_GPIO=y
# Miscellaneous I2C Chip support # Miscellaneous I2C Chip support
# #
# CONFIG_DS1682 is not set # CONFIG_DS1682 is not set
CONFIG_AT24=y CONFIG_EEPROM_AT24=y
# CONFIG_SENSORS_EEPROM is not set # CONFIG_EEPROM_LEGACY is not set
# CONFIG_SENSORS_PCF8574 is not set # CONFIG_SENSORS_PCF8574 is not set
# CONFIG_PCF8575 is not set # CONFIG_PCF8575 is not set
# CONFIG_SENSORS_PCA9539 is not set # CONFIG_SENSORS_PCA9539 is not set
@ -744,7 +744,7 @@ CONFIG_SPI_ATMEL=y
# #
# SPI Protocol Masters # SPI Protocol Masters
# #
# CONFIG_SPI_AT25 is not set # CONFIG_EEPROM_AT25 is not set
CONFIG_SPI_SPIDEV=y CONFIG_SPI_SPIDEV=y
# CONFIG_SPI_TLE62X0 is not set # CONFIG_SPI_TLE62X0 is not set
# CONFIG_W1 is not set # CONFIG_W1 is not set

View File

@ -767,7 +767,7 @@ CONFIG_I2C_OMAP=y
# #
# CONFIG_SENSORS_DS1337 is not set # CONFIG_SENSORS_DS1337 is not set
# CONFIG_SENSORS_DS1374 is not set # CONFIG_SENSORS_DS1374 is not set
# CONFIG_SENSORS_EEPROM is not set # CONFIG_EEPROM_LEGACY is not set
# CONFIG_SENSORS_PCF8574 is not set # CONFIG_SENSORS_PCF8574 is not set
# CONFIG_SENSORS_PCA9539 is not set # CONFIG_SENSORS_PCA9539 is not set
# CONFIG_SENSORS_PCF8591 is not set # CONFIG_SENSORS_PCF8591 is not set

View File

@ -676,7 +676,7 @@ CONFIG_I2C_CHARDEV=y
# CONFIG_SENSORS_DS1337 is not set # CONFIG_SENSORS_DS1337 is not set
# CONFIG_SENSORS_DS1374 is not set # CONFIG_SENSORS_DS1374 is not set
# CONFIG_DS1682 is not set # CONFIG_DS1682 is not set
# CONFIG_SENSORS_EEPROM is not set # CONFIG_EEPROM_LEGACY is not set
# CONFIG_SENSORS_PCF8574 is not set # CONFIG_SENSORS_PCF8574 is not set
# CONFIG_SENSORS_PCA9539 is not set # CONFIG_SENSORS_PCA9539 is not set
# CONFIG_SENSORS_PCF8591 is not set # CONFIG_SENSORS_PCF8591 is not set
@ -703,7 +703,7 @@ CONFIG_SPI_ATMEL=y
# #
# SPI Protocol Masters # SPI Protocol Masters
# #
# CONFIG_SPI_AT25 is not set # CONFIG_EEPROM_AT25 is not set
# CONFIG_SPI_SPIDEV is not set # CONFIG_SPI_SPIDEV is not set
# CONFIG_SPI_TLE62X0 is not set # CONFIG_SPI_TLE62X0 is not set
# CONFIG_W1 is not set # CONFIG_W1 is not set

View File

@ -636,7 +636,7 @@ CONFIG_I2C_GPIO=y
# #
# CONFIG_SENSORS_DS1337 is not set # CONFIG_SENSORS_DS1337 is not set
# CONFIG_SENSORS_DS1374 is not set # CONFIG_SENSORS_DS1374 is not set
# CONFIG_SENSORS_EEPROM is not set # CONFIG_EEPROM_LEGACY is not set
# CONFIG_SENSORS_PCF8574 is not set # CONFIG_SENSORS_PCF8574 is not set
# CONFIG_SENSORS_PCA9539 is not set # CONFIG_SENSORS_PCA9539 is not set
# CONFIG_SENSORS_PCF8591 is not set # CONFIG_SENSORS_PCF8591 is not set

View File

@ -610,7 +610,7 @@ CONFIG_I2C_GPIO=y
# #
# CONFIG_SENSORS_DS1337 is not set # CONFIG_SENSORS_DS1337 is not set
# CONFIG_SENSORS_DS1374 is not set # CONFIG_SENSORS_DS1374 is not set
# CONFIG_SENSORS_EEPROM is not set # CONFIG_EEPROM_LEGACY is not set
# CONFIG_SENSORS_PCF8574 is not set # CONFIG_SENSORS_PCF8574 is not set
# CONFIG_SENSORS_PCA9539 is not set # CONFIG_SENSORS_PCA9539 is not set
# CONFIG_SENSORS_PCF8591 is not set # CONFIG_SENSORS_PCF8591 is not set

View File

@ -582,7 +582,7 @@ CONFIG_I2C_GPIO=y
# CONFIG_SENSORS_DS1337 is not set # CONFIG_SENSORS_DS1337 is not set
# CONFIG_SENSORS_DS1374 is not set # CONFIG_SENSORS_DS1374 is not set
# CONFIG_DS1682 is not set # CONFIG_DS1682 is not set
# CONFIG_SENSORS_EEPROM is not set # CONFIG_EEPROM_LEGACY is not set
# CONFIG_SENSORS_PCF8574 is not set # CONFIG_SENSORS_PCF8574 is not set
# CONFIG_SENSORS_PCA9539 is not set # CONFIG_SENSORS_PCA9539 is not set
# CONFIG_SENSORS_PCF8591 is not set # CONFIG_SENSORS_PCF8591 is not set
@ -608,7 +608,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y
# Watchdog Device Drivers # Watchdog Device Drivers
# #
# CONFIG_SOFT_WATCHDOG is not set # CONFIG_SOFT_WATCHDOG is not set
CONFIG_AT91SAM9_WATCHDOG=y CONFIG_AT91SAM9X_WATCHDOG=y
# #
# USB-based Watchdog Cards # USB-based Watchdog Cards

View File

@ -660,7 +660,7 @@ CONFIG_I2C_GPIO=y
# CONFIG_SENSORS_DS1337 is not set # CONFIG_SENSORS_DS1337 is not set
# CONFIG_SENSORS_DS1374 is not set # CONFIG_SENSORS_DS1374 is not set
# CONFIG_DS1682 is not set # CONFIG_DS1682 is not set
# CONFIG_SENSORS_EEPROM is not set # CONFIG_EEPROM_LEGACY is not set
# CONFIG_SENSORS_PCF8574 is not set # CONFIG_SENSORS_PCF8574 is not set
# CONFIG_SENSORS_PCA9539 is not set # CONFIG_SENSORS_PCA9539 is not set
# CONFIG_SENSORS_PCF8591 is not set # CONFIG_SENSORS_PCF8591 is not set
@ -687,7 +687,7 @@ CONFIG_SPI_ATMEL=y
# #
# SPI Protocol Masters # SPI Protocol Masters
# #
# CONFIG_SPI_AT25 is not set # CONFIG_EEPROM_AT25 is not set
# CONFIG_SPI_SPIDEV is not set # CONFIG_SPI_SPIDEV is not set
# CONFIG_SPI_TLE62X0 is not set # CONFIG_SPI_TLE62X0 is not set
# CONFIG_W1 is not set # CONFIG_W1 is not set
@ -700,7 +700,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y
# Watchdog Device Drivers # Watchdog Device Drivers
# #
# CONFIG_SOFT_WATCHDOG is not set # CONFIG_SOFT_WATCHDOG is not set
CONFIG_AT91SAM9_WATCHDOG=y CONFIG_AT91SAM9X_WATCHDOG=y
# #
# USB-based Watchdog Cards # USB-based Watchdog Cards

Some files were not shown because too many files have changed in this diff Show More