Hello Thomas Petazzoni, The patch 6d5cd068ee59: "mmc: sdhci: use WP GPIO in sdhci_check_ro()" from Feb 12, 2019, leads to the following Smatch static checker warning: drivers/mmc/core/slot-gpio.c:69 mmc_gpio_get_ro() warn: sleeping in atomic context drivers/mmc/host/sdhci.c 2459 static int sdhci_check_ro(struct sdhci_host *host) 2460 { 2461 unsigned long flags; 2462 int is_readonly; 2463 2464 spin_lock_irqsave(&host->lock, flags); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Holding a spinlock. 2465 2466 if (host->flags & SDHCI_DEVICE_DEAD) 2467 is_readonly = 0; 2468 else if (host->ops->get_ro) 2469 is_readonly = host->ops->get_ro(host); 2470 else if (mmc_can_gpio_ro(host->mmc)) 2471 is_readonly = mmc_gpio_get_ro(host->mmc); ^^^^^^^^^^^^^^^^^^^^^^^^^^ This is a sleeping function. See below. 2472 else 2473 is_readonly = !(sdhci_readl(host, SDHCI_PRESENT_STATE) 2474 & SDHCI_WRITE_PROTECT); 2475 2476 spin_unlock_irqrestore(&host->lock, flags); 2477 2478 /* This quirk needs to be replaced by a callback-function later */ 2479 return host->quirks & SDHCI_QUIRK_INVERTED_WRITE_PROTECT ? 2480 !is_readonly : is_readonly; 2481 } drivers/mmc/core/slot-gpio.c 62 int mmc_gpio_get_ro(struct mmc_host *host) 63 { 64 struct mmc_gpio *ctx = host->slot.handler_priv; 65 66 if (!ctx || !ctx->ro_gpio) 67 return -ENOSYS; 68 --> 69 return gpiod_get_value_cansleep(ctx->ro_gpio); ^^^^^^^^ 70 } regards, dan carpenter