@@ -241,6 +241,12 @@ enum {
241241 FTRACE_OPS_FL_DIRECT = BIT (17 ),
242242};
243243
244+ #ifndef CONFIG_DYNAMIC_FTRACE_WITH_ARGS
245+ #define FTRACE_OPS_FL_SAVE_ARGS FTRACE_OPS_FL_SAVE_REGS
246+ #else
247+ #define FTRACE_OPS_FL_SAVE_ARGS 0
248+ #endif
249+
244250/*
245251 * FTRACE_OPS_CMD_* commands allow the ftrace core logic to request changes
246252 * to a ftrace_ops. Note, the requests may fail.
@@ -321,6 +327,9 @@ struct ftrace_ops {
321327 unsigned long trampoline_size ;
322328 struct list_head list ;
323329 ftrace_ops_func_t ops_func ;
330+ #ifdef CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS
331+ unsigned long direct_call ;
332+ #endif
324333#endif
325334};
326335
@@ -397,64 +406,36 @@ struct ftrace_func_entry {
397406
398407#ifdef CONFIG_DYNAMIC_FTRACE_WITH_DIRECT_CALLS
399408extern int ftrace_direct_func_count ;
400- int register_ftrace_direct (unsigned long ip , unsigned long addr );
401- int unregister_ftrace_direct (unsigned long ip , unsigned long addr );
402- int modify_ftrace_direct (unsigned long ip , unsigned long old_addr , unsigned long new_addr );
403- struct ftrace_direct_func * ftrace_find_direct_func (unsigned long addr );
404- int ftrace_modify_direct_caller (struct ftrace_func_entry * entry ,
405- struct dyn_ftrace * rec ,
406- unsigned long old_addr ,
407- unsigned long new_addr );
408409unsigned long ftrace_find_rec_direct (unsigned long ip );
409- int register_ftrace_direct_multi (struct ftrace_ops * ops , unsigned long addr );
410- int unregister_ftrace_direct_multi (struct ftrace_ops * ops , unsigned long addr );
411- int modify_ftrace_direct_multi (struct ftrace_ops * ops , unsigned long addr );
412- int modify_ftrace_direct_multi_nolock (struct ftrace_ops * ops , unsigned long addr );
410+ int register_ftrace_direct (struct ftrace_ops * ops , unsigned long addr );
411+ int unregister_ftrace_direct (struct ftrace_ops * ops , unsigned long addr ,
412+ bool free_filters );
413+ int modify_ftrace_direct (struct ftrace_ops * ops , unsigned long addr );
414+ int modify_ftrace_direct_nolock (struct ftrace_ops * ops , unsigned long addr );
415+
416+ void ftrace_stub_direct_tramp (void );
413417
414418#else
415419struct ftrace_ops ;
416420# define ftrace_direct_func_count 0
417- static inline int register_ftrace_direct (unsigned long ip , unsigned long addr )
418- {
419- return - ENOTSUPP ;
420- }
421- static inline int unregister_ftrace_direct (unsigned long ip , unsigned long addr )
422- {
423- return - ENOTSUPP ;
424- }
425- static inline int modify_ftrace_direct (unsigned long ip ,
426- unsigned long old_addr , unsigned long new_addr )
427- {
428- return - ENOTSUPP ;
429- }
430- static inline struct ftrace_direct_func * ftrace_find_direct_func (unsigned long addr )
431- {
432- return NULL ;
433- }
434- static inline int ftrace_modify_direct_caller (struct ftrace_func_entry * entry ,
435- struct dyn_ftrace * rec ,
436- unsigned long old_addr ,
437- unsigned long new_addr )
438- {
439- return - ENODEV ;
440- }
441421static inline unsigned long ftrace_find_rec_direct (unsigned long ip )
442422{
443423 return 0 ;
444424}
445- static inline int register_ftrace_direct_multi (struct ftrace_ops * ops , unsigned long addr )
425+ static inline int register_ftrace_direct (struct ftrace_ops * ops , unsigned long addr )
446426{
447427 return - ENODEV ;
448428}
449- static inline int unregister_ftrace_direct_multi (struct ftrace_ops * ops , unsigned long addr )
429+ static inline int unregister_ftrace_direct (struct ftrace_ops * ops , unsigned long addr ,
430+ bool free_filters )
450431{
451432 return - ENODEV ;
452433}
453- static inline int modify_ftrace_direct_multi (struct ftrace_ops * ops , unsigned long addr )
434+ static inline int modify_ftrace_direct (struct ftrace_ops * ops , unsigned long addr )
454435{
455436 return - ENODEV ;
456437}
457- static inline int modify_ftrace_direct_multi_nolock (struct ftrace_ops * ops , unsigned long addr )
438+ static inline int modify_ftrace_direct_nolock (struct ftrace_ops * ops , unsigned long addr )
458439{
459440 return - ENODEV ;
460441}
0 commit comments