On Tue, May 7, 2024 at 7:38 PM Andy Shevchenko <andriy.shevchenko@xxxxxxxxx> wrote: > > On Tue, May 07, 2024 at 02:13:46PM +0200, Bartosz Golaszewski wrote: > > From: Bartosz Golaszewski <bartosz.golaszewski@xxxxxxxxxx> > > > > Commit 1f2bcb8c8ccd ("gpio: protect the descriptor label with SRCU") > > caused a massive drop in performance of requesting GPIO lines due to the > > call to synchronize_srcu() on each label change. Rework the code to not > > wait until all read-only users are done with reading the label but > > instead atomically replace the label pointer and schedule its release > > after all read-only critical sections are done. > > > To that end wrap the descriptor label in a struct that also contains the > > rcu_head struct required for deferring tasks using call_srcu() and stop > > using kstrdup_const() as we're required to allocate memory anyway. > > If there is no label and we assign something like "?" (two bytes) we got > with your patch the allocation of most likely 32 bytes (as next power of > two for the SLAB) instead of 18..24. > > OTOH, I dunno if SLAB supports 24-bytes. If not, it means that up to 16 bytes > label there would be no difference. In any case, with a new update (as far > as I understood the next move) it might return to kstrdup_const() or so. > Memory is cheap. This is just done for requested lines of which there are never that many. I wouldn't stress about it. The rcu_head struct is already 32 bytes on its own. Bart