]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/commitdiff
mmc: host: Return an error when ->enable_sdio_irq() ops is missing
authorUlf Hansson <ulf.hansson@linaro.org>
Thu, 3 Mar 2022 16:51:42 +0000 (17:51 +0100)
committerStefan Bader <stefan.bader@canonical.com>
Fri, 20 May 2022 13:19:26 +0000 (15:19 +0200)
BugLink: https://bugs.launchpad.net/bugs/1971497
[ Upstream commit d6c9219ca1139b74541b2a98cee47a3426d754a9 ]

Even if the current WARN() notifies the user that something is severely
wrong, we can still end up in a PANIC() when trying to invoke the missing
->enable_sdio_irq() ops. Therefore, let's also return an error code and
prevent the host from being added.

While at it, move the code into a separate function to prepare for
subsequent changes and for further host caps validations.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Link: https://lore.kernel.org/r/20220303165142.129745-1-ulf.hansson@linaro.org
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
drivers/mmc/core/host.c

index e955f1ef256434c7bb1f5eb9143a11e0cddec43c..32801639e0be544ac919bf4a9e55646215d9ebf7 100644 (file)
@@ -497,6 +497,16 @@ struct mmc_host *mmc_alloc_host(int extra, struct device *dev)
 
 EXPORT_SYMBOL(mmc_alloc_host);
 
+static int mmc_validate_host_caps(struct mmc_host *host)
+{
+       if (host->caps & MMC_CAP_SDIO_IRQ && !host->ops->enable_sdio_irq) {
+               dev_warn(host->parent, "missing ->enable_sdio_irq() ops\n");
+               return -EINVAL;
+       }
+
+       return 0;
+}
+
 /**
  *     mmc_add_host - initialise host hardware
  *     @host: mmc host
@@ -509,8 +519,9 @@ int mmc_add_host(struct mmc_host *host)
 {
        int err;
 
-       WARN_ON((host->caps & MMC_CAP_SDIO_IRQ) &&
-               !host->ops->enable_sdio_irq);
+       err = mmc_validate_host_caps(host);
+       if (err)
+               return err;
 
        err = device_add(&host->class_dev);
        if (err)