1 /* 2 * event tracer 3 * 4 * Copyright (C) 2008 Red Hat Inc, Steven Rostedt <srostedt@redhat.com> 5 * 6 * - Added format output of fields of the trace point. 7 * This was based off of work by Tom Zanussi <tzanussi@gmail.com>. 8 * 9 */ 10 11 #define pr_fmt(fmt) fmt 12 13 #include <linux/workqueue.h> 14 #include <linux/spinlock.h> 15 #include <linux/kthread.h> 16 #include <linux/tracefs.h> 17 #include <linux/uaccess.h> 18 #include <linux/module.h> 19 #include <linux/ctype.h> 20 #include <linux/slab.h> 21 #include <linux/delay.h> 22 23 #include <asm/setup.h> 24 25 #include "trace_output.h" 26 27 #undef TRACE_SYSTEM 28 #define TRACE_SYSTEM "TRACE_SYSTEM" 29 30 DEFINE_MUTEX(event_mutex); 31 32 LIST_HEAD(ftrace_events); 33 static LIST_HEAD(ftrace_generic_fields); 34 static LIST_HEAD(ftrace_common_fields); 35 36 #define GFP_TRACE (GFP_KERNEL | __GFP_ZERO) 37 38 static struct kmem_cache *field_cachep; 39 static struct kmem_cache *file_cachep; 40 41 #define SYSTEM_FL_FREE_NAME (1 << 31) 42 43 static inline int system_refcount(struct event_subsystem *system) 44 { 45 return system->ref_count & ~SYSTEM_FL_FREE_NAME; 46 } 47 48 static int system_refcount_inc(struct event_subsystem *system) 49 { 50 return (system->ref_count++) & ~SYSTEM_FL_FREE_NAME; 51 } 52 53 static int system_refcount_dec(struct event_subsystem *system) 54 { 55 return (--system->ref_count) & ~SYSTEM_FL_FREE_NAME; 56 } 57 58 /* Double loops, do not use break, only goto's work */ 59 #define do_for_each_event_file(tr, file) \ 60 list_for_each_entry(tr, &ftrace_trace_arrays, list) { \ 61 list_for_each_entry(file, &tr->events, list) 62 63 #define do_for_each_event_file_safe(tr, file) \ 64 list_for_each_entry(tr, &ftrace_trace_arrays, list) { \ 65 struct trace_event_file *___n; \ 66 list_for_each_entry_safe(file, ___n, &tr->events, list) 67 68 #define while_for_each_event_file() \ 69 } 70 71 static struct list_head * 72 trace_get_fields(struct trace_event_call *event_call) 73 { 74 if (!event_call->class->get_fields) 75 return &event_call->class->fields; 76 return event_call->class->get_fields(event_call); 77 } 78 79 static struct ftrace_event_field * 80 __find_event_field(struct list_head *head, char *name) 81 { 82 struct ftrace_event_field *field; 83 84 list_for_each_entry(field, head, link) { 85 if (!strcmp(field->name, name)) 86 return field; 87 } 88 89 return NULL; 90 } 91 92 struct ftrace_event_field * 93 trace_find_event_field(struct trace_event_call *call, char *name) 94 { 95 struct ftrace_event_field *field; 96 struct list_head *head; 97 98 field = __find_event_field(&ftrace_generic_fields, name); 99 if (field) 100 return field; 101 102 field = __find_event_field(&ftrace_common_fields, name); 103 if (field) 104 return field; 105 106 head = trace_get_fields(call); 107 return __find_event_field(head, name); 108 } 109 110 static int __trace_define_field(struct list_head *head, const char *type, 111 const char *name, int offset, int size, 112 int is_signed, int filter_type) 113 { 114 struct ftrace_event_field *field; 115 116 field = kmem_cache_alloc(field_cachep, GFP_TRACE); 117 if (!field) 118 return -ENOMEM; 119 120 field->name = name; 121 field->type = type; 122 123 if (filter_type == FILTER_OTHER) 124 field->filter_type = filter_assign_type(type); 125 else 126 field->filter_type = filter_type; 127 128 field->offset = offset; 129 field->size = size; 130 field->is_signed = is_signed; 131 132 list_add(&field->link, head); 133 134 return 0; 135 } 136 137 int trace_define_field(struct trace_event_call *call, const char *type, 138 const char *name, int offset, int size, int is_signed, 139 int filter_type) 140 { 141 struct list_head *head; 142 143 if (WARN_ON(!call->class)) 144 return 0; 145 146 head = trace_get_fields(call); 147 return __trace_define_field(head, type, name, offset, size, 148 is_signed, filter_type); 149 } 150 EXPORT_SYMBOL_GPL(trace_define_field); 151 152 #define __generic_field(type, item, filter_type) \ 153 ret = __trace_define_field(&ftrace_generic_fields, #type, \ 154 #item, 0, 0, is_signed_type(type), \ 155 filter_type); \ 156 if (ret) \ 157 return ret; 158 159 #define __common_field(type, item) \ 160 ret = __trace_define_field(&ftrace_common_fields, #type, \ 161 "common_" #item, \ 162 offsetof(typeof(ent), item), \ 163 sizeof(ent.item), \ 164 is_signed_type(type), FILTER_OTHER); \ 165 if (ret) \ 166 return ret; 167 168 static int trace_define_generic_fields(void) 169 { 170 int ret; 171 172 __generic_field(int, cpu, FILTER_OTHER); 173 __generic_field(char *, comm, FILTER_PTR_STRING); 174 175 return ret; 176 } 177 178 static int trace_define_common_fields(void) 179 { 180 int ret; 181 struct trace_entry ent; 182 183 __common_field(unsigned short, type); 184 __common_field(unsigned char, flags); 185 __common_field(unsigned char, preempt_count); 186 __common_field(int, pid); 187 188 return ret; 189 } 190 191 static void trace_destroy_fields(struct trace_event_call *call) 192 { 193 struct ftrace_event_field *field, *next; 194 struct list_head *head; 195 196 head = trace_get_fields(call); 197 list_for_each_entry_safe(field, next, head, link) { 198 list_del(&field->link); 199 kmem_cache_free(field_cachep, field); 200 } 201 } 202 203 int trace_event_raw_init(struct trace_event_call *call) 204 { 205 int id; 206 207 id = register_trace_event(&call->event); 208 if (!id) 209 return -ENODEV; 210 211 return 0; 212 } 213 EXPORT_SYMBOL_GPL(trace_event_raw_init); 214 215 void *trace_event_buffer_reserve(struct trace_event_buffer *fbuffer, 216 struct trace_event_file *trace_file, 217 unsigned long len) 218 { 219 struct trace_event_call *event_call = trace_file->event_call; 220 221 local_save_flags(fbuffer->flags); 222 fbuffer->pc = preempt_count(); 223 fbuffer->trace_file = trace_file; 224 225 fbuffer->event = 226 trace_event_buffer_lock_reserve(&fbuffer->buffer, trace_file, 227 event_call->event.type, len, 228 fbuffer->flags, fbuffer->pc); 229 if (!fbuffer->event) 230 return NULL; 231 232 fbuffer->entry = ring_buffer_event_data(fbuffer->event); 233 return fbuffer->entry; 234 } 235 EXPORT_SYMBOL_GPL(trace_event_buffer_reserve); 236 237 static DEFINE_SPINLOCK(tracepoint_iter_lock); 238 239 static void output_printk(struct trace_event_buffer *fbuffer) 240 { 241 struct trace_event_call *event_call; 242 struct trace_event *event; 243 unsigned long flags; 244 struct trace_iterator *iter = tracepoint_print_iter; 245 246 if (!iter) 247 return; 248 249 event_call = fbuffer->trace_file->event_call; 250 if (!event_call || !event_call->event.funcs || 251 !event_call->event.funcs->trace) 252 return; 253 254 event = &fbuffer->trace_file->event_call->event; 255 256 spin_lock_irqsave(&tracepoint_iter_lock, flags); 257 trace_seq_init(&iter->seq); 258 iter->ent = fbuffer->entry; 259 event_call->event.funcs->trace(iter, 0, event); 260 trace_seq_putc(&iter->seq, 0); 261 printk("%s", iter->seq.buffer); 262 263 spin_unlock_irqrestore(&tracepoint_iter_lock, flags); 264 } 265 266 void trace_event_buffer_commit(struct trace_event_buffer *fbuffer) 267 { 268 if (tracepoint_printk) 269 output_printk(fbuffer); 270 271 event_trigger_unlock_commit(fbuffer->trace_file, fbuffer->buffer, 272 fbuffer->event, fbuffer->entry, 273 fbuffer->flags, fbuffer->pc); 274 } 275 EXPORT_SYMBOL_GPL(trace_event_buffer_commit); 276 277 int trace_event_reg(struct trace_event_call *call, 278 enum trace_reg type, void *data) 279 { 280 struct trace_event_file *file = data; 281 282 WARN_ON(!(call->flags & TRACE_EVENT_FL_TRACEPOINT)); 283 switch (type) { 284 case TRACE_REG_REGISTER: 285 return tracepoint_probe_register(call->tp, 286 call->class->probe, 287 file); 288 case TRACE_REG_UNREGISTER: 289 tracepoint_probe_unregister(call->tp, 290 call->class->probe, 291 file); 292 return 0; 293 294 #ifdef CONFIG_PERF_EVENTS 295 case TRACE_REG_PERF_REGISTER: 296 return tracepoint_probe_register(call->tp, 297 call->class->perf_probe, 298 call); 299 case TRACE_REG_PERF_UNREGISTER: 300 tracepoint_probe_unregister(call->tp, 301 call->class->perf_probe, 302 call); 303 return 0; 304 case TRACE_REG_PERF_OPEN: 305 case TRACE_REG_PERF_CLOSE: 306 case TRACE_REG_PERF_ADD: 307 case TRACE_REG_PERF_DEL: 308 return 0; 309 #endif 310 } 311 return 0; 312 } 313 EXPORT_SYMBOL_GPL(trace_event_reg); 314 315 void trace_event_enable_cmd_record(bool enable) 316 { 317 struct trace_event_file *file; 318 struct trace_array *tr; 319 320 mutex_lock(&event_mutex); 321 do_for_each_event_file(tr, file) { 322 323 if (!(file->flags & EVENT_FILE_FL_ENABLED)) 324 continue; 325 326 if (enable) { 327 tracing_start_cmdline_record(); 328 set_bit(EVENT_FILE_FL_RECORDED_CMD_BIT, &file->flags); 329 } else { 330 tracing_stop_cmdline_record(); 331 clear_bit(EVENT_FILE_FL_RECORDED_CMD_BIT, &file->flags); 332 } 333 } while_for_each_event_file(); 334 mutex_unlock(&event_mutex); 335 } 336 337 static int __ftrace_event_enable_disable(struct trace_event_file *file, 338 int enable, int soft_disable) 339 { 340 struct trace_event_call *call = file->event_call; 341 int ret = 0; 342 int disable; 343 344 switch (enable) { 345 case 0: 346 /* 347 * When soft_disable is set and enable is cleared, the sm_ref 348 * reference counter is decremented. If it reaches 0, we want 349 * to clear the SOFT_DISABLED flag but leave the event in the 350 * state that it was. That is, if the event was enabled and 351 * SOFT_DISABLED isn't set, then do nothing. But if SOFT_DISABLED 352 * is set we do not want the event to be enabled before we 353 * clear the bit. 354 * 355 * When soft_disable is not set but the SOFT_MODE flag is, 356 * we do nothing. Do not disable the tracepoint, otherwise 357 * "soft enable"s (clearing the SOFT_DISABLED bit) wont work. 358 */ 359 if (soft_disable) { 360 if (atomic_dec_return(&file->sm_ref) > 0) 361 break; 362 disable = file->flags & EVENT_FILE_FL_SOFT_DISABLED; 363 clear_bit(EVENT_FILE_FL_SOFT_MODE_BIT, &file->flags); 364 } else 365 disable = !(file->flags & EVENT_FILE_FL_SOFT_MODE); 366 367 if (disable && (file->flags & EVENT_FILE_FL_ENABLED)) { 368 clear_bit(EVENT_FILE_FL_ENABLED_BIT, &file->flags); 369 if (file->flags & EVENT_FILE_FL_RECORDED_CMD) { 370 tracing_stop_cmdline_record(); 371 clear_bit(EVENT_FILE_FL_RECORDED_CMD_BIT, &file->flags); 372 } 373 call->class->reg(call, TRACE_REG_UNREGISTER, file); 374 } 375 /* If in SOFT_MODE, just set the SOFT_DISABLE_BIT, else clear it */ 376 if (file->flags & EVENT_FILE_FL_SOFT_MODE) 377 set_bit(EVENT_FILE_FL_SOFT_DISABLED_BIT, &file->flags); 378 else 379 clear_bit(EVENT_FILE_FL_SOFT_DISABLED_BIT, &file->flags); 380 break; 381 case 1: 382 /* 383 * When soft_disable is set and enable is set, we want to 384 * register the tracepoint for the event, but leave the event 385 * as is. That means, if the event was already enabled, we do 386 * nothing (but set SOFT_MODE). If the event is disabled, we 387 * set SOFT_DISABLED before enabling the event tracepoint, so 388 * it still seems to be disabled. 389 */ 390 if (!soft_disable) 391 clear_bit(EVENT_FILE_FL_SOFT_DISABLED_BIT, &file->flags); 392 else { 393 if (atomic_inc_return(&file->sm_ref) > 1) 394 break; 395 set_bit(EVENT_FILE_FL_SOFT_MODE_BIT, &file->flags); 396 } 397 398 if (!(file->flags & EVENT_FILE_FL_ENABLED)) { 399 400 /* Keep the event disabled, when going to SOFT_MODE. */ 401 if (soft_disable) 402 set_bit(EVENT_FILE_FL_SOFT_DISABLED_BIT, &file->flags); 403 404 if (trace_flags & TRACE_ITER_RECORD_CMD) { 405 tracing_start_cmdline_record(); 406 set_bit(EVENT_FILE_FL_RECORDED_CMD_BIT, &file->flags); 407 } 408 ret = call->class->reg(call, TRACE_REG_REGISTER, file); 409 if (ret) { 410 tracing_stop_cmdline_record(); 411 pr_info("event trace: Could not enable event " 412 "%s\n", trace_event_name(call)); 413 break; 414 } 415 set_bit(EVENT_FILE_FL_ENABLED_BIT, &file->flags); 416 417 /* WAS_ENABLED gets set but never cleared. */ 418 call->flags |= TRACE_EVENT_FL_WAS_ENABLED; 419 } 420 break; 421 } 422 423 return ret; 424 } 425 426 int trace_event_enable_disable(struct trace_event_file *file, 427 int enable, int soft_disable) 428 { 429 return __ftrace_event_enable_disable(file, enable, soft_disable); 430 } 431 432 static int ftrace_event_enable_disable(struct trace_event_file *file, 433 int enable) 434 { 435 return __ftrace_event_enable_disable(file, enable, 0); 436 } 437 438 static void ftrace_clear_events(struct trace_array *tr) 439 { 440 struct trace_event_file *file; 441 442 mutex_lock(&event_mutex); 443 list_for_each_entry(file, &tr->events, list) { 444 ftrace_event_enable_disable(file, 0); 445 } 446 mutex_unlock(&event_mutex); 447 } 448 449 static void __put_system(struct event_subsystem *system) 450 { 451 struct event_filter *filter = system->filter; 452 453 WARN_ON_ONCE(system_refcount(system) == 0); 454 if (system_refcount_dec(system)) 455 return; 456 457 list_del(&system->list); 458 459 if (filter) { 460 kfree(filter->filter_string); 461 kfree(filter); 462 } 463 if (system->ref_count & SYSTEM_FL_FREE_NAME) 464 kfree(system->name); 465 kfree(system); 466 } 467 468 static void __get_system(struct event_subsystem *system) 469 { 470 WARN_ON_ONCE(system_refcount(system) == 0); 471 system_refcount_inc(system); 472 } 473 474 static void __get_system_dir(struct trace_subsystem_dir *dir) 475 { 476 WARN_ON_ONCE(dir->ref_count == 0); 477 dir->ref_count++; 478 __get_system(dir->subsystem); 479 } 480 481 static void __put_system_dir(struct trace_subsystem_dir *dir) 482 { 483 WARN_ON_ONCE(dir->ref_count == 0); 484 /* If the subsystem is about to be freed, the dir must be too */ 485 WARN_ON_ONCE(system_refcount(dir->subsystem) == 1 && dir->ref_count != 1); 486 487 __put_system(dir->subsystem); 488 if (!--dir->ref_count) 489 kfree(dir); 490 } 491 492 static void put_system(struct trace_subsystem_dir *dir) 493 { 494 mutex_lock(&event_mutex); 495 __put_system_dir(dir); 496 mutex_unlock(&event_mutex); 497 } 498 499 static void remove_subsystem(struct trace_subsystem_dir *dir) 500 { 501 if (!dir) 502 return; 503 504 if (!--dir->nr_events) { 505 tracefs_remove_recursive(dir->entry); 506 list_del(&dir->list); 507 __put_system_dir(dir); 508 } 509 } 510 511 static void remove_event_file_dir(struct trace_event_file *file) 512 { 513 struct dentry *dir = file->dir; 514 struct dentry *child; 515 516 if (dir) { 517 spin_lock(&dir->d_lock); /* probably unneeded */ 518 list_for_each_entry(child, &dir->d_subdirs, d_child) { 519 if (d_really_is_positive(child)) /* probably unneeded */ 520 d_inode(child)->i_private = NULL; 521 } 522 spin_unlock(&dir->d_lock); 523 524 tracefs_remove_recursive(dir); 525 } 526 527 list_del(&file->list); 528 remove_subsystem(file->system); 529 free_event_filter(file->filter); 530 kmem_cache_free(file_cachep, file); 531 } 532 533 /* 534 * __ftrace_set_clr_event(NULL, NULL, NULL, set) will set/unset all events. 535 */ 536 static int 537 __ftrace_set_clr_event_nolock(struct trace_array *tr, const char *match, 538 const char *sub, const char *event, int set) 539 { 540 struct trace_event_file *file; 541 struct trace_event_call *call; 542 const char *name; 543 int ret = -EINVAL; 544 545 list_for_each_entry(file, &tr->events, list) { 546 547 call = file->event_call; 548 name = trace_event_name(call); 549 550 if (!name || !call->class || !call->class->reg) 551 continue; 552 553 if (call->flags & TRACE_EVENT_FL_IGNORE_ENABLE) 554 continue; 555 556 if (match && 557 strcmp(match, name) != 0 && 558 strcmp(match, call->class->system) != 0) 559 continue; 560 561 if (sub && strcmp(sub, call->class->system) != 0) 562 continue; 563 564 if (event && strcmp(event, name) != 0) 565 continue; 566 567 ftrace_event_enable_disable(file, set); 568 569 ret = 0; 570 } 571 572 return ret; 573 } 574 575 static int __ftrace_set_clr_event(struct trace_array *tr, const char *match, 576 const char *sub, const char *event, int set) 577 { 578 int ret; 579 580 mutex_lock(&event_mutex); 581 ret = __ftrace_set_clr_event_nolock(tr, match, sub, event, set); 582 mutex_unlock(&event_mutex); 583 584 return ret; 585 } 586 587 static int ftrace_set_clr_event(struct trace_array *tr, char *buf, int set) 588 { 589 char *event = NULL, *sub = NULL, *match; 590 int ret; 591 592 /* 593 * The buf format can be <subsystem>:<event-name> 594 * *:<event-name> means any event by that name. 595 * :<event-name> is the same. 596 * 597 * <subsystem>:* means all events in that subsystem 598 * <subsystem>: means the same. 599 * 600 * <name> (no ':') means all events in a subsystem with 601 * the name <name> or any event that matches <name> 602 */ 603 604 match = strsep(&buf, ":"); 605 if (buf) { 606 sub = match; 607 event = buf; 608 match = NULL; 609 610 if (!strlen(sub) || strcmp(sub, "*") == 0) 611 sub = NULL; 612 if (!strlen(event) || strcmp(event, "*") == 0) 613 event = NULL; 614 } 615 616 ret = __ftrace_set_clr_event(tr, match, sub, event, set); 617 618 /* Put back the colon to allow this to be called again */ 619 if (buf) 620 *(buf - 1) = ':'; 621 622 return ret; 623 } 624 625 /** 626 * trace_set_clr_event - enable or disable an event 627 * @system: system name to match (NULL for any system) 628 * @event: event name to match (NULL for all events, within system) 629 * @set: 1 to enable, 0 to disable 630 * 631 * This is a way for other parts of the kernel to enable or disable 632 * event recording. 633 * 634 * Returns 0 on success, -EINVAL if the parameters do not match any 635 * registered events. 636 */ 637 int trace_set_clr_event(const char *system, const char *event, int set) 638 { 639 struct trace_array *tr = top_trace_array(); 640 641 if (!tr) 642 return -ENODEV; 643 644 return __ftrace_set_clr_event(tr, NULL, system, event, set); 645 } 646 EXPORT_SYMBOL_GPL(trace_set_clr_event); 647 648 /* 128 should be much more than enough */ 649 #define EVENT_BUF_SIZE 127 650 651 static ssize_t 652 ftrace_event_write(struct file *file, const char __user *ubuf, 653 size_t cnt, loff_t *ppos) 654 { 655 struct trace_parser parser; 656 struct seq_file *m = file->private_data; 657 struct trace_array *tr = m->private; 658 ssize_t read, ret; 659 660 if (!cnt) 661 return 0; 662 663 ret = tracing_update_buffers(); 664 if (ret < 0) 665 return ret; 666 667 if (trace_parser_get_init(&parser, EVENT_BUF_SIZE + 1)) 668 return -ENOMEM; 669 670 read = trace_get_user(&parser, ubuf, cnt, ppos); 671 672 if (read >= 0 && trace_parser_loaded((&parser))) { 673 int set = 1; 674 675 if (*parser.buffer == '!') 676 set = 0; 677 678 parser.buffer[parser.idx] = 0; 679 680 ret = ftrace_set_clr_event(tr, parser.buffer + !set, set); 681 if (ret) 682 goto out_put; 683 } 684 685 ret = read; 686 687 out_put: 688 trace_parser_put(&parser); 689 690 return ret; 691 } 692 693 static void * 694 t_next(struct seq_file *m, void *v, loff_t *pos) 695 { 696 struct trace_event_file *file = v; 697 struct trace_event_call *call; 698 struct trace_array *tr = m->private; 699 700 (*pos)++; 701 702 list_for_each_entry_continue(file, &tr->events, list) { 703 call = file->event_call; 704 /* 705 * The ftrace subsystem is for showing formats only. 706 * They can not be enabled or disabled via the event files. 707 */ 708 if (call->class && call->class->reg) 709 return file; 710 } 711 712 return NULL; 713 } 714 715 static void *t_start(struct seq_file *m, loff_t *pos) 716 { 717 struct trace_event_file *file; 718 struct trace_array *tr = m->private; 719 loff_t l; 720 721 mutex_lock(&event_mutex); 722 723 file = list_entry(&tr->events, struct trace_event_file, list); 724 for (l = 0; l <= *pos; ) { 725 file = t_next(m, file, &l); 726 if (!file) 727 break; 728 } 729 return file; 730 } 731 732 static void * 733 s_next(struct seq_file *m, void *v, loff_t *pos) 734 { 735 struct trace_event_file *file = v; 736 struct trace_array *tr = m->private; 737 738 (*pos)++; 739 740 list_for_each_entry_continue(file, &tr->events, list) { 741 if (file->flags & EVENT_FILE_FL_ENABLED) 742 return file; 743 } 744 745 return NULL; 746 } 747 748 static void *s_start(struct seq_file *m, loff_t *pos) 749 { 750 struct trace_event_file *file; 751 struct trace_array *tr = m->private; 752 loff_t l; 753 754 mutex_lock(&event_mutex); 755 756 file = list_entry(&tr->events, struct trace_event_file, list); 757 for (l = 0; l <= *pos; ) { 758 file = s_next(m, file, &l); 759 if (!file) 760 break; 761 } 762 return file; 763 } 764 765 static int t_show(struct seq_file *m, void *v) 766 { 767 struct trace_event_file *file = v; 768 struct trace_event_call *call = file->event_call; 769 770 if (strcmp(call->class->system, TRACE_SYSTEM) != 0) 771 seq_printf(m, "%s:", call->class->system); 772 seq_printf(m, "%s\n", trace_event_name(call)); 773 774 return 0; 775 } 776 777 static void t_stop(struct seq_file *m, void *p) 778 { 779 mutex_unlock(&event_mutex); 780 } 781 782 static ssize_t 783 event_enable_read(struct file *filp, char __user *ubuf, size_t cnt, 784 loff_t *ppos) 785 { 786 struct trace_event_file *file; 787 unsigned long flags; 788 char buf[4] = "0"; 789 790 mutex_lock(&event_mutex); 791 file = event_file_data(filp); 792 if (likely(file)) 793 flags = file->flags; 794 mutex_unlock(&event_mutex); 795 796 if (!file) 797 return -ENODEV; 798 799 if (flags & EVENT_FILE_FL_ENABLED && 800 !(flags & EVENT_FILE_FL_SOFT_DISABLED)) 801 strcpy(buf, "1"); 802 803 if (flags & EVENT_FILE_FL_SOFT_DISABLED || 804 flags & EVENT_FILE_FL_SOFT_MODE) 805 strcat(buf, "*"); 806 807 strcat(buf, "\n"); 808 809 return simple_read_from_buffer(ubuf, cnt, ppos, buf, strlen(buf)); 810 } 811 812 static ssize_t 813 event_enable_write(struct file *filp, const char __user *ubuf, size_t cnt, 814 loff_t *ppos) 815 { 816 struct trace_event_file *file; 817 unsigned long val; 818 int ret; 819 820 ret = kstrtoul_from_user(ubuf, cnt, 10, &val); 821 if (ret) 822 return ret; 823 824 ret = tracing_update_buffers(); 825 if (ret < 0) 826 return ret; 827 828 switch (val) { 829 case 0: 830 case 1: 831 ret = -ENODEV; 832 mutex_lock(&event_mutex); 833 file = event_file_data(filp); 834 if (likely(file)) 835 ret = ftrace_event_enable_disable(file, val); 836 mutex_unlock(&event_mutex); 837 break; 838 839 default: 840 return -EINVAL; 841 } 842 843 *ppos += cnt; 844 845 return ret ? ret : cnt; 846 } 847 848 static ssize_t 849 system_enable_read(struct file *filp, char __user *ubuf, size_t cnt, 850 loff_t *ppos) 851 { 852 const char set_to_char[4] = { '?', '0', '1', 'X' }; 853 struct trace_subsystem_dir *dir = filp->private_data; 854 struct event_subsystem *system = dir->subsystem; 855 struct trace_event_call *call; 856 struct trace_event_file *file; 857 struct trace_array *tr = dir->tr; 858 char buf[2]; 859 int set = 0; 860 int ret; 861 862 mutex_lock(&event_mutex); 863 list_for_each_entry(file, &tr->events, list) { 864 call = file->event_call; 865 if (!trace_event_name(call) || !call->class || !call->class->reg) 866 continue; 867 868 if (system && strcmp(call->class->system, system->name) != 0) 869 continue; 870 871 /* 872 * We need to find out if all the events are set 873 * or if all events or cleared, or if we have 874 * a mixture. 875 */ 876 set |= (1 << !!(file->flags & EVENT_FILE_FL_ENABLED)); 877 878 /* 879 * If we have a mixture, no need to look further. 880 */ 881 if (set == 3) 882 break; 883 } 884 mutex_unlock(&event_mutex); 885 886 buf[0] = set_to_char[set]; 887 buf[1] = '\n'; 888 889 ret = simple_read_from_buffer(ubuf, cnt, ppos, buf, 2); 890 891 return ret; 892 } 893 894 static ssize_t 895 system_enable_write(struct file *filp, const char __user *ubuf, size_t cnt, 896 loff_t *ppos) 897 { 898 struct trace_subsystem_dir *dir = filp->private_data; 899 struct event_subsystem *system = dir->subsystem; 900 const char *name = NULL; 901 unsigned long val; 902 ssize_t ret; 903 904 ret = kstrtoul_from_user(ubuf, cnt, 10, &val); 905 if (ret) 906 return ret; 907 908 ret = tracing_update_buffers(); 909 if (ret < 0) 910 return ret; 911 912 if (val != 0 && val != 1) 913 return -EINVAL; 914 915 /* 916 * Opening of "enable" adds a ref count to system, 917 * so the name is safe to use. 918 */ 919 if (system) 920 name = system->name; 921 922 ret = __ftrace_set_clr_event(dir->tr, NULL, name, NULL, val); 923 if (ret) 924 goto out; 925 926 ret = cnt; 927 928 out: 929 *ppos += cnt; 930 931 return ret; 932 } 933 934 enum { 935 FORMAT_HEADER = 1, 936 FORMAT_FIELD_SEPERATOR = 2, 937 FORMAT_PRINTFMT = 3, 938 }; 939 940 static void *f_next(struct seq_file *m, void *v, loff_t *pos) 941 { 942 struct trace_event_call *call = event_file_data(m->private); 943 struct list_head *common_head = &ftrace_common_fields; 944 struct list_head *head = trace_get_fields(call); 945 struct list_head *node = v; 946 947 (*pos)++; 948 949 switch ((unsigned long)v) { 950 case FORMAT_HEADER: 951 node = common_head; 952 break; 953 954 case FORMAT_FIELD_SEPERATOR: 955 node = head; 956 break; 957 958 case FORMAT_PRINTFMT: 959 /* all done */ 960 return NULL; 961 } 962 963 node = node->prev; 964 if (node == common_head) 965 return (void *)FORMAT_FIELD_SEPERATOR; 966 else if (node == head) 967 return (void *)FORMAT_PRINTFMT; 968 else 969 return node; 970 } 971 972 static int f_show(struct seq_file *m, void *v) 973 { 974 struct trace_event_call *call = event_file_data(m->private); 975 struct ftrace_event_field *field; 976 const char *array_descriptor; 977 978 switch ((unsigned long)v) { 979 case FORMAT_HEADER: 980 seq_printf(m, "name: %s\n", trace_event_name(call)); 981 seq_printf(m, "ID: %d\n", call->event.type); 982 seq_puts(m, "format:\n"); 983 return 0; 984 985 case FORMAT_FIELD_SEPERATOR: 986 seq_putc(m, '\n'); 987 return 0; 988 989 case FORMAT_PRINTFMT: 990 seq_printf(m, "\nprint fmt: %s\n", 991 call->print_fmt); 992 return 0; 993 } 994 995 field = list_entry(v, struct ftrace_event_field, link); 996 /* 997 * Smartly shows the array type(except dynamic array). 998 * Normal: 999 * field:TYPE VAR 1000 * If TYPE := TYPE[LEN], it is shown: 1001 * field:TYPE VAR[LEN] 1002 */ 1003 array_descriptor = strchr(field->type, '['); 1004 1005 if (!strncmp(field->type, "__data_loc", 10)) 1006 array_descriptor = NULL; 1007 1008 if (!array_descriptor) 1009 seq_printf(m, "\tfield:%s %s;\toffset:%u;\tsize:%u;\tsigned:%d;\n", 1010 field->type, field->name, field->offset, 1011 field->size, !!field->is_signed); 1012 else 1013 seq_printf(m, "\tfield:%.*s %s%s;\toffset:%u;\tsize:%u;\tsigned:%d;\n", 1014 (int)(array_descriptor - field->type), 1015 field->type, field->name, 1016 array_descriptor, field->offset, 1017 field->size, !!field->is_signed); 1018 1019 return 0; 1020 } 1021 1022 static void *f_start(struct seq_file *m, loff_t *pos) 1023 { 1024 void *p = (void *)FORMAT_HEADER; 1025 loff_t l = 0; 1026 1027 /* ->stop() is called even if ->start() fails */ 1028 mutex_lock(&event_mutex); 1029 if (!event_file_data(m->private)) 1030 return ERR_PTR(-ENODEV); 1031 1032 while (l < *pos && p) 1033 p = f_next(m, p, &l); 1034 1035 return p; 1036 } 1037 1038 static void f_stop(struct seq_file *m, void *p) 1039 { 1040 mutex_unlock(&event_mutex); 1041 } 1042 1043 static const struct seq_operations trace_format_seq_ops = { 1044 .start = f_start, 1045 .next = f_next, 1046 .stop = f_stop, 1047 .show = f_show, 1048 }; 1049 1050 static int trace_format_open(struct inode *inode, struct file *file) 1051 { 1052 struct seq_file *m; 1053 int ret; 1054 1055 ret = seq_open(file, &trace_format_seq_ops); 1056 if (ret < 0) 1057 return ret; 1058 1059 m = file->private_data; 1060 m->private = file; 1061 1062 return 0; 1063 } 1064 1065 static ssize_t 1066 event_id_read(struct file *filp, char __user *ubuf, size_t cnt, loff_t *ppos) 1067 { 1068 int id = (long)event_file_data(filp); 1069 char buf[32]; 1070 int len; 1071 1072 if (*ppos) 1073 return 0; 1074 1075 if (unlikely(!id)) 1076 return -ENODEV; 1077 1078 len = sprintf(buf, "%d\n", id); 1079 1080 return simple_read_from_buffer(ubuf, cnt, ppos, buf, len); 1081 } 1082 1083 static ssize_t 1084 event_filter_read(struct file *filp, char __user *ubuf, size_t cnt, 1085 loff_t *ppos) 1086 { 1087 struct trace_event_file *file; 1088 struct trace_seq *s; 1089 int r = -ENODEV; 1090 1091 if (*ppos) 1092 return 0; 1093 1094 s = kmalloc(sizeof(*s), GFP_KERNEL); 1095 1096 if (!s) 1097 return -ENOMEM; 1098 1099 trace_seq_init(s); 1100 1101 mutex_lock(&event_mutex); 1102 file = event_file_data(filp); 1103 if (file) 1104 print_event_filter(file, s); 1105 mutex_unlock(&event_mutex); 1106 1107 if (file) 1108 r = simple_read_from_buffer(ubuf, cnt, ppos, 1109 s->buffer, trace_seq_used(s)); 1110 1111 kfree(s); 1112 1113 return r; 1114 } 1115 1116 static ssize_t 1117 event_filter_write(struct file *filp, const char __user *ubuf, size_t cnt, 1118 loff_t *ppos) 1119 { 1120 struct trace_event_file *file; 1121 char *buf; 1122 int err = -ENODEV; 1123 1124 if (cnt >= PAGE_SIZE) 1125 return -EINVAL; 1126 1127 buf = (char *)__get_free_page(GFP_TEMPORARY); 1128 if (!buf) 1129 return -ENOMEM; 1130 1131 if (copy_from_user(buf, ubuf, cnt)) { 1132 free_page((unsigned long) buf); 1133 return -EFAULT; 1134 } 1135 buf[cnt] = '\0'; 1136 1137 mutex_lock(&event_mutex); 1138 file = event_file_data(filp); 1139 if (file) 1140 err = apply_event_filter(file, buf); 1141 mutex_unlock(&event_mutex); 1142 1143 free_page((unsigned long) buf); 1144 if (err < 0) 1145 return err; 1146 1147 *ppos += cnt; 1148 1149 return cnt; 1150 } 1151 1152 static LIST_HEAD(event_subsystems); 1153 1154 static int subsystem_open(struct inode *inode, struct file *filp) 1155 { 1156 struct event_subsystem *system = NULL; 1157 struct trace_subsystem_dir *dir = NULL; /* Initialize for gcc */ 1158 struct trace_array *tr; 1159 int ret; 1160 1161 if (tracing_is_disabled()) 1162 return -ENODEV; 1163 1164 /* Make sure the system still exists */ 1165 mutex_lock(&trace_types_lock); 1166 mutex_lock(&event_mutex); 1167 list_for_each_entry(tr, &ftrace_trace_arrays, list) { 1168 list_for_each_entry(dir, &tr->systems, list) { 1169 if (dir == inode->i_private) { 1170 /* Don't open systems with no events */ 1171 if (dir->nr_events) { 1172 __get_system_dir(dir); 1173 system = dir->subsystem; 1174 } 1175 goto exit_loop; 1176 } 1177 } 1178 } 1179 exit_loop: 1180 mutex_unlock(&event_mutex); 1181 mutex_unlock(&trace_types_lock); 1182 1183 if (!system) 1184 return -ENODEV; 1185 1186 /* Some versions of gcc think dir can be uninitialized here */ 1187 WARN_ON(!dir); 1188 1189 /* Still need to increment the ref count of the system */ 1190 if (trace_array_get(tr) < 0) { 1191 put_system(dir); 1192 return -ENODEV; 1193 } 1194 1195 ret = tracing_open_generic(inode, filp); 1196 if (ret < 0) { 1197 trace_array_put(tr); 1198 put_system(dir); 1199 } 1200 1201 return ret; 1202 } 1203 1204 static int system_tr_open(struct inode *inode, struct file *filp) 1205 { 1206 struct trace_subsystem_dir *dir; 1207 struct trace_array *tr = inode->i_private; 1208 int ret; 1209 1210 if (tracing_is_disabled()) 1211 return -ENODEV; 1212 1213 if (trace_array_get(tr) < 0) 1214 return -ENODEV; 1215 1216 /* Make a temporary dir that has no system but points to tr */ 1217 dir = kzalloc(sizeof(*dir), GFP_KERNEL); 1218 if (!dir) { 1219 trace_array_put(tr); 1220 return -ENOMEM; 1221 } 1222 1223 dir->tr = tr; 1224 1225 ret = tracing_open_generic(inode, filp); 1226 if (ret < 0) { 1227 trace_array_put(tr); 1228 kfree(dir); 1229 return ret; 1230 } 1231 1232 filp->private_data = dir; 1233 1234 return 0; 1235 } 1236 1237 static int subsystem_release(struct inode *inode, struct file *file) 1238 { 1239 struct trace_subsystem_dir *dir = file->private_data; 1240 1241 trace_array_put(dir->tr); 1242 1243 /* 1244 * If dir->subsystem is NULL, then this is a temporary 1245 * descriptor that was made for a trace_array to enable 1246 * all subsystems. 1247 */ 1248 if (dir->subsystem) 1249 put_system(dir); 1250 else 1251 kfree(dir); 1252 1253 return 0; 1254 } 1255 1256 static ssize_t 1257 subsystem_filter_read(struct file *filp, char __user *ubuf, size_t cnt, 1258 loff_t *ppos) 1259 { 1260 struct trace_subsystem_dir *dir = filp->private_data; 1261 struct event_subsystem *system = dir->subsystem; 1262 struct trace_seq *s; 1263 int r; 1264 1265 if (*ppos) 1266 return 0; 1267 1268 s = kmalloc(sizeof(*s), GFP_KERNEL); 1269 if (!s) 1270 return -ENOMEM; 1271 1272 trace_seq_init(s); 1273 1274 print_subsystem_event_filter(system, s); 1275 r = simple_read_from_buffer(ubuf, cnt, ppos, 1276 s->buffer, trace_seq_used(s)); 1277 1278 kfree(s); 1279 1280 return r; 1281 } 1282 1283 static ssize_t 1284 subsystem_filter_write(struct file *filp, const char __user *ubuf, size_t cnt, 1285 loff_t *ppos) 1286 { 1287 struct trace_subsystem_dir *dir = filp->private_data; 1288 char *buf; 1289 int err; 1290 1291 if (cnt >= PAGE_SIZE) 1292 return -EINVAL; 1293 1294 buf = (char *)__get_free_page(GFP_TEMPORARY); 1295 if (!buf) 1296 return -ENOMEM; 1297 1298 if (copy_from_user(buf, ubuf, cnt)) { 1299 free_page((unsigned long) buf); 1300 return -EFAULT; 1301 } 1302 buf[cnt] = '\0'; 1303 1304 err = apply_subsystem_event_filter(dir, buf); 1305 free_page((unsigned long) buf); 1306 if (err < 0) 1307 return err; 1308 1309 *ppos += cnt; 1310 1311 return cnt; 1312 } 1313 1314 static ssize_t 1315 show_header(struct file *filp, char __user *ubuf, size_t cnt, loff_t *ppos) 1316 { 1317 int (*func)(struct trace_seq *s) = filp->private_data; 1318 struct trace_seq *s; 1319 int r; 1320 1321 if (*ppos) 1322 return 0; 1323 1324 s = kmalloc(sizeof(*s), GFP_KERNEL); 1325 if (!s) 1326 return -ENOMEM; 1327 1328 trace_seq_init(s); 1329 1330 func(s); 1331 r = simple_read_from_buffer(ubuf, cnt, ppos, 1332 s->buffer, trace_seq_used(s)); 1333 1334 kfree(s); 1335 1336 return r; 1337 } 1338 1339 static int ftrace_event_avail_open(struct inode *inode, struct file *file); 1340 static int ftrace_event_set_open(struct inode *inode, struct file *file); 1341 static int ftrace_event_release(struct inode *inode, struct file *file); 1342 1343 static const struct seq_operations show_event_seq_ops = { 1344 .start = t_start, 1345 .next = t_next, 1346 .show = t_show, 1347 .stop = t_stop, 1348 }; 1349 1350 static const struct seq_operations show_set_event_seq_ops = { 1351 .start = s_start, 1352 .next = s_next, 1353 .show = t_show, 1354 .stop = t_stop, 1355 }; 1356 1357 static const struct file_operations ftrace_avail_fops = { 1358 .open = ftrace_event_avail_open, 1359 .read = seq_read, 1360 .llseek = seq_lseek, 1361 .release = seq_release, 1362 }; 1363 1364 static const struct file_operations ftrace_set_event_fops = { 1365 .open = ftrace_event_set_open, 1366 .read = seq_read, 1367 .write = ftrace_event_write, 1368 .llseek = seq_lseek, 1369 .release = ftrace_event_release, 1370 }; 1371 1372 static const struct file_operations ftrace_enable_fops = { 1373 .open = tracing_open_generic, 1374 .read = event_enable_read, 1375 .write = event_enable_write, 1376 .llseek = default_llseek, 1377 }; 1378 1379 static const struct file_operations ftrace_event_format_fops = { 1380 .open = trace_format_open, 1381 .read = seq_read, 1382 .llseek = seq_lseek, 1383 .release = seq_release, 1384 }; 1385 1386 static const struct file_operations ftrace_event_id_fops = { 1387 .read = event_id_read, 1388 .llseek = default_llseek, 1389 }; 1390 1391 static const struct file_operations ftrace_event_filter_fops = { 1392 .open = tracing_open_generic, 1393 .read = event_filter_read, 1394 .write = event_filter_write, 1395 .llseek = default_llseek, 1396 }; 1397 1398 static const struct file_operations ftrace_subsystem_filter_fops = { 1399 .open = subsystem_open, 1400 .read = subsystem_filter_read, 1401 .write = subsystem_filter_write, 1402 .llseek = default_llseek, 1403 .release = subsystem_release, 1404 }; 1405 1406 static const struct file_operations ftrace_system_enable_fops = { 1407 .open = subsystem_open, 1408 .read = system_enable_read, 1409 .write = system_enable_write, 1410 .llseek = default_llseek, 1411 .release = subsystem_release, 1412 }; 1413 1414 static const struct file_operations ftrace_tr_enable_fops = { 1415 .open = system_tr_open, 1416 .read = system_enable_read, 1417 .write = system_enable_write, 1418 .llseek = default_llseek, 1419 .release = subsystem_release, 1420 }; 1421 1422 static const struct file_operations ftrace_show_header_fops = { 1423 .open = tracing_open_generic, 1424 .read = show_header, 1425 .llseek = default_llseek, 1426 }; 1427 1428 static int 1429 ftrace_event_open(struct inode *inode, struct file *file, 1430 const struct seq_operations *seq_ops) 1431 { 1432 struct seq_file *m; 1433 int ret; 1434 1435 ret = seq_open(file, seq_ops); 1436 if (ret < 0) 1437 return ret; 1438 m = file->private_data; 1439 /* copy tr over to seq ops */ 1440 m->private = inode->i_private; 1441 1442 return ret; 1443 } 1444 1445 static int ftrace_event_release(struct inode *inode, struct file *file) 1446 { 1447 struct trace_array *tr = inode->i_private; 1448 1449 trace_array_put(tr); 1450 1451 return seq_release(inode, file); 1452 } 1453 1454 static int 1455 ftrace_event_avail_open(struct inode *inode, struct file *file) 1456 { 1457 const struct seq_operations *seq_ops = &show_event_seq_ops; 1458 1459 return ftrace_event_open(inode, file, seq_ops); 1460 } 1461 1462 static int 1463 ftrace_event_set_open(struct inode *inode, struct file *file) 1464 { 1465 const struct seq_operations *seq_ops = &show_set_event_seq_ops; 1466 struct trace_array *tr = inode->i_private; 1467 int ret; 1468 1469 if (trace_array_get(tr) < 0) 1470 return -ENODEV; 1471 1472 if ((file->f_mode & FMODE_WRITE) && 1473 (file->f_flags & O_TRUNC)) 1474 ftrace_clear_events(tr); 1475 1476 ret = ftrace_event_open(inode, file, seq_ops); 1477 if (ret < 0) 1478 trace_array_put(tr); 1479 return ret; 1480 } 1481 1482 static struct event_subsystem * 1483 create_new_subsystem(const char *name) 1484 { 1485 struct event_subsystem *system; 1486 1487 /* need to create new entry */ 1488 system = kmalloc(sizeof(*system), GFP_KERNEL); 1489 if (!system) 1490 return NULL; 1491 1492 system->ref_count = 1; 1493 1494 /* Only allocate if dynamic (kprobes and modules) */ 1495 if (!core_kernel_data((unsigned long)name)) { 1496 system->ref_count |= SYSTEM_FL_FREE_NAME; 1497 system->name = kstrdup(name, GFP_KERNEL); 1498 if (!system->name) 1499 goto out_free; 1500 } else 1501 system->name = name; 1502 1503 system->filter = NULL; 1504 1505 system->filter = kzalloc(sizeof(struct event_filter), GFP_KERNEL); 1506 if (!system->filter) 1507 goto out_free; 1508 1509 list_add(&system->list, &event_subsystems); 1510 1511 return system; 1512 1513 out_free: 1514 if (system->ref_count & SYSTEM_FL_FREE_NAME) 1515 kfree(system->name); 1516 kfree(system); 1517 return NULL; 1518 } 1519 1520 static struct dentry * 1521 event_subsystem_dir(struct trace_array *tr, const char *name, 1522 struct trace_event_file *file, struct dentry *parent) 1523 { 1524 struct trace_subsystem_dir *dir; 1525 struct event_subsystem *system; 1526 struct dentry *entry; 1527 1528 /* First see if we did not already create this dir */ 1529 list_for_each_entry(dir, &tr->systems, list) { 1530 system = dir->subsystem; 1531 if (strcmp(system->name, name) == 0) { 1532 dir->nr_events++; 1533 file->system = dir; 1534 return dir->entry; 1535 } 1536 } 1537 1538 /* Now see if the system itself exists. */ 1539 list_for_each_entry(system, &event_subsystems, list) { 1540 if (strcmp(system->name, name) == 0) 1541 break; 1542 } 1543 /* Reset system variable when not found */ 1544 if (&system->list == &event_subsystems) 1545 system = NULL; 1546 1547 dir = kmalloc(sizeof(*dir), GFP_KERNEL); 1548 if (!dir) 1549 goto out_fail; 1550 1551 if (!system) { 1552 system = create_new_subsystem(name); 1553 if (!system) 1554 goto out_free; 1555 } else 1556 __get_system(system); 1557 1558 dir->entry = tracefs_create_dir(name, parent); 1559 if (!dir->entry) { 1560 pr_warn("Failed to create system directory %s\n", name); 1561 __put_system(system); 1562 goto out_free; 1563 } 1564 1565 dir->tr = tr; 1566 dir->ref_count = 1; 1567 dir->nr_events = 1; 1568 dir->subsystem = system; 1569 file->system = dir; 1570 1571 entry = tracefs_create_file("filter", 0644, dir->entry, dir, 1572 &ftrace_subsystem_filter_fops); 1573 if (!entry) { 1574 kfree(system->filter); 1575 system->filter = NULL; 1576 pr_warn("Could not create tracefs '%s/filter' entry\n", name); 1577 } 1578 1579 trace_create_file("enable", 0644, dir->entry, dir, 1580 &ftrace_system_enable_fops); 1581 1582 list_add(&dir->list, &tr->systems); 1583 1584 return dir->entry; 1585 1586 out_free: 1587 kfree(dir); 1588 out_fail: 1589 /* Only print this message if failed on memory allocation */ 1590 if (!dir || !system) 1591 pr_warn("No memory to create event subsystem %s\n", name); 1592 return NULL; 1593 } 1594 1595 static int 1596 event_create_dir(struct dentry *parent, struct trace_event_file *file) 1597 { 1598 struct trace_event_call *call = file->event_call; 1599 struct trace_array *tr = file->tr; 1600 struct list_head *head; 1601 struct dentry *d_events; 1602 const char *name; 1603 int ret; 1604 1605 /* 1606 * If the trace point header did not define TRACE_SYSTEM 1607 * then the system would be called "TRACE_SYSTEM". 1608 */ 1609 if (strcmp(call->class->system, TRACE_SYSTEM) != 0) { 1610 d_events = event_subsystem_dir(tr, call->class->system, file, parent); 1611 if (!d_events) 1612 return -ENOMEM; 1613 } else 1614 d_events = parent; 1615 1616 name = trace_event_name(call); 1617 file->dir = tracefs_create_dir(name, d_events); 1618 if (!file->dir) { 1619 pr_warn("Could not create tracefs '%s' directory\n", name); 1620 return -1; 1621 } 1622 1623 if (call->class->reg && !(call->flags & TRACE_EVENT_FL_IGNORE_ENABLE)) 1624 trace_create_file("enable", 0644, file->dir, file, 1625 &ftrace_enable_fops); 1626 1627 #ifdef CONFIG_PERF_EVENTS 1628 if (call->event.type && call->class->reg) 1629 trace_create_file("id", 0444, file->dir, 1630 (void *)(long)call->event.type, 1631 &ftrace_event_id_fops); 1632 #endif 1633 1634 /* 1635 * Other events may have the same class. Only update 1636 * the fields if they are not already defined. 1637 */ 1638 head = trace_get_fields(call); 1639 if (list_empty(head)) { 1640 ret = call->class->define_fields(call); 1641 if (ret < 0) { 1642 pr_warn("Could not initialize trace point events/%s\n", 1643 name); 1644 return -1; 1645 } 1646 } 1647 trace_create_file("filter", 0644, file->dir, file, 1648 &ftrace_event_filter_fops); 1649 1650 trace_create_file("trigger", 0644, file->dir, file, 1651 &event_trigger_fops); 1652 1653 trace_create_file("format", 0444, file->dir, call, 1654 &ftrace_event_format_fops); 1655 1656 return 0; 1657 } 1658 1659 static void remove_event_from_tracers(struct trace_event_call *call) 1660 { 1661 struct trace_event_file *file; 1662 struct trace_array *tr; 1663 1664 do_for_each_event_file_safe(tr, file) { 1665 if (file->event_call != call) 1666 continue; 1667 1668 remove_event_file_dir(file); 1669 /* 1670 * The do_for_each_event_file_safe() is 1671 * a double loop. After finding the call for this 1672 * trace_array, we use break to jump to the next 1673 * trace_array. 1674 */ 1675 break; 1676 } while_for_each_event_file(); 1677 } 1678 1679 static void event_remove(struct trace_event_call *call) 1680 { 1681 struct trace_array *tr; 1682 struct trace_event_file *file; 1683 1684 do_for_each_event_file(tr, file) { 1685 if (file->event_call != call) 1686 continue; 1687 ftrace_event_enable_disable(file, 0); 1688 /* 1689 * The do_for_each_event_file() is 1690 * a double loop. After finding the call for this 1691 * trace_array, we use break to jump to the next 1692 * trace_array. 1693 */ 1694 break; 1695 } while_for_each_event_file(); 1696 1697 if (call->event.funcs) 1698 __unregister_trace_event(&call->event); 1699 remove_event_from_tracers(call); 1700 list_del(&call->list); 1701 } 1702 1703 static int event_init(struct trace_event_call *call) 1704 { 1705 int ret = 0; 1706 const char *name; 1707 1708 name = trace_event_name(call); 1709 if (WARN_ON(!name)) 1710 return -EINVAL; 1711 1712 if (call->class->raw_init) { 1713 ret = call->class->raw_init(call); 1714 if (ret < 0 && ret != -ENOSYS) 1715 pr_warn("Could not initialize trace events/%s\n", name); 1716 } 1717 1718 return ret; 1719 } 1720 1721 static int 1722 __register_event(struct trace_event_call *call, struct module *mod) 1723 { 1724 int ret; 1725 1726 ret = event_init(call); 1727 if (ret < 0) 1728 return ret; 1729 1730 list_add(&call->list, &ftrace_events); 1731 call->mod = mod; 1732 1733 return 0; 1734 } 1735 1736 static char *enum_replace(char *ptr, struct trace_enum_map *map, int len) 1737 { 1738 int rlen; 1739 int elen; 1740 1741 /* Find the length of the enum value as a string */ 1742 elen = snprintf(ptr, 0, "%ld", map->enum_value); 1743 /* Make sure there's enough room to replace the string with the value */ 1744 if (len < elen) 1745 return NULL; 1746 1747 snprintf(ptr, elen + 1, "%ld", map->enum_value); 1748 1749 /* Get the rest of the string of ptr */ 1750 rlen = strlen(ptr + len); 1751 memmove(ptr + elen, ptr + len, rlen); 1752 /* Make sure we end the new string */ 1753 ptr[elen + rlen] = 0; 1754 1755 return ptr + elen; 1756 } 1757 1758 static void update_event_printk(struct trace_event_call *call, 1759 struct trace_enum_map *map) 1760 { 1761 char *ptr; 1762 int quote = 0; 1763 int len = strlen(map->enum_string); 1764 1765 for (ptr = call->print_fmt; *ptr; ptr++) { 1766 if (*ptr == '\\') { 1767 ptr++; 1768 /* paranoid */ 1769 if (!*ptr) 1770 break; 1771 continue; 1772 } 1773 if (*ptr == '"') { 1774 quote ^= 1; 1775 continue; 1776 } 1777 if (quote) 1778 continue; 1779 if (isdigit(*ptr)) { 1780 /* skip numbers */ 1781 do { 1782 ptr++; 1783 /* Check for alpha chars like ULL */ 1784 } while (isalnum(*ptr)); 1785 if (!*ptr) 1786 break; 1787 /* 1788 * A number must have some kind of delimiter after 1789 * it, and we can ignore that too. 1790 */ 1791 continue; 1792 } 1793 if (isalpha(*ptr) || *ptr == '_') { 1794 if (strncmp(map->enum_string, ptr, len) == 0 && 1795 !isalnum(ptr[len]) && ptr[len] != '_') { 1796 ptr = enum_replace(ptr, map, len); 1797 /* Hmm, enum string smaller than value */ 1798 if (WARN_ON_ONCE(!ptr)) 1799 return; 1800 /* 1801 * No need to decrement here, as enum_replace() 1802 * returns the pointer to the character passed 1803 * the enum, and two enums can not be placed 1804 * back to back without something in between. 1805 * We can skip that something in between. 1806 */ 1807 continue; 1808 } 1809 skip_more: 1810 do { 1811 ptr++; 1812 } while (isalnum(*ptr) || *ptr == '_'); 1813 if (!*ptr) 1814 break; 1815 /* 1816 * If what comes after this variable is a '.' or 1817 * '->' then we can continue to ignore that string. 1818 */ 1819 if (*ptr == '.' || (ptr[0] == '-' && ptr[1] == '>')) { 1820 ptr += *ptr == '.' ? 1 : 2; 1821 if (!*ptr) 1822 break; 1823 goto skip_more; 1824 } 1825 /* 1826 * Once again, we can skip the delimiter that came 1827 * after the string. 1828 */ 1829 continue; 1830 } 1831 } 1832 } 1833 1834 void trace_event_enum_update(struct trace_enum_map **map, int len) 1835 { 1836 struct trace_event_call *call, *p; 1837 const char *last_system = NULL; 1838 int last_i; 1839 int i; 1840 1841 down_write(&trace_event_sem); 1842 list_for_each_entry_safe(call, p, &ftrace_events, list) { 1843 /* events are usually grouped together with systems */ 1844 if (!last_system || call->class->system != last_system) { 1845 last_i = 0; 1846 last_system = call->class->system; 1847 } 1848 1849 for (i = last_i; i < len; i++) { 1850 if (call->class->system == map[i]->system) { 1851 /* Save the first system if need be */ 1852 if (!last_i) 1853 last_i = i; 1854 update_event_printk(call, map[i]); 1855 } 1856 } 1857 } 1858 up_write(&trace_event_sem); 1859 } 1860 1861 static struct trace_event_file * 1862 trace_create_new_event(struct trace_event_call *call, 1863 struct trace_array *tr) 1864 { 1865 struct trace_event_file *file; 1866 1867 file = kmem_cache_alloc(file_cachep, GFP_TRACE); 1868 if (!file) 1869 return NULL; 1870 1871 file->event_call = call; 1872 file->tr = tr; 1873 atomic_set(&file->sm_ref, 0); 1874 atomic_set(&file->tm_ref, 0); 1875 INIT_LIST_HEAD(&file->triggers); 1876 list_add(&file->list, &tr->events); 1877 1878 return file; 1879 } 1880 1881 /* Add an event to a trace directory */ 1882 static int 1883 __trace_add_new_event(struct trace_event_call *call, struct trace_array *tr) 1884 { 1885 struct trace_event_file *file; 1886 1887 file = trace_create_new_event(call, tr); 1888 if (!file) 1889 return -ENOMEM; 1890 1891 return event_create_dir(tr->event_dir, file); 1892 } 1893 1894 /* 1895 * Just create a decriptor for early init. A descriptor is required 1896 * for enabling events at boot. We want to enable events before 1897 * the filesystem is initialized. 1898 */ 1899 static __init int 1900 __trace_early_add_new_event(struct trace_event_call *call, 1901 struct trace_array *tr) 1902 { 1903 struct trace_event_file *file; 1904 1905 file = trace_create_new_event(call, tr); 1906 if (!file) 1907 return -ENOMEM; 1908 1909 return 0; 1910 } 1911 1912 struct ftrace_module_file_ops; 1913 static void __add_event_to_tracers(struct trace_event_call *call); 1914 1915 /* Add an additional event_call dynamically */ 1916 int trace_add_event_call(struct trace_event_call *call) 1917 { 1918 int ret; 1919 mutex_lock(&trace_types_lock); 1920 mutex_lock(&event_mutex); 1921 1922 ret = __register_event(call, NULL); 1923 if (ret >= 0) 1924 __add_event_to_tracers(call); 1925 1926 mutex_unlock(&event_mutex); 1927 mutex_unlock(&trace_types_lock); 1928 return ret; 1929 } 1930 1931 /* 1932 * Must be called under locking of trace_types_lock, event_mutex and 1933 * trace_event_sem. 1934 */ 1935 static void __trace_remove_event_call(struct trace_event_call *call) 1936 { 1937 event_remove(call); 1938 trace_destroy_fields(call); 1939 free_event_filter(call->filter); 1940 call->filter = NULL; 1941 } 1942 1943 static int probe_remove_event_call(struct trace_event_call *call) 1944 { 1945 struct trace_array *tr; 1946 struct trace_event_file *file; 1947 1948 #ifdef CONFIG_PERF_EVENTS 1949 if (call->perf_refcount) 1950 return -EBUSY; 1951 #endif 1952 do_for_each_event_file(tr, file) { 1953 if (file->event_call != call) 1954 continue; 1955 /* 1956 * We can't rely on ftrace_event_enable_disable(enable => 0) 1957 * we are going to do, EVENT_FILE_FL_SOFT_MODE can suppress 1958 * TRACE_REG_UNREGISTER. 1959 */ 1960 if (file->flags & EVENT_FILE_FL_ENABLED) 1961 return -EBUSY; 1962 /* 1963 * The do_for_each_event_file_safe() is 1964 * a double loop. After finding the call for this 1965 * trace_array, we use break to jump to the next 1966 * trace_array. 1967 */ 1968 break; 1969 } while_for_each_event_file(); 1970 1971 __trace_remove_event_call(call); 1972 1973 return 0; 1974 } 1975 1976 /* Remove an event_call */ 1977 int trace_remove_event_call(struct trace_event_call *call) 1978 { 1979 int ret; 1980 1981 mutex_lock(&trace_types_lock); 1982 mutex_lock(&event_mutex); 1983 down_write(&trace_event_sem); 1984 ret = probe_remove_event_call(call); 1985 up_write(&trace_event_sem); 1986 mutex_unlock(&event_mutex); 1987 mutex_unlock(&trace_types_lock); 1988 1989 return ret; 1990 } 1991 1992 #define for_each_event(event, start, end) \ 1993 for (event = start; \ 1994 (unsigned long)event < (unsigned long)end; \ 1995 event++) 1996 1997 #ifdef CONFIG_MODULES 1998 1999 static void trace_module_add_events(struct module *mod) 2000 { 2001 struct trace_event_call **call, **start, **end; 2002 2003 if (!mod->num_trace_events) 2004 return; 2005 2006 /* Don't add infrastructure for mods without tracepoints */ 2007 if (trace_module_has_bad_taint(mod)) { 2008 pr_err("%s: module has bad taint, not creating trace events\n", 2009 mod->name); 2010 return; 2011 } 2012 2013 start = mod->trace_events; 2014 end = mod->trace_events + mod->num_trace_events; 2015 2016 for_each_event(call, start, end) { 2017 __register_event(*call, mod); 2018 __add_event_to_tracers(*call); 2019 } 2020 } 2021 2022 static void trace_module_remove_events(struct module *mod) 2023 { 2024 struct trace_event_call *call, *p; 2025 bool clear_trace = false; 2026 2027 down_write(&trace_event_sem); 2028 list_for_each_entry_safe(call, p, &ftrace_events, list) { 2029 if (call->mod == mod) { 2030 if (call->flags & TRACE_EVENT_FL_WAS_ENABLED) 2031 clear_trace = true; 2032 __trace_remove_event_call(call); 2033 } 2034 } 2035 up_write(&trace_event_sem); 2036 2037 /* 2038 * It is safest to reset the ring buffer if the module being unloaded 2039 * registered any events that were used. The only worry is if 2040 * a new module gets loaded, and takes on the same id as the events 2041 * of this module. When printing out the buffer, traced events left 2042 * over from this module may be passed to the new module events and 2043 * unexpected results may occur. 2044 */ 2045 if (clear_trace) 2046 tracing_reset_all_online_cpus(); 2047 } 2048 2049 static int trace_module_notify(struct notifier_block *self, 2050 unsigned long val, void *data) 2051 { 2052 struct module *mod = data; 2053 2054 mutex_lock(&trace_types_lock); 2055 mutex_lock(&event_mutex); 2056 switch (val) { 2057 case MODULE_STATE_COMING: 2058 trace_module_add_events(mod); 2059 break; 2060 case MODULE_STATE_GOING: 2061 trace_module_remove_events(mod); 2062 break; 2063 } 2064 mutex_unlock(&event_mutex); 2065 mutex_unlock(&trace_types_lock); 2066 2067 return 0; 2068 } 2069 2070 static struct notifier_block trace_module_nb = { 2071 .notifier_call = trace_module_notify, 2072 .priority = 1, /* higher than trace.c module notify */ 2073 }; 2074 #endif /* CONFIG_MODULES */ 2075 2076 /* Create a new event directory structure for a trace directory. */ 2077 static void 2078 __trace_add_event_dirs(struct trace_array *tr) 2079 { 2080 struct trace_event_call *call; 2081 int ret; 2082 2083 list_for_each_entry(call, &ftrace_events, list) { 2084 ret = __trace_add_new_event(call, tr); 2085 if (ret < 0) 2086 pr_warn("Could not create directory for event %s\n", 2087 trace_event_name(call)); 2088 } 2089 } 2090 2091 struct trace_event_file * 2092 find_event_file(struct trace_array *tr, const char *system, const char *event) 2093 { 2094 struct trace_event_file *file; 2095 struct trace_event_call *call; 2096 const char *name; 2097 2098 list_for_each_entry(file, &tr->events, list) { 2099 2100 call = file->event_call; 2101 name = trace_event_name(call); 2102 2103 if (!name || !call->class || !call->class->reg) 2104 continue; 2105 2106 if (call->flags & TRACE_EVENT_FL_IGNORE_ENABLE) 2107 continue; 2108 2109 if (strcmp(event, name) == 0 && 2110 strcmp(system, call->class->system) == 0) 2111 return file; 2112 } 2113 return NULL; 2114 } 2115 2116 #ifdef CONFIG_DYNAMIC_FTRACE 2117 2118 /* Avoid typos */ 2119 #define ENABLE_EVENT_STR "enable_event" 2120 #define DISABLE_EVENT_STR "disable_event" 2121 2122 struct event_probe_data { 2123 struct trace_event_file *file; 2124 unsigned long count; 2125 int ref; 2126 bool enable; 2127 }; 2128 2129 static void 2130 event_enable_probe(unsigned long ip, unsigned long parent_ip, void **_data) 2131 { 2132 struct event_probe_data **pdata = (struct event_probe_data **)_data; 2133 struct event_probe_data *data = *pdata; 2134 2135 if (!data) 2136 return; 2137 2138 if (data->enable) 2139 clear_bit(EVENT_FILE_FL_SOFT_DISABLED_BIT, &data->file->flags); 2140 else 2141 set_bit(EVENT_FILE_FL_SOFT_DISABLED_BIT, &data->file->flags); 2142 } 2143 2144 static void 2145 event_enable_count_probe(unsigned long ip, unsigned long parent_ip, void **_data) 2146 { 2147 struct event_probe_data **pdata = (struct event_probe_data **)_data; 2148 struct event_probe_data *data = *pdata; 2149 2150 if (!data) 2151 return; 2152 2153 if (!data->count) 2154 return; 2155 2156 /* Skip if the event is in a state we want to switch to */ 2157 if (data->enable == !(data->file->flags & EVENT_FILE_FL_SOFT_DISABLED)) 2158 return; 2159 2160 if (data->count != -1) 2161 (data->count)--; 2162 2163 event_enable_probe(ip, parent_ip, _data); 2164 } 2165 2166 static int 2167 event_enable_print(struct seq_file *m, unsigned long ip, 2168 struct ftrace_probe_ops *ops, void *_data) 2169 { 2170 struct event_probe_data *data = _data; 2171 2172 seq_printf(m, "%ps:", (void *)ip); 2173 2174 seq_printf(m, "%s:%s:%s", 2175 data->enable ? ENABLE_EVENT_STR : DISABLE_EVENT_STR, 2176 data->file->event_call->class->system, 2177 trace_event_name(data->file->event_call)); 2178 2179 if (data->count == -1) 2180 seq_puts(m, ":unlimited\n"); 2181 else 2182 seq_printf(m, ":count=%ld\n", data->count); 2183 2184 return 0; 2185 } 2186 2187 static int 2188 event_enable_init(struct ftrace_probe_ops *ops, unsigned long ip, 2189 void **_data) 2190 { 2191 struct event_probe_data **pdata = (struct event_probe_data **)_data; 2192 struct event_probe_data *data = *pdata; 2193 2194 data->ref++; 2195 return 0; 2196 } 2197 2198 static void 2199 event_enable_free(struct ftrace_probe_ops *ops, unsigned long ip, 2200 void **_data) 2201 { 2202 struct event_probe_data **pdata = (struct event_probe_data **)_data; 2203 struct event_probe_data *data = *pdata; 2204 2205 if (WARN_ON_ONCE(data->ref <= 0)) 2206 return; 2207 2208 data->ref--; 2209 if (!data->ref) { 2210 /* Remove the SOFT_MODE flag */ 2211 __ftrace_event_enable_disable(data->file, 0, 1); 2212 module_put(data->file->event_call->mod); 2213 kfree(data); 2214 } 2215 *pdata = NULL; 2216 } 2217 2218 static struct ftrace_probe_ops event_enable_probe_ops = { 2219 .func = event_enable_probe, 2220 .print = event_enable_print, 2221 .init = event_enable_init, 2222 .free = event_enable_free, 2223 }; 2224 2225 static struct ftrace_probe_ops event_enable_count_probe_ops = { 2226 .func = event_enable_count_probe, 2227 .print = event_enable_print, 2228 .init = event_enable_init, 2229 .free = event_enable_free, 2230 }; 2231 2232 static struct ftrace_probe_ops event_disable_probe_ops = { 2233 .func = event_enable_probe, 2234 .print = event_enable_print, 2235 .init = event_enable_init, 2236 .free = event_enable_free, 2237 }; 2238 2239 static struct ftrace_probe_ops event_disable_count_probe_ops = { 2240 .func = event_enable_count_probe, 2241 .print = event_enable_print, 2242 .init = event_enable_init, 2243 .free = event_enable_free, 2244 }; 2245 2246 static int 2247 event_enable_func(struct ftrace_hash *hash, 2248 char *glob, char *cmd, char *param, int enabled) 2249 { 2250 struct trace_array *tr = top_trace_array(); 2251 struct trace_event_file *file; 2252 struct ftrace_probe_ops *ops; 2253 struct event_probe_data *data; 2254 const char *system; 2255 const char *event; 2256 char *number; 2257 bool enable; 2258 int ret; 2259 2260 if (!tr) 2261 return -ENODEV; 2262 2263 /* hash funcs only work with set_ftrace_filter */ 2264 if (!enabled || !param) 2265 return -EINVAL; 2266 2267 system = strsep(¶m, ":"); 2268 if (!param) 2269 return -EINVAL; 2270 2271 event = strsep(¶m, ":"); 2272 2273 mutex_lock(&event_mutex); 2274 2275 ret = -EINVAL; 2276 file = find_event_file(tr, system, event); 2277 if (!file) 2278 goto out; 2279 2280 enable = strcmp(cmd, ENABLE_EVENT_STR) == 0; 2281 2282 if (enable) 2283 ops = param ? &event_enable_count_probe_ops : &event_enable_probe_ops; 2284 else 2285 ops = param ? &event_disable_count_probe_ops : &event_disable_probe_ops; 2286 2287 if (glob[0] == '!') { 2288 unregister_ftrace_function_probe_func(glob+1, ops); 2289 ret = 0; 2290 goto out; 2291 } 2292 2293 ret = -ENOMEM; 2294 data = kzalloc(sizeof(*data), GFP_KERNEL); 2295 if (!data) 2296 goto out; 2297 2298 data->enable = enable; 2299 data->count = -1; 2300 data->file = file; 2301 2302 if (!param) 2303 goto out_reg; 2304 2305 number = strsep(¶m, ":"); 2306 2307 ret = -EINVAL; 2308 if (!strlen(number)) 2309 goto out_free; 2310 2311 /* 2312 * We use the callback data field (which is a pointer) 2313 * as our counter. 2314 */ 2315 ret = kstrtoul(number, 0, &data->count); 2316 if (ret) 2317 goto out_free; 2318 2319 out_reg: 2320 /* Don't let event modules unload while probe registered */ 2321 ret = try_module_get(file->event_call->mod); 2322 if (!ret) { 2323 ret = -EBUSY; 2324 goto out_free; 2325 } 2326 2327 ret = __ftrace_event_enable_disable(file, 1, 1); 2328 if (ret < 0) 2329 goto out_put; 2330 ret = register_ftrace_function_probe(glob, ops, data); 2331 /* 2332 * The above returns on success the # of functions enabled, 2333 * but if it didn't find any functions it returns zero. 2334 * Consider no functions a failure too. 2335 */ 2336 if (!ret) { 2337 ret = -ENOENT; 2338 goto out_disable; 2339 } else if (ret < 0) 2340 goto out_disable; 2341 /* Just return zero, not the number of enabled functions */ 2342 ret = 0; 2343 out: 2344 mutex_unlock(&event_mutex); 2345 return ret; 2346 2347 out_disable: 2348 __ftrace_event_enable_disable(file, 0, 1); 2349 out_put: 2350 module_put(file->event_call->mod); 2351 out_free: 2352 kfree(data); 2353 goto out; 2354 } 2355 2356 static struct ftrace_func_command event_enable_cmd = { 2357 .name = ENABLE_EVENT_STR, 2358 .func = event_enable_func, 2359 }; 2360 2361 static struct ftrace_func_command event_disable_cmd = { 2362 .name = DISABLE_EVENT_STR, 2363 .func = event_enable_func, 2364 }; 2365 2366 static __init int register_event_cmds(void) 2367 { 2368 int ret; 2369 2370 ret = register_ftrace_command(&event_enable_cmd); 2371 if (WARN_ON(ret < 0)) 2372 return ret; 2373 ret = register_ftrace_command(&event_disable_cmd); 2374 if (WARN_ON(ret < 0)) 2375 unregister_ftrace_command(&event_enable_cmd); 2376 return ret; 2377 } 2378 #else 2379 static inline int register_event_cmds(void) { return 0; } 2380 #endif /* CONFIG_DYNAMIC_FTRACE */ 2381 2382 /* 2383 * The top level array has already had its trace_event_file 2384 * descriptors created in order to allow for early events to 2385 * be recorded. This function is called after the tracefs has been 2386 * initialized, and we now have to create the files associated 2387 * to the events. 2388 */ 2389 static __init void 2390 __trace_early_add_event_dirs(struct trace_array *tr) 2391 { 2392 struct trace_event_file *file; 2393 int ret; 2394 2395 2396 list_for_each_entry(file, &tr->events, list) { 2397 ret = event_create_dir(tr->event_dir, file); 2398 if (ret < 0) 2399 pr_warn("Could not create directory for event %s\n", 2400 trace_event_name(file->event_call)); 2401 } 2402 } 2403 2404 /* 2405 * For early boot up, the top trace array requires to have 2406 * a list of events that can be enabled. This must be done before 2407 * the filesystem is set up in order to allow events to be traced 2408 * early. 2409 */ 2410 static __init void 2411 __trace_early_add_events(struct trace_array *tr) 2412 { 2413 struct trace_event_call *call; 2414 int ret; 2415 2416 list_for_each_entry(call, &ftrace_events, list) { 2417 /* Early boot up should not have any modules loaded */ 2418 if (WARN_ON_ONCE(call->mod)) 2419 continue; 2420 2421 ret = __trace_early_add_new_event(call, tr); 2422 if (ret < 0) 2423 pr_warn("Could not create early event %s\n", 2424 trace_event_name(call)); 2425 } 2426 } 2427 2428 /* Remove the event directory structure for a trace directory. */ 2429 static void 2430 __trace_remove_event_dirs(struct trace_array *tr) 2431 { 2432 struct trace_event_file *file, *next; 2433 2434 list_for_each_entry_safe(file, next, &tr->events, list) 2435 remove_event_file_dir(file); 2436 } 2437 2438 static void __add_event_to_tracers(struct trace_event_call *call) 2439 { 2440 struct trace_array *tr; 2441 2442 list_for_each_entry(tr, &ftrace_trace_arrays, list) 2443 __trace_add_new_event(call, tr); 2444 } 2445 2446 extern struct trace_event_call *__start_ftrace_events[]; 2447 extern struct trace_event_call *__stop_ftrace_events[]; 2448 2449 static char bootup_event_buf[COMMAND_LINE_SIZE] __initdata; 2450 2451 static __init int setup_trace_event(char *str) 2452 { 2453 strlcpy(bootup_event_buf, str, COMMAND_LINE_SIZE); 2454 ring_buffer_expanded = true; 2455 tracing_selftest_disabled = true; 2456 2457 return 1; 2458 } 2459 __setup("trace_event=", setup_trace_event); 2460 2461 /* Expects to have event_mutex held when called */ 2462 static int 2463 create_event_toplevel_files(struct dentry *parent, struct trace_array *tr) 2464 { 2465 struct dentry *d_events; 2466 struct dentry *entry; 2467 2468 entry = tracefs_create_file("set_event", 0644, parent, 2469 tr, &ftrace_set_event_fops); 2470 if (!entry) { 2471 pr_warn("Could not create tracefs 'set_event' entry\n"); 2472 return -ENOMEM; 2473 } 2474 2475 d_events = tracefs_create_dir("events", parent); 2476 if (!d_events) { 2477 pr_warn("Could not create tracefs 'events' directory\n"); 2478 return -ENOMEM; 2479 } 2480 2481 /* ring buffer internal formats */ 2482 trace_create_file("header_page", 0444, d_events, 2483 ring_buffer_print_page_header, 2484 &ftrace_show_header_fops); 2485 2486 trace_create_file("header_event", 0444, d_events, 2487 ring_buffer_print_entry_header, 2488 &ftrace_show_header_fops); 2489 2490 trace_create_file("enable", 0644, d_events, 2491 tr, &ftrace_tr_enable_fops); 2492 2493 tr->event_dir = d_events; 2494 2495 return 0; 2496 } 2497 2498 /** 2499 * event_trace_add_tracer - add a instance of a trace_array to events 2500 * @parent: The parent dentry to place the files/directories for events in 2501 * @tr: The trace array associated with these events 2502 * 2503 * When a new instance is created, it needs to set up its events 2504 * directory, as well as other files associated with events. It also 2505 * creates the event hierachry in the @parent/events directory. 2506 * 2507 * Returns 0 on success. 2508 */ 2509 int event_trace_add_tracer(struct dentry *parent, struct trace_array *tr) 2510 { 2511 int ret; 2512 2513 mutex_lock(&event_mutex); 2514 2515 ret = create_event_toplevel_files(parent, tr); 2516 if (ret) 2517 goto out_unlock; 2518 2519 down_write(&trace_event_sem); 2520 __trace_add_event_dirs(tr); 2521 up_write(&trace_event_sem); 2522 2523 out_unlock: 2524 mutex_unlock(&event_mutex); 2525 2526 return ret; 2527 } 2528 2529 /* 2530 * The top trace array already had its file descriptors created. 2531 * Now the files themselves need to be created. 2532 */ 2533 static __init int 2534 early_event_add_tracer(struct dentry *parent, struct trace_array *tr) 2535 { 2536 int ret; 2537 2538 mutex_lock(&event_mutex); 2539 2540 ret = create_event_toplevel_files(parent, tr); 2541 if (ret) 2542 goto out_unlock; 2543 2544 down_write(&trace_event_sem); 2545 __trace_early_add_event_dirs(tr); 2546 up_write(&trace_event_sem); 2547 2548 out_unlock: 2549 mutex_unlock(&event_mutex); 2550 2551 return ret; 2552 } 2553 2554 int event_trace_del_tracer(struct trace_array *tr) 2555 { 2556 mutex_lock(&event_mutex); 2557 2558 /* Disable any event triggers and associated soft-disabled events */ 2559 clear_event_triggers(tr); 2560 2561 /* Disable any running events */ 2562 __ftrace_set_clr_event_nolock(tr, NULL, NULL, NULL, 0); 2563 2564 /* Access to events are within rcu_read_lock_sched() */ 2565 synchronize_sched(); 2566 2567 down_write(&trace_event_sem); 2568 __trace_remove_event_dirs(tr); 2569 tracefs_remove_recursive(tr->event_dir); 2570 up_write(&trace_event_sem); 2571 2572 tr->event_dir = NULL; 2573 2574 mutex_unlock(&event_mutex); 2575 2576 return 0; 2577 } 2578 2579 static __init int event_trace_memsetup(void) 2580 { 2581 field_cachep = KMEM_CACHE(ftrace_event_field, SLAB_PANIC); 2582 file_cachep = KMEM_CACHE(trace_event_file, SLAB_PANIC); 2583 return 0; 2584 } 2585 2586 static __init void 2587 early_enable_events(struct trace_array *tr, bool disable_first) 2588 { 2589 char *buf = bootup_event_buf; 2590 char *token; 2591 int ret; 2592 2593 while (true) { 2594 token = strsep(&buf, ","); 2595 2596 if (!token) 2597 break; 2598 if (!*token) 2599 continue; 2600 2601 /* Restarting syscalls requires that we stop them first */ 2602 if (disable_first) 2603 ftrace_set_clr_event(tr, token, 0); 2604 2605 ret = ftrace_set_clr_event(tr, token, 1); 2606 if (ret) 2607 pr_warn("Failed to enable trace event: %s\n", token); 2608 2609 /* Put back the comma to allow this to be called again */ 2610 if (buf) 2611 *(buf - 1) = ','; 2612 } 2613 } 2614 2615 static __init int event_trace_enable(void) 2616 { 2617 struct trace_array *tr = top_trace_array(); 2618 struct trace_event_call **iter, *call; 2619 int ret; 2620 2621 if (!tr) 2622 return -ENODEV; 2623 2624 for_each_event(iter, __start_ftrace_events, __stop_ftrace_events) { 2625 2626 call = *iter; 2627 ret = event_init(call); 2628 if (!ret) 2629 list_add(&call->list, &ftrace_events); 2630 } 2631 2632 /* 2633 * We need the top trace array to have a working set of trace 2634 * points at early init, before the debug files and directories 2635 * are created. Create the file entries now, and attach them 2636 * to the actual file dentries later. 2637 */ 2638 __trace_early_add_events(tr); 2639 2640 early_enable_events(tr, false); 2641 2642 trace_printk_start_comm(); 2643 2644 register_event_cmds(); 2645 2646 register_trigger_cmds(); 2647 2648 return 0; 2649 } 2650 2651 /* 2652 * event_trace_enable() is called from trace_event_init() first to 2653 * initialize events and perhaps start any events that are on the 2654 * command line. Unfortunately, there are some events that will not 2655 * start this early, like the system call tracepoints that need 2656 * to set the TIF_SYSCALL_TRACEPOINT flag of pid 1. But event_trace_enable() 2657 * is called before pid 1 starts, and this flag is never set, making 2658 * the syscall tracepoint never get reached, but the event is enabled 2659 * regardless (and not doing anything). 2660 */ 2661 static __init int event_trace_enable_again(void) 2662 { 2663 struct trace_array *tr; 2664 2665 tr = top_trace_array(); 2666 if (!tr) 2667 return -ENODEV; 2668 2669 early_enable_events(tr, true); 2670 2671 return 0; 2672 } 2673 2674 early_initcall(event_trace_enable_again); 2675 2676 static __init int event_trace_init(void) 2677 { 2678 struct trace_array *tr; 2679 struct dentry *d_tracer; 2680 struct dentry *entry; 2681 int ret; 2682 2683 tr = top_trace_array(); 2684 if (!tr) 2685 return -ENODEV; 2686 2687 d_tracer = tracing_init_dentry(); 2688 if (IS_ERR(d_tracer)) 2689 return 0; 2690 2691 entry = tracefs_create_file("available_events", 0444, d_tracer, 2692 tr, &ftrace_avail_fops); 2693 if (!entry) 2694 pr_warn("Could not create tracefs 'available_events' entry\n"); 2695 2696 if (trace_define_generic_fields()) 2697 pr_warn("tracing: Failed to allocated generic fields"); 2698 2699 if (trace_define_common_fields()) 2700 pr_warn("tracing: Failed to allocate common fields"); 2701 2702 ret = early_event_add_tracer(d_tracer, tr); 2703 if (ret) 2704 return ret; 2705 2706 #ifdef CONFIG_MODULES 2707 ret = register_module_notifier(&trace_module_nb); 2708 if (ret) 2709 pr_warn("Failed to register trace events module notifier\n"); 2710 #endif 2711 return 0; 2712 } 2713 2714 void __init trace_event_init(void) 2715 { 2716 event_trace_memsetup(); 2717 init_ftrace_syscalls(); 2718 event_trace_enable(); 2719 } 2720 2721 fs_initcall(event_trace_init); 2722 2723 #ifdef CONFIG_FTRACE_STARTUP_TEST 2724 2725 static DEFINE_SPINLOCK(test_spinlock); 2726 static DEFINE_SPINLOCK(test_spinlock_irq); 2727 static DEFINE_MUTEX(test_mutex); 2728 2729 static __init void test_work(struct work_struct *dummy) 2730 { 2731 spin_lock(&test_spinlock); 2732 spin_lock_irq(&test_spinlock_irq); 2733 udelay(1); 2734 spin_unlock_irq(&test_spinlock_irq); 2735 spin_unlock(&test_spinlock); 2736 2737 mutex_lock(&test_mutex); 2738 msleep(1); 2739 mutex_unlock(&test_mutex); 2740 } 2741 2742 static __init int event_test_thread(void *unused) 2743 { 2744 void *test_malloc; 2745 2746 test_malloc = kmalloc(1234, GFP_KERNEL); 2747 if (!test_malloc) 2748 pr_info("failed to kmalloc\n"); 2749 2750 schedule_on_each_cpu(test_work); 2751 2752 kfree(test_malloc); 2753 2754 set_current_state(TASK_INTERRUPTIBLE); 2755 while (!kthread_should_stop()) { 2756 schedule(); 2757 set_current_state(TASK_INTERRUPTIBLE); 2758 } 2759 __set_current_state(TASK_RUNNING); 2760 2761 return 0; 2762 } 2763 2764 /* 2765 * Do various things that may trigger events. 2766 */ 2767 static __init void event_test_stuff(void) 2768 { 2769 struct task_struct *test_thread; 2770 2771 test_thread = kthread_run(event_test_thread, NULL, "test-events"); 2772 msleep(1); 2773 kthread_stop(test_thread); 2774 } 2775 2776 /* 2777 * For every trace event defined, we will test each trace point separately, 2778 * and then by groups, and finally all trace points. 2779 */ 2780 static __init void event_trace_self_tests(void) 2781 { 2782 struct trace_subsystem_dir *dir; 2783 struct trace_event_file *file; 2784 struct trace_event_call *call; 2785 struct event_subsystem *system; 2786 struct trace_array *tr; 2787 int ret; 2788 2789 tr = top_trace_array(); 2790 if (!tr) 2791 return; 2792 2793 pr_info("Running tests on trace events:\n"); 2794 2795 list_for_each_entry(file, &tr->events, list) { 2796 2797 call = file->event_call; 2798 2799 /* Only test those that have a probe */ 2800 if (!call->class || !call->class->probe) 2801 continue; 2802 2803 /* 2804 * Testing syscall events here is pretty useless, but 2805 * we still do it if configured. But this is time consuming. 2806 * What we really need is a user thread to perform the 2807 * syscalls as we test. 2808 */ 2809 #ifndef CONFIG_EVENT_TRACE_TEST_SYSCALLS 2810 if (call->class->system && 2811 strcmp(call->class->system, "syscalls") == 0) 2812 continue; 2813 #endif 2814 2815 pr_info("Testing event %s: ", trace_event_name(call)); 2816 2817 /* 2818 * If an event is already enabled, someone is using 2819 * it and the self test should not be on. 2820 */ 2821 if (file->flags & EVENT_FILE_FL_ENABLED) { 2822 pr_warn("Enabled event during self test!\n"); 2823 WARN_ON_ONCE(1); 2824 continue; 2825 } 2826 2827 ftrace_event_enable_disable(file, 1); 2828 event_test_stuff(); 2829 ftrace_event_enable_disable(file, 0); 2830 2831 pr_cont("OK\n"); 2832 } 2833 2834 /* Now test at the sub system level */ 2835 2836 pr_info("Running tests on trace event systems:\n"); 2837 2838 list_for_each_entry(dir, &tr->systems, list) { 2839 2840 system = dir->subsystem; 2841 2842 /* the ftrace system is special, skip it */ 2843 if (strcmp(system->name, "ftrace") == 0) 2844 continue; 2845 2846 pr_info("Testing event system %s: ", system->name); 2847 2848 ret = __ftrace_set_clr_event(tr, NULL, system->name, NULL, 1); 2849 if (WARN_ON_ONCE(ret)) { 2850 pr_warn("error enabling system %s\n", 2851 system->name); 2852 continue; 2853 } 2854 2855 event_test_stuff(); 2856 2857 ret = __ftrace_set_clr_event(tr, NULL, system->name, NULL, 0); 2858 if (WARN_ON_ONCE(ret)) { 2859 pr_warn("error disabling system %s\n", 2860 system->name); 2861 continue; 2862 } 2863 2864 pr_cont("OK\n"); 2865 } 2866 2867 /* Test with all events enabled */ 2868 2869 pr_info("Running tests on all trace events:\n"); 2870 pr_info("Testing all events: "); 2871 2872 ret = __ftrace_set_clr_event(tr, NULL, NULL, NULL, 1); 2873 if (WARN_ON_ONCE(ret)) { 2874 pr_warn("error enabling all events\n"); 2875 return; 2876 } 2877 2878 event_test_stuff(); 2879 2880 /* reset sysname */ 2881 ret = __ftrace_set_clr_event(tr, NULL, NULL, NULL, 0); 2882 if (WARN_ON_ONCE(ret)) { 2883 pr_warn("error disabling all events\n"); 2884 return; 2885 } 2886 2887 pr_cont("OK\n"); 2888 } 2889 2890 #ifdef CONFIG_FUNCTION_TRACER 2891 2892 static DEFINE_PER_CPU(atomic_t, ftrace_test_event_disable); 2893 2894 static void 2895 function_test_events_call(unsigned long ip, unsigned long parent_ip, 2896 struct ftrace_ops *op, struct pt_regs *pt_regs) 2897 { 2898 struct ring_buffer_event *event; 2899 struct ring_buffer *buffer; 2900 struct ftrace_entry *entry; 2901 unsigned long flags; 2902 long disabled; 2903 int cpu; 2904 int pc; 2905 2906 pc = preempt_count(); 2907 preempt_disable_notrace(); 2908 cpu = raw_smp_processor_id(); 2909 disabled = atomic_inc_return(&per_cpu(ftrace_test_event_disable, cpu)); 2910 2911 if (disabled != 1) 2912 goto out; 2913 2914 local_save_flags(flags); 2915 2916 event = trace_current_buffer_lock_reserve(&buffer, 2917 TRACE_FN, sizeof(*entry), 2918 flags, pc); 2919 if (!event) 2920 goto out; 2921 entry = ring_buffer_event_data(event); 2922 entry->ip = ip; 2923 entry->parent_ip = parent_ip; 2924 2925 trace_buffer_unlock_commit(buffer, event, flags, pc); 2926 2927 out: 2928 atomic_dec(&per_cpu(ftrace_test_event_disable, cpu)); 2929 preempt_enable_notrace(); 2930 } 2931 2932 static struct ftrace_ops trace_ops __initdata = 2933 { 2934 .func = function_test_events_call, 2935 .flags = FTRACE_OPS_FL_RECURSION_SAFE, 2936 }; 2937 2938 static __init void event_trace_self_test_with_function(void) 2939 { 2940 int ret; 2941 ret = register_ftrace_function(&trace_ops); 2942 if (WARN_ON(ret < 0)) { 2943 pr_info("Failed to enable function tracer for event tests\n"); 2944 return; 2945 } 2946 pr_info("Running tests again, along with the function tracer\n"); 2947 event_trace_self_tests(); 2948 unregister_ftrace_function(&trace_ops); 2949 } 2950 #else 2951 static __init void event_trace_self_test_with_function(void) 2952 { 2953 } 2954 #endif 2955 2956 static __init int event_trace_self_tests_init(void) 2957 { 2958 if (!tracing_selftest_disabled) { 2959 event_trace_self_tests(); 2960 event_trace_self_test_with_function(); 2961 } 2962 2963 return 0; 2964 } 2965 2966 late_initcall(event_trace_self_tests_init); 2967 2968 #endif 2969