[igt-dev] [PATCH i-g-t 3/3] lib: Enable extra kernel logs for audio debug
Jani Nikula
jani.nikula at linux.intel.com
Tue Apr 2 06:39:14 UTC 2019
On Mon, 01 Apr 2019, Ashutosh Dixit <ashutosh.dixit at intel.com> wrote:
> For debug of audio issues in power management and driver reload tests,
> additional kernel logs may be useful, both in dmesg as well as
> ftrace. Add the infrastructure to generate these logs and enable these
> logs for selected tests.
>
> At present igt_runner and other CI infrastructure does not capture the
> ftrace buffer. Therefore, to avoid changes to igt_runner and the CI
> infrastructure the ftrace buffer is dumped to stdout at the end of
> each test.
>
> v4: remove system() calls, dump audio kernel logs from igt_fixture
> v2, v3: versions to fix CI
>
> Cc: Jani Nikula <jani.nikula at linux.intel.com>
> Signed-off-by: Ashutosh Dixit <ashutosh.dixit at intel.com>
> ---
> lib/igt_audio.c | 40 +++++++++++++++++++++++++++++++++++
> lib/igt_audio.h | 2 ++
> tests/i915/i915_module_load.c | 8 +++++++
> tests/i915/i915_pm_rpm.c | 8 ++++++-
> tests/i915/i915_suspend.c | 8 +++++--
> 5 files changed, 63 insertions(+), 3 deletions(-)
>
> diff --git a/lib/igt_audio.c b/lib/igt_audio.c
> index a0592d53..8a7841be 100644
> --- a/lib/igt_audio.c
> +++ b/lib/igt_audio.c
> @@ -31,6 +31,8 @@
>
> #include "igt_audio.h"
> #include "igt_core.h"
> +#include "igt_debugfs.h"
> +#include "igt_ftrace.h"
>
> #define FREQS_MAX 8
>
> @@ -323,3 +325,41 @@ bool audio_signal_detect(struct audio_signal *signal, int channels,
>
> return true;
> }
> +
> +static const char *audio_dmesg_en[] = {
> + "file sound/* +p",
> +};
> +
> +static const char *audio_dmesg_dis[] = {
> + "file sound/* -p",
> +};
> +
> +static const char *audio_ftr[] = {
> + "events/sst/enable",
> + "events/intel-sst/enable",
> + "events/asoc/enable",
> + "events/i2c/enable",
> + "events/hda/enable",
> + "events/hda_controller/enable",
> + "events/hda_intel/enable",
> +};
> +
> +void igt_enable_audio_klog(void)
> +{
> + igt_set_dynamic_debug(audio_dmesg_en,
> + sizeof(audio_dmesg_en)/sizeof(char*));
ARRAY_SIZE()
> + igt_ftrace_set_events(audio_ftr,
> + sizeof(audio_ftr)/sizeof(char*), true);
> + __igt_ftrace_enable("nop", NULL);
> +}
> +
> +void igt_disable_audio_klog(void)
> +{
> + igt_ftrace_disable();
> + igt_ftrace_set_events(audio_ftr,
> + sizeof(audio_ftr)/sizeof(char*), false);
> + igt_ftrace_dump("Ftrace output");
> + igt_ftrace_clear();
> + igt_set_dynamic_debug(audio_dmesg_dis,
> + sizeof(audio_dmesg_dis)/sizeof(char*));
> +}
I still think ftrace and dynamic debug should be separate. It's
surprising that "enable klog" enables tracing.
BR,
Jani.
> diff --git a/lib/igt_audio.h b/lib/igt_audio.h
> index b3b658a4..dab5ab5a 100644
> --- a/lib/igt_audio.h
> +++ b/lib/igt_audio.h
> @@ -40,5 +40,7 @@ void audio_signal_clean(struct audio_signal *signal);
> void audio_signal_fill(struct audio_signal *signal, short *buffer, int frames);
> bool audio_signal_detect(struct audio_signal *signal, int channels,
> int sampling_rate, short *buffer, int frames);
> +void igt_enable_audio_klog(void);
> +void igt_disable_audio_klog(void);
>
> #endif
> diff --git a/tests/i915/i915_module_load.c b/tests/i915/i915_module_load.c
> index 7fe83520..0d569a55 100644
> --- a/tests/i915/i915_module_load.c
> +++ b/tests/i915/i915_module_load.c
> @@ -326,6 +326,10 @@ hda_dynamic_debug(bool enable)
>
> igt_main
> {
> + igt_fixture {
> + igt_enable_audio_klog();
> + }
> +
> igt_subtest("reload") {
> int load_error;
>
> @@ -365,5 +369,9 @@ igt_main
> /* inject_fault() leaves the module unloaded */
> }
>
> + igt_fixture {
> + igt_disable_audio_klog();
> + }
> +
> /* Subtests should unload the module themselves if they use modparams */
> }
> diff --git a/tests/i915/i915_pm_rpm.c b/tests/i915/i915_pm_rpm.c
> index 03de609c..126d68ac 100644
> --- a/tests/i915/i915_pm_rpm.c
> +++ b/tests/i915/i915_pm_rpm.c
> @@ -1975,8 +1975,10 @@ int main(int argc, char *argv[])
> /* Skip instead of failing in case the machine is not prepared to reach
> * PC8+. We don't want bug reports from cases where the machine is just
> * not properly configured. */
> - igt_fixture
> + igt_fixture {
> + igt_enable_audio_klog();
> igt_require(setup_environment());
> + }
>
> if (stay)
> igt_subtest("stay")
> @@ -2118,5 +2120,9 @@ int main(int argc, char *argv[])
> igt_i915_driver_unload();
> }
>
> + igt_fixture {
> + igt_disable_audio_klog();
> + }
> +
> igt_exit();
> }
> diff --git a/tests/i915/i915_suspend.c b/tests/i915/i915_suspend.c
> index 17c68cc1..527e974e 100644
> --- a/tests/i915/i915_suspend.c
> +++ b/tests/i915/i915_suspend.c
> @@ -207,8 +207,10 @@ igt_main
> {
> igt_skip_on_simulation();
>
> - igt_fixture
> + igt_fixture {
> fd = drm_open_driver(DRIVER_INTEL);
> + igt_enable_audio_klog();
> + }
>
> igt_subtest("fence-restore-tiled2untiled")
> test_fence_restore(fd, true, false);
> @@ -243,6 +245,8 @@ igt_main
> igt_subtest("forcewake-hibernate")
> test_forcewake(fd, true);
>
> - igt_fixture
> + igt_fixture {
> + igt_disable_audio_klog();
> close(fd);
> + }
> }
--
Jani Nikula, Intel Open Source Graphics Center
More information about the igt-dev
mailing list