On Thu, Jun 18, 2020 at 10:35:27AM -0700, Matthew Wilcox wrote: > On Thu, Jun 18, 2020 at 07:30:49PM +0200, Uladzislau Rezki wrote: > > > I'd suggest: > > > > > > rcu_lock_acquire(&rcu_callback_map); > > > trace_rcu_invoke_kfree_bulk_callback(rcu_state.name, > > > bkvhead[i]->nr_records, bkvhead[i]->records); > > > if (i == 0) { > > > kfree_bulk(bkvhead[i]->nr_records, > > > bkvhead[i]->records); > > > } else { > > > for (j = 0; j < bkvhead[i]->nr_records; j++) { > > > vfree(bkvhead[i]->records[j]); > > > } > > > } > > > rcu_lock_release(&rcu_callback_map); > > > > > There are two different trace functions, one for "bulk" tracing > > messages, and another one is per one call of kfree(), though we use > > to indicate vfree() call. > > > > Probably we can rename it to: trace_rcu_invoke_kvfree_callback(); > > > > What do you think? > > Works for me! > OK. I will send out the patch that will rename that trace function that makes clear that the pointer that is freed can belong to SLAB or vmalloc. > > > But I'd also suggest a vfree_bulk be added. There are a few things > > > which would be better done in bulk as part of the vfree process > > > (we batch them up already, but i'm sure we could do better). > > > > I was thinking to implement of vfree_bulk() API, but i guess it can > > be done as future work. > > > > Does that sound good? > > Yes, definitely a future piece of work. > You have already been doing it. Thank you, Matthew :) -- Vlad Rezki