Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp3870210ybz; Mon, 4 May 2020 11:13:16 -0700 (PDT) X-Google-Smtp-Source: APiQypKC6/0Mfhw94YyXEruGbEIaTNWI1MLeDFAXdAWbO9DoAT1PS5GFkOmdhdZsXOvfydiWyqqU X-Received: by 2002:a05:6402:1fc:: with SMTP id i28mr15450961edy.18.1588615996575; Mon, 04 May 2020 11:13:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588615996; cv=none; d=google.com; s=arc-20160816; b=mkqLbFlB9PGtp6v4ooqsn7DwWCEEhDP6Q1Rd2uXX4CUHr/lAFWUx0OjP97d5QffLaT 1vA6GQEkdPTiTzXt/peZyp2ckFvzehDVzennaStHwBuZD9U9dYw+/svDJXDmsqQXyW95 f9ahP+GViV4PY5jx+RmfGaXGIqP84eiq05Xt4TB3r4Sz2DVHXda4T5yqOVyaqVvUenY3 gdNhlj59Z7Oi04VLwsVmYGKEG5NDBY8bhzKkli/ouOegXb9Mu2MQLYeBNhutk6AcHgwC HVN83D0e1UfReNOMs3y1c+SIr+8L1N9ghF0T4OeWbThK0tSevA/4qPqnfZGUq85PSFdm mYZQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:in-reply-to:content-disposition :mime-version:message-id:subject:cc:to:from:date:dkim-signature; bh=+GAzP2YS3B1Sm7b+ALmbi1MRgT/epS6XtAPvLsjEI2c=; b=pMB4mvn/YLCTUK970wrR1Y3BKZxsafiy0MkhX7w+Q4cEGuuz5o3n67yUrgaoqgKomg WvdMB5eXNCs0XsQzyf8EHXdfT1710t8DWFIYnlWj17QcmvmevwWxpE6n6JGBck4LY4ap 9JIu1ZM2ieEQnlJUP2Dv543XHduWQICNkCVf0UO1CD9+rTQ7BE4JRs9xnRiJTuvXC/QE +2qrv81zYzjA4nQFL5ytZhOjZpVqn45k9K4SlXAzhmdEvtLa2WuNucOrdEKJxzDsVNdV TfQU+X5LhbD0bLM1cknIubBsKr4Ff8jY0UWMHA1b/JkyX/WJS4LGq9coOkE+thcahNMO LmrA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=nMuIlsiF; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id t12si7374413ejo.217.2020.05.04.11.12.53; Mon, 04 May 2020 11:13:16 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=nMuIlsiF; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732239AbgEDSI0 (ORCPT + 99 others); Mon, 4 May 2020 14:08:26 -0400 Received: from mail.kernel.org ([198.145.29.99]:39846 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730356AbgEDSIY (ORCPT ); Mon, 4 May 2020 14:08:24 -0400 Received: from localhost (mobile-166-175-184-168.mycingular.net [166.175.184.168]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id DAB732078C; Mon, 4 May 2020 18:08:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1588615704; bh=3kE93KOqN86Y89UIWlogoqpE00pDfbHOWdaJi8fWZKE=; h=Date:From:To:Cc:Subject:In-Reply-To:From; b=nMuIlsiFaHEVz6n29r8yQ6uL9CyGvPj2t2j6luK2GBvYs7juilzEGWsz9/eW7WvSh FLdRo5SkA9Csz+yzbhj4a09nDXLcOPqQY9NF9jxFiSUxEpcn55joPRCweg7/UQhKIi +8BPpmW7AH9zWd1azT8tNUrw+sXCAb5g0V5z0vPc= Date: Mon, 4 May 2020 13:08:22 -0500 From: Bjorn Helgaas To: Greg Kroah-Hartman Cc: Thomas Gleixner , "Rafael J . Wysocki" , Aman Sharma , linux-pci@vger.kernel.org, linux-kernel@vger.kernel.org, Bjorn Helgaas Subject: Re: [PATCH v2 1/2] driver core: platform: Clarify that IRQ 0 is invalid Message-ID: <20200504180822.GA282766@bjorn-Precision-5520> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20200502061537.GA2527384@kroah.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sat, May 02, 2020 at 08:15:37AM +0200, Greg Kroah-Hartman wrote: > On Fri, May 01, 2020 at 05:40:41PM -0500, Bjorn Helgaas wrote: > > From: Bjorn Helgaas > > > > These interfaces return a negative error number or an IRQ: > > > > platform_get_irq() > > platform_get_irq_optional() > > platform_get_irq_byname() > > platform_get_irq_byname_optional() > > > > The function comments suggest checking for error like this: > > > > irq = platform_get_irq(...); > > if (irq < 0) > > return irq; > > > > which is what most callers (~900 of 1400) do, so it's implicit that IRQ 0 > > is invalid. But some callers check for "irq <= 0", and it's not obvious > > from the source that we never return an IRQ 0. > > > > Make this more explicit by updating the comments to say that an IRQ number > > is always non-zero and adding a WARN() if we ever do return zero. If we do > > return IRQ 0, it likely indicates a bug in the arch-specific parts of > > platform_get_irq(). > > I worry about adding WARN() as there are systems that do panic_on_warn() > and syzbot trips over this as well. I don't think that for this issue > it would be a problem, but what really is this warning about that > someone could do anything with? > > Other than that minor thing, this looks good to me, thanks for finally > clearing this up. What I'm concerned about is an arch that returns 0. Most drivers don't check for 0 so they'll just try to use it, and things will fail in some obscure way. My assumption is that if there really is no IRQ, we should return -ENOENT or similar instead of 0. I could be convinced that it's not worth warning about at all, or we could do something like the following: diff --git a/drivers/base/platform.c b/drivers/base/platform.c index 084cf1d23d3f..4afa5875e14d 100644 --- a/drivers/base/platform.c +++ b/drivers/base/platform.c @@ -220,7 +220,11 @@ int platform_get_irq_optional(struct platform_device *dev, unsigned int num) ret = -ENXIO; #endif out: - WARN(ret == 0, "0 is an invalid IRQ number\n"); + /* Returning zero here is likely a bug in the arch IRQ code */ + if (ret == 0) { + pr_warn("0 is an invalid IRQ number\n"); + dump_stack(); + } return ret; } EXPORT_SYMBOL_GPL(platform_get_irq_optional); @@ -312,7 +316,11 @@ static int __platform_get_irq_byname(struct platform_device *dev, r = platform_get_resource_byname(dev, IORESOURCE_IRQ, name); if (r) { - WARN(r->start == 0, "0 is an invalid IRQ number\n"); + /* Returning zero here is likely a bug in the arch IRQ code */ + if (r->start == 0) { + pr_warn("0 is an invalid IRQ number\n"); + dump_stack(); + } return r->start; }