summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Brolley <brolley@redhat.com>2009-11-24 14:51:46 -0500
committerDave Brolley <brolley@redhat.com>2009-11-24 14:51:46 -0500
commit7067e1b0418eed528fe2d102654dbe12bb9236af (patch)
tree8120ae0263ef32cdc7fa3b2132e7acb3af03d3e0
parent37f1e3c413aee81f7590de431d232a474eb412ee (diff)
parent90bba7158de040705a101ba1fdf6062866b4b4e9 (diff)
downloadsystemtap-steved-7067e1b0418eed528fe2d102654dbe12bb9236af.tar.gz
systemtap-steved-7067e1b0418eed528fe2d102654dbe12bb9236af.tar.xz
systemtap-steved-7067e1b0418eed528fe2d102654dbe12bb9236af.zip
Merge branch 'master' of ssh://sources.redhat.com/git/systemtap
-rw-r--r--.gitignore1
-rw-r--r--doc/SystemTap_Tapset_Reference/Makefile.am2
-rw-r--r--doc/SystemTap_Tapset_Reference/Makefile.in2
-rw-r--r--doc/SystemTap_Tapset_Reference/tapsets.tmpl5
-rw-r--r--initscript/.gitignore1
-rw-r--r--runtime/map.c2
-rw-r--r--systemtap.spec2
-rw-r--r--tapset/ioblock.stp214
-rw-r--r--tapset/ioscheduler.stp191
-rw-r--r--tapset/networking.stp4
-rw-r--r--tapset/nfs_proc.stp52
-rw-r--r--tapsets.cxx4
-rwxr-xr-xtestsuite/buildok/ioblock_test.stp7
-rwxr-xr-xtestsuite/buildok/ioscheduler.stp12
-rwxr-xr-xtestsuite/buildok/netdev.stp4
-rw-r--r--testsuite/lib/stap_compile.exp2
-rw-r--r--testsuite/systemtap.base/cu-decl.exp8
-rw-r--r--testsuite/systemtap.pass1-4/buildok.exp3
-rw-r--r--translate.cxx2
19 files changed, 426 insertions, 92 deletions
diff --git a/.gitignore b/.gitignore
index 5869f401..e10d5226 100644
--- a/.gitignore
+++ b/.gitignore
@@ -37,3 +37,4 @@ build-elfutils
include-elfutils
lib-elfutils
stamp-elfutils
+dtrace
diff --git a/doc/SystemTap_Tapset_Reference/Makefile.am b/doc/SystemTap_Tapset_Reference/Makefile.am
index 454b3331..109aaa9e 100644
--- a/doc/SystemTap_Tapset_Reference/Makefile.am
+++ b/doc/SystemTap_Tapset_Reference/Makefile.am
@@ -30,7 +30,7 @@ if BUILD_REFDOCS
all: $(PDFDOCS) stamp-htmldocs stamp-mandocs
tapsets.xml: docproc $(shell find $(SRCTREE)/tapset -name '*.stp')
SRCTREE=$(SRCTREE) $(DOCPROC) doc $(abs_srcdir)/tapsets.tmpl > tapsets.xml.new
- if cmp tapsets.xml.new tapsets.xml >/dev/null ; then \
+ if test -s tapsets.xml && cmp tapsets.xml.new tapsets.xml >/dev/null ; then \
echo tapsets.xml unchanged; \
rm tapsets.xml.new; \
else \
diff --git a/doc/SystemTap_Tapset_Reference/Makefile.in b/doc/SystemTap_Tapset_Reference/Makefile.in
index 5059b159..158c9b6b 100644
--- a/doc/SystemTap_Tapset_Reference/Makefile.in
+++ b/doc/SystemTap_Tapset_Reference/Makefile.in
@@ -470,7 +470,7 @@ uninstall-am:
@BUILD_REFDOCS_TRUE@all: $(PDFDOCS) stamp-htmldocs stamp-mandocs
@BUILD_REFDOCS_TRUE@tapsets.xml: docproc $(shell find $(SRCTREE)/tapset -name '*.stp')
@BUILD_REFDOCS_TRUE@ SRCTREE=$(SRCTREE) $(DOCPROC) doc $(abs_srcdir)/tapsets.tmpl > tapsets.xml.new
-@BUILD_REFDOCS_TRUE@ if cmp tapsets.xml.new tapsets.xml >/dev/null ; then \
+@BUILD_REFDOCS_TRUE@ if test -s tapsets.xml && cmp tapsets.xml.new tapsets.xml >/dev/null ; then \
@BUILD_REFDOCS_TRUE@ echo tapsets.xml unchanged; \
@BUILD_REFDOCS_TRUE@ rm tapsets.xml.new; \
@BUILD_REFDOCS_TRUE@ else \
diff --git a/doc/SystemTap_Tapset_Reference/tapsets.tmpl b/doc/SystemTap_Tapset_Reference/tapsets.tmpl
index addcf88d..bb855d29 100644
--- a/doc/SystemTap_Tapset_Reference/tapsets.tmpl
+++ b/doc/SystemTap_Tapset_Reference/tapsets.tmpl
@@ -167,12 +167,13 @@
</chapter>
<chapter id="iosched.stp">
- <title>IO Scheduler Tapset</title>
+ <title>IO Scheduler and block IO Tapset</title>
<para>
- This family of probe points is used to probe IO scheduler activities.
+ This family of probe points is used to probe block IO layer and IO scheduler activities.
It contains the following probe points:
</para>
!Itapset/ioscheduler.stp
+!Itapset/ioblock.stp
</chapter>
<chapter id="scsi.stp">
diff --git a/initscript/.gitignore b/initscript/.gitignore
index ec0530ab..37416cbb 100644
--- a/initscript/.gitignore
+++ b/initscript/.gitignore
@@ -1 +1,2 @@
systemtap
+stap-server
diff --git a/runtime/map.c b/runtime/map.c
index 74467f30..20d8a48c 100644
--- a/runtime/map.c
+++ b/runtime/map.c
@@ -412,7 +412,7 @@ static void _stp_pmap_del(PMAP pmap)
}
/* sort keynum values */
-#define SORT_COUNT -5
+#define SORT_COUNT -5 /* see also translate.cxx:visit_foreach_loop */
#define SORT_SUM -4
#define SORT_MIN -3
#define SORT_MAX -2
diff --git a/systemtap.spec b/systemtap.spec
index d7cdc61b..1ccf6751 100644
--- a/systemtap.spec
+++ b/systemtap.spec
@@ -241,7 +241,7 @@ cd ..
%endif
-%configure %{?elfutils_config} %{sqlite_config} %{crash_config} %{docs_config} %{pie_config} %{grapher_config} %{rpm_config}
+%configure %{?elfutils_config} %{sqlite_config} %{crash_config} %{docs_config} %{pie_config} %{grapher_config} %{rpm_config} --disable-silent-rules
make %{?_smp_mflags}
%install
diff --git a/tapset/ioblock.stp b/tapset/ioblock.stp
index bc64c425..761e7df7 100644
--- a/tapset/ioblock.stp
+++ b/tapset/ioblock.stp
@@ -78,18 +78,13 @@ function __bio_devname:string(bio:long)
global BIO_READ = 0, BIO_WRITE = 1
-/* probe ioblock.request
+/**
+ * probe ioblock.request - Fires whenever making a generic block I/O request.
*
- * Fires whenever making a generic block I/O request.
- *
- * Context:
- * The process makes block I/O request
- *
- * Variables:
- * devname - block device name
- * ino - i-node number of the mapped file
- * sector - beginning sector for the entire bio
- * flags - see below
+ * @devname - block device name
+ * @ino - i-node number of the mapped file
+ * @sector - beginning sector for the entire bio
+ * @flags - see below
* BIO_UPTODATE 0 ok after I/O completion
* BIO_RW_BLOCK 1 RW_AHEAD set, and read/write would block
* BIO_EOF 2 out-out-bounds error
@@ -99,20 +94,18 @@ global BIO_READ = 0, BIO_WRITE = 1
* BIO_USER_MAPPED 6 contains user pages
* BIO_EOPNOTSUPP 7 not supported
*
- * rw - binary trace for read/write request
- * vcnt - bio vector count which represents number of array element (page,
- * offset, length) which make up this I/O request
- * idx - offset into the bio vector array
- * phys_segments - number of segments in this bio after physical address
- * coalescing is performed.
- * hw_segments - number of segments after physical and DMA remapping
- * hardware coalescing is performed
- * size - total size in bytes
- * bdev - target block device
- * bdev_contains - points to the device object which contains the
- * partition (when bio structure represents a partition)
- * p_start_sect - points to the start sector of the partition
- * structure of the device
+ * @rw - binary trace for read/write request
+ * @vcnt - bio vector count which represents number of array element (page, offset, length) which make up this I/O request
+ * @idx - offset into the bio vector array
+ * @phys_segments - number of segments in this bio after physical address coalescing is performed
+ * @hw_segments - number of segments after physical and DMA remapping hardware coalescing is performed
+ * @size - total size in bytes
+ * @bdev - target block device
+ * @bdev_contains - points to the device object which contains the partition (when bio structure represents a partition)
+ * @p_start_sect - points to the start sector of the partition structure of the device
+ *
+ * Context:
+ * The process makes block I/O request
*/
probe ioblock.request = kernel.function ("generic_make_request")
{
@@ -135,19 +128,14 @@ probe ioblock.request = kernel.function ("generic_make_request")
p_start_sect = __bio_start_sect($bio)
}
-/* probe ioblock.end
- *
- * Fires whenever a block I/O transfer is complete.
- *
- * Context:
- * The process signals the transfer is done.
+/**
+ * probe ioblock.end - Fires whenever a block I/O transfer is complete.
*
- * Variables:
- * devname - block device name
- * ino - i-node number of the mapped file
- * byte_done - number of bytes transferred
- * sector - beginning sector for the entire bio
- * flags - see below
+ * @devname - block device name
+ * @ino - i-node number of the mapped file
+ * @bytes_done - number of bytes transferred
+ * @sector - beginning sector for the entire bio
+ * @flags - see below
* BIO_UPTODATE 0 ok after I/O completion
* BIO_RW_BLOCK 1 RW_AHEAD set, and read/write would block
* BIO_EOF 2 out-out-bounds error
@@ -156,16 +144,16 @@ probe ioblock.request = kernel.function ("generic_make_request")
* BIO_BOUNCED 5 bio is a bounce bio
* BIO_USER_MAPPED 6 contains user pages
* BIO_EOPNOTSUPP 7 not supported
- * error - 0 on success
- * rw - binary trace for read/write request
- * vcnt - bio vector count which represents number of array element (page,
- * offset, length) which makes up this I/O request
- * idx - offset into the bio vector array
- * phys_segments - number of segments in this bio after physical address
- * coalescing is performed.
- * hw_segments - number of segments after physical and DMA remapping
- * hardware coalescing is performed
- * size - total size in bytes
+ * @error - 0 on success
+ * @rw - binary trace for read/write request
+ * @vcnt - bio vector count which represents number of array element (page, offset, length) which makes up this I/O request
+ * @idx - offset into the bio vector array
+ * @phys_segments - number of segments in this bio after physical address coalescing is performed.
+ * @hw_segments - number of segments after physical and DMA remapping hardware coalescing is performed
+ * @size - total size in bytes
+ *
+ * Context:
+ * The process signals the transfer is done.
*/
probe ioblock.end = kernel.function("bio_endio")
{
@@ -186,3 +174,135 @@ probe ioblock.end = kernel.function("bio_endio")
%)
size = $bio->bi_size
}
+
+/**
+ * probe ioblock_trace.bounce - Fires whenever a buffer bounce is needed for at least one page of a block IO request.
+ *
+ * @devname device for which a buffer bounce was needed.
+ * @ino - i-node number of the mapped file
+ * @bytes_done - number of bytes transferred
+ * @sector - beginning sector for the entire bio
+ * @flags - see below
+ * BIO_UPTODATE 0 ok after I/O completion
+ * BIO_RW_BLOCK 1 RW_AHEAD set, and read/write would block
+ * BIO_EOF 2 out-out-bounds error
+ * BIO_SEG_VALID 3 nr_hw_seg valid
+ * BIO_CLONED 4 doesn't own data
+ * BIO_BOUNCED 5 bio is a bounce bio
+ * BIO_USER_MAPPED 6 contains user pages
+ * BIO_EOPNOTSUPP 7 not supported
+ * @rw - binary trace for read/write request
+ * @vcnt - bio vector count which represents number of array element (page, offset, length) which makes up this I/O request
+ * @idx - offset into the bio vector array
+ * @phys_segments - number of segments in this bio after physical address coalescing is performed.
+ * @size - total size in bytes
+ *
+ * Context :
+ * The process creating a block IO request.
+ */
+probe ioblock_trace.bounce = kernel.trace("block_bio_bounce")
+{
+ devname = __bio_devname($bio)
+ ino = __bio_ino($bio)
+
+ bytes_done = $bio->bi_size
+ sector = $bio->bi_sector
+ flags = $bio->bi_flags
+ rw = $bio->bi_rw
+ vcnt = $bio->bi_vcnt
+ idx = $bio->bi_idx
+ phys_segments = $bio->bi_phys_segments
+ size = $bio->bi_size
+}
+
+/**
+ * probe ioblock_trace.request - Fires just as a generic block I/O request is created for a bio.
+ *
+ * @devname - block device name
+ * @ino - i-node number of the mapped file
+ * @bytes_done - number of bytes transferred
+ * @sector - beginning sector for the entire bio
+ * @flags - see below
+ * BIO_UPTODATE 0 ok after I/O completion
+ * BIO_RW_BLOCK 1 RW_AHEAD set, and read/write would block
+ * BIO_EOF 2 out-out-bounds error
+ * BIO_SEG_VALID 3 nr_hw_seg valid
+ * BIO_CLONED 4 doesn't own data
+ * BIO_BOUNCED 5 bio is a bounce bio
+ * BIO_USER_MAPPED 6 contains user pages
+ * BIO_EOPNOTSUPP 7 not supported
+ *
+ * @rw - binary trace for read/write request
+ * @vcnt - bio vector count which represents number of array element (page, offset, length) which make up this I/O request
+ * @idx - offset into the bio vector array
+ * @phys_segments - number of segments in this bio after physical address coalescing is performed.
+ * @size - total size in bytes
+ * @bdev - target block device
+ * @bdev_contains - points to the device object which contains the partition (when bio structure represents a partition)
+ * @p_start_sect - points to the start sector of the partition structure of the device
+ *
+ * Context:
+ * The process makes block I/O request
+ */
+
+probe ioblock_trace.request = kernel.trace("block_bio_queue")
+{
+ devname = __bio_devname($bio)
+ ino = __bio_ino($bio)
+
+ bytes_done = $bio->bi_size
+ sector = $bio->bi_sector
+ flags = $bio->bi_flags
+ rw = $bio->bi_rw
+ vcnt = $bio->bi_vcnt
+ idx = $bio->bi_idx
+ phys_segments = $bio->bi_phys_segments
+ size = $bio->bi_size
+ bdev_contains = $bio->bi_bdev->bd_contains
+ bdev = $bio->bi_bdev
+ p_start_sect = __bio_start_sect($bio)
+}
+
+/**
+ * probe ioblock_trace.end - Fires whenever a block I/O transfer is complete.
+ *
+ * @q - request queue on which this bio was queued.
+ * @devname - block device name
+ * @ino - i-node number of the mapped file
+ * @bytes_done - number of bytes transferred
+ * @sector - beginning sector for the entire bio
+ * @flags - see below
+ * BIO_UPTODATE 0 ok after I/O completion
+ * BIO_RW_BLOCK 1 RW_AHEAD set, and read/write would block
+ * BIO_EOF 2 out-out-bounds error
+ * BIO_SEG_VALID 3 nr_hw_seg valid
+ * BIO_CLONED 4 doesn't own data
+ * BIO_BOUNCED 5 bio is a bounce bio
+ * BIO_USER_MAPPED 6 contains user pages
+ * BIO_EOPNOTSUPP 7 not supported
+ *
+ * @rw - binary trace for read/write request
+ * @vcnt - bio vector count which represents number of array element (page, offset, length) which makes up this I/O request
+ * @idx - offset into the bio vector array
+ * @phys_segments - number of segments in this bio after physical address coalescing is performed.
+ * @size - total size in bytes
+ *
+ * Context:
+ * The process signals the transfer is done.
+ */
+probe ioblock_trace.end = kernel.trace("block_bio_complete")
+{
+ q = $q
+ devname = __bio_devname($bio)
+ ino = __bio_ino($bio)
+
+ bytes_done = $bio->bi_size
+
+ sector = $bio->bi_sector
+ flags = $bio->bi_flags
+ rw = $bio->bi_rw
+ vcnt = $bio->bi_vcnt
+ idx = $bio->bi_idx
+ phys_segments = $bio->bi_phys_segments
+ size = $bio->bi_size
+}
diff --git a/tapset/ioscheduler.stp b/tapset/ioscheduler.stp
index 637e2783..7f26cf23 100644
--- a/tapset/ioscheduler.stp
+++ b/tapset/ioscheduler.stp
@@ -68,22 +68,24 @@ probe ioscheduler.elv_next_request.return
}
/**
- * probe ioscheduler.elv_add_request - A request was added to the request queue
+ * probe ioscheduler.elv_add_request.kp - kprobe based probe to indicate that a request was added to the request queue
* @elevator_name: The type of I/O elevator currently enabled
+ * @q: pointer to request queue
* @req: Address of the request
* @req_flags: Request flags
* @disk_major: Disk major number of the request
* @disk_minor: Disk minor number of the request
*/
// when a request is added to the request queue
-probe ioscheduler.elv_add_request
- = kernel.function("__elv_add_request")
+probe ioscheduler.elv_add_request.kp
+ = kernel.function("elv_insert")
{
%( kernel_v >= "2.6.10" %?
elevator_name = kernel_string($q->elevator->elevator_type->elevator_name)
%:
elevator_name = kernel_string($q->elevator->elevator_name)
%)
+ q = $q
if($rq == 0) {
disk_major = -1
disk_minor = -1
@@ -142,6 +144,189 @@ probe ioscheduler.elv_completed_request
%)
}
+/**
+ * probe ioscheduler.elv_add_request.tp - tracepoint based probe to indicate a request is added to the request queue.
+ * @elevator_name : The type of I/O elevator currently enabled.
+ * @q : Pointer to request queue.
+ * @rq : Address of request.
+ * @rq_flags : Request flags.
+ * @disk_major : Disk major no of request.
+ * @disk_minor : Disk minor number of request.
+ *
+ */
+probe ioscheduler.elv_add_request.tp
+ = kernel.trace("block_rq_insert")
+{
+q = $q
+elevator_name = kernel_string($q->elevator->elevator_type->elevator_name)
+rq = $rq
+
+if ($rq == 0 || $rq->rq_disk ==0) {
+ disk_major = -1
+ disk_minor = -1
+} else {
+ disk_major = $rq->rq_disk->major
+ disk_minor = $rq->rq_disk->first_minor
+}
+
+rq_flags = $rq==0? 0:$rq->cmd_flags
+}
+
+/**
+ * probe ioscheduler.elv_add_request - probe to indicate request is added to the request queue.
+ * @elevator_name : The type of I/O elevator currently enabled.
+ * @q : Pointer to request queue.
+ * @rq : Address of request.
+ * @rq_flags : Request flags.
+ * @disk_major : Disk major no of request.
+ * @disk_minor : Disk minor number of request.
+ *
+ */
+probe ioscheduler.elv_add_request =
+ ioscheduler.elv_add_request.tp !, ioscheduler.elv_add_request.kp
+{}
+
+/**
+ * probe ioscheduler_trace.elv_completed_request - Fires when a request is
+ * completed.
+ * @elevator_name : The type of I/O elevator currently enabled.
+ * @rq : Address of request.
+ * @rq_flags : Request flags.
+ * @disk_major : Disk major no of request.
+ * @disk_minor : Disk minor number of request.
+ *
+ */
+probe ioscheduler_trace.elv_completed_request
+ = kernel.trace("block_rq_complete")
+{
+elevator_name = kernel_string($q->elevator->elevator_type->elevator_name)
+rq = $rq
+
+if ($rq == 0 || $rq->rq_disk ==0) {
+ disk_major = -1
+ disk_minor = -1
+} else {
+ disk_major = $rq->rq_disk->major
+ disk_minor = $rq->rq_disk->first_minor
+}
+
+rq_flags = $rq==0? 0:$rq->cmd_flags
+}
+
+/**
+ * probe ioscheduler_trace.elv_issue_request - Fires when a request is
+ * scheduled.
+ * @elevator_name : The type of I/O elevator currently enabled.
+ * @rq : Address of request.
+ * @rq_flags : Request flags.
+ * @disk_major : Disk major no of request.
+ * @disk_minor : Disk minor number of request.
+ *
+ */
+probe ioscheduler_trace.elv_issue_request
+ = kernel.trace("block_rq_issue")
+{
+elevator_name = kernel_string($q->elevator->elevator_type->elevator_name)
+rq = $rq
+
+if ($rq == 0 || $rq->rq_disk ==0) {
+ disk_major = -1
+ disk_minor = -1
+} else {
+ disk_major = $rq->rq_disk->major
+ disk_minor = $rq->rq_disk->first_minor
+}
+
+rq_flags = $rq==0? 0:$rq->cmd_flags
+}
+
+/**
+ * probe ioscheduler_trace.elv_requeue_request - Fires when a request is
+ * put back on the queue, when the hadware cannot accept more requests.
+ * @elevator_name : The type of I/O elevator currently enabled.
+ * @rq : Address of request.
+ * @rq_flags : Request flags.
+ * @disk_major : Disk major no of request.
+ * @disk_minor : Disk minor number of request.
+ *
+ */
+probe ioscheduler_trace.elv_requeue_request
+ = kernel.trace("block_rq_requeue")
+{
+elevator_name = kernel_string($q->elevator->elevator_type->elevator_name)
+rq = $rq
+
+if ($rq == 0 || $rq->rq_disk ==0) {
+ disk_major = -1
+ disk_minor = -1
+} else {
+ disk_major = $rq->rq_disk->major
+ disk_minor = $rq->rq_disk->first_minor
+}
+
+rq_flags = $rq==0? 0:$rq->cmd_flags
+}
+
+/**
+ * probe ioscheduler_trace.elv_abort_request - Fires when a request is aborted.
+ * @elevator_name : The type of I/O elevator currently enabled.
+ * @rq : Address of request.
+ * @rq_flags : Request flags.
+ * @disk_major : Disk major no of request.
+ * @disk_minor : Disk minor number of request.
+ *
+ */
+probe ioscheduler_trace.elv_abort_request
+ = kernel.trace("block_rq_abort")
+{
+elevator_name = kernel_string($q->elevator->elevator_type->elevator_name)
+rq = $rq
+
+if ($rq == 0 || $rq->rq_disk ==0) {
+ disk_major = -1
+ disk_minor = -1
+} else {
+ disk_major = $rq->rq_disk->major
+ disk_minor = $rq->rq_disk->first_minor
+}
+
+rq_flags = $rq==0? 0:$rq->cmd_flags
+}
+
+/**
+ * probe ioscheduler_trace.plug - Fires when a request queue is plugged;
+ * ie, requests in the queue cannot be serviced by block driver.
+ * @rq_queue : request queue
+ *
+ */
+probe ioscheduler_trace.plug = kernel.trace("block_plug")
+{
+ rq_queue = $q
+}
+
+/**
+ * probe ioscheduler_trace.unplug_io - Fires when a request queue is unplugged;
+ * Either, when number of pending requests in the queue exceeds threshold
+ * or, upon expiration of timer that was activated when queue was plugged.
+ * @rq_queue : request queue
+ *
+ */
+probe ioscheduler_trace.unplug_io = kernel.trace("block_unplug_io")
+{
+ rq_queue = $q
+}
+
+/**
+ * probe ioscheduler_trace.unplug_timer - Fires when unplug timer associated
+ * with a request queue expires.
+ * @rq_queue : request queue
+ *
+ */
+probe ioscheduler_trace.unplug_timer = kernel.trace("block_unplug_timer")
+{
+ rq_queue = $q
+}
+
function disk_major_from_request:long(var_q:long)
%{ /* pure */
struct request_queue *q = (struct request_queue *)((long)THIS->var_q);
diff --git a/tapset/networking.stp b/tapset/networking.stp
index e9ea35dc..e1c5ed1f 100644
--- a/tapset/networking.stp
+++ b/tapset/networking.stp
@@ -154,7 +154,7 @@ probe netdev.rx
* @flags: The new flags
*/
probe netdev.change_rx_flag
- = kernel.function("dev_change_rx_flags")
+ = kernel.function("dev_change_rx_flags") ?
{
dev_name = get_netdev_name($dev)
flags = $flags
@@ -217,7 +217,7 @@ probe netdev.unregister
* @dev_name: The device that is going to provide the statistics
*/
probe netdev.get_stats
- = kernel.function("dev_get_stats")
+ = kernel.function("dev_get_stats") ?
{
dev_name = get_netdev_name($dev)
}
diff --git a/tapset/nfs_proc.stp b/tapset/nfs_proc.stp
index 502091b4..afd5328b 100644
--- a/tapset/nfs_proc.stp
+++ b/tapset/nfs_proc.stp
@@ -207,9 +207,9 @@ function __getfh_inode :long(dir:long) %{ /* pure */
THIS->__retvalue =(long) fh;
%}
probe nfs.proc.entries = nfs.proc.lookup,
- nfs.proc.read,
- nfs.proc.write,
- nfs.proc.commit,
+ nfs.proc.read ?,
+ nfs.proc.write ?,
+ nfs.proc.commit ?,
nfs.proc.read_setup,
nfs.proc.write_setup,
nfs.proc.commit_setup,
@@ -226,9 +226,9 @@ probe nfs.proc.entries = nfs.proc.lookup,
probe nfs.proc.return = nfs.proc.lookup.return,
- nfs.proc.read.return,
- nfs.proc.write.return,
- nfs.proc.commit.return,
+ nfs.proc.read.return ?,
+ nfs.proc.write.return ?,
+ nfs.proc.commit.return ?,
nfs.proc.read_setup.return,
nfs.proc.write_setup.return,
nfs.proc.commit_setup.return,
@@ -355,16 +355,18 @@ probe nfs.proc4.lookup.return = kernel.function("nfs4_proc_lookup").return!,
* count : read bytes in this execution
* offset : the file offset
*
+* All the nfs.proc.read kernel functions were removed in kernel commit
+* 8e0969, so these probes are optional.
*/
-probe nfs.proc.read = nfs.proc2.read ,
- nfs.proc3.read ,
- nfs.proc4.read
+probe nfs.proc.read = nfs.proc2.read ?,
+ nfs.proc3.read ?,
+ nfs.proc4.read ?
{}
-probe nfs.proc.read.return = nfs.proc2.read.return ,
- nfs.proc3.read.return ,
- nfs.proc4.read.return
+probe nfs.proc.read.return = nfs.proc2.read.return ?,
+ nfs.proc3.read.return ?,
+ nfs.proc4.read.return ?
{
}
@@ -464,17 +466,20 @@ probe nfs.proc4.read.return = kernel.function("nfs4_proc_read").return !,
* bitmask0:
* bitmask1 :V4 bitmask representing the set of attributes
* supported on this filesystem (only in probe nfs.proc4.write)
+*
+* All the nfs.proc.write kernel functions were removed in kernel commit
+* 200baa, so these probes are optional.
*/
-probe nfs.proc.write = nfs.proc2.write ,
- nfs.proc3.write ,
- nfs.proc4.write
+probe nfs.proc.write = nfs.proc2.write ?,
+ nfs.proc3.write ?,
+ nfs.proc4.write ?
{}
-probe nfs.proc.write.return = nfs.proc2.write.return ,
- nfs.proc3.write.return ,
- nfs.proc4.write.return
+probe nfs.proc.write.return = nfs.proc2.write.return ?,
+ nfs.proc3.write.return ?,
+ nfs.proc4.write.return ?
{}
probe nfs.proc2.write = kernel.function("nfs_proc_write")!,
@@ -598,13 +603,16 @@ probe nfs.proc4.write.return = kernel.function("nfs4_proc_write").return !,
* bitmask0:
* bitmask1 :V4 bitmask representing the set of attributes
* supported on this filesystem (only in probe nfs.proc4.commit)
+*
+* All the nfs.proc.commit kernel functions were removed in kernel
+* commit 200baa, so these probes are optional.
*/
-probe nfs.proc.commit = nfs.proc3.commit,
- nfs.proc4.commit
+probe nfs.proc.commit = nfs.proc3.commit ?,
+ nfs.proc4.commit ?
{}
-probe nfs.proc.commit.return = nfs.proc3.commit.return,
- nfs.proc4.commit.return
+probe nfs.proc.commit.return = nfs.proc3.commit.return ?,
+ nfs.proc4.commit.return ?
{}
// XXX: on kernels > 2.6.18 (?), module("nfs") -> module("nfsd") and
diff --git a/tapsets.cxx b/tapsets.cxx
index c972de5f..7bae4615 100644
--- a/tapsets.cxx
+++ b/tapsets.cxx
@@ -6313,10 +6313,10 @@ tracepoint_builder::init_dw(systemtap_session& s)
glob_t trace_glob;
string globs[] = {
- "/include/trace/*.h",
"/include/trace/events/*.h",
- "/source/include/trace/*.h",
"/source/include/trace/events/*.h",
+ "/include/trace/*.h",
+ "/source/include/trace/*.h",
};
for (unsigned z = 0; z < sizeof(globs) / sizeof(globs[0]); z++)
{
diff --git a/testsuite/buildok/ioblock_test.stp b/testsuite/buildok/ioblock_test.stp
index 4d3dadfa..21595021 100755
--- a/testsuite/buildok/ioblock_test.stp
+++ b/testsuite/buildok/ioblock_test.stp
@@ -25,3 +25,10 @@ probe ioblock.end {
devname, sector, flags, rw, bio_rw_str(rw), vcnt, idx, phys_segments, size, bytes_done, error, ino)
%)
}
+
+probe ioblock_trace.*
+{
+ log(pp())
+ printf("%s\t%d\t%d\t%d\t%d\t%s\t%d\t%d\t%d\t%d\t%d\t%d\t%p\t%p\t%d\n",
+ devname, q, sector, flags, rw, bio_rw_str(rw), vcnt, idx, phys_segments, size, bytes_done, ino, p_start_sect, bdev_contains, bdev)
+}
diff --git a/testsuite/buildok/ioscheduler.stp b/testsuite/buildok/ioscheduler.stp
index 2d88d2d5..8b377619 100755
--- a/testsuite/buildok/ioscheduler.stp
+++ b/testsuite/buildok/ioscheduler.stp
@@ -7,3 +7,15 @@ probe ioscheduler.*
printf("ppname: %s, elv_name: %s, %d, %d", probefunc(),
elevator_name, disk_major, disk_minor)
}
+
+probe ioscheduler_trace.elv*
+{
+ printf("ppname: %s, request %p, elv_name: %s, %d, %d", probefunc(),
+ rq, elevator_name, disk_major, disk_minor)
+}
+
+probe ioscheduler_trace.plug, ioscheduler_trace.unplug_io, ioscheduler_trace.unplug_timer
+{
+ printf("ppname: %s, request %p", probefunc(), rq_queue)
+}
+
diff --git a/testsuite/buildok/netdev.stp b/testsuite/buildok/netdev.stp
index 49a1eb5c..7e4be82c 100755
--- a/testsuite/buildok/netdev.stp
+++ b/testsuite/buildok/netdev.stp
@@ -1,6 +1,6 @@
#! stap -wp4
-probe netdev.get_stats{
+probe netdev.get_stats ? {
printf("%s", dev_name)
}
@@ -21,7 +21,7 @@ probe netdev.set_promiscuity {
disable, inc)
}
-probe netdev.change_rx_flag {
+probe netdev.change_rx_flag ? {
printf("%s %d", dev_name, flags)
}
diff --git a/testsuite/lib/stap_compile.exp b/testsuite/lib/stap_compile.exp
index c8d44203..8780930e 100644
--- a/testsuite/lib/stap_compile.exp
+++ b/testsuite/lib/stap_compile.exp
@@ -19,8 +19,8 @@ proc stap_compile { TEST_NAME compile script args } {
-re "compilation failed" {incr compile_errors 1; exp_continue}
-re "semantic error:" {incr compile_errors 1; exp_continue}
}
- catch close
set res [wait -i $spawn_id]
+ catch close
set res [lindex $res 3]
if {($res == 0 && $compile_errors == 0)
diff --git a/testsuite/systemtap.base/cu-decl.exp b/testsuite/systemtap.base/cu-decl.exp
index 42e683cb..ae06ad85 100644
--- a/testsuite/systemtap.base/cu-decl.exp
+++ b/testsuite/systemtap.base/cu-decl.exp
@@ -17,7 +17,9 @@ if { $res != "" } {
} else {
pass "$test target compilation"
}
-
-stap_compile $test 1 "{$script}"
-
+if {![utrace_p]} {
+ untested "$test : no kernel utrace support found"
+} else {
+ stap_compile $test 1 "{$script}"
+}
catch {exec rm $test}
diff --git a/testsuite/systemtap.pass1-4/buildok.exp b/testsuite/systemtap.pass1-4/buildok.exp
index 8ab8b139..a9f16a8b 100644
--- a/testsuite/systemtap.pass1-4/buildok.exp
+++ b/testsuite/systemtap.pass1-4/buildok.exp
@@ -6,10 +6,7 @@ foreach file [lsort [glob -nocomplain $srcdir/$self/*.stp]] {
# some tests are known to fail.
switch $test {
buildok/perfmon01.stp {setup_kfail 909 *-*-*}
- buildok/sched_test.stp {setup_kfail 1155 *-*-*}
- buildok/process_test.stp {setup_kfail 1155 *-*-*}
buildok/rpc-all-probes.stp {setup_kfail 4413 *-*-*}
- buildok/nfs-all-probes.stp {setup_kfail 4413 *-*-*}
buildok/per-process-syscall.stp {if {![utrace_p]} { setup_kfail 9999 *-*-*} }
}
if {$rc == 0} { pass $test } else { fail $test }
diff --git a/translate.cxx b/translate.cxx
index ca298113..03f7c86a 100644
--- a/translate.cxx
+++ b/translate.cxx
@@ -2611,7 +2611,7 @@ c_unparser::visit_foreach_loop (foreach_loop *s)
// @count instead for aggregates. '-5' tells the
// runtime to sort by count.
if (s->sort_column == 0)
- sort_column = -5;
+ sort_column = -5; /* runtime/map.c SORT_COUNT */
else
sort_column = s->sort_column;