Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e311782a authored by Takashi Iwai's avatar Takashi Iwai
Browse files

ALSA: hda - Re-add tracepoints to HD-audio core driver



Now let's take the basic tracepoints back to the HD-audio driver.
The three bus tracepoints, hda_send_cmd, hda_get_response and
hda_unsol_event are revived but in a slightly different form.
Since we don't assign the card number there, print the bus device name
instead.

Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent c4c2533f
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
snd-hda-core-objs := hda_bus_type.o hdac_bus.o hdac_device.o hdac_sysfs.o

snd-hda-core-objs += trace.o
CFLAGS_trace.o := -I$(src)

obj-$(CONFIG_SND_HDA_CORE) += snd-hda-core.o
+6 −1
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@
#include <linux/module.h>
#include <linux/export.h>
#include <sound/hdaudio.h>
#include "trace.h"

static void process_unsol_events(struct work_struct *work);

@@ -82,6 +83,7 @@ int snd_hdac_bus_exec_verb_unlocked(struct hdac_bus *bus, unsigned int addr,
	else if (bus->sync_write)
		res = &tmp;
	for (;;) {
		trace_hda_send_cmd(bus, cmd);
		err = bus->ops->command(bus, cmd);
		if (err != -EAGAIN)
			break;
@@ -90,8 +92,10 @@ int snd_hdac_bus_exec_verb_unlocked(struct hdac_bus *bus, unsigned int addr,
		if (err)
			break;
	}
	if (!err && res)
	if (!err && res) {
		err = bus->ops->get_response(bus, addr, res);
		trace_hda_get_response(bus, addr, *res);
	}
	return err;
}
EXPORT_SYMBOL_GPL(snd_hdac_bus_exec_verb_unlocked);
@@ -113,6 +117,7 @@ void snd_hdac_bus_queue_event(struct hdac_bus *bus, u32 res, u32 res_ex)
	if (!bus)
		return;

	trace_hda_unsol_event(bus, res, res_ex);
	wp = (bus->unsol_wp + 1) % HDA_UNSOL_QUEUE_SIZE;
	bus->unsol_wp = wp;

sound/hda/trace.c

0 → 100644
+6 −0
Original line number Diff line number Diff line
/*
 * tracepoint definitions for HD-audio core drivers
 */

#define CREATE_TRACE_POINTS
#include "trace.h"

sound/hda/trace.h

0 → 100644
+62 −0
Original line number Diff line number Diff line
#undef TRACE_SYSTEM
#define TRACE_SYSTEM hda

#if !defined(__HDAC_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
#define __HDAC_TRACE_H

#include <linux/tracepoint.h>
#include <linux/device.h>
#include <sound/hdaudio.h>

#ifndef HDAC_MSG_MAX
#define HDAC_MSG_MAX	500
#endif

struct hdac_bus;
struct hdac_codec;

TRACE_EVENT(hda_send_cmd,
	TP_PROTO(struct hdac_bus *bus, unsigned int cmd),
	TP_ARGS(bus, cmd),
	TP_STRUCT__entry(__dynamic_array(char, msg, HDAC_MSG_MAX)),
	TP_fast_assign(
		snprintf(__get_str(msg), HDAC_MSG_MAX,
			 "[%s:%d] val=0x%08x",
			 dev_name((bus)->dev), (cmd) >> 28, cmd);
	),
	TP_printk("%s", __get_str(msg))
);

TRACE_EVENT(hda_get_response,
	TP_PROTO(struct hdac_bus *bus, unsigned int addr, unsigned int res),
	TP_ARGS(bus, addr, res),
	TP_STRUCT__entry(__dynamic_array(char, msg, HDAC_MSG_MAX)),
	TP_fast_assign(
		snprintf(__get_str(msg), HDAC_MSG_MAX,
			 "[%s:%d] val=0x%08x",
			 dev_name((bus)->dev), addr, res);
	),
	TP_printk("%s", __get_str(msg))
);

TRACE_EVENT(hda_unsol_event,
	TP_PROTO(struct hdac_bus *bus, u32 res, u32 res_ex),
	TP_ARGS(bus, res, res_ex),
	TP_STRUCT__entry(__dynamic_array(char, msg, HDAC_MSG_MAX)),
	TP_fast_assign(
		snprintf(__get_str(msg), HDAC_MSG_MAX,
			 "[%s:%d] res=0x%08x, res_ex=0x%08x",
			 dev_name((bus)->dev), res_ex & 0x0f, res, res_ex);
	),
	TP_printk("%s", __get_str(msg))
);
#endif /* __HDAC_TRACE_H */

/* This part must be outside protection */
#undef TRACE_INCLUDE_PATH
#define TRACE_INCLUDE_PATH .

#undef TRACE_INCLUDE_FILE
#define TRACE_INCLUDE_FILE trace

#include <trace/define_trace.h>
+0 −1
Original line number Diff line number Diff line
@@ -10,7 +10,6 @@ snd-hda-codec-$(CONFIG_SND_HDA_HWDEP) += hda_hwdep.o
snd-hda-codec-$(CONFIG_SND_HDA_INPUT_BEEP) += hda_beep.o

# for trace-points
CFLAGS_hda_codec.o := -I$(src)
CFLAGS_hda_controller.o := -I$(src)

snd-hda-codec-generic-objs :=	hda_generic.o
Loading