* [tip:irq/drivers 3/22] drivers/irqchip/irq-qcom-mpm.c:444 qcom_mpm_probe() warn: missing unwind goto?
@ 2026-10-06 2:25 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2026-10-06 2:25 UTC (permalink / raw)
To: oe-kbuild; +Cc: lkp, Dan Carpenter
Unfiltered warning: this smatch report is sent as-is and has not been
reviewed for false positives, so please treat it with due skepticism.
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
CC: x86@kernel.org
TO: Krzysztof Kozlowski <krzk@kernel.org>
CC: Thomas Gleixner <tglx@kernel.org>
CC: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq/drivers
head: 0c65a1331928d0207c385f03fb5eba0cfecce0e6
commit: 1b852de05f74cfc96c58caad9df4cc1fa2dc7689 [3/22] irqchip/qcom: Enable compile testing for QCOM_PDC and QCOM_MPM
:::::: branch date: 4 weeks ago
:::::: commit date: 5 weeks ago
config: microblaze-randconfig-r2201-20261006 (https://download.01.org/0day-ci/archive/20261006/202610060433.10zppuxU-lkp@intel.com/config)
compiler: microblaze-linux-gcc (GCC) 16.1.0
smatch: v0.5.0-9187-g5189e3fb
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <error27@gmail.com>
| Closes: https://lore.kernel.org/r/202610060433.10zppuxU-lkp@intel.com/
smatch warnings:
drivers/irqchip/irq-qcom-mpm.c:444 qcom_mpm_probe() warn: missing unwind goto?
vim +444 drivers/irqchip/irq-qcom-mpm.c
a6199bb514d8a63 Shawn Guo 2022-03-08 324
1e3e330c07076a0 Johan Hovold 2025-10-13 325 static int qcom_mpm_probe(struct platform_device *pdev, struct device_node *parent)
a6199bb514d8a63 Shawn Guo 2022-03-08 326 {
1e3e330c07076a0 Johan Hovold 2025-10-13 327 struct device_node *np = pdev->dev.of_node;
a6199bb514d8a63 Shawn Guo 2022-03-08 328 struct device *dev = &pdev->dev;
a6199bb514d8a63 Shawn Guo 2022-03-08 329 struct irq_domain *parent_domain;
a6199bb514d8a63 Shawn Guo 2022-03-08 330 struct generic_pm_domain *genpd;
221b110d87c2d3e Konrad Dybcio 2023-11-27 331 struct device_node *msgram_np;
a6199bb514d8a63 Shawn Guo 2022-03-08 332 struct qcom_mpm_priv *priv;
a6199bb514d8a63 Shawn Guo 2022-03-08 333 unsigned int pin_cnt;
221b110d87c2d3e Konrad Dybcio 2023-11-27 334 struct resource res;
a6199bb514d8a63 Shawn Guo 2022-03-08 335 int i, irq;
a6199bb514d8a63 Shawn Guo 2022-03-08 336 int ret;
a6199bb514d8a63 Shawn Guo 2022-03-08 337
a6199bb514d8a63 Shawn Guo 2022-03-08 338 priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
a6199bb514d8a63 Shawn Guo 2022-03-08 339 if (!priv)
a6199bb514d8a63 Shawn Guo 2022-03-08 340 return -ENOMEM;
a6199bb514d8a63 Shawn Guo 2022-03-08 341
a6199bb514d8a63 Shawn Guo 2022-03-08 342 ret = of_property_read_u32(np, "qcom,mpm-pin-count", &pin_cnt);
a6199bb514d8a63 Shawn Guo 2022-03-08 343 if (ret) {
a6199bb514d8a63 Shawn Guo 2022-03-08 344 dev_err(dev, "failed to read qcom,mpm-pin-count: %d\n", ret);
a6199bb514d8a63 Shawn Guo 2022-03-08 345 return ret;
a6199bb514d8a63 Shawn Guo 2022-03-08 346 }
a6199bb514d8a63 Shawn Guo 2022-03-08 347
a6199bb514d8a63 Shawn Guo 2022-03-08 348 priv->reg_stride = DIV_ROUND_UP(pin_cnt, 32);
a6199bb514d8a63 Shawn Guo 2022-03-08 349
a6199bb514d8a63 Shawn Guo 2022-03-08 350 ret = of_property_count_u32_elems(np, "qcom,mpm-pin-map");
a6199bb514d8a63 Shawn Guo 2022-03-08 351 if (ret < 0) {
a6199bb514d8a63 Shawn Guo 2022-03-08 352 dev_err(dev, "failed to read qcom,mpm-pin-map: %d\n", ret);
a6199bb514d8a63 Shawn Guo 2022-03-08 353 return ret;
a6199bb514d8a63 Shawn Guo 2022-03-08 354 }
a6199bb514d8a63 Shawn Guo 2022-03-08 355
a6199bb514d8a63 Shawn Guo 2022-03-08 356 if (ret % 2) {
a6199bb514d8a63 Shawn Guo 2022-03-08 357 dev_err(dev, "invalid qcom,mpm-pin-map\n");
a6199bb514d8a63 Shawn Guo 2022-03-08 358 return -EINVAL;
a6199bb514d8a63 Shawn Guo 2022-03-08 359 }
a6199bb514d8a63 Shawn Guo 2022-03-08 360
a6199bb514d8a63 Shawn Guo 2022-03-08 361 priv->map_cnt = ret / 2;
a6199bb514d8a63 Shawn Guo 2022-03-08 362 priv->maps = devm_kcalloc(dev, priv->map_cnt, sizeof(*priv->maps),
a6199bb514d8a63 Shawn Guo 2022-03-08 363 GFP_KERNEL);
a6199bb514d8a63 Shawn Guo 2022-03-08 364 if (!priv->maps)
a6199bb514d8a63 Shawn Guo 2022-03-08 365 return -ENOMEM;
a6199bb514d8a63 Shawn Guo 2022-03-08 366
a6199bb514d8a63 Shawn Guo 2022-03-08 367 for (i = 0; i < priv->map_cnt; i++) {
a6199bb514d8a63 Shawn Guo 2022-03-08 368 u32 pin, hwirq;
a6199bb514d8a63 Shawn Guo 2022-03-08 369
a6199bb514d8a63 Shawn Guo 2022-03-08 370 of_property_read_u32_index(np, "qcom,mpm-pin-map", i * 2, &pin);
a6199bb514d8a63 Shawn Guo 2022-03-08 371 of_property_read_u32_index(np, "qcom,mpm-pin-map", i * 2 + 1, &hwirq);
a6199bb514d8a63 Shawn Guo 2022-03-08 372
a6199bb514d8a63 Shawn Guo 2022-03-08 373 if (gic_hwirq_is_mapped(priv->maps, i, hwirq)) {
a6199bb514d8a63 Shawn Guo 2022-03-08 374 dev_warn(dev, "failed to map pin %d as GIC hwirq %d is already mapped\n",
a6199bb514d8a63 Shawn Guo 2022-03-08 375 pin, hwirq);
a6199bb514d8a63 Shawn Guo 2022-03-08 376 continue;
a6199bb514d8a63 Shawn Guo 2022-03-08 377 }
a6199bb514d8a63 Shawn Guo 2022-03-08 378
a6199bb514d8a63 Shawn Guo 2022-03-08 379 priv->maps[i].pin = pin;
a6199bb514d8a63 Shawn Guo 2022-03-08 380 priv->maps[i].hwirq = hwirq;
a6199bb514d8a63 Shawn Guo 2022-03-08 381 }
a6199bb514d8a63 Shawn Guo 2022-03-08 382
a6199bb514d8a63 Shawn Guo 2022-03-08 383 raw_spin_lock_init(&priv->lock);
a6199bb514d8a63 Shawn Guo 2022-03-08 384
221b110d87c2d3e Konrad Dybcio 2023-11-27 385 /* If we have a handle to an RPM message ram partition, use it. */
221b110d87c2d3e Konrad Dybcio 2023-11-27 386 msgram_np = of_parse_phandle(np, "qcom,rpm-msg-ram", 0);
221b110d87c2d3e Konrad Dybcio 2023-11-27 387 if (msgram_np) {
221b110d87c2d3e Konrad Dybcio 2023-11-27 388 ret = of_address_to_resource(msgram_np, 0, &res);
221b110d87c2d3e Konrad Dybcio 2023-11-27 389 if (ret) {
221b110d87c2d3e Konrad Dybcio 2023-11-27 390 of_node_put(msgram_np);
221b110d87c2d3e Konrad Dybcio 2023-11-27 391 return ret;
221b110d87c2d3e Konrad Dybcio 2023-11-27 392 }
221b110d87c2d3e Konrad Dybcio 2023-11-27 393
221b110d87c2d3e Konrad Dybcio 2023-11-27 394 /* Don't use devm_ioremap_resource, as we're accessing a shared region. */
221b110d87c2d3e Konrad Dybcio 2023-11-27 395 priv->base = devm_ioremap(dev, res.start, resource_size(&res));
221b110d87c2d3e Konrad Dybcio 2023-11-27 396 of_node_put(msgram_np);
8ad032cc8c499af Dan Carpenter 2024-02-01 397 if (!priv->base)
8ad032cc8c499af Dan Carpenter 2024-02-01 398 return -ENOMEM;
221b110d87c2d3e Konrad Dybcio 2023-11-27 399 } else {
221b110d87c2d3e Konrad Dybcio 2023-11-27 400 /* Otherwise, fall back to simple MMIO. */
a6199bb514d8a63 Shawn Guo 2022-03-08 401 priv->base = devm_platform_ioremap_resource(pdev, 0);
76ff614a79152ce Yang Yingliang 2022-03-16 402 if (IS_ERR(priv->base))
a6199bb514d8a63 Shawn Guo 2022-03-08 403 return PTR_ERR(priv->base);
221b110d87c2d3e Konrad Dybcio 2023-11-27 404 }
a6199bb514d8a63 Shawn Guo 2022-03-08 405
a6199bb514d8a63 Shawn Guo 2022-03-08 406 for (i = 0; i < priv->reg_stride; i++) {
a6199bb514d8a63 Shawn Guo 2022-03-08 407 qcom_mpm_write(priv, MPM_REG_ENABLE, i, 0);
a6199bb514d8a63 Shawn Guo 2022-03-08 408 qcom_mpm_write(priv, MPM_REG_FALLING_EDGE, i, 0);
a6199bb514d8a63 Shawn Guo 2022-03-08 409 qcom_mpm_write(priv, MPM_REG_RISING_EDGE, i, 0);
a6199bb514d8a63 Shawn Guo 2022-03-08 410 qcom_mpm_write(priv, MPM_REG_POLARITY, i, 0);
a6199bb514d8a63 Shawn Guo 2022-03-08 411 qcom_mpm_write(priv, MPM_REG_STATUS, i, 0);
a6199bb514d8a63 Shawn Guo 2022-03-08 412 }
a6199bb514d8a63 Shawn Guo 2022-03-08 413
a6199bb514d8a63 Shawn Guo 2022-03-08 414 irq = platform_get_irq(pdev, 0);
a6199bb514d8a63 Shawn Guo 2022-03-08 415 if (irq < 0)
a6199bb514d8a63 Shawn Guo 2022-03-08 416 return irq;
a6199bb514d8a63 Shawn Guo 2022-03-08 417
a6199bb514d8a63 Shawn Guo 2022-03-08 418 genpd = &priv->genpd;
a6199bb514d8a63 Shawn Guo 2022-03-08 419 genpd->flags = GENPD_FLAG_IRQ_SAFE;
a6199bb514d8a63 Shawn Guo 2022-03-08 420 genpd->power_off = mpm_pd_power_off;
a6199bb514d8a63 Shawn Guo 2022-03-08 421
a6199bb514d8a63 Shawn Guo 2022-03-08 422 genpd->name = devm_kasprintf(dev, GFP_KERNEL, "%s", dev_name(dev));
a6199bb514d8a63 Shawn Guo 2022-03-08 423 if (!genpd->name)
a6199bb514d8a63 Shawn Guo 2022-03-08 424 return -ENOMEM;
a6199bb514d8a63 Shawn Guo 2022-03-08 425
a6199bb514d8a63 Shawn Guo 2022-03-08 426 ret = pm_genpd_init(genpd, NULL, false);
a6199bb514d8a63 Shawn Guo 2022-03-08 427 if (ret) {
a6199bb514d8a63 Shawn Guo 2022-03-08 428 dev_err(dev, "failed to init genpd: %d\n", ret);
a6199bb514d8a63 Shawn Guo 2022-03-08 429 return ret;
a6199bb514d8a63 Shawn Guo 2022-03-08 430 }
a6199bb514d8a63 Shawn Guo 2022-03-08 431
a6199bb514d8a63 Shawn Guo 2022-03-08 432 ret = of_genpd_add_provider_simple(np, genpd);
a6199bb514d8a63 Shawn Guo 2022-03-08 433 if (ret) {
a6199bb514d8a63 Shawn Guo 2022-03-08 434 dev_err(dev, "failed to add genpd provider: %d\n", ret);
a6199bb514d8a63 Shawn Guo 2022-03-08 435 goto remove_genpd;
a6199bb514d8a63 Shawn Guo 2022-03-08 436 }
a6199bb514d8a63 Shawn Guo 2022-03-08 437
a6199bb514d8a63 Shawn Guo 2022-03-08 438 priv->mbox_client.dev = dev;
cfe02147e86307a Jassi Brar 2026-03-22 439 priv->mbox_client.knows_txdone = true;
a6199bb514d8a63 Shawn Guo 2022-03-08 440 priv->mbox_chan = mbox_request_channel(&priv->mbox_client, 0);
a6199bb514d8a63 Shawn Guo 2022-03-08 441 if (IS_ERR(priv->mbox_chan)) {
a6199bb514d8a63 Shawn Guo 2022-03-08 442 ret = PTR_ERR(priv->mbox_chan);
a6199bb514d8a63 Shawn Guo 2022-03-08 443 dev_err(dev, "failed to acquire IPC channel: %d\n", ret);
a6199bb514d8a63 Shawn Guo 2022-03-08 @444 return ret;
a6199bb514d8a63 Shawn Guo 2022-03-08 445 }
a6199bb514d8a63 Shawn Guo 2022-03-08 446
a6199bb514d8a63 Shawn Guo 2022-03-08 447 parent_domain = irq_find_host(parent);
a6199bb514d8a63 Shawn Guo 2022-03-08 448 if (!parent_domain) {
a6199bb514d8a63 Shawn Guo 2022-03-08 449 dev_err(dev, "failed to find MPM parent domain\n");
a6199bb514d8a63 Shawn Guo 2022-03-08 450 ret = -ENXIO;
a6199bb514d8a63 Shawn Guo 2022-03-08 451 goto free_mbox;
a6199bb514d8a63 Shawn Guo 2022-03-08 452 }
a6199bb514d8a63 Shawn Guo 2022-03-08 453
a6199bb514d8a63 Shawn Guo 2022-03-08 454 priv->domain = irq_domain_create_hierarchy(parent_domain,
a6199bb514d8a63 Shawn Guo 2022-03-08 455 IRQ_DOMAIN_FLAG_QCOM_MPM_WAKEUP, pin_cnt,
87228532e7e9687 Jiri Slaby (SUSE 2025-03-19 456) of_fwnode_handle(np), &qcom_mpm_ops, priv);
a6199bb514d8a63 Shawn Guo 2022-03-08 457 if (!priv->domain) {
a6199bb514d8a63 Shawn Guo 2022-03-08 458 dev_err(dev, "failed to create MPM domain\n");
a6199bb514d8a63 Shawn Guo 2022-03-08 459 ret = -ENOMEM;
a6199bb514d8a63 Shawn Guo 2022-03-08 460 goto free_mbox;
a6199bb514d8a63 Shawn Guo 2022-03-08 461 }
a6199bb514d8a63 Shawn Guo 2022-03-08 462
a6199bb514d8a63 Shawn Guo 2022-03-08 463 irq_domain_update_bus_token(priv->domain, DOMAIN_BUS_WAKEUP);
a6199bb514d8a63 Shawn Guo 2022-03-08 464
a6199bb514d8a63 Shawn Guo 2022-03-08 465 ret = devm_request_irq(dev, irq, qcom_mpm_handler, IRQF_NO_SUSPEND,
a6199bb514d8a63 Shawn Guo 2022-03-08 466 "qcom_mpm", priv);
9023960b74ab32b Pan Chuang 2026-07-14 467 if (ret)
a6199bb514d8a63 Shawn Guo 2022-03-08 468 goto remove_domain;
a6199bb514d8a63 Shawn Guo 2022-03-08 469
a6199bb514d8a63 Shawn Guo 2022-03-08 470 return 0;
a6199bb514d8a63 Shawn Guo 2022-03-08 471
a6199bb514d8a63 Shawn Guo 2022-03-08 472 remove_domain:
a6199bb514d8a63 Shawn Guo 2022-03-08 473 irq_domain_remove(priv->domain);
a6199bb514d8a63 Shawn Guo 2022-03-08 474 free_mbox:
a6199bb514d8a63 Shawn Guo 2022-03-08 475 mbox_free_channel(priv->mbox_chan);
a6199bb514d8a63 Shawn Guo 2022-03-08 476 remove_genpd:
a6199bb514d8a63 Shawn Guo 2022-03-08 477 pm_genpd_remove(genpd);
a6199bb514d8a63 Shawn Guo 2022-03-08 478 return ret;
a6199bb514d8a63 Shawn Guo 2022-03-08 479 }
a6199bb514d8a63 Shawn Guo 2022-03-08 480
:::::: The code at line 444 was first introduced by commit
:::::: a6199bb514d8a63f61c2a22c1f912376e14d0fb2 irqchip: Add Qualcomm MPM controller driver
:::::: TO: Shawn Guo <shawn.guo@linaro.org>
:::::: CC: Marc Zyngier <maz@kernel.org>
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2026-10-06 2:26 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-06 2:25 [tip:irq/drivers 3/22] drivers/irqchip/irq-qcom-mpm.c:444 qcom_mpm_probe() warn: missing unwind goto? kernel test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.