1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef _DELAYED_CALL_H 3 #define _DELAYED_CALL_H 4 5 /* 6 * Poor man's closures; I wish we could've done them sanely polymorphic, 7 * but... 8 */ 9 10 struct delayed_call { 11 void (*fn)(void *); 12 void *arg; 13 }; 14 15 #define DEFINE_DELAYED_CALL(name) struct delayed_call name = {NULL, NULL} 16 17 /* I really wish we had closures with sane typechecking... */ 18 static inline void set_delayed_call(struct delayed_call *call, 19 void (*fn)(void *), void *arg) 20 { 21 call->fn = fn; 22 call->arg = arg; 23 } 24 25 static inline void do_delayed_call(struct delayed_call *call) 26 { 27 if (call->fn) 28 call->fn(call->arg); 29 } 30 31 static inline void clear_delayed_call(struct delayed_call *call) 32 { 33 call->fn = NULL; 34 } 35 #endif 36
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.