mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-21 16:29:59 +00:00
Merge branch 'for-linus' of git://git.kernel.dk/linux-2.6-block
* 'for-linus' of git://git.kernel.dk/linux-2.6-block: docbook: add pipes, other fixes blktrace: use cpu_clock() instead of sched_clock() bsg: Fix build for CONFIG_BLOCK=n [patch] QUEUE_FLAG_READFULL QUEUE_FLAG_WRITEFULL comment fix
This commit is contained in:
commit
8e8ef2971b
6 changed files with 28 additions and 19 deletions
|
@ -704,14 +704,23 @@ X!Idrivers/video/console/fonts.c
|
|||
|
||||
<chapter id="splice">
|
||||
<title>splice API</title>
|
||||
<para>)
|
||||
<para>
|
||||
splice is a method for moving blocks of data around inside the
|
||||
kernel, without continually transferring it between the kernel
|
||||
kernel, without continually transferring them between the kernel
|
||||
and user space.
|
||||
</para>
|
||||
!Iinclude/linux/splice.h
|
||||
!Ffs/splice.c
|
||||
</chapter>
|
||||
|
||||
<chapter id="pipes">
|
||||
<title>pipes API</title>
|
||||
<para>
|
||||
Pipe interfaces are all for in-kernel (builtin image) use.
|
||||
They are not exported for use by modules.
|
||||
</para>
|
||||
!Iinclude/linux/pipe_fs_i.h
|
||||
!Ffs/pipe.c
|
||||
</chapter>
|
||||
|
||||
</book>
|
||||
|
|
|
@ -49,8 +49,6 @@ config LSF
|
|||
|
||||
If unsure, say Y.
|
||||
|
||||
endif # BLOCK
|
||||
|
||||
config BLK_DEV_BSG
|
||||
bool "Block layer SG support v4 (EXPERIMENTAL)"
|
||||
depends on EXPERIMENTAL
|
||||
|
@ -64,4 +62,6 @@ config BLK_DEV_BSG
|
|||
protocols (e.g. Task Management Functions and SMP in Serial
|
||||
Attached SCSI).
|
||||
|
||||
endif # BLOCK
|
||||
|
||||
source block/Kconfig.iosched
|
||||
|
|
|
@ -41,7 +41,7 @@ static void trace_note(struct blk_trace *bt, pid_t pid, int action,
|
|||
const int cpu = smp_processor_id();
|
||||
|
||||
t->magic = BLK_IO_TRACE_MAGIC | BLK_IO_TRACE_VERSION;
|
||||
t->time = sched_clock() - per_cpu(blk_trace_cpu_offset, cpu);
|
||||
t->time = cpu_clock(cpu) - per_cpu(blk_trace_cpu_offset, cpu);
|
||||
t->device = bt->dev;
|
||||
t->action = action;
|
||||
t->pid = pid;
|
||||
|
@ -159,7 +159,7 @@ void __blk_add_trace(struct blk_trace *bt, sector_t sector, int bytes,
|
|||
|
||||
t->magic = BLK_IO_TRACE_MAGIC | BLK_IO_TRACE_VERSION;
|
||||
t->sequence = ++(*sequence);
|
||||
t->time = sched_clock() - per_cpu(blk_trace_cpu_offset, cpu);
|
||||
t->time = cpu_clock(cpu) - per_cpu(blk_trace_cpu_offset, cpu);
|
||||
t->sector = sector;
|
||||
t->bytes = bytes;
|
||||
t->action = what;
|
||||
|
@ -488,17 +488,17 @@ void blk_trace_shutdown(struct request_queue *q)
|
|||
}
|
||||
|
||||
/*
|
||||
* Average offset over two calls to sched_clock() with a gettimeofday()
|
||||
* Average offset over two calls to cpu_clock() with a gettimeofday()
|
||||
* in the middle
|
||||
*/
|
||||
static void blk_check_time(unsigned long long *t)
|
||||
static void blk_check_time(unsigned long long *t, int this_cpu)
|
||||
{
|
||||
unsigned long long a, b;
|
||||
struct timeval tv;
|
||||
|
||||
a = sched_clock();
|
||||
a = cpu_clock(this_cpu);
|
||||
do_gettimeofday(&tv);
|
||||
b = sched_clock();
|
||||
b = cpu_clock(this_cpu);
|
||||
|
||||
*t = tv.tv_sec * 1000000000 + tv.tv_usec * 1000;
|
||||
*t -= (a + b) / 2;
|
||||
|
@ -510,16 +510,16 @@ static void blk_check_time(unsigned long long *t)
|
|||
static void blk_trace_check_cpu_time(void *data)
|
||||
{
|
||||
unsigned long long *t;
|
||||
int cpu = get_cpu();
|
||||
int this_cpu = get_cpu();
|
||||
|
||||
t = &per_cpu(blk_trace_cpu_offset, cpu);
|
||||
t = &per_cpu(blk_trace_cpu_offset, this_cpu);
|
||||
|
||||
/*
|
||||
* Just call it twice, hopefully the second call will be cache hot
|
||||
* and a little more precise
|
||||
*/
|
||||
blk_check_time(t);
|
||||
blk_check_time(t);
|
||||
blk_check_time(t, this_cpu);
|
||||
blk_check_time(t, this_cpu);
|
||||
|
||||
put_cpu();
|
||||
}
|
||||
|
|
|
@ -255,7 +255,7 @@ void generic_pipe_buf_get(struct pipe_inode_info *pipe, struct pipe_buffer *buf)
|
|||
|
||||
/**
|
||||
* generic_pipe_buf_confirm - verify contents of the pipe buffer
|
||||
* @pipe: the pipe that the buffer belongs to
|
||||
* @info: the pipe that the buffer belongs to
|
||||
* @buf: the buffer to confirm
|
||||
*
|
||||
* Description:
|
||||
|
|
|
@ -164,7 +164,7 @@ static const struct pipe_buf_operations user_page_pipe_buf_ops = {
|
|||
* @spd: data to fill
|
||||
*
|
||||
* Description:
|
||||
* @spd contains a map of pages and len/offset tupples, a long with
|
||||
* @spd contains a map of pages and len/offset tuples, along with
|
||||
* the struct pipe_buf_operations associated with these pages. This
|
||||
* function will link that data to the pipe.
|
||||
*
|
||||
|
@ -1000,7 +1000,7 @@ static long do_splice_to(struct file *in, loff_t *ppos,
|
|||
* Description:
|
||||
* This is a special case helper to splice directly between two
|
||||
* points, without requiring an explicit pipe. Internally an allocated
|
||||
* pipe is cached in the process, and reused during the life time of
|
||||
* pipe is cached in the process, and reused during the lifetime of
|
||||
* that process.
|
||||
*
|
||||
*/
|
||||
|
|
|
@ -483,8 +483,8 @@ struct request_queue
|
|||
#define QUEUE_FLAG_CLUSTER 0 /* cluster several segments into 1 */
|
||||
#define QUEUE_FLAG_QUEUED 1 /* uses generic tag queueing */
|
||||
#define QUEUE_FLAG_STOPPED 2 /* queue is stopped */
|
||||
#define QUEUE_FLAG_READFULL 3 /* write queue has been filled */
|
||||
#define QUEUE_FLAG_WRITEFULL 4 /* read queue has been filled */
|
||||
#define QUEUE_FLAG_READFULL 3 /* read queue has been filled */
|
||||
#define QUEUE_FLAG_WRITEFULL 4 /* write queue has been filled */
|
||||
#define QUEUE_FLAG_DEAD 5 /* queue being torn down */
|
||||
#define QUEUE_FLAG_REENTER 6 /* Re-entrancy avoidance */
|
||||
#define QUEUE_FLAG_PLUGGED 7 /* queue is plugged */
|
||||
|
|
Loading…
Reference in a new issue