ALSA: hda - Add NULL check to all PM ops in hda_intel.c
authorTakashi Iwai <tiwai@suse.de>
Wed, 16 Jul 2014 14:31:04 +0000 (16:31 +0200)
committerTakashi Iwai <tiwai@suse.de>
Wed, 16 Jul 2014 14:32:01 +0000 (16:32 +0200)
Since devptr can be NULL due to asynchronous probe, all PM ops should
have NULL checks at the beginning.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/hda_intel.c

index 8edcee5f034d1f668da3930e49916c87d706133a..387fc73a5c89a8719fb9c5a2de640931f822cafc 100644 (file)
@@ -772,10 +772,15 @@ static int azx_suspend(struct device *dev)
 {
        struct pci_dev *pci = to_pci_dev(dev);
        struct snd_card *card = dev_get_drvdata(dev);
-       struct azx *chip = card->private_data;
-       struct hda_intel *hda = container_of(chip, struct hda_intel, chip);
+       struct azx *chip;
+       struct hda_intel *hda;
        struct azx_pcm *p;
 
+       if (!card)
+               return 0;
+
+       chip = card->private_data;
+       hda = container_of(chip, struct hda_intel, chip);
        if (chip->disabled || hda->init_failed)
                return 0;
 
@@ -806,9 +811,14 @@ static int azx_resume(struct device *dev)
 {
        struct pci_dev *pci = to_pci_dev(dev);
        struct snd_card *card = dev_get_drvdata(dev);
-       struct azx *chip = card->private_data;
-       struct hda_intel *hda = container_of(chip, struct hda_intel, chip);
+       struct azx *chip;
+       struct hda_intel *hda;
 
+       if (!card)
+               return 0;
+
+       chip = card->private_data;
+       hda = container_of(chip, struct hda_intel, chip);
        if (chip->disabled || hda->init_failed)
                return 0;
 
@@ -844,9 +854,14 @@ static int azx_resume(struct device *dev)
 static int azx_runtime_suspend(struct device *dev)
 {
        struct snd_card *card = dev_get_drvdata(dev);
-       struct azx *chip = card->private_data;
-       struct hda_intel *hda = container_of(chip, struct hda_intel, chip);
+       struct azx *chip;
+       struct hda_intel *hda;
 
+       if (!card)
+               return 0;
+
+       chip = card->private_data;
+       hda = container_of(chip, struct hda_intel, chip);
        if (chip->disabled || hda->init_failed)
                return 0;
 
@@ -869,12 +884,17 @@ static int azx_runtime_suspend(struct device *dev)
 static int azx_runtime_resume(struct device *dev)
 {
        struct snd_card *card = dev_get_drvdata(dev);
-       struct azx *chip = card->private_data;
-       struct hda_intel *hda = container_of(chip, struct hda_intel, chip);
+       struct azx *chip;
+       struct hda_intel *hda;
        struct hda_bus *bus;
        struct hda_codec *codec;
        int status;
 
+       if (!card)
+               return 0;
+
+       chip = card->private_data;
+       hda = container_of(chip, struct hda_intel, chip);
        if (chip->disabled || hda->init_failed)
                return 0;
 
@@ -910,9 +930,14 @@ static int azx_runtime_resume(struct device *dev)
 static int azx_runtime_idle(struct device *dev)
 {
        struct snd_card *card = dev_get_drvdata(dev);
-       struct azx *chip = card->private_data;
-       struct hda_intel *hda = container_of(chip, struct hda_intel, chip);
+       struct azx *chip;
+       struct hda_intel *hda;
+
+       if (!card)
+               return 0;
 
+       chip = card->private_data;
+       hda = container_of(chip, struct hda_intel, chip);
        if (chip->disabled || hda->init_failed)
                return 0;