Commit b4ba6cdf authored by Jim Harris's avatar Jim Harris
Browse files

trace_parser: put argument union into a struct



A future patch will add a per-argument field separate from the argument types,
so put that argument union into a struct now to prepare for that future
patch.

Signed-off-by: default avatarJim Harris <jim.harris@samsung.com>
Change-Id: Ia2aaa5b53332c2c04d731358a07ea99bd7e9ec44
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/22101


Community-CI: Mellanox Build Bot
Reviewed-by: default avatarSeung yeon Shin <syeon.shin@samsung.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarBen Walker <ben@nvidia.com>
Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
parent 698e22d8
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -166,13 +166,13 @@ print_event(struct spdk_trace_parser_entry *entry, uint64_t tsc_rate, uint64_t t
	for (i = 0; i < d->num_args; ++i) {
		switch (d->args[i].type) {
		case SPDK_TRACE_ARG_TYPE_PTR:
			print_ptr(d->args[i].name, (uint64_t)entry->args[i].pointer);
			print_ptr(d->args[i].name, (uint64_t)entry->args[i].u.pointer);
			break;
		case SPDK_TRACE_ARG_TYPE_INT:
			print_uint64(d->args[i].name, entry->args[i].integer);
			print_uint64(d->args[i].name, entry->args[i].u.integer);
			break;
		case SPDK_TRACE_ARG_TYPE_STR:
			print_string(d->args[i].name, entry->args[i].string);
			print_string(d->args[i].name, entry->args[i].u.string);
			break;
		}
	}
@@ -235,13 +235,13 @@ print_event_json(struct spdk_trace_parser_entry *entry, uint64_t tsc_rate, uint6
		for (i = 0; i < d->num_args; ++i) {
			switch (d->args[i].type) {
			case SPDK_TRACE_ARG_TYPE_PTR:
				spdk_json_write_uint64(g_json, (uint64_t)entry->args[i].pointer);
				spdk_json_write_uint64(g_json, (uint64_t)entry->args[i].u.pointer);
				break;
			case SPDK_TRACE_ARG_TYPE_INT:
				spdk_json_write_uint64(g_json, entry->args[i].integer);
				spdk_json_write_uint64(g_json, entry->args[i].u.integer);
				break;
			case SPDK_TRACE_ARG_TYPE_STR:
				spdk_json_write_string(g_json, entry->args[i].string);
				spdk_json_write_string(g_json, entry->args[i].u.string);
				break;
			}
		}
+6 −4
Original line number Diff line number Diff line
@@ -92,10 +92,12 @@ struct spdk_trace_parser_entry {
	/** Related object type */
	uint8_t			related_type;
	/** Tracepoint arguments */
	struct {
		union {
			uint64_t	integer;
			void		*pointer;
			char		string[UINT8_MAX + 1];
		} u;
	} args[SPDK_TRACE_MAX_ARGS_COUNT];
};

+3 −3
Original line number Diff line number Diff line
@@ -129,7 +129,7 @@ spdk_trace_parser::build_arg(argument_context *argctx, const spdk_trace_argument
	/* Make sure that if we only copy a 4-byte integer, that the upper bytes have already been
	 * zeroed.
	 */
	pe->args[argid].integer = 0;
	pe->args[argid].u.integer = 0;
	while (argoff < arg->size) {
		if (argctx->offset == sizeof(buffer->data)) {
			buffer = get_next_buffer(buffer, argctx->lcore);
@@ -144,7 +144,7 @@ spdk_trace_parser::build_arg(argument_context *argctx, const spdk_trace_argument

		curlen = spdk_min(sizeof(buffer->data) - argctx->offset, arg->size - argoff);
		if (argoff < sizeof(pe->args[0])) {
			memcpy(&pe->args[argid].string[argoff], &buffer->data[argctx->offset],
			memcpy(&pe->args[argid].u.string[argoff], &buffer->data[argctx->offset],
			       spdk_min(curlen, sizeof(pe->args[0]) - argoff));
		}

@@ -206,7 +206,7 @@ spdk_trace_parser::next_entry(spdk_trace_parser_entry *pe)
		}
		stats = &_stats[tpoint->related_objects[i].object_type];
		related_kv = stats->index.find(reinterpret_cast<uint64_t>
					       (pe->args[tpoint->related_objects[i].arg_index].pointer));
					       (pe->args[tpoint->related_objects[i].arg_index].u.pointer));
		/* To avoid parsing the whole array, object index and type are stored
		 * directly inside spdk_trace_parser_entry. */
		if (related_kv != stats->index.end()) {