lkml.org 
[lkml]   [2017]   [Mar]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[GIT PULL] sound fixes for 4.11-rc4
    Linus,

    please pull sound fixes for v4.11-rc4 from:

    git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git tags/sound-4.11-rc4

    The topmost commit is 3f307834e695f59dac4337a40316bdecfb9d0508

    ----------------------------------------------------------------

    sound fixes for 4.11-rc4

    This contains the collection of small fixes for 4.11 that were pending
    during my vacation:
    - A few HD-audio quirks (more Dell headset support, docking station
    support on HP laptops),
    - A regression fix for the previous ctxfi DMA mask fix,
    - A correction of the new CONFIG_SND_X86 menu entry, and
    - A fix for the races in ALSA sequencer core spotted by syzkaller.

    ----------------------------------------------------------------

    Hui Wang (1):
    ALSA: hda - Adding a group of pin definition to fix headset problem

    Jaroslav Kysela (2):
    ALSA: hda - add support for docking station for HP 820 G2
    ALSA: hda - add support for docking station for HP 840 G3

    Takashi Iwai (3):
    ALSA: ctxfi: Fix the incorrect check of dma_set_mask() call
    ALSA: x86: Make CONFIG_SND_X86 bool
    ALSA: seq: Fix racy cell insertions during snd_seq_pool_done()

    ---
    sound/core/seq/seq_clientmgr.c | 1 +
    sound/core/seq/seq_fifo.c | 3 +++
    sound/core/seq/seq_memory.c | 17 +++++++++++++----
    sound/core/seq/seq_memory.h | 1 +
    sound/pci/ctxfi/cthw20k1.c | 2 +-
    sound/pci/hda/patch_conexant.c | 11 +++++++++++
    sound/pci/hda/patch_realtek.c | 16 +++++++++++++++-
    sound/x86/Kconfig | 3 ++-
    8 files changed, 47 insertions(+), 7 deletions(-)

    diff --git a/sound/core/seq/seq_clientmgr.c b/sound/core/seq/seq_clientmgr.c
    index 4c935202ce23..f3b1d7f50b81 100644
    --- a/sound/core/seq/seq_clientmgr.c
    +++ b/sound/core/seq/seq_clientmgr.c
    @@ -1832,6 +1832,7 @@ static int snd_seq_ioctl_set_client_pool(struct snd_seq_client *client,
    info->output_pool != client->pool->size)) {
    if (snd_seq_write_pool_allocated(client)) {
    /* remove all existing cells */
    + snd_seq_pool_mark_closing(client->pool);
    snd_seq_queue_client_leave_cells(client->number);
    snd_seq_pool_done(client->pool);
    }
    diff --git a/sound/core/seq/seq_fifo.c b/sound/core/seq/seq_fifo.c
    index 448efd4e980e..33980d1c8037 100644
    --- a/sound/core/seq/seq_fifo.c
    +++ b/sound/core/seq/seq_fifo.c
    @@ -72,6 +72,9 @@ void snd_seq_fifo_delete(struct snd_seq_fifo **fifo)
    return;
    *fifo = NULL;

    + if (f->pool)
    + snd_seq_pool_mark_closing(f->pool);
    +
    snd_seq_fifo_clear(f);

    /* wake up clients if any */
    diff --git a/sound/core/seq/seq_memory.c b/sound/core/seq/seq_memory.c
    index 1a1acf3ddda4..d4c61ec9be13 100644
    --- a/sound/core/seq/seq_memory.c
    +++ b/sound/core/seq/seq_memory.c
    @@ -415,6 +415,18 @@ int snd_seq_pool_init(struct snd_seq_pool *pool)
    return 0;
    }

    +/* refuse the further insertion to the pool */
    +void snd_seq_pool_mark_closing(struct snd_seq_pool *pool)
    +{
    + unsigned long flags;
    +
    + if (snd_BUG_ON(!pool))
    + return;
    + spin_lock_irqsave(&pool->lock, flags);
    + pool->closing = 1;
    + spin_unlock_irqrestore(&pool->lock, flags);
    +}
    +
    /* remove events */
    int snd_seq_pool_done(struct snd_seq_pool *pool)
    {
    @@ -425,10 +437,6 @@ int snd_seq_pool_done(struct snd_seq_pool *pool)
    return -EINVAL;

    /* wait for closing all threads */
    - spin_lock_irqsave(&pool->lock, flags);
    - pool->closing = 1;
    - spin_unlock_irqrestore(&pool->lock, flags);
    -
    if (waitqueue_active(&pool->output_sleep))
    wake_up(&pool->output_sleep);

    @@ -485,6 +493,7 @@ int snd_seq_pool_delete(struct snd_seq_pool **ppool)
    *ppool = NULL;
    if (pool == NULL)
    return 0;
    + snd_seq_pool_mark_closing(pool);
    snd_seq_pool_done(pool);
    kfree(pool);
    return 0;
    diff --git a/sound/core/seq/seq_memory.h b/sound/core/seq/seq_memory.h
    index 4a2ec779b8a7..32f959c17786 100644
    --- a/sound/core/seq/seq_memory.h
    +++ b/sound/core/seq/seq_memory.h
    @@ -84,6 +84,7 @@ static inline int snd_seq_total_cells(struct snd_seq_pool *pool)
    int snd_seq_pool_init(struct snd_seq_pool *pool);

    /* done pool - free events */
    +void snd_seq_pool_mark_closing(struct snd_seq_pool *pool);
    int snd_seq_pool_done(struct snd_seq_pool *pool);

    /* create pool */
    diff --git a/sound/pci/ctxfi/cthw20k1.c b/sound/pci/ctxfi/cthw20k1.c
    index ab4cdab5cfa5..79edd88d5cd0 100644
    --- a/sound/pci/ctxfi/cthw20k1.c
    +++ b/sound/pci/ctxfi/cthw20k1.c
    @@ -1905,7 +1905,7 @@ static int hw_card_start(struct hw *hw)
    return err;

    /* Set DMA transfer mask */
    - if (dma_set_mask(&pci->dev, DMA_BIT_MASK(dma_bits))) {
    + if (!dma_set_mask(&pci->dev, DMA_BIT_MASK(dma_bits))) {
    dma_set_coherent_mask(&pci->dev, DMA_BIT_MASK(dma_bits));
    } else {
    dma_set_mask(&pci->dev, DMA_BIT_MASK(32));
    diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
    index c15c51bea26d..69266b8ea2ad 100644
    --- a/sound/pci/hda/patch_conexant.c
    +++ b/sound/pci/hda/patch_conexant.c
    @@ -261,6 +261,7 @@ enum {
    CXT_FIXUP_HP_530,
    CXT_FIXUP_CAP_MIX_AMP_5047,
    CXT_FIXUP_MUTE_LED_EAPD,
    + CXT_FIXUP_HP_DOCK,
    CXT_FIXUP_HP_SPECTRE,
    CXT_FIXUP_HP_GATE_MIC,
    };
    @@ -778,6 +779,14 @@ static const struct hda_fixup cxt_fixups[] = {
    .type = HDA_FIXUP_FUNC,
    .v.func = cxt_fixup_mute_led_eapd,
    },
    + [CXT_FIXUP_HP_DOCK] = {
    + .type = HDA_FIXUP_PINS,
    + .v.pins = (const struct hda_pintbl[]) {
    + { 0x16, 0x21011020 }, /* line-out */
    + { 0x18, 0x2181103f }, /* line-in */
    + { }
    + }
    + },
    [CXT_FIXUP_HP_SPECTRE] = {
    .type = HDA_FIXUP_PINS,
    .v.pins = (const struct hda_pintbl[]) {
    @@ -839,6 +848,7 @@ static const struct snd_pci_quirk cxt5066_fixups[] = {
    SND_PCI_QUIRK(0x1025, 0x0543, "Acer Aspire One 522", CXT_FIXUP_STEREO_DMIC),
    SND_PCI_QUIRK(0x1025, 0x054c, "Acer Aspire 3830TG", CXT_FIXUP_ASPIRE_DMIC),
    SND_PCI_QUIRK(0x1025, 0x054f, "Acer Aspire 4830T", CXT_FIXUP_ASPIRE_DMIC),
    + SND_PCI_QUIRK(0x103c, 0x8079, "HP EliteBook 840 G3", CXT_FIXUP_HP_DOCK),
    SND_PCI_QUIRK(0x103c, 0x8174, "HP Spectre x360", CXT_FIXUP_HP_SPECTRE),
    SND_PCI_QUIRK(0x103c, 0x8115, "HP Z1 Gen3", CXT_FIXUP_HP_GATE_MIC),
    SND_PCI_QUIRK(0x1043, 0x138d, "Asus", CXT_FIXUP_HEADPHONE_MIC_PIN),
    @@ -871,6 +881,7 @@ static const struct hda_model_fixup cxt5066_fixup_models[] = {
    { .id = CXT_PINCFG_LEMOTE_A1205, .name = "lemote-a1205" },
    { .id = CXT_FIXUP_OLPC_XO, .name = "olpc-xo" },
    { .id = CXT_FIXUP_MUTE_LED_EAPD, .name = "mute-led-eapd" },
    + { .id = CXT_FIXUP_HP_DOCK, .name = "hp-dock" },
    {}
    };

    diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
    index 4e112221d825..7f989898cbd9 100644
    --- a/sound/pci/hda/patch_realtek.c
    +++ b/sound/pci/hda/patch_realtek.c
    @@ -4847,6 +4847,7 @@ enum {
    ALC286_FIXUP_HP_GPIO_LED,
    ALC280_FIXUP_HP_GPIO2_MIC_HOTKEY,
    ALC280_FIXUP_HP_DOCK_PINS,
    + ALC269_FIXUP_HP_DOCK_GPIO_MIC1_LED,
    ALC280_FIXUP_HP_9480M,
    ALC288_FIXUP_DELL_HEADSET_MODE,
    ALC288_FIXUP_DELL1_MIC_NO_PRESENCE,
    @@ -5388,6 +5389,16 @@ static const struct hda_fixup alc269_fixups[] = {
    .chained = true,
    .chain_id = ALC280_FIXUP_HP_GPIO4
    },
    + [ALC269_FIXUP_HP_DOCK_GPIO_MIC1_LED] = {
    + .type = HDA_FIXUP_PINS,
    + .v.pins = (const struct hda_pintbl[]) {
    + { 0x1b, 0x21011020 }, /* line-out */
    + { 0x18, 0x2181103f }, /* line-in */
    + { },
    + },
    + .chained = true,
    + .chain_id = ALC269_FIXUP_HP_GPIO_MIC1_LED
    + },
    [ALC280_FIXUP_HP_9480M] = {
    .type = HDA_FIXUP_FUNC,
    .v.func = alc280_fixup_hp_9480m,
    @@ -5647,7 +5658,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
    SND_PCI_QUIRK(0x103c, 0x2256, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
    SND_PCI_QUIRK(0x103c, 0x2257, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
    SND_PCI_QUIRK(0x103c, 0x2259, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
    - SND_PCI_QUIRK(0x103c, 0x225a, "HP", ALC269_FIXUP_HP_GPIO_MIC1_LED),
    + SND_PCI_QUIRK(0x103c, 0x225a, "HP", ALC269_FIXUP_HP_DOCK_GPIO_MIC1_LED),
    SND_PCI_QUIRK(0x103c, 0x2260, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
    SND_PCI_QUIRK(0x103c, 0x2263, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
    SND_PCI_QUIRK(0x103c, 0x2264, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
    @@ -5816,6 +5827,7 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
    {.id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC, .name = "headset-mode-no-hp-mic"},
    {.id = ALC269_FIXUP_LENOVO_DOCK, .name = "lenovo-dock"},
    {.id = ALC269_FIXUP_HP_GPIO_LED, .name = "hp-gpio-led"},
    + {.id = ALC269_FIXUP_HP_DOCK_GPIO_MIC1_LED, .name = "hp-dock-gpio-mic1-led"},
    {.id = ALC269_FIXUP_DELL1_MIC_NO_PRESENCE, .name = "dell-headset-multi"},
    {.id = ALC269_FIXUP_DELL2_MIC_NO_PRESENCE, .name = "dell-headset-dock"},
    {.id = ALC283_FIXUP_CHROME_BOOK, .name = "alc283-dac-wcaps"},
    @@ -6090,6 +6102,8 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
    ALC295_STANDARD_PINS,
    {0x17, 0x21014040},
    {0x18, 0x21a19050}),
    + SND_HDA_PIN_QUIRK(0x10ec0295, 0x1028, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE,
    + ALC295_STANDARD_PINS),
    SND_HDA_PIN_QUIRK(0x10ec0298, 0x1028, "Dell", ALC298_FIXUP_DELL1_MIC_NO_PRESENCE,
    ALC298_STANDARD_PINS,
    {0x17, 0x90170110}),
    diff --git a/sound/x86/Kconfig b/sound/x86/Kconfig
    index 84c8f8fc597c..8adf4d1bd46e 100644
    --- a/sound/x86/Kconfig
    +++ b/sound/x86/Kconfig
    @@ -1,6 +1,7 @@
    menuconfig SND_X86
    - tristate "X86 sound devices"
    + bool "X86 sound devices"
    depends on X86
    + default y
    ---help---
    X86 sound devices that don't fall under SoC or PCI categories

    \
     
     \ /
      Last update: 2017-03-23 16:11    [W:4.877 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site