On Mon, Nov 11, 2019 at 11:21 AM Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx> wrote: > > The phandle cache code allocates memory while holding devtree_lock which > is a raw_spinlock_t. Memory allocation (and free()) is not possible on > RT while a raw_spinlock_t is held. > Invoke the kfree() and kcalloc() while the lock is dropped. > > Cc: Rob Herring <robh+dt@xxxxxxxxxx> > Cc: Frank Rowand <frowand.list@xxxxxxxxx> > Cc: devicetree@xxxxxxxxxxxxxxx > Signed-off-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx> > --- > > This is a repost of: > https://lore.kernel.org/linux-devicetree/20180910154227.xsbbqvw3cayro4gg@xxxxxxxxxxxxx/ > > I mentioned this patch (briefly) to Frank, let me summarize: > > of_populate_phandle_cache() triggers a warning during boot on arm64 with > RT enabled. By moving memory allocation/free outside of the locked > section (which really disables interrupts on -RT) everything is fine > again. > > The lock has been made a raw_spinlock_t in RT as part pSeries bring up. > It then made its way upstream as: > 28d0e36bf9686 ("OF: Fixup resursive locking code paths") > d6d3c4e656513 ("OF: convert devtree lock from rw_lock to raw spinlock") So to summarize, we changed mainline to fix RT which then broke RT. :) > I've been looking into making devtree_lock a spinlock_t which would > avoid this patch. I haven't seen an issue during boot on arm64 even > with hotplug. Did you look into using RCU reader locks any more? Rob