You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts: drivers/net/stmmac/stmmac_main.c drivers/net/wireless/wl12xx/wl1271_cmd.c drivers/net/wireless/wl12xx/wl1271_main.c drivers/net/wireless/wl12xx/wl1271_spi.c net/core/ethtool.c net/mac80211/scan.c
This commit is contained in:
@@ -16,6 +16,15 @@
|
|||||||
</address>
|
</address>
|
||||||
</affiliation>
|
</affiliation>
|
||||||
</author>
|
</author>
|
||||||
|
<author>
|
||||||
|
<firstname>William</firstname>
|
||||||
|
<surname>Cohen</surname>
|
||||||
|
<affiliation>
|
||||||
|
<address>
|
||||||
|
<email>wcohen@redhat.com</email>
|
||||||
|
</address>
|
||||||
|
</affiliation>
|
||||||
|
</author>
|
||||||
</authorgroup>
|
</authorgroup>
|
||||||
|
|
||||||
<legalnotice>
|
<legalnotice>
|
||||||
@@ -91,4 +100,8 @@
|
|||||||
!Iinclude/trace/events/signal.h
|
!Iinclude/trace/events/signal.h
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
|
<chapter id="block">
|
||||||
|
<title>Block IO</title>
|
||||||
|
!Iinclude/trace/events/block.h
|
||||||
|
</chapter>
|
||||||
</book>
|
</book>
|
||||||
|
|||||||
@@ -1162,8 +1162,8 @@ where a driver received a request ala this before:
|
|||||||
|
|
||||||
As mentioned, there is no virtual mapping of a bio. For DMA, this is
|
As mentioned, there is no virtual mapping of a bio. For DMA, this is
|
||||||
not a problem as the driver probably never will need a virtual mapping.
|
not a problem as the driver probably never will need a virtual mapping.
|
||||||
Instead it needs a bus mapping (pci_map_page for a single segment or
|
Instead it needs a bus mapping (dma_map_page for a single segment or
|
||||||
use blk_rq_map_sg for scatter gather) to be able to ship it to the driver. For
|
use dma_map_sg for scatter gather) to be able to ship it to the driver. For
|
||||||
PIO drivers (or drivers that need to revert to PIO transfer once in a
|
PIO drivers (or drivers that need to revert to PIO transfer once in a
|
||||||
while (IDE for example)), where the CPU is doing the actual data
|
while (IDE for example)), where the CPU is doing the actual data
|
||||||
transfer a virtual mapping is needed. If the driver supports highmem I/O,
|
transfer a virtual mapping is needed. If the driver supports highmem I/O,
|
||||||
|
|||||||
@@ -340,7 +340,7 @@ Note:
|
|||||||
5.3 swappiness
|
5.3 swappiness
|
||||||
Similar to /proc/sys/vm/swappiness, but affecting a hierarchy of groups only.
|
Similar to /proc/sys/vm/swappiness, but affecting a hierarchy of groups only.
|
||||||
|
|
||||||
Following cgroups' swapiness can't be changed.
|
Following cgroups' swappiness can't be changed.
|
||||||
- root cgroup (uses /proc/sys/vm/swappiness).
|
- root cgroup (uses /proc/sys/vm/swappiness).
|
||||||
- a cgroup which uses hierarchy and it has child cgroup.
|
- a cgroup which uses hierarchy and it has child cgroup.
|
||||||
- a cgroup which uses hierarchy and not the root of hierarchy.
|
- a cgroup which uses hierarchy and not the root of hierarchy.
|
||||||
|
|||||||
@@ -0,0 +1,234 @@
|
|||||||
|
================
|
||||||
|
CIRCULAR BUFFERS
|
||||||
|
================
|
||||||
|
|
||||||
|
By: David Howells <dhowells@redhat.com>
|
||||||
|
Paul E. McKenney <paulmck@linux.vnet.ibm.com>
|
||||||
|
|
||||||
|
|
||||||
|
Linux provides a number of features that can be used to implement circular
|
||||||
|
buffering. There are two sets of such features:
|
||||||
|
|
||||||
|
(1) Convenience functions for determining information about power-of-2 sized
|
||||||
|
buffers.
|
||||||
|
|
||||||
|
(2) Memory barriers for when the producer and the consumer of objects in the
|
||||||
|
buffer don't want to share a lock.
|
||||||
|
|
||||||
|
To use these facilities, as discussed below, there needs to be just one
|
||||||
|
producer and just one consumer. It is possible to handle multiple producers by
|
||||||
|
serialising them, and to handle multiple consumers by serialising them.
|
||||||
|
|
||||||
|
|
||||||
|
Contents:
|
||||||
|
|
||||||
|
(*) What is a circular buffer?
|
||||||
|
|
||||||
|
(*) Measuring power-of-2 buffers.
|
||||||
|
|
||||||
|
(*) Using memory barriers with circular buffers.
|
||||||
|
- The producer.
|
||||||
|
- The consumer.
|
||||||
|
|
||||||
|
|
||||||
|
==========================
|
||||||
|
WHAT IS A CIRCULAR BUFFER?
|
||||||
|
==========================
|
||||||
|
|
||||||
|
First of all, what is a circular buffer? A circular buffer is a buffer of
|
||||||
|
fixed, finite size into which there are two indices:
|
||||||
|
|
||||||
|
(1) A 'head' index - the point at which the producer inserts items into the
|
||||||
|
buffer.
|
||||||
|
|
||||||
|
(2) A 'tail' index - the point at which the consumer finds the next item in
|
||||||
|
the buffer.
|
||||||
|
|
||||||
|
Typically when the tail pointer is equal to the head pointer, the buffer is
|
||||||
|
empty; and the buffer is full when the head pointer is one less than the tail
|
||||||
|
pointer.
|
||||||
|
|
||||||
|
The head index is incremented when items are added, and the tail index when
|
||||||
|
items are removed. The tail index should never jump the head index, and both
|
||||||
|
indices should be wrapped to 0 when they reach the end of the buffer, thus
|
||||||
|
allowing an infinite amount of data to flow through the buffer.
|
||||||
|
|
||||||
|
Typically, items will all be of the same unit size, but this isn't strictly
|
||||||
|
required to use the techniques below. The indices can be increased by more
|
||||||
|
than 1 if multiple items or variable-sized items are to be included in the
|
||||||
|
buffer, provided that neither index overtakes the other. The implementer must
|
||||||
|
be careful, however, as a region more than one unit in size may wrap the end of
|
||||||
|
the buffer and be broken into two segments.
|
||||||
|
|
||||||
|
|
||||||
|
============================
|
||||||
|
MEASURING POWER-OF-2 BUFFERS
|
||||||
|
============================
|
||||||
|
|
||||||
|
Calculation of the occupancy or the remaining capacity of an arbitrarily sized
|
||||||
|
circular buffer would normally be a slow operation, requiring the use of a
|
||||||
|
modulus (divide) instruction. However, if the buffer is of a power-of-2 size,
|
||||||
|
then a much quicker bitwise-AND instruction can be used instead.
|
||||||
|
|
||||||
|
Linux provides a set of macros for handling power-of-2 circular buffers. These
|
||||||
|
can be made use of by:
|
||||||
|
|
||||||
|
#include <linux/circ_buf.h>
|
||||||
|
|
||||||
|
The macros are:
|
||||||
|
|
||||||
|
(*) Measure the remaining capacity of a buffer:
|
||||||
|
|
||||||
|
CIRC_SPACE(head_index, tail_index, buffer_size);
|
||||||
|
|
||||||
|
This returns the amount of space left in the buffer[1] into which items
|
||||||
|
can be inserted.
|
||||||
|
|
||||||
|
|
||||||
|
(*) Measure the maximum consecutive immediate space in a buffer:
|
||||||
|
|
||||||
|
CIRC_SPACE_TO_END(head_index, tail_index, buffer_size);
|
||||||
|
|
||||||
|
This returns the amount of consecutive space left in the buffer[1] into
|
||||||
|
which items can be immediately inserted without having to wrap back to the
|
||||||
|
beginning of the buffer.
|
||||||
|
|
||||||
|
|
||||||
|
(*) Measure the occupancy of a buffer:
|
||||||
|
|
||||||
|
CIRC_CNT(head_index, tail_index, buffer_size);
|
||||||
|
|
||||||
|
This returns the number of items currently occupying a buffer[2].
|
||||||
|
|
||||||
|
|
||||||
|
(*) Measure the non-wrapping occupancy of a buffer:
|
||||||
|
|
||||||
|
CIRC_CNT_TO_END(head_index, tail_index, buffer_size);
|
||||||
|
|
||||||
|
This returns the number of consecutive items[2] that can be extracted from
|
||||||
|
the buffer without having to wrap back to the beginning of the buffer.
|
||||||
|
|
||||||
|
|
||||||
|
Each of these macros will nominally return a value between 0 and buffer_size-1,
|
||||||
|
however:
|
||||||
|
|
||||||
|
[1] CIRC_SPACE*() are intended to be used in the producer. To the producer
|
||||||
|
they will return a lower bound as the producer controls the head index,
|
||||||
|
but the consumer may still be depleting the buffer on another CPU and
|
||||||
|
moving the tail index.
|
||||||
|
|
||||||
|
To the consumer it will show an upper bound as the producer may be busy
|
||||||
|
depleting the space.
|
||||||
|
|
||||||
|
[2] CIRC_CNT*() are intended to be used in the consumer. To the consumer they
|
||||||
|
will return a lower bound as the consumer controls the tail index, but the
|
||||||
|
producer may still be filling the buffer on another CPU and moving the
|
||||||
|
head index.
|
||||||
|
|
||||||
|
To the producer it will show an upper bound as the consumer may be busy
|
||||||
|
emptying the buffer.
|
||||||
|
|
||||||
|
[3] To a third party, the order in which the writes to the indices by the
|
||||||
|
producer and consumer become visible cannot be guaranteed as they are
|
||||||
|
independent and may be made on different CPUs - so the result in such a
|
||||||
|
situation will merely be a guess, and may even be negative.
|
||||||
|
|
||||||
|
|
||||||
|
===========================================
|
||||||
|
USING MEMORY BARRIERS WITH CIRCULAR BUFFERS
|
||||||
|
===========================================
|
||||||
|
|
||||||
|
By using memory barriers in conjunction with circular buffers, you can avoid
|
||||||
|
the need to:
|
||||||
|
|
||||||
|
(1) use a single lock to govern access to both ends of the buffer, thus
|
||||||
|
allowing the buffer to be filled and emptied at the same time; and
|
||||||
|
|
||||||
|
(2) use atomic counter operations.
|
||||||
|
|
||||||
|
There are two sides to this: the producer that fills the buffer, and the
|
||||||
|
consumer that empties it. Only one thing should be filling a buffer at any one
|
||||||
|
time, and only one thing should be emptying a buffer at any one time, but the
|
||||||
|
two sides can operate simultaneously.
|
||||||
|
|
||||||
|
|
||||||
|
THE PRODUCER
|
||||||
|
------------
|
||||||
|
|
||||||
|
The producer will look something like this:
|
||||||
|
|
||||||
|
spin_lock(&producer_lock);
|
||||||
|
|
||||||
|
unsigned long head = buffer->head;
|
||||||
|
unsigned long tail = ACCESS_ONCE(buffer->tail);
|
||||||
|
|
||||||
|
if (CIRC_SPACE(head, tail, buffer->size) >= 1) {
|
||||||
|
/* insert one item into the buffer */
|
||||||
|
struct item *item = buffer[head];
|
||||||
|
|
||||||
|
produce_item(item);
|
||||||
|
|
||||||
|
smp_wmb(); /* commit the item before incrementing the head */
|
||||||
|
|
||||||
|
buffer->head = (head + 1) & (buffer->size - 1);
|
||||||
|
|
||||||
|
/* wake_up() will make sure that the head is committed before
|
||||||
|
* waking anyone up */
|
||||||
|
wake_up(consumer);
|
||||||
|
}
|
||||||
|
|
||||||
|
spin_unlock(&producer_lock);
|
||||||
|
|
||||||
|
This will instruct the CPU that the contents of the new item must be written
|
||||||
|
before the head index makes it available to the consumer and then instructs the
|
||||||
|
CPU that the revised head index must be written before the consumer is woken.
|
||||||
|
|
||||||
|
Note that wake_up() doesn't have to be the exact mechanism used, but whatever
|
||||||
|
is used must guarantee a (write) memory barrier between the update of the head
|
||||||
|
index and the change of state of the consumer, if a change of state occurs.
|
||||||
|
|
||||||
|
|
||||||
|
THE CONSUMER
|
||||||
|
------------
|
||||||
|
|
||||||
|
The consumer will look something like this:
|
||||||
|
|
||||||
|
spin_lock(&consumer_lock);
|
||||||
|
|
||||||
|
unsigned long head = ACCESS_ONCE(buffer->head);
|
||||||
|
unsigned long tail = buffer->tail;
|
||||||
|
|
||||||
|
if (CIRC_CNT(head, tail, buffer->size) >= 1) {
|
||||||
|
/* read index before reading contents at that index */
|
||||||
|
smp_read_barrier_depends();
|
||||||
|
|
||||||
|
/* extract one item from the buffer */
|
||||||
|
struct item *item = buffer[tail];
|
||||||
|
|
||||||
|
consume_item(item);
|
||||||
|
|
||||||
|
smp_mb(); /* finish reading descriptor before incrementing tail */
|
||||||
|
|
||||||
|
buffer->tail = (tail + 1) & (buffer->size - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
spin_unlock(&consumer_lock);
|
||||||
|
|
||||||
|
This will instruct the CPU to make sure the index is up to date before reading
|
||||||
|
the new item, and then it shall make sure the CPU has finished reading the item
|
||||||
|
before it writes the new tail pointer, which will erase the item.
|
||||||
|
|
||||||
|
|
||||||
|
Note the use of ACCESS_ONCE() in both algorithms to read the opposition index.
|
||||||
|
This prevents the compiler from discarding and reloading its cached value -
|
||||||
|
which some compilers will do across smp_read_barrier_depends(). This isn't
|
||||||
|
strictly needed if you can be sure that the opposition index will _only_ be
|
||||||
|
used the once.
|
||||||
|
|
||||||
|
|
||||||
|
===============
|
||||||
|
FURTHER READING
|
||||||
|
===============
|
||||||
|
|
||||||
|
See also Documentation/memory-barriers.txt for a description of Linux's memory
|
||||||
|
barrier facilities.
|
||||||
@@ -25,6 +25,7 @@
|
|||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/moduleparam.h>
|
#include <linux/moduleparam.h>
|
||||||
#include <linux/skbuff.h>
|
#include <linux/skbuff.h>
|
||||||
|
#include <linux/slab.h>
|
||||||
#include <linux/timer.h>
|
#include <linux/timer.h>
|
||||||
|
|
||||||
#include <linux/connector.h>
|
#include <linux/connector.h>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
|
|
||||||
What is imacfb?
|
What is efifb?
|
||||||
===============
|
===============
|
||||||
|
|
||||||
This is a generic EFI platform driver for Intel based Apple computers.
|
This is a generic EFI platform driver for Intel based Apple computers.
|
||||||
Imacfb is only for EFI booted Intel Macs.
|
efifb is only for EFI booted Intel Macs.
|
||||||
|
|
||||||
Supported Hardware
|
Supported Hardware
|
||||||
==================
|
==================
|
||||||
@@ -16,16 +16,16 @@ MacMini
|
|||||||
How to use it?
|
How to use it?
|
||||||
==============
|
==============
|
||||||
|
|
||||||
Imacfb does not have any kind of autodetection of your machine.
|
efifb does not have any kind of autodetection of your machine.
|
||||||
You have to add the following kernel parameters in your elilo.conf:
|
You have to add the following kernel parameters in your elilo.conf:
|
||||||
Macbook :
|
Macbook :
|
||||||
video=imacfb:macbook
|
video=efifb:macbook
|
||||||
MacMini :
|
MacMini :
|
||||||
video=imacfb:mini
|
video=efifb:mini
|
||||||
Macbook Pro 15", iMac 17" :
|
Macbook Pro 15", iMac 17" :
|
||||||
video=imacfb:i17
|
video=efifb:i17
|
||||||
Macbook Pro 17", iMac 20" :
|
Macbook Pro 17", iMac 20" :
|
||||||
video=imacfb:i20
|
video=efifb:i20
|
||||||
|
|
||||||
--
|
--
|
||||||
Edgar Hucek <gimli@dark-green.com>
|
Edgar Hucek <gimli@dark-green.com>
|
||||||
@@ -16,6 +16,8 @@ befs.txt
|
|||||||
- information about the BeOS filesystem for Linux.
|
- information about the BeOS filesystem for Linux.
|
||||||
bfs.txt
|
bfs.txt
|
||||||
- info for the SCO UnixWare Boot Filesystem (BFS).
|
- info for the SCO UnixWare Boot Filesystem (BFS).
|
||||||
|
ceph.txt
|
||||||
|
- info for the Ceph Distributed File System
|
||||||
cifs.txt
|
cifs.txt
|
||||||
- description of the CIFS filesystem.
|
- description of the CIFS filesystem.
|
||||||
coda.txt
|
coda.txt
|
||||||
|
|||||||
@@ -37,6 +37,15 @@ For Plan 9 From User Space applications (http://swtch.com/plan9)
|
|||||||
|
|
||||||
mount -t 9p `namespace`/acme /mnt/9 -o trans=unix,uname=$USER
|
mount -t 9p `namespace`/acme /mnt/9 -o trans=unix,uname=$USER
|
||||||
|
|
||||||
|
For server running on QEMU host with virtio transport:
|
||||||
|
|
||||||
|
mount -t 9p -o trans=virtio <mount_tag> /mnt/9
|
||||||
|
|
||||||
|
where mount_tag is the tag associated by the server to each of the exported
|
||||||
|
mount points. Each 9P export is seen by the client as a virtio device with an
|
||||||
|
associated "mount_tag" property. Available mount tags can be
|
||||||
|
seen by reading /sys/bus/virtio/drivers/9pnet_virtio/virtio<n>/mount_tag files.
|
||||||
|
|
||||||
OPTIONS
|
OPTIONS
|
||||||
=======
|
=======
|
||||||
|
|
||||||
@@ -47,7 +56,7 @@ OPTIONS
|
|||||||
fd - used passed file descriptors for connection
|
fd - used passed file descriptors for connection
|
||||||
(see rfdno and wfdno)
|
(see rfdno and wfdno)
|
||||||
virtio - connect to the next virtio channel available
|
virtio - connect to the next virtio channel available
|
||||||
(from lguest or KVM with trans_virtio module)
|
(from QEMU with trans_virtio module)
|
||||||
rdma - connect to a specified RDMA channel
|
rdma - connect to a specified RDMA channel
|
||||||
|
|
||||||
uname=name user name to attempt mount as on the remote server. The
|
uname=name user name to attempt mount as on the remote server. The
|
||||||
@@ -85,7 +94,12 @@ OPTIONS
|
|||||||
|
|
||||||
port=n port to connect to on the remote server
|
port=n port to connect to on the remote server
|
||||||
|
|
||||||
noextend force legacy mode (no 9p2000.u semantics)
|
noextend force legacy mode (no 9p2000.u or 9p2000.L semantics)
|
||||||
|
|
||||||
|
version=name Select 9P protocol version. Valid options are:
|
||||||
|
9p2000 - Legacy mode (same as noextend)
|
||||||
|
9p2000.u - Use 9P2000.u protocol
|
||||||
|
9p2000.L - Use 9P2000.L protocol
|
||||||
|
|
||||||
dfltuid attempt to mount as a particular uid
|
dfltuid attempt to mount as a particular uid
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ Basic features include:
|
|||||||
|
|
||||||
* POSIX semantics
|
* POSIX semantics
|
||||||
* Seamless scaling from 1 to many thousands of nodes
|
* Seamless scaling from 1 to many thousands of nodes
|
||||||
* High availability and reliability. No single points of failure.
|
* High availability and reliability. No single point of failure.
|
||||||
* N-way replication of data across storage nodes
|
* N-way replication of data across storage nodes
|
||||||
* Fast recovery from node failures
|
* Fast recovery from node failures
|
||||||
* Automatic rebalancing of data on node addition/removal
|
* Automatic rebalancing of data on node addition/removal
|
||||||
@@ -94,7 +94,7 @@ Mount Options
|
|||||||
|
|
||||||
wsize=X
|
wsize=X
|
||||||
Specify the maximum write size in bytes. By default there is no
|
Specify the maximum write size in bytes. By default there is no
|
||||||
maximu. Ceph will normally size writes based on the file stripe
|
maximum. Ceph will normally size writes based on the file stripe
|
||||||
size.
|
size.
|
||||||
|
|
||||||
rsize=X
|
rsize=X
|
||||||
@@ -115,7 +115,7 @@ Mount Options
|
|||||||
number of entries in that directory.
|
number of entries in that directory.
|
||||||
|
|
||||||
nocrc
|
nocrc
|
||||||
Disable CRC32C calculation for data writes. If set, the OSD
|
Disable CRC32C calculation for data writes. If set, the storage node
|
||||||
must rely on TCP's error correction to detect data corruption
|
must rely on TCP's error correction to detect data corruption
|
||||||
in the data payload.
|
in the data payload.
|
||||||
|
|
||||||
@@ -133,7 +133,8 @@ For more information on Ceph, see the home page at
|
|||||||
http://ceph.newdream.net/
|
http://ceph.newdream.net/
|
||||||
|
|
||||||
The Linux kernel client source tree is available at
|
The Linux kernel client source tree is available at
|
||||||
git://ceph.newdream.net/linux-ceph-client.git
|
git://ceph.newdream.net/git/ceph-client.git
|
||||||
|
git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client.git
|
||||||
|
|
||||||
and the source for the full system is at
|
and the source for the full system is at
|
||||||
git://ceph.newdream.net/ceph.git
|
git://ceph.newdream.net/git/ceph.git
|
||||||
|
|||||||
@@ -82,11 +82,13 @@ tmpfs has a mount option to set the NUMA memory allocation policy for
|
|||||||
all files in that instance (if CONFIG_NUMA is enabled) - which can be
|
all files in that instance (if CONFIG_NUMA is enabled) - which can be
|
||||||
adjusted on the fly via 'mount -o remount ...'
|
adjusted on the fly via 'mount -o remount ...'
|
||||||
|
|
||||||
mpol=default prefers to allocate memory from the local node
|
mpol=default use the process allocation policy
|
||||||
|
(see set_mempolicy(2))
|
||||||
mpol=prefer:Node prefers to allocate memory from the given Node
|
mpol=prefer:Node prefers to allocate memory from the given Node
|
||||||
mpol=bind:NodeList allocates memory only from nodes in NodeList
|
mpol=bind:NodeList allocates memory only from nodes in NodeList
|
||||||
mpol=interleave prefers to allocate from each node in turn
|
mpol=interleave prefers to allocate from each node in turn
|
||||||
mpol=interleave:NodeList allocates from each node of NodeList in turn
|
mpol=interleave:NodeList allocates from each node of NodeList in turn
|
||||||
|
mpol=local prefers to allocate memory from the local node
|
||||||
|
|
||||||
NodeList format is a comma-separated list of decimal numbers and ranges,
|
NodeList format is a comma-separated list of decimal numbers and ranges,
|
||||||
a range being two hyphen-separated decimal numbers, the smallest and
|
a range being two hyphen-separated decimal numbers, the smallest and
|
||||||
@@ -134,3 +136,5 @@ Author:
|
|||||||
Christoph Rohland <cr@sap.com>, 1.12.01
|
Christoph Rohland <cr@sap.com>, 1.12.01
|
||||||
Updated:
|
Updated:
|
||||||
Hugh Dickins, 4 June 2007
|
Hugh Dickins, 4 June 2007
|
||||||
|
Updated:
|
||||||
|
KOSAKI Motohiro, 16 Mar 2010
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
============================
|
============================
|
||||||
|
|
||||||
By: David Howells <dhowells@redhat.com>
|
By: David Howells <dhowells@redhat.com>
|
||||||
|
Paul E. McKenney <paulmck@linux.vnet.ibm.com>
|
||||||
|
|
||||||
Contents:
|
Contents:
|
||||||
|
|
||||||
@@ -60,6 +61,10 @@ Contents:
|
|||||||
|
|
||||||
- And then there's the Alpha.
|
- And then there's the Alpha.
|
||||||
|
|
||||||
|
(*) Example uses.
|
||||||
|
|
||||||
|
- Circular buffers.
|
||||||
|
|
||||||
(*) References.
|
(*) References.
|
||||||
|
|
||||||
|
|
||||||
@@ -2226,6 +2231,21 @@ The Alpha defines the Linux kernel's memory barrier model.
|
|||||||
See the subsection on "Cache Coherency" above.
|
See the subsection on "Cache Coherency" above.
|
||||||
|
|
||||||
|
|
||||||
|
============
|
||||||
|
EXAMPLE USES
|
||||||
|
============
|
||||||
|
|
||||||
|
CIRCULAR BUFFERS
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Memory barriers can be used to implement circular buffering without the need
|
||||||
|
of a lock to serialise the producer with the consumer. See:
|
||||||
|
|
||||||
|
Documentation/circular-buffers.txt
|
||||||
|
|
||||||
|
for details.
|
||||||
|
|
||||||
|
|
||||||
==========
|
==========
|
||||||
REFERENCES
|
REFERENCES
|
||||||
==========
|
==========
|
||||||
|
|||||||
@@ -41,11 +41,12 @@ SOF_TIMESTAMPING_SOFTWARE: return system time stamp generated in
|
|||||||
SOF_TIMESTAMPING_TX/RX determine how time stamps are generated.
|
SOF_TIMESTAMPING_TX/RX determine how time stamps are generated.
|
||||||
SOF_TIMESTAMPING_RAW/SYS determine how they are reported in the
|
SOF_TIMESTAMPING_RAW/SYS determine how they are reported in the
|
||||||
following control message:
|
following control message:
|
||||||
struct scm_timestamping {
|
|
||||||
struct timespec systime;
|
struct scm_timestamping {
|
||||||
struct timespec hwtimetrans;
|
struct timespec systime;
|
||||||
struct timespec hwtimeraw;
|
struct timespec hwtimetrans;
|
||||||
};
|
struct timespec hwtimeraw;
|
||||||
|
};
|
||||||
|
|
||||||
recvmsg() can be used to get this control message for regular incoming
|
recvmsg() can be used to get this control message for regular incoming
|
||||||
packets. For send time stamps the outgoing packet is looped back to
|
packets. For send time stamps the outgoing packet is looped back to
|
||||||
@@ -87,12 +88,13 @@ by the network device and will be empty without that support.
|
|||||||
SIOCSHWTSTAMP:
|
SIOCSHWTSTAMP:
|
||||||
|
|
||||||
Hardware time stamping must also be initialized for each device driver
|
Hardware time stamping must also be initialized for each device driver
|
||||||
that is expected to do hardware time stamping. The parameter is:
|
that is expected to do hardware time stamping. The parameter is defined in
|
||||||
|
/include/linux/net_tstamp.h as:
|
||||||
|
|
||||||
struct hwtstamp_config {
|
struct hwtstamp_config {
|
||||||
int flags; /* no flags defined right now, must be zero */
|
int flags; /* no flags defined right now, must be zero */
|
||||||
int tx_type; /* HWTSTAMP_TX_* */
|
int tx_type; /* HWTSTAMP_TX_* */
|
||||||
int rx_filter; /* HWTSTAMP_FILTER_* */
|
int rx_filter; /* HWTSTAMP_FILTER_* */
|
||||||
};
|
};
|
||||||
|
|
||||||
Desired behavior is passed into the kernel and to a specific device by
|
Desired behavior is passed into the kernel and to a specific device by
|
||||||
@@ -139,42 +141,56 @@ enum {
|
|||||||
/* time stamp any incoming packet */
|
/* time stamp any incoming packet */
|
||||||
HWTSTAMP_FILTER_ALL,
|
HWTSTAMP_FILTER_ALL,
|
||||||
|
|
||||||
/* return value: time stamp all packets requested plus some others */
|
/* return value: time stamp all packets requested plus some others */
|
||||||
HWTSTAMP_FILTER_SOME,
|
HWTSTAMP_FILTER_SOME,
|
||||||
|
|
||||||
/* PTP v1, UDP, any kind of event packet */
|
/* PTP v1, UDP, any kind of event packet */
|
||||||
HWTSTAMP_FILTER_PTP_V1_L4_EVENT,
|
HWTSTAMP_FILTER_PTP_V1_L4_EVENT,
|
||||||
|
|
||||||
...
|
/* for the complete list of values, please check
|
||||||
|
* the include file /include/linux/net_tstamp.h
|
||||||
|
*/
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
DEVICE IMPLEMENTATION
|
DEVICE IMPLEMENTATION
|
||||||
|
|
||||||
A driver which supports hardware time stamping must support the
|
A driver which supports hardware time stamping must support the
|
||||||
SIOCSHWTSTAMP ioctl. Time stamps for received packets must be stored
|
SIOCSHWTSTAMP ioctl and update the supplied struct hwtstamp_config with
|
||||||
in the skb with skb_hwtstamp_set().
|
the actual values as described in the section on SIOCSHWTSTAMP.
|
||||||
|
|
||||||
|
Time stamps for received packets must be stored in the skb. To get a pointer
|
||||||
|
to the shared time stamp structure of the skb call skb_hwtstamps(). Then
|
||||||
|
set the time stamps in the structure:
|
||||||
|
|
||||||
|
struct skb_shared_hwtstamps {
|
||||||
|
/* hardware time stamp transformed into duration
|
||||||
|
* since arbitrary point in time
|
||||||
|
*/
|
||||||
|
ktime_t hwtstamp;
|
||||||
|
ktime_t syststamp; /* hwtstamp transformed to system time base */
|
||||||
|
};
|
||||||
|
|
||||||
Time stamps for outgoing packets are to be generated as follows:
|
Time stamps for outgoing packets are to be generated as follows:
|
||||||
- In hard_start_xmit(), check if skb_hwtstamp_check_tx_hardware()
|
- In hard_start_xmit(), check if skb_tx(skb)->hardware is set no-zero.
|
||||||
returns non-zero. If yes, then the driver is expected
|
If yes, then the driver is expected to do hardware time stamping.
|
||||||
to do hardware time stamping.
|
|
||||||
- If this is possible for the skb and requested, then declare
|
- If this is possible for the skb and requested, then declare
|
||||||
that the driver is doing the time stamping by calling
|
that the driver is doing the time stamping by setting the field
|
||||||
skb_hwtstamp_tx_in_progress(). A driver not supporting
|
skb_tx(skb)->in_progress non-zero. You might want to keep a pointer
|
||||||
hardware time stamping doesn't do that. A driver must never
|
to the associated skb for the next step and not free the skb. A driver
|
||||||
touch sk_buff::tstamp! It is used to store how time stamping
|
not supporting hardware time stamping doesn't do that. A driver must
|
||||||
for an outgoing packets is to be done.
|
never touch sk_buff::tstamp! It is used to store software generated
|
||||||
|
time stamps by the network subsystem.
|
||||||
- As soon as the driver has sent the packet and/or obtained a
|
- As soon as the driver has sent the packet and/or obtained a
|
||||||
hardware time stamp for it, it passes the time stamp back by
|
hardware time stamp for it, it passes the time stamp back by
|
||||||
calling skb_hwtstamp_tx() with the original skb, the raw
|
calling skb_hwtstamp_tx() with the original skb, the raw
|
||||||
hardware time stamp and a handle to the device (necessary
|
hardware time stamp. skb_hwtstamp_tx() clones the original skb and
|
||||||
to convert the hardware time stamp to system time). If obtaining
|
adds the timestamps, therefore the original skb has to be freed now.
|
||||||
the hardware time stamp somehow fails, then the driver should
|
If obtaining the hardware time stamp somehow fails, then the driver
|
||||||
not fall back to software time stamping. The rationale is that
|
should not fall back to software time stamping. The rationale is that
|
||||||
this would occur at a later time in the processing pipeline
|
this would occur at a later time in the processing pipeline than other
|
||||||
than other software time stamping and therefore could lead
|
software time stamping and therefore could lead to unexpected deltas
|
||||||
to unexpected deltas between time stamps.
|
between time stamps.
|
||||||
- If the driver did not call skb_hwtstamp_tx_in_progress(), then
|
- If the driver did not call set skb_tx(skb)->in_progress, then
|
||||||
dev_hard_start_xmit() checks whether software time stamping
|
dev_hard_start_xmit() checks whether software time stamping
|
||||||
is wanted as fallback and potentially generates the time stamp.
|
is wanted as fallback and potentially generates the time stamp.
|
||||||
|
|||||||
@@ -21,6 +21,15 @@ Required properties:
|
|||||||
- fsl,qe-num-snums: define how many serial number(SNUM) the QE can use for the
|
- fsl,qe-num-snums: define how many serial number(SNUM) the QE can use for the
|
||||||
threads.
|
threads.
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
- fsl,firmware-phandle:
|
||||||
|
Usage: required only if there is no fsl,qe-firmware child node
|
||||||
|
Value type: <phandle>
|
||||||
|
Definition: Points to a firmware node (see "QE Firmware Node" below)
|
||||||
|
that contains the firmware that should be uploaded for this QE.
|
||||||
|
The compatible property for the firmware node should say,
|
||||||
|
"fsl,qe-firmware".
|
||||||
|
|
||||||
Recommended properties
|
Recommended properties
|
||||||
- brg-frequency : the internal clock source frequency for baud-rate
|
- brg-frequency : the internal clock source frequency for baud-rate
|
||||||
generators in Hz.
|
generators in Hz.
|
||||||
@@ -59,3 +68,48 @@ Example:
|
|||||||
reg = <0 c000>;
|
reg = <0 c000>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
* QE Firmware Node
|
||||||
|
|
||||||
|
This node defines a firmware binary that is embedded in the device tree, for
|
||||||
|
the purpose of passing the firmware from bootloader to the kernel, or from
|
||||||
|
the hypervisor to the guest.
|
||||||
|
|
||||||
|
The firmware node itself contains the firmware binary contents, a compatible
|
||||||
|
property, and any firmware-specific properties. The node should be placed
|
||||||
|
inside a QE node that needs it. Doing so eliminates the need for a
|
||||||
|
fsl,firmware-phandle property. Other QE nodes that need the same firmware
|
||||||
|
should define an fsl,firmware-phandle property that points to the firmware node
|
||||||
|
in the first QE node.
|
||||||
|
|
||||||
|
The fsl,firmware property can be specified in the DTS (possibly using incbin)
|
||||||
|
or can be inserted by the boot loader at boot time.
|
||||||
|
|
||||||
|
Required properties:
|
||||||
|
- compatible
|
||||||
|
Usage: required
|
||||||
|
Value type: <string>
|
||||||
|
Definition: A standard property. Specify a string that indicates what
|
||||||
|
kind of firmware it is. For QE, this should be "fsl,qe-firmware".
|
||||||
|
|
||||||
|
- fsl,firmware
|
||||||
|
Usage: required
|
||||||
|
Value type: <prop-encoded-array>, encoded as an array of bytes
|
||||||
|
Definition: A standard property. This property contains the firmware
|
||||||
|
binary "blob".
|
||||||
|
|
||||||
|
Example:
|
||||||
|
qe1@e0080000 {
|
||||||
|
compatible = "fsl,qe";
|
||||||
|
qe_firmware:qe-firmware {
|
||||||
|
compatible = "fsl,qe-firmware";
|
||||||
|
fsl,firmware = [0x70 0xcd 0x00 0x00 0x01 0x46 0x45 ...];
|
||||||
|
};
|
||||||
|
...
|
||||||
|
};
|
||||||
|
|
||||||
|
qe2@e0090000 {
|
||||||
|
compatible = "fsl,qe";
|
||||||
|
fsl,firmware-phandle = <&qe_firmware>;
|
||||||
|
...
|
||||||
|
};
|
||||||
|
|||||||
@@ -119,10 +119,18 @@ the codec slots 0 and 1 no matter what the hardware reports.
|
|||||||
|
|
||||||
Interrupt Handling
|
Interrupt Handling
|
||||||
~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~
|
||||||
In rare but some cases, the interrupt isn't properly handled as
|
HD-audio driver uses MSI as default (if available) since 2.6.33
|
||||||
default. You would notice this by the DMA transfer error reported by
|
kernel as MSI works better on some machines, and in general, it's
|
||||||
ALSA PCM core, for example. Using MSI might help in such a case.
|
better for performance. However, Nvidia controllers showed bad
|
||||||
Pass `enable_msi=1` option for enabling MSI.
|
regressions with MSI (especially in a combination with AMD chipset),
|
||||||
|
thus we disabled MSI for them.
|
||||||
|
|
||||||
|
There seem also still other devices that don't work with MSI. If you
|
||||||
|
see a regression wrt the sound quality (stuttering, etc) or a lock-up
|
||||||
|
in the recent kernel, try to pass `enable_msi=0` option to disable
|
||||||
|
MSI. If it works, you can add the known bad device to the blacklist
|
||||||
|
defined in hda_intel.c. In such a case, please report and give the
|
||||||
|
patch back to the upstream developer.
|
||||||
|
|
||||||
|
|
||||||
HD-AUDIO CODEC
|
HD-AUDIO CODEC
|
||||||
|
|||||||
@@ -63,9 +63,9 @@ way to perform a busy wait is:
|
|||||||
cpu_relax();
|
cpu_relax();
|
||||||
|
|
||||||
The cpu_relax() call can lower CPU power consumption or yield to a
|
The cpu_relax() call can lower CPU power consumption or yield to a
|
||||||
hyperthreaded twin processor; it also happens to serve as a memory barrier,
|
hyperthreaded twin processor; it also happens to serve as a compiler
|
||||||
so, once again, volatile is unnecessary. Of course, busy-waiting is
|
barrier, so, once again, volatile is unnecessary. Of course, busy-
|
||||||
generally an anti-social act to begin with.
|
waiting is generally an anti-social act to begin with.
|
||||||
|
|
||||||
There are still a few rare situations where volatile makes sense in the
|
There are still a few rare situations where volatile makes sense in the
|
||||||
kernel:
|
kernel:
|
||||||
|
|||||||
@@ -17,9 +17,6 @@ int main(void)
|
|||||||
ret = -1;
|
ret = -1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
ret = fsync(fd);
|
|
||||||
if (ret)
|
|
||||||
break;
|
|
||||||
sleep(10);
|
sleep(10);
|
||||||
}
|
}
|
||||||
close(fd);
|
close(fd);
|
||||||
|
|||||||
@@ -31,6 +31,8 @@ static void keep_alive(void)
|
|||||||
*/
|
*/
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
int flags;
|
||||||
|
|
||||||
fd = open("/dev/watchdog", O_WRONLY);
|
fd = open("/dev/watchdog", O_WRONLY);
|
||||||
|
|
||||||
if (fd == -1) {
|
if (fd == -1) {
|
||||||
@@ -41,12 +43,14 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
if (argc > 1) {
|
if (argc > 1) {
|
||||||
if (!strncasecmp(argv[1], "-d", 2)) {
|
if (!strncasecmp(argv[1], "-d", 2)) {
|
||||||
ioctl(fd, WDIOC_SETOPTIONS, WDIOS_DISABLECARD);
|
flags = WDIOS_DISABLECARD;
|
||||||
|
ioctl(fd, WDIOC_SETOPTIONS, &flags);
|
||||||
fprintf(stderr, "Watchdog card disabled.\n");
|
fprintf(stderr, "Watchdog card disabled.\n");
|
||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
exit(0);
|
exit(0);
|
||||||
} else if (!strncasecmp(argv[1], "-e", 2)) {
|
} else if (!strncasecmp(argv[1], "-e", 2)) {
|
||||||
ioctl(fd, WDIOC_SETOPTIONS, WDIOS_ENABLECARD);
|
flags = WDIOS_ENABLECARD;
|
||||||
|
ioctl(fd, WDIOC_SETOPTIONS, &flags);
|
||||||
fprintf(stderr, "Watchdog card enabled.\n");
|
fprintf(stderr, "Watchdog card enabled.\n");
|
||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
exit(0);
|
exit(0);
|
||||||
|
|||||||
@@ -222,11 +222,10 @@ returned value is the temperature in degrees fahrenheit.
|
|||||||
ioctl(fd, WDIOC_GETTEMP, &temperature);
|
ioctl(fd, WDIOC_GETTEMP, &temperature);
|
||||||
|
|
||||||
Finally the SETOPTIONS ioctl can be used to control some aspects of
|
Finally the SETOPTIONS ioctl can be used to control some aspects of
|
||||||
the cards operation; right now the pcwd driver is the only one
|
the cards operation.
|
||||||
supporting this ioctl.
|
|
||||||
|
|
||||||
int options = 0;
|
int options = 0;
|
||||||
ioctl(fd, WDIOC_SETOPTIONS, options);
|
ioctl(fd, WDIOC_SETOPTIONS, &options);
|
||||||
|
|
||||||
The following options are available:
|
The following options are available:
|
||||||
|
|
||||||
|
|||||||
+38
-27
@@ -797,12 +797,12 @@ M: Michael Petchkovsky <mkpetch@internode.on.net>
|
|||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
ARM/NOMADIK ARCHITECTURE
|
ARM/NOMADIK ARCHITECTURE
|
||||||
M: Alessandro Rubini <rubini@unipv.it>
|
M: Alessandro Rubini <rubini@unipv.it>
|
||||||
M: STEricsson <STEricsson_nomadik_linux@list.st.com>
|
M: STEricsson <STEricsson_nomadik_linux@list.st.com>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: arch/arm/mach-nomadik/
|
F: arch/arm/mach-nomadik/
|
||||||
F: arch/arm/plat-nomadik/
|
F: arch/arm/plat-nomadik/
|
||||||
|
|
||||||
ARM/OPENMOKO NEO FREERUNNER (GTA02) MACHINE SUPPORT
|
ARM/OPENMOKO NEO FREERUNNER (GTA02) MACHINE SUPPORT
|
||||||
M: Nelson Castillo <arhuaco@freaks-unidos.net>
|
M: Nelson Castillo <arhuaco@freaks-unidos.net>
|
||||||
@@ -1443,7 +1443,7 @@ F: arch/powerpc/platforms/cell/
|
|||||||
|
|
||||||
CEPH DISTRIBUTED FILE SYSTEM CLIENT
|
CEPH DISTRIBUTED FILE SYSTEM CLIENT
|
||||||
M: Sage Weil <sage@newdream.net>
|
M: Sage Weil <sage@newdream.net>
|
||||||
L: ceph-devel@lists.sourceforge.net
|
L: ceph-devel@vger.kernel.org
|
||||||
W: http://ceph.newdream.net/
|
W: http://ceph.newdream.net/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client.git
|
||||||
S: Supported
|
S: Supported
|
||||||
@@ -1927,17 +1927,17 @@ F: drivers/scsi/dpt*
|
|||||||
F: drivers/scsi/dpt/
|
F: drivers/scsi/dpt/
|
||||||
|
|
||||||
DRBD DRIVER
|
DRBD DRIVER
|
||||||
P: Philipp Reisner
|
P: Philipp Reisner
|
||||||
P: Lars Ellenberg
|
P: Lars Ellenberg
|
||||||
M: drbd-dev@lists.linbit.com
|
M: drbd-dev@lists.linbit.com
|
||||||
L: drbd-user@lists.linbit.com
|
L: drbd-user@lists.linbit.com
|
||||||
W: http://www.drbd.org
|
W: http://www.drbd.org
|
||||||
T: git git://git.drbd.org/linux-2.6-drbd.git drbd
|
T: git git://git.drbd.org/linux-2.6-drbd.git drbd
|
||||||
T: git git://git.drbd.org/drbd-8.3.git
|
T: git git://git.drbd.org/drbd-8.3.git
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/block/drbd/
|
F: drivers/block/drbd/
|
||||||
F: lib/lru_cache.c
|
F: lib/lru_cache.c
|
||||||
F: Documentation/blockdev/drbd/
|
F: Documentation/blockdev/drbd/
|
||||||
|
|
||||||
DRIVER CORE, KOBJECTS, AND SYSFS
|
DRIVER CORE, KOBJECTS, AND SYSFS
|
||||||
M: Greg Kroah-Hartman <gregkh@suse.de>
|
M: Greg Kroah-Hartman <gregkh@suse.de>
|
||||||
@@ -2475,12 +2475,6 @@ L: linuxppc-dev@ozlabs.org
|
|||||||
S: Odd Fixes
|
S: Odd Fixes
|
||||||
F: drivers/char/hvc_*
|
F: drivers/char/hvc_*
|
||||||
|
|
||||||
VIRTIO CONSOLE DRIVER
|
|
||||||
M: Amit Shah <amit.shah@redhat.com>
|
|
||||||
L: virtualization@lists.linux-foundation.org
|
|
||||||
S: Maintained
|
|
||||||
F: drivers/char/virtio_console.c
|
|
||||||
|
|
||||||
iSCSI BOOT FIRMWARE TABLE (iBFT) DRIVER
|
iSCSI BOOT FIRMWARE TABLE (iBFT) DRIVER
|
||||||
M: Peter Jones <pjones@redhat.com>
|
M: Peter Jones <pjones@redhat.com>
|
||||||
M: Konrad Rzeszutek Wilk <konrad@kernel.org>
|
M: Konrad Rzeszutek Wilk <konrad@kernel.org>
|
||||||
@@ -3270,6 +3264,16 @@ S: Maintained
|
|||||||
F: include/linux/kexec.h
|
F: include/linux/kexec.h
|
||||||
F: kernel/kexec.c
|
F: kernel/kexec.c
|
||||||
|
|
||||||
|
KEYS/KEYRINGS:
|
||||||
|
M: David Howells <dhowells@redhat.com>
|
||||||
|
L: keyrings@linux-nfs.org
|
||||||
|
S: Maintained
|
||||||
|
F: Documentation/keys.txt
|
||||||
|
F: include/linux/key.h
|
||||||
|
F: include/linux/key-type.h
|
||||||
|
F: include/keys/
|
||||||
|
F: security/keys/
|
||||||
|
|
||||||
KGDB
|
KGDB
|
||||||
M: Jason Wessel <jason.wessel@windriver.com>
|
M: Jason Wessel <jason.wessel@windriver.com>
|
||||||
L: kgdb-bugreport@lists.sourceforge.net
|
L: kgdb-bugreport@lists.sourceforge.net
|
||||||
@@ -3519,8 +3523,8 @@ F: drivers/scsi/sym53c8xx_2/
|
|||||||
LTP (Linux Test Project)
|
LTP (Linux Test Project)
|
||||||
M: Rishikesh K Rajak <risrajak@linux.vnet.ibm.com>
|
M: Rishikesh K Rajak <risrajak@linux.vnet.ibm.com>
|
||||||
M: Garrett Cooper <yanegomi@gmail.com>
|
M: Garrett Cooper <yanegomi@gmail.com>
|
||||||
M: Mike Frysinger <vapier@gentoo.org>
|
M: Mike Frysinger <vapier@gentoo.org>
|
||||||
M: Subrata Modak <subrata@linux.vnet.ibm.com>
|
M: Subrata Modak <subrata@linux.vnet.ibm.com>
|
||||||
L: ltp-list@lists.sourceforge.net (subscribers-only)
|
L: ltp-list@lists.sourceforge.net (subscribers-only)
|
||||||
W: http://ltp.sourceforge.net/
|
W: http://ltp.sourceforge.net/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/galak/ltp.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/galak/ltp.git
|
||||||
@@ -5960,6 +5964,13 @@ S: Maintained
|
|||||||
F: Documentation/filesystems/vfat.txt
|
F: Documentation/filesystems/vfat.txt
|
||||||
F: fs/fat/
|
F: fs/fat/
|
||||||
|
|
||||||
|
VIRTIO CONSOLE DRIVER
|
||||||
|
M: Amit Shah <amit.shah@redhat.com>
|
||||||
|
L: virtualization@lists.linux-foundation.org
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/char/virtio_console.c
|
||||||
|
F: include/linux/virtio_console.h
|
||||||
|
|
||||||
VIRTIO HOST (VHOST)
|
VIRTIO HOST (VHOST)
|
||||||
M: "Michael S. Tsirkin" <mst@redhat.com>
|
M: "Michael S. Tsirkin" <mst@redhat.com>
|
||||||
L: kvm@vger.kernel.org
|
L: kvm@vger.kernel.org
|
||||||
@@ -6200,7 +6211,7 @@ F: arch/x86/
|
|||||||
X86 PLATFORM DRIVERS
|
X86 PLATFORM DRIVERS
|
||||||
M: Matthew Garrett <mjg@redhat.com>
|
M: Matthew Garrett <mjg@redhat.com>
|
||||||
L: platform-driver-x86@vger.kernel.org
|
L: platform-driver-x86@vger.kernel.org
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/mjg59/platform-drivers-x86.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/mjg59/platform-drivers-x86.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/platform/x86
|
F: drivers/platform/x86
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user