Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f0218b3e authored by Steven Rostedt's avatar Steven Rostedt Committed by Steven Rostedt
Browse files

Merge branch 'perf/core' of...

Merge branch 'perf/core' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip

 into trace/tip/tracing/core-6

Conflicts:
	include/trace/ftrace.h
	kernel/trace/trace_kprobe.c

Acked-by: default avatarMasami Hiramatsu <mhiramat@redhat.com>
Acked-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
Signed-off-by: default avatarSteven Rostedt <rostedt@goodmis.org>
parents 1eaa4787 9d192e11
Loading
Loading
Loading
Loading
+16 −33
Original line number Original line Diff line number Diff line
@@ -107,10 +107,6 @@ void (*dev_config) (struct ata_port *, struct ata_device *);
	issue of SET FEATURES - XFER MODE, and prior to operation.
	issue of SET FEATURES - XFER MODE, and prior to operation.
	</para>
	</para>
	<para>
	<para>
	Called by ata_device_add() after ata_dev_identify() determines
	a device is present.
	</para>
	<para>
	This entry may be specified as NULL in ata_port_operations.
	This entry may be specified as NULL in ata_port_operations.
	</para>
	</para>


@@ -154,8 +150,8 @@ unsigned int (*mode_filter) (struct ata_port *, struct ata_device *, unsigned in


	<sect2><title>Taskfile read/write</title>
	<sect2><title>Taskfile read/write</title>
	<programlisting>
	<programlisting>
void (*tf_load) (struct ata_port *ap, struct ata_taskfile *tf);
void (*sff_tf_load) (struct ata_port *ap, struct ata_taskfile *tf);
void (*tf_read) (struct ata_port *ap, struct ata_taskfile *tf);
void (*sff_tf_read) (struct ata_port *ap, struct ata_taskfile *tf);
	</programlisting>
	</programlisting>


	<para>
	<para>
@@ -164,36 +160,35 @@ void (*tf_read) (struct ata_port *ap, struct ata_taskfile *tf);
	hardware registers / DMA buffers, to obtain the current set of
	hardware registers / DMA buffers, to obtain the current set of
	taskfile register values.
	taskfile register values.
	Most drivers for taskfile-based hardware (PIO or MMIO) use
	Most drivers for taskfile-based hardware (PIO or MMIO) use
	ata_tf_load() and ata_tf_read() for these hooks.
	ata_sff_tf_load() and ata_sff_tf_read() for these hooks.
	</para>
	</para>


	</sect2>
	</sect2>


	<sect2><title>PIO data read/write</title>
	<sect2><title>PIO data read/write</title>
	<programlisting>
	<programlisting>
void (*data_xfer) (struct ata_device *, unsigned char *, unsigned int, int);
void (*sff_data_xfer) (struct ata_device *, unsigned char *, unsigned int, int);
	</programlisting>
	</programlisting>


	<para>
	<para>
All bmdma-style drivers must implement this hook.  This is the low-level
All bmdma-style drivers must implement this hook.  This is the low-level
operation that actually copies the data bytes during a PIO data
operation that actually copies the data bytes during a PIO data
transfer.
transfer.
Typically the driver
Typically the driver will choose one of ata_sff_data_xfer_noirq(),
will choose one of ata_pio_data_xfer_noirq(), ata_pio_data_xfer(), or
ata_sff_data_xfer(), or ata_sff_data_xfer32().
ata_mmio_data_xfer().
	</para>
	</para>


	</sect2>
	</sect2>


	<sect2><title>ATA command execute</title>
	<sect2><title>ATA command execute</title>
	<programlisting>
	<programlisting>
void (*exec_command)(struct ata_port *ap, struct ata_taskfile *tf);
void (*sff_exec_command)(struct ata_port *ap, struct ata_taskfile *tf);
	</programlisting>
	</programlisting>


	<para>
	<para>
	causes an ATA command, previously loaded with
	causes an ATA command, previously loaded with
	->tf_load(), to be initiated in hardware.
	->tf_load(), to be initiated in hardware.
	Most drivers for taskfile-based hardware use ata_exec_command()
	Most drivers for taskfile-based hardware use ata_sff_exec_command()
	for this hook.
	for this hook.
	</para>
	</para>


@@ -218,8 +213,8 @@ command.


	<sect2><title>Read specific ATA shadow registers</title>
	<sect2><title>Read specific ATA shadow registers</title>
	<programlisting>
	<programlisting>
u8   (*check_status)(struct ata_port *ap);
u8   (*sff_check_status)(struct ata_port *ap);
u8   (*check_altstatus)(struct ata_port *ap);
u8   (*sff_check_altstatus)(struct ata_port *ap);
	</programlisting>
	</programlisting>


	<para>
	<para>
@@ -227,20 +222,14 @@ u8 (*check_altstatus)(struct ata_port *ap);
	hardware.  On some hardware, reading the Status register has
	hardware.  On some hardware, reading the Status register has
	the side effect of clearing the interrupt condition.
	the side effect of clearing the interrupt condition.
	Most drivers for taskfile-based hardware use
	Most drivers for taskfile-based hardware use
	ata_check_status() for this hook.
	ata_sff_check_status() for this hook.
	</para>
	<para>
	Note that because this is called from ata_device_add(), at
	least a dummy function that clears device interrupts must be
	provided for all drivers, even if the controller doesn't
	actually have a taskfile status register.
	</para>
	</para>


	</sect2>
	</sect2>


	<sect2><title>Select ATA device on bus</title>
	<sect2><title>Select ATA device on bus</title>
	<programlisting>
	<programlisting>
void (*dev_select)(struct ata_port *ap, unsigned int device);
void (*sff_dev_select)(struct ata_port *ap, unsigned int device);
	</programlisting>
	</programlisting>


	<para>
	<para>
@@ -251,9 +240,7 @@ void (*dev_select)(struct ata_port *ap, unsigned int device);
	</para>
	</para>
	<para>
	<para>
	Most drivers for taskfile-based hardware use
	Most drivers for taskfile-based hardware use
	ata_std_dev_select() for this hook.  Controllers which do not
	ata_sff_dev_select() for this hook.
	support second drives on a port (such as SATA contollers) will
	use ata_noop_dev_select().
	</para>
	</para>


	</sect2>
	</sect2>
@@ -441,13 +428,13 @@ void (*irq_clear) (struct ata_port *);
	to struct ata_host_set.
	to struct ata_host_set.
	</para>
	</para>
	<para>
	<para>
	Most legacy IDE drivers use ata_interrupt() for the
	Most legacy IDE drivers use ata_sff_interrupt() for the
	irq_handler hook, which scans all ports in the host_set,
	irq_handler hook, which scans all ports in the host_set,
	determines which queued command was active (if any), and calls
	determines which queued command was active (if any), and calls
	ata_host_intr(ap,qc).
	ata_sff_host_intr(ap,qc).
	</para>
	</para>
	<para>
	<para>
	Most legacy IDE drivers use ata_bmdma_irq_clear() for the
	Most legacy IDE drivers use ata_sff_irq_clear() for the
	irq_clear() hook, which simply clears the interrupt and error
	irq_clear() hook, which simply clears the interrupt and error
	flags in the DMA status register.
	flags in the DMA status register.
	</para>
	</para>
@@ -496,10 +483,6 @@ void (*host_stop) (struct ata_host_set *host_set);
	data from port at this time.
	data from port at this time.
	</para>
	</para>
	<para>
	<para>
	Many drivers use ata_port_stop() as this hook, which frees the
	PRD table.
	</para>
	<para>
	->host_stop() is called after all ->port_stop() calls
	->host_stop() is called after all ->port_stop() calls
have completed.  The hook must finalize hardware shutdown, release DMA
have completed.  The hook must finalize hardware shutdown, release DMA
and other resources, etc.
and other resources, etc.
+5 −0
Original line number Original line Diff line number Diff line
@@ -74,6 +74,11 @@ structure at all. You should use this to keep device-specific data.
	/* retrieve the value */
	/* retrieve the value */
	void *i2c_get_clientdata(const struct i2c_client *client);
	void *i2c_get_clientdata(const struct i2c_client *client);


Note that starting with kernel 2.6.34, you don't have to set the `data' field
to NULL in remove() or if probe() failed anymore. The i2c-core does this
automatically on these occasions. Those are also the only times the core will
touch this field.



Accessing the client
Accessing the client
====================
====================
+4 −4
Original line number Original line Diff line number Diff line
@@ -333,14 +333,14 @@ byte 0:
byte 1:
byte 1:


   bit   7   6   5   4   3   2   1   0
   bit   7   6   5   4   3   2   1   0
        x15 x14 x13 x12 x11 x10 x9  x8
         .   .   .   .   .  x10 x9  x8


byte 2:
byte 2:


   bit   7   6   5   4   3   2   1   0
   bit   7   6   5   4   3   2   1   0
        x7  x6  x5  x4  x4  x2  x1  x0
        x7  x6  x5  x4  x4  x2  x1  x0


         x15..x0 = absolute x value (horizontal)
         x10..x0 = absolute x value (horizontal)


byte 3:
byte 3:


@@ -350,14 +350,14 @@ byte 3:
byte 4:
byte 4:


   bit   7   6   5   4   3   2   1   0
   bit   7   6   5   4   3   2   1   0
        y15 y14 y13 y12 y11 y10 y8  y8
         .   .   .   .   .   .  y9  y8


byte 5:
byte 5:


   bit   7   6   5   4   3   2   1   0
   bit   7   6   5   4   3   2   1   0
        y7  y6  y5  y4  y3  y2  y1  y0
        y7  y6  y5  y4  y3  y2  y1  y0


         y15..y0 = absolute y value (vertical)
         y9..y0 = absolute y value (vertical)




4.2.2 Two finger touch
4.2.2 Two finger touch
+2 −8
Original line number Original line Diff line number Diff line
@@ -165,8 +165,8 @@ the user entry_handler invocation is also skipped.


1.4 How Does Jump Optimization Work?
1.4 How Does Jump Optimization Work?


If you configured your kernel with CONFIG_OPTPROBES=y (currently
If your kernel is built with CONFIG_OPTPROBES=y (currently this flag
this option is supported on x86/x86-64, non-preemptive kernel) and
is automatically set 'y' on x86/x86-64, non-preemptive kernel) and
the "debug.kprobes_optimization" kernel parameter is set to 1 (see
the "debug.kprobes_optimization" kernel parameter is set to 1 (see
sysctl(8)), Kprobes tries to reduce probe-hit overhead by using a jump
sysctl(8)), Kprobes tries to reduce probe-hit overhead by using a jump
instruction instead of a breakpoint instruction at each probepoint.
instruction instead of a breakpoint instruction at each probepoint.
@@ -271,8 +271,6 @@ tweak the kernel's execution path, you need to suppress optimization,
using one of the following techniques:
using one of the following techniques:
- Specify an empty function for the kprobe's post_handler or break_handler.
- Specify an empty function for the kprobe's post_handler or break_handler.
 or
 or
- Config CONFIG_OPTPROBES=n.
 or
- Execute 'sysctl -w debug.kprobes_optimization=n'
- Execute 'sysctl -w debug.kprobes_optimization=n'


2. Architectures Supported
2. Architectures Supported
@@ -307,10 +305,6 @@ it useful to "Compile the kernel with debug info" (CONFIG_DEBUG_INFO),
so you can use "objdump -d -l vmlinux" to see the source-to-object
so you can use "objdump -d -l vmlinux" to see the source-to-object
code mapping.
code mapping.


If you want to reduce probing overhead, set "Kprobes jump optimization
support" (CONFIG_OPTPROBES) to "y". You can find this option under the
"Kprobes" line.

4. API Reference
4. API Reference


The Kprobes API includes a "register" function and an "unregister"
The Kprobes API includes a "register" function and an "unregister"
+1 −1
Original line number Original line Diff line number Diff line
@@ -58,7 +58,7 @@ static void transfer(int fd)
	};
	};


	ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr);
	ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr);
	if (ret == 1)
	if (ret < 1)
		pabort("can't send spi message");
		pabort("can't send spi message");


	for (ret = 0; ret < ARRAY_SIZE(tx); ret++) {
	for (ret = 0; ret < ARRAY_SIZE(tx); ret++) {
Loading