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