[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <87360cgfol.fsf@nanos.tec.linutronix.de>
Date: Fri, 11 Dec 2020 23:07:22 +0100
From: Thomas Gleixner <tglx@...utronix.de>
To: Andy Shevchenko <andy.shevchenko@...il.com>
Cc: LKML <linux-kernel@...r.kernel.org>,
Peter Zijlstra <peterz@...radead.org>,
Marc Zyngier <maz@...nel.org>,
"James E.J. Bottomley" <James.Bottomley@...senpartnership.com>,
Helge Deller <deller@....de>,
afzal mohammed <afzal.mohd.ma@...il.com>,
linux-parisc@...r.kernel.org, Russell King <linux@...linux.org.uk>,
linux-arm Mailing List <linux-arm-kernel@...ts.infradead.org>,
Mark Rutland <mark.rutland@....com>,
Catalin Marinas <catalin.marinas@....com>,
Will Deacon <will@...nel.org>,
Christian Borntraeger <borntraeger@...ibm.com>,
Heiko Carstens <hca@...ux.ibm.com>, linux-s390@...r.kernel.org,
Jani Nikula <jani.nikula@...ux.intel.com>,
Joonas Lahtinen <joonas.lahtinen@...ux.intel.com>,
Rodrigo Vivi <rodrigo.vivi@...el.com>,
David Airlie <airlied@...ux.ie>,
Daniel Vetter <daniel@...ll.ch>,
Pankaj Bharadiya <pankaj.laxminarayan.bharadiya@...el.com>,
Chris Wilson <chris@...is-wilson.co.uk>,
Wambui Karuga <wambui.karugax@...il.com>,
intel-gfx <intel-gfx@...ts.freedesktop.org>,
dri-devel <dri-devel@...ts.freedesktop.org>,
Tvrtko Ursulin <tvrtko.ursulin@...ux.intel.com>,
Linus Walleij <linus.walleij@...aro.org>,
"open list\:GPIO SUBSYSTEM" <linux-gpio@...r.kernel.org>,
Lee Jones <lee.jones@...aro.org>, Jon Mason <jdmason@...zu.us>,
Dave Jiang <dave.jiang@...el.com>,
Allen Hubbe <allenbh@...il.com>, linux-ntb@...glegroups.com,
Lorenzo Pieralisi <lorenzo.pieralisi@....com>,
Rob Herring <robh@...nel.org>,
Bjorn Helgaas <bhelgaas@...gle.com>,
Michal Simek <michal.simek@...inx.com>,
linux-pci <linux-pci@...r.kernel.org>,
Karthikeyan Mitran <m.karthikeyan@...iveil.co.in>,
Hou Zhiqiang <Zhiqiang.Hou@....com>,
Tariq Toukan <tariqt@...dia.com>,
"David S. Miller" <davem@...emloft.net>,
Jakub Kicinski <kuba@...nel.org>,
netdev <netdev@...r.kernel.org>,
"open list\:HFI1 DRIVER" <linux-rdma@...r.kernel.org>,
Saeed Mahameed <saeedm@...dia.com>,
Leon Romanovsky <leon@...nel.org>,
Boris Ostrovsky <boris.ostrovsky@...cle.com>,
Juergen Gross <jgross@...e.com>,
Stefano Stabellini <sstabellini@...nel.org>,
xen-devel@...ts.xenproject.org
Subject: Re: [patch 03/30] genirq: Move irq_set_lockdep_class() to core
On Fri, Dec 11 2020 at 22:08, Thomas Gleixner wrote:
> On Fri, Dec 11 2020 at 19:53, Andy Shevchenko wrote:
>
>> On Thu, Dec 10, 2020 at 10:14 PM Thomas Gleixner <tglx@...utronix.de> wrote:
>>>
>>> irq_set_lockdep_class() is used from modules and requires irq_to_desc() to
>>> be exported. Move it into the core code which lifts another requirement for
>>> the export.
>>
>> ...
>>
>>> + if (IS_ENABLED(CONFIG_LOCKDEP))
>>> + __irq_set_lockdep_class(irq, lock_class, request_class);
>
> You are right. Let me fix that.
No. I have to correct myself. You're wrong.
The inline is evaluated in the compilation units which include that
header and because the function declaration is unconditional it is
happy.
Now the optimizer stage makes the whole thing a NOOP if CONFIG_LOCKDEP=n
and thereby drops the reference to the function which makes it not
required for linking.
So in the file where the function is implemented:
#ifdef CONFIG_LOCKDEP
void __irq_set_lockdep_class(....)
{
}
#endif
The whole block is either discarded because CONFIG_LOCKDEP is not
defined or compile if it is defined which makes it available for the
linker.
And in the latter case the optimizer keeps the call in the inline (it
optimizes the condition away because it's always true).
So in both cases the compiler and the linker are happy and everything
works as expected.
It would fail if the header file had the following:
#ifdef CONFIG_LOCKDEP
void __irq_set_lockdep_class(....);
#endif
Because then it would complain about the missing function prototype when
it evaluates the inline.
Thanks,
tglx
Powered by blists - more mailing lists