diff options
author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2013-03-19 04:47:30 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2013-03-19 04:47:30 -0400 |
commit | 0d4a42f6bd298e826620585e766a154ab460617a (patch) | |
tree | 406d8f7778691d858dbe3e48e4bbb10e99c0a58a /include/trace | |
parent | d62b4892f3d9f7dd2002e5309be10719d6805b0f (diff) | |
parent | a937536b868b8369b98967929045f1df54234323 (diff) |
Merge tag 'v3.9-rc3' into drm-intel-next-queued
Backmerge so that I can merge Imre Deak's coalesced sg entries fixes,
which depend upon the new for_each_sg_page introduce in
commit a321e91b6d73ed011ffceed384c40d2785cf723b
Author: Imre Deak <imre.deak@intel.com>
Date: Wed Feb 27 17:02:56 2013 -0800
lib/scatterlist: add simple page iterator
The merge itself is just two trivial conflicts:
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'include/trace')
-rw-r--r-- | include/trace/events/block.h | 104 | ||||
-rw-r--r-- | include/trace/events/ext4.h | 198 | ||||
-rw-r--r-- | include/trace/events/jbd2.h | 106 | ||||
-rw-r--r-- | include/trace/events/kvm.h | 2 | ||||
-rw-r--r-- | include/trace/events/power.h | 92 | ||||
-rw-r--r-- | include/trace/events/ras.h | 77 | ||||
-rw-r--r-- | include/trace/events/rcu.h | 31 | ||||
-rw-r--r-- | include/trace/events/workqueue.h | 10 | ||||
-rw-r--r-- | include/trace/events/writeback.h | 116 |
9 files changed, 578 insertions, 158 deletions
diff --git a/include/trace/events/block.h b/include/trace/events/block.h index 05c5e61f0a7c..9961726523d0 100644 --- a/include/trace/events/block.h +++ b/include/trace/events/block.h | |||
@@ -6,10 +6,61 @@ | |||
6 | 6 | ||
7 | #include <linux/blktrace_api.h> | 7 | #include <linux/blktrace_api.h> |
8 | #include <linux/blkdev.h> | 8 | #include <linux/blkdev.h> |
9 | #include <linux/buffer_head.h> | ||
9 | #include <linux/tracepoint.h> | 10 | #include <linux/tracepoint.h> |
10 | 11 | ||
11 | #define RWBS_LEN 8 | 12 | #define RWBS_LEN 8 |
12 | 13 | ||
14 | DECLARE_EVENT_CLASS(block_buffer, | ||
15 | |||
16 | TP_PROTO(struct buffer_head *bh), | ||
17 | |||
18 | TP_ARGS(bh), | ||
19 | |||
20 | TP_STRUCT__entry ( | ||
21 | __field( dev_t, dev ) | ||
22 | __field( sector_t, sector ) | ||
23 | __field( size_t, size ) | ||
24 | ), | ||
25 | |||
26 | TP_fast_assign( | ||
27 | __entry->dev = bh->b_bdev->bd_dev; | ||
28 | __entry->sector = bh->b_blocknr; | ||
29 | __entry->size = bh->b_size; | ||
30 | ), | ||
31 | |||
32 | TP_printk("%d,%d sector=%llu size=%zu", | ||
33 | MAJOR(__entry->dev), MINOR(__entry->dev), | ||
34 | (unsigned long long)__entry->sector, __entry->size | ||
35 | ) | ||
36 | ); | ||
37 | |||
38 | /** | ||
39 | * block_touch_buffer - mark a buffer accessed | ||
40 | * @bh: buffer_head being touched | ||
41 | * | ||
42 | * Called from touch_buffer(). | ||
43 | */ | ||
44 | DEFINE_EVENT(block_buffer, block_touch_buffer, | ||
45 | |||
46 | TP_PROTO(struct buffer_head *bh), | ||
47 | |||
48 | TP_ARGS(bh) | ||
49 | ); | ||
50 | |||
51 | /** | ||
52 | * block_dirty_buffer - mark a buffer dirty | ||
53 | * @bh: buffer_head being dirtied | ||
54 | * | ||
55 | * Called from mark_buffer_dirty(). | ||
56 | */ | ||
57 | DEFINE_EVENT(block_buffer, block_dirty_buffer, | ||
58 | |||
59 | TP_PROTO(struct buffer_head *bh), | ||
60 | |||
61 | TP_ARGS(bh) | ||
62 | ); | ||
63 | |||
13 | DECLARE_EVENT_CLASS(block_rq_with_error, | 64 | DECLARE_EVENT_CLASS(block_rq_with_error, |
14 | 65 | ||
15 | TP_PROTO(struct request_queue *q, struct request *rq), | 66 | TP_PROTO(struct request_queue *q, struct request *rq), |
@@ -206,7 +257,6 @@ TRACE_EVENT(block_bio_bounce, | |||
206 | 257 | ||
207 | /** | 258 | /** |
208 | * block_bio_complete - completed all work on the block operation | 259 | * block_bio_complete - completed all work on the block operation |
209 | * @q: queue holding the block operation | ||
210 | * @bio: block operation completed | 260 | * @bio: block operation completed |
211 | * @error: io error value | 261 | * @error: io error value |
212 | * | 262 | * |
@@ -215,9 +265,9 @@ TRACE_EVENT(block_bio_bounce, | |||
215 | */ | 265 | */ |
216 | TRACE_EVENT(block_bio_complete, | 266 | TRACE_EVENT(block_bio_complete, |
217 | 267 | ||
218 | TP_PROTO(struct request_queue *q, struct bio *bio, int error), | 268 | TP_PROTO(struct bio *bio, int error), |
219 | 269 | ||
220 | TP_ARGS(q, bio, error), | 270 | TP_ARGS(bio, error), |
221 | 271 | ||
222 | TP_STRUCT__entry( | 272 | TP_STRUCT__entry( |
223 | __field( dev_t, dev ) | 273 | __field( dev_t, dev ) |
@@ -228,7 +278,8 @@ TRACE_EVENT(block_bio_complete, | |||
228 | ), | 278 | ), |
229 | 279 | ||
230 | TP_fast_assign( | 280 | TP_fast_assign( |
231 | __entry->dev = bio->bi_bdev->bd_dev; | 281 | __entry->dev = bio->bi_bdev ? |
282 | bio->bi_bdev->bd_dev : 0; | ||
232 | __entry->sector = bio->bi_sector; | 283 | __entry->sector = bio->bi_sector; |
233 | __entry->nr_sector = bio->bi_size >> 9; | 284 | __entry->nr_sector = bio->bi_size >> 9; |
234 | __entry->error = error; | 285 | __entry->error = error; |
@@ -241,11 +292,11 @@ TRACE_EVENT(block_bio_complete, | |||
241 | __entry->nr_sector, __entry->error) | 292 | __entry->nr_sector, __entry->error) |
242 | ); | 293 | ); |
243 | 294 | ||
244 | DECLARE_EVENT_CLASS(block_bio, | 295 | DECLARE_EVENT_CLASS(block_bio_merge, |
245 | 296 | ||
246 | TP_PROTO(struct request_queue *q, struct bio *bio), | 297 | TP_PROTO(struct request_queue *q, struct request *rq, struct bio *bio), |
247 | 298 | ||
248 | TP_ARGS(q, bio), | 299 | TP_ARGS(q, rq, bio), |
249 | 300 | ||
250 | TP_STRUCT__entry( | 301 | TP_STRUCT__entry( |
251 | __field( dev_t, dev ) | 302 | __field( dev_t, dev ) |
@@ -272,31 +323,33 @@ DECLARE_EVENT_CLASS(block_bio, | |||
272 | /** | 323 | /** |
273 | * block_bio_backmerge - merging block operation to the end of an existing operation | 324 | * block_bio_backmerge - merging block operation to the end of an existing operation |
274 | * @q: queue holding operation | 325 | * @q: queue holding operation |
326 | * @rq: request bio is being merged into | ||
275 | * @bio: new block operation to merge | 327 | * @bio: new block operation to merge |
276 | * | 328 | * |
277 | * Merging block request @bio to the end of an existing block request | 329 | * Merging block request @bio to the end of an existing block request |
278 | * in queue @q. | 330 | * in queue @q. |
279 | */ | 331 | */ |
280 | DEFINE_EVENT(block_bio, block_bio_backmerge, | 332 | DEFINE_EVENT(block_bio_merge, block_bio_backmerge, |
281 | 333 | ||
282 | TP_PROTO(struct request_queue *q, struct bio *bio), | 334 | TP_PROTO(struct request_queue *q, struct request *rq, struct bio *bio), |
283 | 335 | ||
284 | TP_ARGS(q, bio) | 336 | TP_ARGS(q, rq, bio) |
285 | ); | 337 | ); |
286 | 338 | ||
287 | /** | 339 | /** |
288 | * block_bio_frontmerge - merging block operation to the beginning of an existing operation | 340 | * block_bio_frontmerge - merging block operation to the beginning of an existing operation |
289 | * @q: queue holding operation | 341 | * @q: queue holding operation |
342 | * @rq: request bio is being merged into | ||
290 | * @bio: new block operation to merge | 343 | * @bio: new block operation to merge |
291 | * | 344 | * |
292 | * Merging block IO operation @bio to the beginning of an existing block | 345 | * Merging block IO operation @bio to the beginning of an existing block |
293 | * operation in queue @q. | 346 | * operation in queue @q. |
294 | */ | 347 | */ |
295 | DEFINE_EVENT(block_bio, block_bio_frontmerge, | 348 | DEFINE_EVENT(block_bio_merge, block_bio_frontmerge, |
296 | 349 | ||
297 | TP_PROTO(struct request_queue *q, struct bio *bio), | 350 | TP_PROTO(struct request_queue *q, struct request *rq, struct bio *bio), |
298 | 351 | ||
299 | TP_ARGS(q, bio) | 352 | TP_ARGS(q, rq, bio) |
300 | ); | 353 | ); |
301 | 354 | ||
302 | /** | 355 | /** |
@@ -306,11 +359,32 @@ DEFINE_EVENT(block_bio, block_bio_frontmerge, | |||
306 | * | 359 | * |
307 | * About to place the block IO operation @bio into queue @q. | 360 | * About to place the block IO operation @bio into queue @q. |
308 | */ | 361 | */ |
309 | DEFINE_EVENT(block_bio, block_bio_queue, | 362 | TRACE_EVENT(block_bio_queue, |
310 | 363 | ||
311 | TP_PROTO(struct request_queue *q, struct bio *bio), | 364 | TP_PROTO(struct request_queue *q, struct bio *bio), |
312 | 365 | ||
313 | TP_ARGS(q, bio) | 366 | TP_ARGS(q, bio), |
367 | |||
368 | TP_STRUCT__entry( | ||
369 | __field( dev_t, dev ) | ||
370 | __field( sector_t, sector ) | ||
371 | __field( unsigned int, nr_sector ) | ||
372 | __array( char, rwbs, RWBS_LEN ) | ||
373 | __array( char, comm, TASK_COMM_LEN ) | ||
374 | ), | ||
375 | |||
376 | TP_fast_assign( | ||
377 | __entry->dev = bio->bi_bdev->bd_dev; | ||
378 | __entry->sector = bio->bi_sector; | ||
379 | __entry->nr_sector = bio->bi_size >> 9; | ||
380 | blk_fill_rwbs(__entry->rwbs, bio->bi_rw, bio->bi_size); | ||
381 | memcpy(__entry->comm, current->comm, TASK_COMM_LEN); | ||
382 | ), | ||
383 | |||
384 | TP_printk("%d,%d %s %llu + %u [%s]", | ||
385 | MAJOR(__entry->dev), MINOR(__entry->dev), __entry->rwbs, | ||
386 | (unsigned long long)__entry->sector, | ||
387 | __entry->nr_sector, __entry->comm) | ||
314 | ); | 388 | ); |
315 | 389 | ||
316 | DECLARE_EVENT_CLASS(block_get_rq, | 390 | DECLARE_EVENT_CLASS(block_get_rq, |
diff --git a/include/trace/events/ext4.h b/include/trace/events/ext4.h index 7e8c36bc7082..4ee471003859 100644 --- a/include/trace/events/ext4.h +++ b/include/trace/events/ext4.h | |||
@@ -1324,6 +1324,31 @@ TRACE_EVENT(ext4_fallocate_exit, | |||
1324 | __entry->ret) | 1324 | __entry->ret) |
1325 | ); | 1325 | ); |
1326 | 1326 | ||
1327 | TRACE_EVENT(ext4_punch_hole, | ||
1328 | TP_PROTO(struct inode *inode, loff_t offset, loff_t len), | ||
1329 | |||
1330 | TP_ARGS(inode, offset, len), | ||
1331 | |||
1332 | TP_STRUCT__entry( | ||
1333 | __field( dev_t, dev ) | ||
1334 | __field( ino_t, ino ) | ||
1335 | __field( loff_t, offset ) | ||
1336 | __field( loff_t, len ) | ||
1337 | ), | ||
1338 | |||
1339 | TP_fast_assign( | ||
1340 | __entry->dev = inode->i_sb->s_dev; | ||
1341 | __entry->ino = inode->i_ino; | ||
1342 | __entry->offset = offset; | ||
1343 | __entry->len = len; | ||
1344 | ), | ||
1345 | |||
1346 | TP_printk("dev %d,%d ino %lu offset %lld len %lld", | ||
1347 | MAJOR(__entry->dev), MINOR(__entry->dev), | ||
1348 | (unsigned long) __entry->ino, | ||
1349 | __entry->offset, __entry->len) | ||
1350 | ); | ||
1351 | |||
1327 | TRACE_EVENT(ext4_unlink_enter, | 1352 | TRACE_EVENT(ext4_unlink_enter, |
1328 | TP_PROTO(struct inode *parent, struct dentry *dentry), | 1353 | TP_PROTO(struct inode *parent, struct dentry *dentry), |
1329 | 1354 | ||
@@ -2068,103 +2093,210 @@ TRACE_EVENT(ext4_ext_remove_space_done, | |||
2068 | ); | 2093 | ); |
2069 | 2094 | ||
2070 | TRACE_EVENT(ext4_es_insert_extent, | 2095 | TRACE_EVENT(ext4_es_insert_extent, |
2071 | TP_PROTO(struct inode *inode, ext4_lblk_t start, ext4_lblk_t len), | 2096 | TP_PROTO(struct inode *inode, struct extent_status *es), |
2072 | 2097 | ||
2073 | TP_ARGS(inode, start, len), | 2098 | TP_ARGS(inode, es), |
2074 | 2099 | ||
2075 | TP_STRUCT__entry( | 2100 | TP_STRUCT__entry( |
2076 | __field( dev_t, dev ) | 2101 | __field( dev_t, dev ) |
2077 | __field( ino_t, ino ) | 2102 | __field( ino_t, ino ) |
2078 | __field( loff_t, start ) | 2103 | __field( ext4_lblk_t, lblk ) |
2079 | __field( loff_t, len ) | 2104 | __field( ext4_lblk_t, len ) |
2105 | __field( ext4_fsblk_t, pblk ) | ||
2106 | __field( unsigned long long, status ) | ||
2080 | ), | 2107 | ), |
2081 | 2108 | ||
2082 | TP_fast_assign( | 2109 | TP_fast_assign( |
2083 | __entry->dev = inode->i_sb->s_dev; | 2110 | __entry->dev = inode->i_sb->s_dev; |
2084 | __entry->ino = inode->i_ino; | 2111 | __entry->ino = inode->i_ino; |
2085 | __entry->start = start; | 2112 | __entry->lblk = es->es_lblk; |
2086 | __entry->len = len; | 2113 | __entry->len = es->es_len; |
2114 | __entry->pblk = ext4_es_pblock(es); | ||
2115 | __entry->status = ext4_es_status(es); | ||
2087 | ), | 2116 | ), |
2088 | 2117 | ||
2089 | TP_printk("dev %d,%d ino %lu es [%lld/%lld)", | 2118 | TP_printk("dev %d,%d ino %lu es [%u/%u) mapped %llu status %llx", |
2090 | MAJOR(__entry->dev), MINOR(__entry->dev), | 2119 | MAJOR(__entry->dev), MINOR(__entry->dev), |
2091 | (unsigned long) __entry->ino, | 2120 | (unsigned long) __entry->ino, |
2092 | __entry->start, __entry->len) | 2121 | __entry->lblk, __entry->len, |
2122 | __entry->pblk, __entry->status) | ||
2093 | ); | 2123 | ); |
2094 | 2124 | ||
2095 | TRACE_EVENT(ext4_es_remove_extent, | 2125 | TRACE_EVENT(ext4_es_remove_extent, |
2096 | TP_PROTO(struct inode *inode, ext4_lblk_t start, ext4_lblk_t len), | 2126 | TP_PROTO(struct inode *inode, ext4_lblk_t lblk, ext4_lblk_t len), |
2097 | 2127 | ||
2098 | TP_ARGS(inode, start, len), | 2128 | TP_ARGS(inode, lblk, len), |
2099 | 2129 | ||
2100 | TP_STRUCT__entry( | 2130 | TP_STRUCT__entry( |
2101 | __field( dev_t, dev ) | 2131 | __field( dev_t, dev ) |
2102 | __field( ino_t, ino ) | 2132 | __field( ino_t, ino ) |
2103 | __field( loff_t, start ) | 2133 | __field( loff_t, lblk ) |
2104 | __field( loff_t, len ) | 2134 | __field( loff_t, len ) |
2105 | ), | 2135 | ), |
2106 | 2136 | ||
2107 | TP_fast_assign( | 2137 | TP_fast_assign( |
2108 | __entry->dev = inode->i_sb->s_dev; | 2138 | __entry->dev = inode->i_sb->s_dev; |
2109 | __entry->ino = inode->i_ino; | 2139 | __entry->ino = inode->i_ino; |
2110 | __entry->start = start; | 2140 | __entry->lblk = lblk; |
2111 | __entry->len = len; | 2141 | __entry->len = len; |
2112 | ), | 2142 | ), |
2113 | 2143 | ||
2114 | TP_printk("dev %d,%d ino %lu es [%lld/%lld)", | 2144 | TP_printk("dev %d,%d ino %lu es [%lld/%lld)", |
2115 | MAJOR(__entry->dev), MINOR(__entry->dev), | 2145 | MAJOR(__entry->dev), MINOR(__entry->dev), |
2116 | (unsigned long) __entry->ino, | 2146 | (unsigned long) __entry->ino, |
2117 | __entry->start, __entry->len) | 2147 | __entry->lblk, __entry->len) |
2118 | ); | 2148 | ); |
2119 | 2149 | ||
2120 | TRACE_EVENT(ext4_es_find_extent_enter, | 2150 | TRACE_EVENT(ext4_es_find_delayed_extent_enter, |
2121 | TP_PROTO(struct inode *inode, ext4_lblk_t start), | 2151 | TP_PROTO(struct inode *inode, ext4_lblk_t lblk), |
2122 | 2152 | ||
2123 | TP_ARGS(inode, start), | 2153 | TP_ARGS(inode, lblk), |
2124 | 2154 | ||
2125 | TP_STRUCT__entry( | 2155 | TP_STRUCT__entry( |
2126 | __field( dev_t, dev ) | 2156 | __field( dev_t, dev ) |
2127 | __field( ino_t, ino ) | 2157 | __field( ino_t, ino ) |
2128 | __field( ext4_lblk_t, start ) | 2158 | __field( ext4_lblk_t, lblk ) |
2129 | ), | 2159 | ), |
2130 | 2160 | ||
2131 | TP_fast_assign( | 2161 | TP_fast_assign( |
2132 | __entry->dev = inode->i_sb->s_dev; | 2162 | __entry->dev = inode->i_sb->s_dev; |
2133 | __entry->ino = inode->i_ino; | 2163 | __entry->ino = inode->i_ino; |
2134 | __entry->start = start; | 2164 | __entry->lblk = lblk; |
2135 | ), | 2165 | ), |
2136 | 2166 | ||
2137 | TP_printk("dev %d,%d ino %lu start %u", | 2167 | TP_printk("dev %d,%d ino %lu lblk %u", |
2138 | MAJOR(__entry->dev), MINOR(__entry->dev), | 2168 | MAJOR(__entry->dev), MINOR(__entry->dev), |
2139 | (unsigned long) __entry->ino, __entry->start) | 2169 | (unsigned long) __entry->ino, __entry->lblk) |
2140 | ); | 2170 | ); |
2141 | 2171 | ||
2142 | TRACE_EVENT(ext4_es_find_extent_exit, | 2172 | TRACE_EVENT(ext4_es_find_delayed_extent_exit, |
2143 | TP_PROTO(struct inode *inode, struct extent_status *es, | 2173 | TP_PROTO(struct inode *inode, struct extent_status *es), |
2144 | ext4_lblk_t ret), | ||
2145 | 2174 | ||
2146 | TP_ARGS(inode, es, ret), | 2175 | TP_ARGS(inode, es), |
2147 | 2176 | ||
2148 | TP_STRUCT__entry( | 2177 | TP_STRUCT__entry( |
2149 | __field( dev_t, dev ) | 2178 | __field( dev_t, dev ) |
2150 | __field( ino_t, ino ) | 2179 | __field( ino_t, ino ) |
2151 | __field( ext4_lblk_t, start ) | 2180 | __field( ext4_lblk_t, lblk ) |
2152 | __field( ext4_lblk_t, len ) | 2181 | __field( ext4_lblk_t, len ) |
2153 | __field( ext4_lblk_t, ret ) | 2182 | __field( ext4_fsblk_t, pblk ) |
2183 | __field( unsigned long long, status ) | ||
2154 | ), | 2184 | ), |
2155 | 2185 | ||
2156 | TP_fast_assign( | 2186 | TP_fast_assign( |
2157 | __entry->dev = inode->i_sb->s_dev; | 2187 | __entry->dev = inode->i_sb->s_dev; |
2158 | __entry->ino = inode->i_ino; | 2188 | __entry->ino = inode->i_ino; |
2159 | __entry->start = es->start; | 2189 | __entry->lblk = es->es_lblk; |
2160 | __entry->len = es->len; | 2190 | __entry->len = es->es_len; |
2161 | __entry->ret = ret; | 2191 | __entry->pblk = ext4_es_pblock(es); |
2192 | __entry->status = ext4_es_status(es); | ||
2162 | ), | 2193 | ), |
2163 | 2194 | ||
2164 | TP_printk("dev %d,%d ino %lu es [%u/%u) ret %u", | 2195 | TP_printk("dev %d,%d ino %lu es [%u/%u) mapped %llu status %llx", |
2165 | MAJOR(__entry->dev), MINOR(__entry->dev), | 2196 | MAJOR(__entry->dev), MINOR(__entry->dev), |
2166 | (unsigned long) __entry->ino, | 2197 | (unsigned long) __entry->ino, |
2167 | __entry->start, __entry->len, __entry->ret) | 2198 | __entry->lblk, __entry->len, |
2199 | __entry->pblk, __entry->status) | ||
2200 | ); | ||
2201 | |||
2202 | TRACE_EVENT(ext4_es_lookup_extent_enter, | ||
2203 | TP_PROTO(struct inode *inode, ext4_lblk_t lblk), | ||
2204 | |||
2205 | TP_ARGS(inode, lblk), | ||
2206 | |||
2207 | TP_STRUCT__entry( | ||
2208 | __field( dev_t, dev ) | ||
2209 | __field( ino_t, ino ) | ||
2210 | __field( ext4_lblk_t, lblk ) | ||
2211 | ), | ||
2212 | |||
2213 | TP_fast_assign( | ||
2214 | __entry->dev = inode->i_sb->s_dev; | ||
2215 | __entry->ino = inode->i_ino; | ||
2216 | __entry->lblk = lblk; | ||
2217 | ), | ||
2218 | |||
2219 | TP_printk("dev %d,%d ino %lu lblk %u", | ||
2220 | MAJOR(__entry->dev), MINOR(__entry->dev), | ||
2221 | (unsigned long) __entry->ino, __entry->lblk) | ||
2222 | ); | ||
2223 | |||
2224 | TRACE_EVENT(ext4_es_lookup_extent_exit, | ||
2225 | TP_PROTO(struct inode *inode, struct extent_status *es, | ||
2226 | int found), | ||
2227 | |||
2228 | TP_ARGS(inode, es, found), | ||
2229 | |||
2230 | TP_STRUCT__entry( | ||
2231 | __field( dev_t, dev ) | ||
2232 | __field( ino_t, ino ) | ||
2233 | __field( ext4_lblk_t, lblk ) | ||
2234 | __field( ext4_lblk_t, len ) | ||
2235 | __field( ext4_fsblk_t, pblk ) | ||
2236 | __field( unsigned long long, status ) | ||
2237 | __field( int, found ) | ||
2238 | ), | ||
2239 | |||
2240 | TP_fast_assign( | ||
2241 | __entry->dev = inode->i_sb->s_dev; | ||
2242 | __entry->ino = inode->i_ino; | ||
2243 | __entry->lblk = es->es_lblk; | ||
2244 | __entry->len = es->es_len; | ||
2245 | __entry->pblk = ext4_es_pblock(es); | ||
2246 | __entry->status = ext4_es_status(es); | ||
2247 | __entry->found = found; | ||
2248 | ), | ||
2249 | |||
2250 | TP_printk("dev %d,%d ino %lu found %d [%u/%u) %llu %llx", | ||
2251 | MAJOR(__entry->dev), MINOR(__entry->dev), | ||
2252 | (unsigned long) __entry->ino, __entry->found, | ||
2253 | __entry->lblk, __entry->len, | ||
2254 | __entry->found ? __entry->pblk : 0, | ||
2255 | __entry->found ? __entry->status : 0) | ||
2256 | ); | ||
2257 | |||
2258 | TRACE_EVENT(ext4_es_shrink_enter, | ||
2259 | TP_PROTO(struct super_block *sb, int nr_to_scan, int cache_cnt), | ||
2260 | |||
2261 | TP_ARGS(sb, nr_to_scan, cache_cnt), | ||
2262 | |||
2263 | TP_STRUCT__entry( | ||
2264 | __field( dev_t, dev ) | ||
2265 | __field( int, nr_to_scan ) | ||
2266 | __field( int, cache_cnt ) | ||
2267 | ), | ||
2268 | |||
2269 | TP_fast_assign( | ||
2270 | __entry->dev = sb->s_dev; | ||
2271 | __entry->nr_to_scan = nr_to_scan; | ||
2272 | __entry->cache_cnt = cache_cnt; | ||
2273 | ), | ||
2274 | |||
2275 | TP_printk("dev %d,%d nr_to_scan %d cache_cnt %d", | ||
2276 | MAJOR(__entry->dev), MINOR(__entry->dev), | ||
2277 | __entry->nr_to_scan, __entry->cache_cnt) | ||
2278 | ); | ||
2279 | |||
2280 | TRACE_EVENT(ext4_es_shrink_exit, | ||
2281 | TP_PROTO(struct super_block *sb, int shrunk_nr, int cache_cnt), | ||
2282 | |||
2283 | TP_ARGS(sb, shrunk_nr, cache_cnt), | ||
2284 | |||
2285 | TP_STRUCT__entry( | ||
2286 | __field( dev_t, dev ) | ||
2287 | __field( int, shrunk_nr ) | ||
2288 | __field( int, cache_cnt ) | ||
2289 | ), | ||
2290 | |||
2291 | TP_fast_assign( | ||
2292 | __entry->dev = sb->s_dev; | ||
2293 | __entry->shrunk_nr = shrunk_nr; | ||
2294 | __entry->cache_cnt = cache_cnt; | ||
2295 | ), | ||
2296 | |||
2297 | TP_printk("dev %d,%d shrunk_nr %d cache_cnt %d", | ||
2298 | MAJOR(__entry->dev), MINOR(__entry->dev), | ||
2299 | __entry->shrunk_nr, __entry->cache_cnt) | ||
2168 | ); | 2300 | ); |
2169 | 2301 | ||
2170 | #endif /* _TRACE_EXT4_H */ | 2302 | #endif /* _TRACE_EXT4_H */ |
diff --git a/include/trace/events/jbd2.h b/include/trace/events/jbd2.h index 127993dbf322..070df49e4a1d 100644 --- a/include/trace/events/jbd2.h +++ b/include/trace/events/jbd2.h | |||
@@ -132,6 +132,104 @@ TRACE_EVENT(jbd2_submit_inode_data, | |||
132 | (unsigned long) __entry->ino) | 132 | (unsigned long) __entry->ino) |
133 | ); | 133 | ); |
134 | 134 | ||
135 | TRACE_EVENT(jbd2_handle_start, | ||
136 | TP_PROTO(dev_t dev, unsigned long tid, unsigned int type, | ||
137 | unsigned int line_no, int requested_blocks), | ||
138 | |||
139 | TP_ARGS(dev, tid, type, line_no, requested_blocks), | ||
140 | |||
141 | TP_STRUCT__entry( | ||
142 | __field( dev_t, dev ) | ||
143 | __field( unsigned long, tid ) | ||
144 | __field( unsigned int, type ) | ||
145 | __field( unsigned int, line_no ) | ||
146 | __field( int, requested_blocks) | ||
147 | ), | ||
148 | |||
149 | TP_fast_assign( | ||
150 | __entry->dev = dev; | ||
151 | __entry->tid = tid; | ||
152 | __entry->type = type; | ||
153 | __entry->line_no = line_no; | ||
154 | __entry->requested_blocks = requested_blocks; | ||
155 | ), | ||
156 | |||
157 | TP_printk("dev %d,%d tid %lu type %u line_no %u " | ||
158 | "requested_blocks %d", | ||
159 | MAJOR(__entry->dev), MINOR(__entry->dev), __entry->tid, | ||
160 | __entry->type, __entry->line_no, __entry->requested_blocks) | ||
161 | ); | ||
162 | |||
163 | TRACE_EVENT(jbd2_handle_extend, | ||
164 | TP_PROTO(dev_t dev, unsigned long tid, unsigned int type, | ||
165 | unsigned int line_no, int buffer_credits, | ||
166 | int requested_blocks), | ||
167 | |||
168 | TP_ARGS(dev, tid, type, line_no, buffer_credits, requested_blocks), | ||
169 | |||
170 | TP_STRUCT__entry( | ||
171 | __field( dev_t, dev ) | ||
172 | __field( unsigned long, tid ) | ||
173 | __field( unsigned int, type ) | ||
174 | __field( unsigned int, line_no ) | ||
175 | __field( int, buffer_credits ) | ||
176 | __field( int, requested_blocks) | ||
177 | ), | ||
178 | |||
179 | TP_fast_assign( | ||
180 | __entry->dev = dev; | ||
181 | __entry->tid = tid; | ||
182 | __entry->type = type; | ||
183 | __entry->line_no = line_no; | ||
184 | __entry->buffer_credits = buffer_credits; | ||
185 | __entry->requested_blocks = requested_blocks; | ||
186 | ), | ||
187 | |||
188 | TP_printk("dev %d,%d tid %lu type %u line_no %u " | ||
189 | "buffer_credits %d requested_blocks %d", | ||
190 | MAJOR(__entry->dev), MINOR(__entry->dev), __entry->tid, | ||
191 | __entry->type, __entry->line_no, __entry->buffer_credits, | ||
192 | __entry->requested_blocks) | ||
193 | ); | ||
194 | |||
195 | TRACE_EVENT(jbd2_handle_stats, | ||
196 | TP_PROTO(dev_t dev, unsigned long tid, unsigned int type, | ||
197 | unsigned int line_no, int interval, int sync, | ||
198 | int requested_blocks, int dirtied_blocks), | ||
199 | |||
200 | TP_ARGS(dev, tid, type, line_no, interval, sync, | ||
201 | requested_blocks, dirtied_blocks), | ||
202 | |||
203 | TP_STRUCT__entry( | ||
204 | __field( dev_t, dev ) | ||
205 | __field( unsigned long, tid ) | ||
206 | __field( unsigned int, type ) | ||
207 | __field( unsigned int, line_no ) | ||
208 | __field( int, interval ) | ||
209 | __field( int, sync ) | ||
210 | __field( int, requested_blocks) | ||
211 | __field( int, dirtied_blocks ) | ||
212 | ), | ||
213 | |||
214 | TP_fast_assign( | ||
215 | __entry->dev = dev; | ||
216 | __entry->tid = tid; | ||
217 | __entry->type = type; | ||
218 | __entry->line_no = line_no; | ||
219 | __entry->interval = interval; | ||
220 | __entry->sync = sync; | ||
221 | __entry->requested_blocks = requested_blocks; | ||
222 | __entry->dirtied_blocks = dirtied_blocks; | ||
223 | ), | ||
224 | |||
225 | TP_printk("dev %d,%d tid %lu type %u line_no %u interval %d " | ||
226 | "sync %d requested_blocks %d dirtied_blocks %d", | ||
227 | MAJOR(__entry->dev), MINOR(__entry->dev), __entry->tid, | ||
228 | __entry->type, __entry->line_no, __entry->interval, | ||
229 | __entry->sync, __entry->requested_blocks, | ||
230 | __entry->dirtied_blocks) | ||
231 | ); | ||
232 | |||
135 | TRACE_EVENT(jbd2_run_stats, | 233 | TRACE_EVENT(jbd2_run_stats, |
136 | TP_PROTO(dev_t dev, unsigned long tid, | 234 | TP_PROTO(dev_t dev, unsigned long tid, |
137 | struct transaction_run_stats_s *stats), | 235 | struct transaction_run_stats_s *stats), |
@@ -142,6 +240,7 @@ TRACE_EVENT(jbd2_run_stats, | |||
142 | __field( dev_t, dev ) | 240 | __field( dev_t, dev ) |
143 | __field( unsigned long, tid ) | 241 | __field( unsigned long, tid ) |
144 | __field( unsigned long, wait ) | 242 | __field( unsigned long, wait ) |
243 | __field( unsigned long, request_delay ) | ||
145 | __field( unsigned long, running ) | 244 | __field( unsigned long, running ) |
146 | __field( unsigned long, locked ) | 245 | __field( unsigned long, locked ) |
147 | __field( unsigned long, flushing ) | 246 | __field( unsigned long, flushing ) |
@@ -155,6 +254,7 @@ TRACE_EVENT(jbd2_run_stats, | |||
155 | __entry->dev = dev; | 254 | __entry->dev = dev; |
156 | __entry->tid = tid; | 255 | __entry->tid = tid; |
157 | __entry->wait = stats->rs_wait; | 256 | __entry->wait = stats->rs_wait; |
257 | __entry->request_delay = stats->rs_request_delay; | ||
158 | __entry->running = stats->rs_running; | 258 | __entry->running = stats->rs_running; |
159 | __entry->locked = stats->rs_locked; | 259 | __entry->locked = stats->rs_locked; |
160 | __entry->flushing = stats->rs_flushing; | 260 | __entry->flushing = stats->rs_flushing; |
@@ -164,10 +264,12 @@ TRACE_EVENT(jbd2_run_stats, | |||
164 | __entry->blocks_logged = stats->rs_blocks_logged; | 264 | __entry->blocks_logged = stats->rs_blocks_logged; |
165 | ), | 265 | ), |
166 | 266 | ||
167 | TP_printk("dev %d,%d tid %lu wait %u running %u locked %u flushing %u " | 267 | TP_printk("dev %d,%d tid %lu wait %u request_delay %u running %u " |
168 | "logging %u handle_count %u blocks %u blocks_logged %u", | 268 | "locked %u flushing %u logging %u handle_count %u " |
269 | "blocks %u blocks_logged %u", | ||
169 | MAJOR(__entry->dev), MINOR(__entry->dev), __entry->tid, | 270 | MAJOR(__entry->dev), MINOR(__entry->dev), __entry->tid, |
170 | jiffies_to_msecs(__entry->wait), | 271 | jiffies_to_msecs(__entry->wait), |
272 | jiffies_to_msecs(__entry->request_delay), | ||
171 | jiffies_to_msecs(__entry->running), | 273 | jiffies_to_msecs(__entry->running), |
172 | jiffies_to_msecs(__entry->locked), | 274 | jiffies_to_msecs(__entry->locked), |
173 | jiffies_to_msecs(__entry->flushing), | 275 | jiffies_to_msecs(__entry->flushing), |
diff --git a/include/trace/events/kvm.h b/include/trace/events/kvm.h index 7ef9e759f499..19911dddaeb7 100644 --- a/include/trace/events/kvm.h +++ b/include/trace/events/kvm.h | |||
@@ -14,7 +14,7 @@ | |||
14 | ERSN(SHUTDOWN), ERSN(FAIL_ENTRY), ERSN(INTR), ERSN(SET_TPR), \ | 14 | ERSN(SHUTDOWN), ERSN(FAIL_ENTRY), ERSN(INTR), ERSN(SET_TPR), \ |
15 | ERSN(TPR_ACCESS), ERSN(S390_SIEIC), ERSN(S390_RESET), ERSN(DCR),\ | 15 | ERSN(TPR_ACCESS), ERSN(S390_SIEIC), ERSN(S390_RESET), ERSN(DCR),\ |
16 | ERSN(NMI), ERSN(INTERNAL_ERROR), ERSN(OSI), ERSN(PAPR_HCALL), \ | 16 | ERSN(NMI), ERSN(INTERNAL_ERROR), ERSN(OSI), ERSN(PAPR_HCALL), \ |
17 | ERSN(S390_UCONTROL) | 17 | ERSN(S390_UCONTROL), ERSN(WATCHDOG), ERSN(S390_TSCH) |
18 | 18 | ||
19 | TRACE_EVENT(kvm_userspace_exit, | 19 | TRACE_EVENT(kvm_userspace_exit, |
20 | TP_PROTO(__u32 reason, int errno), | 20 | TP_PROTO(__u32 reason, int errno), |
diff --git a/include/trace/events/power.h b/include/trace/events/power.h index 0c9783841a30..427acab5d69a 100644 --- a/include/trace/events/power.h +++ b/include/trace/events/power.h | |||
@@ -99,98 +99,6 @@ DEFINE_EVENT(wakeup_source, wakeup_source_deactivate, | |||
99 | TP_ARGS(name, state) | 99 | TP_ARGS(name, state) |
100 | ); | 100 | ); |
101 | 101 | ||
102 | #ifdef CONFIG_EVENT_POWER_TRACING_DEPRECATED | ||
103 | |||
104 | /* | ||
105 | * The power events are used for cpuidle & suspend (power_start, power_end) | ||
106 | * and for cpufreq (power_frequency) | ||
107 | */ | ||
108 | DECLARE_EVENT_CLASS(power, | ||
109 | |||
110 | TP_PROTO(unsigned int type, unsigned int state, unsigned int cpu_id), | ||
111 | |||
112 | TP_ARGS(type, state, cpu_id), | ||
113 | |||
114 | TP_STRUCT__entry( | ||
115 | __field( u64, type ) | ||
116 | __field( u64, state ) | ||
117 | __field( u64, cpu_id ) | ||
118 | ), | ||
119 | |||
120 | TP_fast_assign( | ||
121 | __entry->type = type; | ||
122 | __entry->state = state; | ||
123 | __entry->cpu_id = cpu_id; | ||
124 | ), | ||
125 | |||
126 | TP_printk("type=%lu state=%lu cpu_id=%lu", (unsigned long)__entry->type, | ||
127 | (unsigned long)__entry->state, (unsigned long)__entry->cpu_id) | ||
128 | ); | ||
129 | |||
130 | DEFINE_EVENT(power, power_start, | ||
131 | |||
132 | TP_PROTO(unsigned int type, unsigned int state, unsigned int cpu_id), | ||
133 | |||
134 | TP_ARGS(type, state, cpu_id) | ||
135 | ); | ||
136 | |||
137 | DEFINE_EVENT(power, power_frequency, | ||
138 | |||
139 | TP_PROTO(unsigned int type, unsigned int state, unsigned int cpu_id), | ||
140 | |||
141 | TP_ARGS(type, state, cpu_id) | ||
142 | ); | ||
143 | |||
144 | TRACE_EVENT(power_end, | ||
145 | |||
146 | TP_PROTO(unsigned int cpu_id), | ||
147 | |||
148 | TP_ARGS(cpu_id), | ||
149 | |||
150 | TP_STRUCT__entry( | ||
151 | __field( u64, cpu_id ) | ||
152 | ), | ||
153 | |||
154 | TP_fast_assign( | ||
155 | __entry->cpu_id = cpu_id; | ||
156 | ), | ||
157 | |||
158 | TP_printk("cpu_id=%lu", (unsigned long)__entry->cpu_id) | ||
159 | |||
160 | ); | ||
161 | |||
162 | /* Deprecated dummy functions must be protected against multi-declartion */ | ||
163 | #ifndef _PWR_EVENT_AVOID_DOUBLE_DEFINING_DEPRECATED | ||
164 | #define _PWR_EVENT_AVOID_DOUBLE_DEFINING_DEPRECATED | ||
165 | |||
166 | enum { | ||
167 | POWER_NONE = 0, | ||
168 | POWER_CSTATE = 1, | ||
169 | POWER_PSTATE = 2, | ||
170 | }; | ||
171 | #endif /* _PWR_EVENT_AVOID_DOUBLE_DEFINING_DEPRECATED */ | ||
172 | |||
173 | #else /* CONFIG_EVENT_POWER_TRACING_DEPRECATED */ | ||
174 | |||
175 | #ifndef _PWR_EVENT_AVOID_DOUBLE_DEFINING_DEPRECATED | ||
176 | #define _PWR_EVENT_AVOID_DOUBLE_DEFINING_DEPRECATED | ||
177 | enum { | ||
178 | POWER_NONE = 0, | ||
179 | POWER_CSTATE = 1, | ||
180 | POWER_PSTATE = 2, | ||
181 | }; | ||
182 | |||
183 | /* These dummy declaration have to be ripped out when the deprecated | ||
184 | events get removed */ | ||
185 | static inline void trace_power_start(u64 type, u64 state, u64 cpuid) {}; | ||
186 | static inline void trace_power_end(u64 cpuid) {}; | ||
187 | static inline void trace_power_start_rcuidle(u64 type, u64 state, u64 cpuid) {}; | ||
188 | static inline void trace_power_end_rcuidle(u64 cpuid) {}; | ||
189 | static inline void trace_power_frequency(u64 type, u64 state, u64 cpuid) {}; | ||
190 | #endif /* _PWR_EVENT_AVOID_DOUBLE_DEFINING_DEPRECATED */ | ||
191 | |||
192 | #endif /* CONFIG_EVENT_POWER_TRACING_DEPRECATED */ | ||
193 | |||
194 | /* | 102 | /* |
195 | * The clock events are used for clock enable/disable and for | 103 | * The clock events are used for clock enable/disable and for |
196 | * clock rate change | 104 | * clock rate change |
diff --git a/include/trace/events/ras.h b/include/trace/events/ras.h new file mode 100644 index 000000000000..88b878383797 --- /dev/null +++ b/include/trace/events/ras.h | |||
@@ -0,0 +1,77 @@ | |||
1 | #undef TRACE_SYSTEM | ||
2 | #define TRACE_SYSTEM ras | ||
3 | |||
4 | #if !defined(_TRACE_AER_H) || defined(TRACE_HEADER_MULTI_READ) | ||
5 | #define _TRACE_AER_H | ||
6 | |||
7 | #include <linux/tracepoint.h> | ||
8 | #include <linux/edac.h> | ||
9 | |||
10 | |||
11 | /* | ||
12 | * PCIe AER Trace event | ||
13 | * | ||
14 | * These events are generated when hardware detects a corrected or | ||
15 | * uncorrected event on a PCIe device. The event report has | ||
16 | * the following structure: | ||
17 | * | ||
18 | * char * dev_name - The name of the slot where the device resides | ||
19 | * ([domain:]bus:device.function). | ||
20 | * u32 status - Either the correctable or uncorrectable register | ||
21 | * indicating what error or errors have been seen | ||
22 | * u8 severity - error severity 0:NONFATAL 1:FATAL 2:CORRECTED | ||
23 | */ | ||
24 | |||
25 | #define aer_correctable_errors \ | ||
26 | {BIT(0), "Receiver Error"}, \ | ||
27 | {BIT(6), "Bad TLP"}, \ | ||
28 | {BIT(7), "Bad DLLP"}, \ | ||
29 | {BIT(8), "RELAY_NUM Rollover"}, \ | ||
30 | {BIT(12), "Replay Timer Timeout"}, \ | ||
31 | {BIT(13), "Advisory Non-Fatal"} | ||
32 | |||
33 | #define aer_uncorrectable_errors \ | ||
34 | {BIT(4), "Data Link Protocol"}, \ | ||
35 | {BIT(12), "Poisoned TLP"}, \ | ||
36 | {BIT(13), "Flow Control Protocol"}, \ | ||
37 | {BIT(14), "Completion Timeout"}, \ | ||
38 | {BIT(15), "Completer Abort"}, \ | ||
39 | {BIT(16), "Unexpected Completion"}, \ | ||
40 | {BIT(17), "Receiver Overflow"}, \ | ||
41 | {BIT(18), "Malformed TLP"}, \ | ||
42 | {BIT(19), "ECRC"}, \ | ||
43 | {BIT(20), "Unsupported Request"} | ||
44 | |||
45 | TRACE_EVENT(aer_event, | ||
46 | TP_PROTO(const char *dev_name, | ||
47 | const u32 status, | ||
48 | const u8 severity), | ||
49 | |||
50 | TP_ARGS(dev_name, status, severity), | ||
51 | |||
52 | TP_STRUCT__entry( | ||
53 | __string( dev_name, dev_name ) | ||
54 | __field( u32, status ) | ||
55 | __field( u8, severity ) | ||
56 | ), | ||
57 | |||
58 | TP_fast_assign( | ||
59 | __assign_str(dev_name, dev_name); | ||
60 | __entry->status = status; | ||
61 | __entry->severity = severity; | ||
62 | ), | ||
63 | |||
64 | TP_printk("%s PCIe Bus Error: severity=%s, %s\n", | ||
65 | __get_str(dev_name), | ||
66 | __entry->severity == HW_EVENT_ERR_CORRECTED ? "Corrected" : | ||
67 | __entry->severity == HW_EVENT_ERR_FATAL ? | ||
68 | "Fatal" : "Uncorrected", | ||
69 | __entry->severity == HW_EVENT_ERR_CORRECTED ? | ||
70 | __print_flags(__entry->status, "|", aer_correctable_errors) : | ||
71 | __print_flags(__entry->status, "|", aer_uncorrectable_errors)) | ||
72 | ); | ||
73 | |||
74 | #endif /* _TRACE_AER_H */ | ||
75 | |||
76 | /* This part must be outside protection */ | ||
77 | #include <trace/define_trace.h> | ||
diff --git a/include/trace/events/rcu.h b/include/trace/events/rcu.h index d4f559b1ec34..1918e832da4f 100644 --- a/include/trace/events/rcu.h +++ b/include/trace/events/rcu.h | |||
@@ -44,8 +44,10 @@ TRACE_EVENT(rcu_utilization, | |||
44 | * of a new grace period or the end of an old grace period ("cpustart" | 44 | * of a new grace period or the end of an old grace period ("cpustart" |
45 | * and "cpuend", respectively), a CPU passing through a quiescent | 45 | * and "cpuend", respectively), a CPU passing through a quiescent |
46 | * state ("cpuqs"), a CPU coming online or going offline ("cpuonl" | 46 | * state ("cpuqs"), a CPU coming online or going offline ("cpuonl" |
47 | * and "cpuofl", respectively), and a CPU being kicked for being too | 47 | * and "cpuofl", respectively), a CPU being kicked for being too |
48 | * long in dyntick-idle mode ("kick"). | 48 | * long in dyntick-idle mode ("kick"), a CPU accelerating its new |
49 | * callbacks to RCU_NEXT_READY_TAIL ("AccReadyCB"), and a CPU | ||
50 | * accelerating its new callbacks to RCU_WAIT_TAIL ("AccWaitCB"). | ||
49 | */ | 51 | */ |
50 | TRACE_EVENT(rcu_grace_period, | 52 | TRACE_EVENT(rcu_grace_period, |
51 | 53 | ||
@@ -393,7 +395,7 @@ TRACE_EVENT(rcu_kfree_callback, | |||
393 | */ | 395 | */ |
394 | TRACE_EVENT(rcu_batch_start, | 396 | TRACE_EVENT(rcu_batch_start, |
395 | 397 | ||
396 | TP_PROTO(char *rcuname, long qlen_lazy, long qlen, int blimit), | 398 | TP_PROTO(char *rcuname, long qlen_lazy, long qlen, long blimit), |
397 | 399 | ||
398 | TP_ARGS(rcuname, qlen_lazy, qlen, blimit), | 400 | TP_ARGS(rcuname, qlen_lazy, qlen, blimit), |
399 | 401 | ||
@@ -401,7 +403,7 @@ TRACE_EVENT(rcu_batch_start, | |||
401 | __field(char *, rcuname) | 403 | __field(char *, rcuname) |
402 | __field(long, qlen_lazy) | 404 | __field(long, qlen_lazy) |
403 | __field(long, qlen) | 405 | __field(long, qlen) |
404 | __field(int, blimit) | 406 | __field(long, blimit) |
405 | ), | 407 | ), |
406 | 408 | ||
407 | TP_fast_assign( | 409 | TP_fast_assign( |
@@ -411,7 +413,7 @@ TRACE_EVENT(rcu_batch_start, | |||
411 | __entry->blimit = blimit; | 413 | __entry->blimit = blimit; |
412 | ), | 414 | ), |
413 | 415 | ||
414 | TP_printk("%s CBs=%ld/%ld bl=%d", | 416 | TP_printk("%s CBs=%ld/%ld bl=%ld", |
415 | __entry->rcuname, __entry->qlen_lazy, __entry->qlen, | 417 | __entry->rcuname, __entry->qlen_lazy, __entry->qlen, |
416 | __entry->blimit) | 418 | __entry->blimit) |
417 | ); | 419 | ); |
@@ -523,22 +525,30 @@ TRACE_EVENT(rcu_batch_end, | |||
523 | */ | 525 | */ |
524 | TRACE_EVENT(rcu_torture_read, | 526 | TRACE_EVENT(rcu_torture_read, |
525 | 527 | ||
526 | TP_PROTO(char *rcutorturename, struct rcu_head *rhp), | 528 | TP_PROTO(char *rcutorturename, struct rcu_head *rhp, |
529 | unsigned long secs, unsigned long c_old, unsigned long c), | ||
527 | 530 | ||
528 | TP_ARGS(rcutorturename, rhp), | 531 | TP_ARGS(rcutorturename, rhp, secs, c_old, c), |
529 | 532 | ||
530 | TP_STRUCT__entry( | 533 | TP_STRUCT__entry( |
531 | __field(char *, rcutorturename) | 534 | __field(char *, rcutorturename) |
532 | __field(struct rcu_head *, rhp) | 535 | __field(struct rcu_head *, rhp) |
536 | __field(unsigned long, secs) | ||
537 | __field(unsigned long, c_old) | ||
538 | __field(unsigned long, c) | ||
533 | ), | 539 | ), |
534 | 540 | ||
535 | TP_fast_assign( | 541 | TP_fast_assign( |
536 | __entry->rcutorturename = rcutorturename; | 542 | __entry->rcutorturename = rcutorturename; |
537 | __entry->rhp = rhp; | 543 | __entry->rhp = rhp; |
544 | __entry->secs = secs; | ||
545 | __entry->c_old = c_old; | ||
546 | __entry->c = c; | ||
538 | ), | 547 | ), |
539 | 548 | ||
540 | TP_printk("%s torture read %p", | 549 | TP_printk("%s torture read %p %luus c: %lu %lu", |
541 | __entry->rcutorturename, __entry->rhp) | 550 | __entry->rcutorturename, __entry->rhp, |
551 | __entry->secs, __entry->c_old, __entry->c) | ||
542 | ); | 552 | ); |
543 | 553 | ||
544 | /* | 554 | /* |
@@ -608,7 +618,8 @@ TRACE_EVENT(rcu_barrier, | |||
608 | #define trace_rcu_invoke_kfree_callback(rcuname, rhp, offset) do { } while (0) | 618 | #define trace_rcu_invoke_kfree_callback(rcuname, rhp, offset) do { } while (0) |
609 | #define trace_rcu_batch_end(rcuname, callbacks_invoked, cb, nr, iit, risk) \ | 619 | #define trace_rcu_batch_end(rcuname, callbacks_invoked, cb, nr, iit, risk) \ |
610 | do { } while (0) | 620 | do { } while (0) |
611 | #define trace_rcu_torture_read(rcutorturename, rhp) do { } while (0) | 621 | #define trace_rcu_torture_read(rcutorturename, rhp, secs, c_old, c) \ |
622 | do { } while (0) | ||
612 | #define trace_rcu_barrier(name, s, cpu, cnt, done) do { } while (0) | 623 | #define trace_rcu_barrier(name, s, cpu, cnt, done) do { } while (0) |
613 | 624 | ||
614 | #endif /* #else #ifdef CONFIG_RCU_TRACE */ | 625 | #endif /* #else #ifdef CONFIG_RCU_TRACE */ |
diff --git a/include/trace/events/workqueue.h b/include/trace/events/workqueue.h index f28d1b65f178..bf0e18ba6cfb 100644 --- a/include/trace/events/workqueue.h +++ b/include/trace/events/workqueue.h | |||
@@ -27,7 +27,7 @@ DECLARE_EVENT_CLASS(workqueue_work, | |||
27 | /** | 27 | /** |
28 | * workqueue_queue_work - called when a work gets queued | 28 | * workqueue_queue_work - called when a work gets queued |
29 | * @req_cpu: the requested cpu | 29 | * @req_cpu: the requested cpu |
30 | * @cwq: pointer to struct cpu_workqueue_struct | 30 | * @pwq: pointer to struct pool_workqueue |
31 | * @work: pointer to struct work_struct | 31 | * @work: pointer to struct work_struct |
32 | * | 32 | * |
33 | * This event occurs when a work is queued immediately or once a | 33 | * This event occurs when a work is queued immediately or once a |
@@ -36,10 +36,10 @@ DECLARE_EVENT_CLASS(workqueue_work, | |||
36 | */ | 36 | */ |
37 | TRACE_EVENT(workqueue_queue_work, | 37 | TRACE_EVENT(workqueue_queue_work, |
38 | 38 | ||
39 | TP_PROTO(unsigned int req_cpu, struct cpu_workqueue_struct *cwq, | 39 | TP_PROTO(unsigned int req_cpu, struct pool_workqueue *pwq, |
40 | struct work_struct *work), | 40 | struct work_struct *work), |
41 | 41 | ||
42 | TP_ARGS(req_cpu, cwq, work), | 42 | TP_ARGS(req_cpu, pwq, work), |
43 | 43 | ||
44 | TP_STRUCT__entry( | 44 | TP_STRUCT__entry( |
45 | __field( void *, work ) | 45 | __field( void *, work ) |
@@ -52,9 +52,9 @@ TRACE_EVENT(workqueue_queue_work, | |||
52 | TP_fast_assign( | 52 | TP_fast_assign( |
53 | __entry->work = work; | 53 | __entry->work = work; |
54 | __entry->function = work->func; | 54 | __entry->function = work->func; |
55 | __entry->workqueue = cwq->wq; | 55 | __entry->workqueue = pwq->wq; |
56 | __entry->req_cpu = req_cpu; | 56 | __entry->req_cpu = req_cpu; |
57 | __entry->cpu = cwq->pool->gcwq->cpu; | 57 | __entry->cpu = pwq->pool->cpu; |
58 | ), | 58 | ), |
59 | 59 | ||
60 | TP_printk("work struct=%p function=%pf workqueue=%p req_cpu=%u cpu=%u", | 60 | TP_printk("work struct=%p function=%pf workqueue=%p req_cpu=%u cpu=%u", |
diff --git a/include/trace/events/writeback.h b/include/trace/events/writeback.h index b453d92c2253..6a16fd2e70ed 100644 --- a/include/trace/events/writeback.h +++ b/include/trace/events/writeback.h | |||
@@ -32,6 +32,115 @@ | |||
32 | 32 | ||
33 | struct wb_writeback_work; | 33 | struct wb_writeback_work; |
34 | 34 | ||
35 | TRACE_EVENT(writeback_dirty_page, | ||
36 | |||
37 | TP_PROTO(struct page *page, struct address_space *mapping), | ||
38 | |||
39 | TP_ARGS(page, mapping), | ||
40 | |||
41 | TP_STRUCT__entry ( | ||
42 | __array(char, name, 32) | ||
43 | __field(unsigned long, ino) | ||
44 | __field(pgoff_t, index) | ||
45 | ), | ||
46 | |||
47 | TP_fast_assign( | ||
48 | strncpy(__entry->name, | ||
49 | mapping ? dev_name(mapping->backing_dev_info->dev) : "(unknown)", 32); | ||
50 | __entry->ino = mapping ? mapping->host->i_ino : 0; | ||
51 | __entry->index = page->index; | ||
52 | ), | ||
53 | |||
54 | TP_printk("bdi %s: ino=%lu index=%lu", | ||
55 | __entry->name, | ||
56 | __entry->ino, | ||
57 | __entry->index | ||
58 | ) | ||
59 | ); | ||
60 | |||
61 | DECLARE_EVENT_CLASS(writeback_dirty_inode_template, | ||
62 | |||
63 | TP_PROTO(struct inode *inode, int flags), | ||
64 | |||
65 | TP_ARGS(inode, flags), | ||
66 | |||
67 | TP_STRUCT__entry ( | ||
68 | __array(char, name, 32) | ||
69 | __field(unsigned long, ino) | ||
70 | __field(unsigned long, flags) | ||
71 | ), | ||
72 | |||
73 | TP_fast_assign( | ||
74 | struct backing_dev_info *bdi = inode->i_mapping->backing_dev_info; | ||
75 | |||
76 | /* may be called for files on pseudo FSes w/ unregistered bdi */ | ||
77 | strncpy(__entry->name, | ||
78 | bdi->dev ? dev_name(bdi->dev) : "(unknown)", 32); | ||
79 | __entry->ino = inode->i_ino; | ||
80 | __entry->flags = flags; | ||
81 | ), | ||
82 | |||
83 | TP_printk("bdi %s: ino=%lu flags=%s", | ||
84 | __entry->name, | ||
85 | __entry->ino, | ||
86 | show_inode_state(__entry->flags) | ||
87 | ) | ||
88 | ); | ||
89 | |||
90 | DEFINE_EVENT(writeback_dirty_inode_template, writeback_dirty_inode_start, | ||
91 | |||
92 | TP_PROTO(struct inode *inode, int flags), | ||
93 | |||
94 | TP_ARGS(inode, flags) | ||
95 | ); | ||
96 | |||
97 | DEFINE_EVENT(writeback_dirty_inode_template, writeback_dirty_inode, | ||
98 | |||
99 | TP_PROTO(struct inode *inode, int flags), | ||
100 | |||
101 | TP_ARGS(inode, flags) | ||
102 | ); | ||
103 | |||
104 | DECLARE_EVENT_CLASS(writeback_write_inode_template, | ||
105 | |||
106 | TP_PROTO(struct inode *inode, struct writeback_control *wbc), | ||
107 | |||
108 | TP_ARGS(inode, wbc), | ||
109 | |||
110 | TP_STRUCT__entry ( | ||
111 | __array(char, name, 32) | ||
112 | __field(unsigned long, ino) | ||
113 | __field(int, sync_mode) | ||
114 | ), | ||
115 | |||
116 | TP_fast_assign( | ||
117 | strncpy(__entry->name, | ||
118 | dev_name(inode->i_mapping->backing_dev_info->dev), 32); | ||
119 | __entry->ino = inode->i_ino; | ||
120 | __entry->sync_mode = wbc->sync_mode; | ||
121 | ), | ||
122 | |||
123 | TP_printk("bdi %s: ino=%lu sync_mode=%d", | ||
124 | __entry->name, | ||
125 | __entry->ino, | ||
126 | __entry->sync_mode | ||
127 | ) | ||
128 | ); | ||
129 | |||
130 | DEFINE_EVENT(writeback_write_inode_template, writeback_write_inode_start, | ||
131 | |||
132 | TP_PROTO(struct inode *inode, struct writeback_control *wbc), | ||
133 | |||
134 | TP_ARGS(inode, wbc) | ||
135 | ); | ||
136 | |||
137 | DEFINE_EVENT(writeback_write_inode_template, writeback_write_inode, | ||
138 | |||
139 | TP_PROTO(struct inode *inode, struct writeback_control *wbc), | ||
140 | |||
141 | TP_ARGS(inode, wbc) | ||
142 | ); | ||
143 | |||
35 | DECLARE_EVENT_CLASS(writeback_work_class, | 144 | DECLARE_EVENT_CLASS(writeback_work_class, |
36 | TP_PROTO(struct backing_dev_info *bdi, struct wb_writeback_work *work), | 145 | TP_PROTO(struct backing_dev_info *bdi, struct wb_writeback_work *work), |
37 | TP_ARGS(bdi, work), | 146 | TP_ARGS(bdi, work), |
@@ -479,6 +588,13 @@ DECLARE_EVENT_CLASS(writeback_single_inode_template, | |||
479 | ) | 588 | ) |
480 | ); | 589 | ); |
481 | 590 | ||
591 | DEFINE_EVENT(writeback_single_inode_template, writeback_single_inode_start, | ||
592 | TP_PROTO(struct inode *inode, | ||
593 | struct writeback_control *wbc, | ||
594 | unsigned long nr_to_write), | ||
595 | TP_ARGS(inode, wbc, nr_to_write) | ||
596 | ); | ||
597 | |||
482 | DEFINE_EVENT(writeback_single_inode_template, writeback_single_inode, | 598 | DEFINE_EVENT(writeback_single_inode_template, writeback_single_inode, |
483 | TP_PROTO(struct inode *inode, | 599 | TP_PROTO(struct inode *inode, |
484 | struct writeback_control *wbc, | 600 | struct writeback_control *wbc, |