From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-qk1-f169.google.com (mail-qk1-f169.google.com [209.85.222.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7E2F0224AFA for ; Tue, 28 Jul 2026 00:45:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.222.169 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785199525; cv=none; b=lCpNWwiM9JXdQtoZKhH23lBO5JBxa/Rm/ErG6NL/kSuceD6jHRXfrZUuBVKslAFYm5Grtpb9sZe3oG9LHand71h4otKxYpMzFtnjYbcHTqYWXWlDnCku5IrXFjitGiLoTZstjq3BvIKYMM2pmoR4MRVAQk+ARn0dUdbFeuH9vP4= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785199525; c=relaxed/simple; bh=+bEpJy2yiNbZZHwHHMgE03n2oPgR8IpRFJtm8vxMDNI=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type; b=oyo/w99GpqsyKIqm56s91wWege+XrdUPQR+qczhpAiDjDdNBh1bf/A7GLYNz7tol+uEhMB6+KOuMcbshVNKHZVPyKkEPewr752IsIFGvDkszkR3uybLS2jQsJAS5xNZtB5xoooi/H4FFQM8Qi/ygtXfg/3tH/ndoHm5u8bAUOnA= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=XC+OehMk; arc=none smtp.client-ip=209.85.222.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="XC+OehMk" Received: by mail-qk1-f169.google.com with SMTP id af79cd13be357-92e65e18969so37119685a.1 for ; Mon, 27 Jul 2026 17:45:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1785199522; x=1785804322; darn=vger.kernel.org; h=content-transfer-encoding:content-type:mime-version:message-id:date :subject:cc:to:from:from:to:cc:subject:date:message-id:reply-to :content-type; bh=wgqEqOeHHkV3aH841yVDpBMSyC3TFYyEh0HcssbHjh0=; b=XC+OehMkT26UtZBwCDWt1gjHU5Da/zBZb3hCYHPYAI520LxVq/k/UA22Lb63Yw+gor qpzKhb1fXijN3DZfOnObKqR7lvYKoEPOGfSl8tjgpAG7Ay3jVfpL7JJUGtupUHsxMcfo UcZrIM+/ZBCHP7Tyq0twKxZ5MhlqSLD/C02U1oCDu625cAqh/VhlxEkDRI2PLK8ZsHNK fgQrU9SgJb9MKj34Iy8S3e0SZH/kmkYXDnCPDxoZlR0uGG/RSeFyuwbVzXfNch6QzI48 7dsLcu+dFwGLd2Q5zvRBBsp/xKcb1r4t/sQlOFZtVNTA+bJR3e8sWDDM5o+hVYfltteF PBcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785199522; x=1785804322; h=content-transfer-encoding:content-type:mime-version:message-id:date :subject:cc:to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to:content-type; bh=wgqEqOeHHkV3aH841yVDpBMSyC3TFYyEh0HcssbHjh0=; b=PpHypHsSJayHvpJNFQlnEWnLpBDvUszFORHOr33488wj00s3VXl/nB1Ixlc41IylqA Kmd8cHzLFYFOr3TqhjbbUxG+SfyW73YPt2vcakInmKie1ucvi8Kv+Nw6BQtZvhew9z6/ htNGyapxLPPF3PL/s3HCFQX9ePuCLgRtMqF3NxGg6xRWvfPwzN0enH7eEaoJ7A2yEXmE z+gOh6WnDHW9X7gE7j9TtxHQEfzwxwKOVHCLKIUgY8IaEw9oMuL2lZenD7eWMJ1vE1MA ZY1FDOvP104/y6QyKzUkQOQ/bTtfL89c6AEUxElqPl88dLEhClyZbBOPMURtaXzurhNj fZYg== X-Forwarded-Encrypted: i=1; AHgh+RrEuUKXBCyF1ptRuRri6EvaKdm47/lYGW4C24KGPuHLDf7OwAMGkVjK9/LlEURaBpCp4kPO4s4l+T+vw7Q=@vger.kernel.org X-Gm-Message-State: AOJu0YxW7tLSGxllGmZkOYWUxKyC/YSSEhTPbP3rkKHK/dbFuH5NZeqh pz8LIBmY47O6MbQ34RBxc2zDdAp+NVYi+x/hxFOpJP34MtWCui0JN4APnUWiH1Ne X-Gm-Gg: AR+sD12YXgz20srNElfdz0Eb+1TcAx5u4caG4Cp5G9ui6m1m5qCFlihTcrCBCs0S2q3 NPgR1KX+OzGDNrA2xfDaoSBbXEqCqPTHSmdHPDKGWOzTHwXRe5++rgwg+KN6r9MMDmJkSBN+TWZ Jepgt81NNC/vpEqwZWvi6jYufGkq+UttB88q7ex9PsZToVQU5xTK8LypR+IBmw0FSPeS66BlBNL VazbQCdZSaelr4eS3K40CaN0Nx6HzoY3RnUS312gUY3uqaz+1YnIuMcdtp4P6gGWjcMQkiS1/eX 3+6HSiJzOKBvtLSG2dCm5kPt3P5fliVtLmrlHUGzMX7x0CTAOrVFNG5iec/JhXr74ul6VBB+rOs A14Bx+1OlT5WHMlVkcIYG96obqomPgckMtTBul3+ATZek6amOZ+E9LflHF4GXfiGh2upVSW2S/R JnkaU2CCzT+/7nHwvUx8+66VK+9DlYunElpfta1+9+sKR53LhbZhvkvMTmF1QrpCrwSUbDcAkzL FTWsnuGwful2DBMc92DF5hihse0br9nA4mdbgV4NyAcjoEM6dQxX8w= X-Received: by 2002:a05:620a:4713:b0:92e:fed1:beba with SMTP id af79cd13be357-9330260fdf1mr20168685a.3.1785199522276; Mon, 27 Jul 2026 17:45:22 -0700 (PDT) Received: from ryzen.lan ([2601:644:8000:7a86::e34]) by smtp.gmail.com with ESMTPSA id af79cd13be357-932de1dcef6sm721689885a.0.2026.07.27.17.45.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 27 Jul 2026 17:45:21 -0700 (PDT) From: Rosen Penev To: linux-rtc@vger.kernel.org Cc: Alexandre Belloni , linux-kernel@vger.kernel.org (open list) Subject: [PATCH] rtc: mpc5121: convert from irq_of_parse_and_map to platform_get_irq Date: Mon, 27 Jul 2026 17:45:19 -0700 Message-ID: <20260728004519.573980-1-rosenp@gmail.com> X-Mailer: git-send-email 2.55.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit irq_of_parse_and_map() is an OF-specific low-level function that requires the caller to pair it with irq_dispose_mapping(). Mixing it with devm_request_irq() creates a lifecycle hazard — the probe error path and remove both dispose the mapping while the managed free_irq is still pending, leading to a dangling descriptor use in free_irq(). Switch to platform_get_irq(), which is the standard interface for platform devices. It returns a negative errno on failure, integrates with platform resource lookup, and eliminates the need for explicit irq_dispose_mapping() calls since the IRQ domain core manages the mapping lifecycle. This lets us drop the error labels and simplify both probe and remove. Remove these irq variables from the private struct. They were originally used to free the irq in _remove. devm has replaced that. Assisted-by: opencode:big-pickle Signed-off-by: Rosen Penev m --- drivers/rtc/rtc-mpc5121.c | 59 ++++++++++++++------------------------- 1 file changed, 21 insertions(+), 38 deletions(-) diff --git a/drivers/rtc/rtc-mpc5121.c b/drivers/rtc/rtc-mpc5121.c index b90f8337a7e6..964d9594b1d7 100644 --- a/drivers/rtc/rtc-mpc5121.c +++ b/drivers/rtc/rtc-mpc5121.c @@ -11,7 +11,6 @@ #include #include #include -#include #include #include #include @@ -72,8 +71,6 @@ struct mpc5121_rtc_regs { }; struct mpc5121_rtc_data { - unsigned irq; - unsigned irq_periodic; struct mpc5121_rtc_regs __iomem *regs; struct rtc_device *rtc; struct rtc_wkalrm wkalarm; @@ -292,6 +289,16 @@ static int mpc5121_rtc_probe(struct platform_device *op) { struct mpc5121_rtc_data *rtc; int err = 0; + int irq_periodic; + int irq; + + irq = platform_get_irq(op, 1); + if (irq < 0) + return irq; + + irq_periodic = platform_get_irq(op, 0); + if (irq_periodic < 0) + return irq_periodic; rtc = devm_kzalloc(&op->dev, sizeof(*rtc), GFP_KERNEL); if (!rtc) @@ -307,30 +314,20 @@ static int mpc5121_rtc_probe(struct platform_device *op) platform_set_drvdata(op, rtc); - rtc->irq = irq_of_parse_and_map(op->dev.of_node, 1); - err = devm_request_irq(&op->dev, rtc->irq, mpc5121_rtc_handler, 0, + err = devm_request_irq(&op->dev, irq, mpc5121_rtc_handler, 0, "mpc5121-rtc", &op->dev); - if (err) { - dev_err(&op->dev, "%s: could not request irq: %i\n", - __func__, rtc->irq); - goto out_dispose; - } + if (err) + return err; - rtc->irq_periodic = irq_of_parse_and_map(op->dev.of_node, 0); - err = devm_request_irq(&op->dev, rtc->irq_periodic, - mpc5121_rtc_handler_upd, 0, "mpc5121-rtc_upd", - &op->dev); - if (err) { - dev_err(&op->dev, "%s: could not request irq: %i\n", - __func__, rtc->irq_periodic); - goto out_dispose2; - } + err = devm_request_irq(&op->dev, irq_periodic, + mpc5121_rtc_handler_upd, 0, + "mpc5121-rtc_upd", &op->dev); + if (err) + return err; rtc->rtc = devm_rtc_allocate_device(&op->dev); - if (IS_ERR(rtc->rtc)) { - err = PTR_ERR(rtc->rtc); - goto out_dispose2; - } + if (IS_ERR(rtc->rtc)) + return PTR_ERR(rtc->rtc); rtc->rtc->ops = &mpc5200_rtc_ops; set_bit(RTC_FEATURE_ALARM_RES_MINUTE, rtc->rtc->features); @@ -356,18 +353,7 @@ static int mpc5121_rtc_probe(struct platform_device *op) rtc->rtc->range_max = U32_MAX; } - err = devm_rtc_register_device(rtc->rtc); - if (err) - goto out_dispose2; - - return 0; - -out_dispose2: - irq_dispose_mapping(rtc->irq_periodic); -out_dispose: - irq_dispose_mapping(rtc->irq); - - return err; + return devm_rtc_register_device(rtc->rtc); } static void mpc5121_rtc_remove(struct platform_device *op) @@ -378,9 +364,6 @@ static void mpc5121_rtc_remove(struct platform_device *op) /* disable interrupt, so there are no nasty surprises */ out_8(®s->alm_enable, 0); out_8(®s->int_enable, in_8(®s->int_enable) & ~0x1); - - irq_dispose_mapping(rtc->irq); - irq_dispose_mapping(rtc->irq_periodic); } #ifdef CONFIG_OF -- 2.55.0