Messages in this thread | | | From | Anup Patel <> | Date | Sat, 19 Jan 2019 10:30:52 +0530 | Subject | Re: [PATCH v4 2/5] irqchip: sifive-plic: Don't inline plic_toggle() and plic_irq_toggle() |
| |
On Tue, Jan 15, 2019 at 9:24 PM Christoph Hellwig <hch@infradead.org> wrote: > > On Thu, Dec 27, 2018 at 04:48:18PM +0530, Anup Patel wrote: > > The plic_toggle() uses raw_spin_lock() and plic_irq_toggle has a > > for loop so both these functions are not suitable for being inline > > hence this patch removes the inline keyword. > > That is a weird argument for a function which has by design exactly > two callers and is in the hot path. The alternative to the inline > here would be to duplicate the code.
It's strange that you see it as weird argument. Both plic_toggle() and plic_irq_toggle() are 5+ lines functions with loops. The loop is clear in plic_irq_toggle() whereas raw_spin_lock() in plic_toggle() expands into inline-assembly spin-loop because raw_spin_lock() is a macro (not function).
Further looking at disassembly of both functions, these are 55+ instructions. I think we let GCC decide whether these functions should be inlined or not rather than us explicitly making these functions inline.
Regards, Anup
| |