On Thu, Feb 02, 2023 at 07:54:31AM +0000, Zhuo, Qiuxu wrote: > > From: Uladzislau Rezki (Sony) <urezki@xxxxxxxxx> > > Sent: Wednesday, February 1, 2023 11:08 PM > > To: LKML <linux-kernel@xxxxxxxxxxxxxxx>; RCU <rcu@xxxxxxxxxxxxxxx>; Paul E . > > McKenney <paulmck@xxxxxxxxxx> > > Cc: Uladzislau Rezki <urezki@xxxxxxxxx>; Oleksiy Avramchenko > > <oleksiy.avramchenko@xxxxxxxx>; Jens Axboe <axboe@xxxxxxxxx>; Philipp > > Reisner <philipp.reisner@xxxxxxxxxx>; Bryan Tan <bryantan@xxxxxxxxxx>; > > Steven Rostedt <rostedt@xxxxxxxxxxx>; Eric Dumazet > > <edumazet@xxxxxxxxxx>; Bob Pearson <rpearsonhpe@xxxxxxxxx>; Ariel > > Levkovich <lariel@xxxxxxxxxx>; Theodore Ts'o <tytso@xxxxxxx>; Julian > > Anastasov <ja@xxxxxx> > > Subject: [PATCH 01/13] rcu/kvfree: Add kvfree_rcu_mightsleep() and > > kfree_rcu_mightsleep() > > > > These two macroses will replace single-argument k[v]free_rcu() ones. > > By adding an extra _mightsleep prefix we can avoid of situations when someone > > s/prefix/suffix Good eyes, thank you! Please see below for the version currently queued in the -rcu tree. Thanx, Paul > > intended to give a second argument but forgot to do it in a code where sleeping > > is illegal. > > > > Signed-off-by: Uladzislau Rezki (Sony) <urezki@xxxxxxxxx> > > ... ------------------------------------------------------------------------ commit d6b54a44de23c83944d042b6f6fd9d19ccd3f1b8 Author: Uladzislau Rezki (Sony) <urezki@xxxxxxxxx> Date: Wed Feb 1 16:08:07 2023 +0100 rcu/kvfree: Add kvfree_rcu_mightsleep() and kfree_rcu_mightsleep() The kvfree_rcu() and kfree_rcu() APIs are hazardous in that if you forget the second argument, it works, but might sleep. This sleeping can be a correctness bug from atomic contexts, and even in non-atomic contexts it might introduce unacceptable latencies. This commit therefore adds kvfree_rcu_mightsleep() and kfree_rcu_mightsleep(), which will replace the single-argument kvfree_rcu() and kfree_rcu(), respectively. This commit enables a series of commits that switch from single-argument kvfree_rcu() and kfree_rcu() to their _mightsleep() counterparts. Once all of these commits land, the single-argument versions will be removed. Signed-off-by: Uladzislau Rezki (Sony) <urezki@xxxxxxxxx> Signed-off-by: Paul E. McKenney <paulmck@xxxxxxxxxx> diff --git a/include/linux/rcupdate.h b/include/linux/rcupdate.h index 822ff7b4bb1ed..094321c17e48a 100644 --- a/include/linux/rcupdate.h +++ b/include/linux/rcupdate.h @@ -1013,6 +1013,9 @@ static inline notrace void rcu_read_unlock_sched_notrace(void) #define kvfree_rcu(...) KVFREE_GET_MACRO(__VA_ARGS__, \ kvfree_rcu_arg_2, kvfree_rcu_arg_1)(__VA_ARGS__) +#define kvfree_rcu_mightsleep(ptr) kvfree_rcu_arg_1(ptr) +#define kfree_rcu_mightsleep(ptr) kvfree_rcu_mightsleep(ptr) + #define KVFREE_GET_MACRO(_1, _2, NAME, ...) NAME #define kvfree_rcu_arg_2(ptr, rhf) \ do { \