Hi,
In the last Audio Mini Conference held with Linux Plumber conference 2016[1], I mentioned about tracepoints for PCM params operation. This patchset is for the idea.
In ALSA PCM interface, applications can get hardware capability by ioctl(2) with SNDRV_PCM_IOCTL_HW_REFINE/SNDRV_PCM_IOCT_HW_PARAMS in a shape of 'struct snd_pcm_hw_params'. In kernel side, relevant processing is somewhat complicated and developers sometimes have hard time to debug drivers for PCM constraints and rules.
This patchset adds tracepoints for hw_params operations. When CONFIG_SND_DEBUG is enabled, you can see 'trace_hw_params_mask/trace_hw_params_interval' events of 'snd_pcm' subsystem. When applications execute ioctl(2) with SNDRV_PCM_IOCTL_HW_REFINE/SNDRV_PCM_IOCTL_HW_PARAMS, these events are probed. Developers can get how many PCM rules are added into runtime of PCM substream and which rule changed which parameters.
This patchset also includes some improvements. The last three commits brings small changes to kernel/userspace interface for error handling.
I'm happy to receive your comment for this patchset. For your information, low level application of SNDRV_PCM_IOCTL_HW_REFINE operation is available in my github repository[2].
[1] You can see minutes. http://mailman.alsa-project.org/pipermail/alsa-devel/2016-November/114279.ht... [2] refine-pcm-param.c https://github.com/takaswie/alsa-ioctl-test
Takashi Sakamoto (21): ALSA: pcm: add a helper function to constrain mask-type parameters ALSA: pcm: add a helper function to constrain interval-type parameters ALSA: pcm: add a helper function to apply parameter rules ALSA: pcm: tracepoints for refining PCM parameters ALSA: pcm: enable parameter tracepoints at CONFIG_SND_DEBUG only ALSA: pcm: use goto statement instead of while statement to reduce indentation ALSA: pcm: remove function local variable with alternative evaluation ALSA: pcm: adaption of code formatting ALSA: pcm: add comment about application of rule to PCM parameters ALSA: pcm: constify function local and read-only table ALSA: pcm: localize snd_pcm_hw_params_choose() ALSA: pcm: add tracepoints for selection process of hardware parameters at SNDRV_PCM_IOCTL_HW_PARAMS ALSA: pcm: use helper functions to check whether parameters are determined ALSA: pcm: use helper function to refer parameter as read-only ALSA: pcm: add const qualifier for read-only table for sampling rate ALSA: pcm/oss: refer to parameters instead of copying to reduce usage of kernel stack ALSA: pcm: check type of parameter in added rule ALSA: pcm: calculate non-mask/non-interval parameters always when possible ALSA: pcm: move fixup of info flag after selecting single parameters ALSA: pcm: return error immediately for parameters refinement ALSA: pcm: return error immediately at refine ioctl
include/sound/pcm.h | 1 - sound/core/Makefile | 1 + sound/core/oss/pcm_oss.c | 20 +- sound/core/oss/pcm_plugin.c | 5 +- sound/core/oss/pcm_plugin.h | 2 +- sound/core/pcm_drm_eld.c | 8 +- sound/core/pcm_lib.c | 55 +---- sound/core/pcm_native.c | 485 ++++++++++++++++++++++++++++-------------- sound/core/pcm_params_trace.h | 142 +++++++++++++ 9 files changed, 494 insertions(+), 225 deletions(-) create mode 100644 sound/core/pcm_params_trace.h