dpdk/lib/eal/common/eal_trace.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: BSD-3-Clause
   2 * Copyright(C) 2020 Marvell International Ltd.
   3 */
   4
   5#ifndef __EAL_TRACE_H
   6#define __EAL_TRACE_H
   7
   8#include <rte_cycles.h>
   9#include <rte_log.h>
  10#include <rte_malloc.h>
  11#include <rte_spinlock.h>
  12#include <rte_trace.h>
  13#include <rte_trace_point.h>
  14#include <rte_uuid.h>
  15
  16#include "eal_private.h"
  17#include "eal_thread.h"
  18
  19#define trace_err(fmt, args...) \
  20        RTE_LOG(ERR, EAL, "%s():%u " fmt "\n", __func__, __LINE__, ## args)
  21
  22#define trace_crit(fmt, args...) \
  23        RTE_LOG(CRIT, EAL, "%s():%u " fmt "\n", __func__, __LINE__, ## args)
  24
  25#define TRACE_PREFIX_LEN 12
  26#define TRACE_DIR_STR_LEN (sizeof("YYYY-mm-dd-AM-HH-MM-SS") + TRACE_PREFIX_LEN)
  27#define TRACE_POINT_NAME_SIZE 64
  28#define TRACE_CTF_MAGIC 0xC1FC1FC1
  29#define TRACE_MAX_ARGS  32
  30
  31struct trace_point {
  32        STAILQ_ENTRY(trace_point) next;
  33        rte_trace_point_t *handle;
  34        char name[TRACE_POINT_NAME_SIZE];
  35        char *ctf_field;
  36};
  37
  38enum trace_area_e {
  39        TRACE_AREA_HEAP,
  40        TRACE_AREA_HUGEPAGE,
  41};
  42
  43struct thread_mem_meta {
  44        void *mem;
  45        enum trace_area_e area;
  46};
  47
  48struct trace_arg {
  49        STAILQ_ENTRY(trace_arg) next;
  50        char *val;
  51};
  52
  53struct trace {
  54        char dir[PATH_MAX];
  55        int dir_offset;
  56        int register_errno;
  57        bool status;
  58        enum rte_trace_mode mode;
  59        rte_uuid_t uuid;
  60        uint32_t buff_len;
  61        STAILQ_HEAD(, trace_arg) args;
  62        uint32_t nb_trace_points;
  63        uint32_t nb_trace_mem_list;
  64        struct thread_mem_meta *lcore_meta;
  65        uint64_t epoch_sec;
  66        uint64_t epoch_nsec;
  67        uint64_t uptime_ticks;
  68        char *ctf_meta;
  69        uint32_t ctf_meta_offset_freq;
  70        uint32_t ctf_meta_offset_freq_off_s;
  71        uint32_t ctf_meta_offset_freq_off;
  72        uint16_t ctf_fixup_done;
  73        rte_spinlock_t lock;
  74};
  75
  76/* Helper functions */
  77static inline uint16_t
  78trace_id_get(rte_trace_point_t *trace)
  79{
  80        return (*trace & __RTE_TRACE_FIELD_ID_MASK) >>
  81                __RTE_TRACE_FIELD_ID_SHIFT;
  82}
  83
  84static inline size_t
  85trace_mem_sz(uint32_t len)
  86{
  87        return len + sizeof(struct __rte_trace_header);
  88}
  89
  90/* Trace object functions */
  91struct trace *trace_obj_get(void);
  92
  93/* Trace point list functions */
  94STAILQ_HEAD(trace_point_head, trace_point);
  95struct trace_point_head *trace_list_head_get(void);
  96
  97/* Util functions */
  98const char *trace_mode_to_string(enum rte_trace_mode mode);
  99const char *trace_area_to_string(enum trace_area_e area);
 100int trace_args_apply(const char *arg);
 101void trace_bufsz_args_apply(void);
 102bool trace_has_duplicate_entry(void);
 103void trace_uuid_generate(void);
 104int trace_metadata_create(void);
 105void trace_metadata_destroy(void);
 106char *trace_metadata_fixup_field(const char *field);
 107int trace_mkdir(void);
 108int trace_epoch_time_save(void);
 109void trace_mem_free(void);
 110void trace_mem_per_thread_free(void);
 111
 112/* EAL interface */
 113int eal_trace_init(void);
 114void eal_trace_fini(void);
 115int eal_trace_args_save(const char *val);
 116void eal_trace_args_free(void);
 117int eal_trace_dir_args_save(const char *val);
 118int eal_trace_mode_args_save(const char *val);
 119int eal_trace_bufsz_args_save(const char *val);
 120
 121#endif /* __EAL_TRACE_H */
 122