lkml.org 
[lkml]   [2016]   [Feb]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.13.y-ckt 21/30] ALSA: compress: Disable GET_CODEC_CAPS ioctl for some architectures
    Date
    3.13.11-ckt35 -stable review patch.  If anyone has any objections, please let me know.

    ---8<------------------------------------------------------------

    From: Takashi Iwai <tiwai@suse.de>

    commit 462b3f161beb62eeb290f4ec52f5ead29a2f8ac7 upstream.

    Some architectures like PowerPC can handle the maximum struct size in
    an ioctl only up to 13 bits, and struct snd_compr_codec_caps used by
    SNDRV_COMPRESS_GET_CODEC_CAPS ioctl overflows this limit. This
    problem was revealed recently by a powerpc change, as it's now treated
    as a fatal build error.

    This patch is a stop-gap for that: for architectures with less than 14
    bit ioctl struct size, get rid of the handling of the relevant ioctl.
    We should provide an alternative equivalent ioctl code later, but for
    now just paper over it. Luckily, the compress API hasn't been used on
    such architectures, so the impact must be effectively zero.

    Reviewed-by: Mark Brown <broonie@kernel.org>
    Acked-by: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Kamal Mostafa <kamal@canonical.com>
    ---
    sound/core/compress_offload.c | 11 +++++++++++
    1 file changed, 11 insertions(+)

    diff --git a/sound/core/compress_offload.c b/sound/core/compress_offload.c
    index 85fde7e..4983f30 100644
    --- a/sound/core/compress_offload.c
    +++ b/sound/core/compress_offload.c
    @@ -44,6 +44,13 @@
    #include <sound/compress_offload.h>
    #include <sound/compress_driver.h>

    +/* struct snd_compr_codec_caps overflows the ioctl bit size for some
    + * architectures, so we need to disable the relevant ioctls.
    + */
    +#if _IOC_SIZEBITS < 14
    +#define COMPR_CODEC_CAPS_OVERFLOW
    +#endif
    +
    /* TODO:
    * - add substream support for multiple devices in case of
    * SND_DYNAMIC_MINORS is not used
    @@ -438,6 +445,7 @@ out:
    return retval;
    }

    +#ifndef COMPR_CODEC_CAPS_OVERFLOW
    static int
    snd_compr_get_codec_caps(struct snd_compr_stream *stream, unsigned long arg)
    {
    @@ -461,6 +469,7 @@ out:
    kfree(caps);
    return retval;
    }
    +#endif /* !COMPR_CODEC_CAPS_OVERFLOW */

    /* revisit this with snd_pcm_preallocate_xxx */
    static int snd_compr_allocate_buffer(struct snd_compr_stream *stream,
    @@ -802,9 +811,11 @@ static long snd_compr_ioctl(struct file *f, unsigned int cmd, unsigned long arg)
    case _IOC_NR(SNDRV_COMPRESS_GET_CAPS):
    retval = snd_compr_get_caps(stream, arg);
    break;
    +#ifndef COMPR_CODEC_CAPS_OVERFLOW
    case _IOC_NR(SNDRV_COMPRESS_GET_CODEC_CAPS):
    retval = snd_compr_get_codec_caps(stream, arg);
    break;
    +#endif
    case _IOC_NR(SNDRV_COMPRESS_SET_PARAMS):
    retval = snd_compr_set_params(stream, arg);
    break;
    --
    1.9.1
    \
     
     \ /
      Last update: 2016-02-10 23:01    [W:4.818 / U:0.208 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site