Lines Matching defs:other_info

42 struct other_info {
49 * via @other_info since just @task_pid is sufficient. Passing @current
53 * put_task_struct, or stall the thread that populated @other_info.
62 * that populated @other_info until it has been consumed.
68 * To never block any producers of struct other_info, we need as many elements
71 static struct other_info other_infos[CONFIG_KCSAN_NUM_WATCHPOINTS + NUM_SLOTS-1];
393 struct other_info *other_info,
412 if (other_info) {
413 other_skipnr = sanitize_stack_entries(other_info->stack_entries,
414 other_info->num_stack_entries,
415 other_info->ai.ip, &other_reordered_to);
416 other_frame = other_info->stack_entries[other_skipnr];
428 if (other_info) {
437 get_bug_type(ai->access_type | other_info->ai.access_type),
448 if (other_info) {
450 get_access_type(other_info->ai.access_type), other_info->ai.ptr,
451 other_info->ai.size, get_thread_desc(other_info->ai.task_pid),
452 other_info->ai.cpu_id);
455 print_stack_trace(other_info->stack_entries + other_skipnr,
456 other_info->num_stack_entries - other_skipnr,
459 print_verbose_info(other_info->task);
502 static void release_report(unsigned long *flags, struct other_info *other_info)
509 other_info->ai.size = 0;
514 * Sets @other_info->task and awaits consumption of @other_info.
518 struct other_info *other_info)
536 other_info->task = current;
556 * Abort. Reset @other_info->task to NULL, since it
561 other_info->task = NULL;
565 * If invalid, or @ptr nor @current matches, then @other_info
568 } while (other_info->ai.size && other_info->ai.ptr == ai->ptr &&
569 other_info->task == current);
574 /* Populate @other_info; requires that the provided @other_info not in use. */
577 struct other_info *other_info)
586 * is done by the consumer of @other_info. Therefore, it is impossible
588 * @other_info, and are guaranteed exclusivity for the @other_infos
589 * entry pointed to by @other_info.
592 * because every consumer of struct other_info resets size to 0 in
595 WARN_ON(other_info->ai.size);
597 other_info->ai = *ai;
598 other_info->num_stack_entries = stack_trace_save(other_info->stack_entries, NUM_STACK_ENTRIES, 2);
601 set_other_info_task_blocking(flags, ai, other_info);
606 /* Awaits producer to fill @other_info and then returns. */
609 struct other_info *other_info)
614 while (!other_info->ai.size) { /* Await valid @other_info. */
621 if (WARN_ON(!matching_access((unsigned long)other_info->ai.ptr & WATCHPOINT_ADDR_MASK, other_info->ai.size,
625 if (!matching_access((unsigned long)other_info->ai.ptr, other_info->ai.size,
638 release_report(flags, other_info);
676 struct other_info *other_info = &other_infos[watchpoint_idx];
689 if (!prepare_report_consumer(&flags, &ai, other_info))
697 print_report(value_change, &ai, other_info, old, new, mask);
699 release_report(&flags, other_info);