lkml.org 
[lkml]   [2019]   [Nov]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 4.9 49/64] ALSA: intel8x0m: Register irq handler after register initializations
    Date
    From: Takashi Iwai <tiwai@suse.de>

    [ Upstream commit 7064f376d4a10686f51c879401a569bb4babf9c6 ]

    The interrupt handler has to be acquired after the other resource
    initialization when allocated with IRQF_SHARED. Otherwise it's
    triggered before the resource gets ready, and may lead to unpleasant
    behavior.

    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    sound/pci/intel8x0m.c | 20 ++++++++++----------
    1 file changed, 10 insertions(+), 10 deletions(-)

    diff --git a/sound/pci/intel8x0m.c b/sound/pci/intel8x0m.c
    index 1bc98c867133d..2286dfd72ff7e 100644
    --- a/sound/pci/intel8x0m.c
    +++ b/sound/pci/intel8x0m.c
    @@ -1171,16 +1171,6 @@ static int snd_intel8x0m_create(struct snd_card *card,
    }

    port_inited:
    - if (request_irq(pci->irq, snd_intel8x0m_interrupt, IRQF_SHARED,
    - KBUILD_MODNAME, chip)) {
    - dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq);
    - snd_intel8x0m_free(chip);
    - return -EBUSY;
    - }
    - chip->irq = pci->irq;
    - pci_set_master(pci);
    - synchronize_irq(chip->irq);
    -
    /* initialize offsets */
    chip->bdbars_count = 2;
    tbl = intel_regs;
    @@ -1224,11 +1214,21 @@ static int snd_intel8x0m_create(struct snd_card *card,
    chip->int_sta_reg = ICH_REG_GLOB_STA;
    chip->int_sta_mask = int_sta_masks;

    + pci_set_master(pci);
    +
    if ((err = snd_intel8x0m_chip_init(chip, 1)) < 0) {
    snd_intel8x0m_free(chip);
    return err;
    }

    + if (request_irq(pci->irq, snd_intel8x0m_interrupt, IRQF_SHARED,
    + KBUILD_MODNAME, chip)) {
    + dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq);
    + snd_intel8x0m_free(chip);
    + return -EBUSY;
    + }
    + chip->irq = pci->irq;
    +
    if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) {
    snd_intel8x0m_free(chip);
    return err;
    --
    2.20.1
    \
     
     \ /
      Last update: 2019-11-08 12:52    [W:2.709 / U:0.040 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site