From: kernel test robot <lkp@intel.com>
To: Song Liu <song@kernel.org>,
bpf@vger.kernel.org, linux-kernel@vger.kernel.org,
live-patching@vger.kernel.org
Cc: llvm@lists.linux.dev, kbuild-all@lists.01.org,
daniel@iogearbox.net, kernel-team@fb.com, jolsa@kernel.org,
rostedt@goodmis.org, Song Liu <song@kernel.org>
Subject: Re: [PATCH v3 bpf-next 2/4] ftrace: allow IPMODIFY and DIRECT ops on the same function
Date: Mon, 18 Jul 2022 11:16:23 +0800 [thread overview]
Message-ID: <202207181116.PO2cQ09B-lkp@intel.com> (raw)
In-Reply-To: <20220718001405.2236811-3-song@kernel.org>
Hi Song,
I love your patch! Yet something to improve:
[auto build test ERROR on bpf-next/master]
url: https://github.com/intel-lab-lkp/linux/commits/Song-Liu/ftrace-host-klp-and-bpf-trampoline-together/20220718-081533
base: https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf-next.git master
config: powerpc-randconfig-r023-20220717 (https://download.01.org/0day-ci/archive/20220718/202207181116.PO2cQ09B-lkp@intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project d74b88c69dc2644bd0dc5d64e2d7413a0d4040e5)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install powerpc cross compiling tool for clang build
# apt-get install binutils-powerpc-linux-gnu
# https://github.com/intel-lab-lkp/linux/commit/1535f287d288f9b7540ec50f56da1fe437ac6512
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Song-Liu/ftrace-host-klp-and-bpf-trampoline-together/20220718-081533
git checkout 1535f287d288f9b7540ec50f56da1fe437ac6512
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=powerpc SHELL=/bin/bash kernel/trace/
If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <lkp@intel.com>
All errors (new ones prefixed by >>):
kernel/trace/ftrace.c:299:5: warning: no previous prototype for function '__register_ftrace_function' [-Wmissing-prototypes]
int __register_ftrace_function(struct ftrace_ops *ops)
^
kernel/trace/ftrace.c:299:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
int __register_ftrace_function(struct ftrace_ops *ops)
^
static
kernel/trace/ftrace.c:342:5: warning: no previous prototype for function '__unregister_ftrace_function' [-Wmissing-prototypes]
int __unregister_ftrace_function(struct ftrace_ops *ops)
^
kernel/trace/ftrace.c:342:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
int __unregister_ftrace_function(struct ftrace_ops *ops)
^
static
kernel/trace/ftrace.c:4030:15: warning: no previous prototype for function 'arch_ftrace_match_adjust' [-Wmissing-prototypes]
char * __weak arch_ftrace_match_adjust(char *str, const char *search)
^
kernel/trace/ftrace.c:4030:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
char * __weak arch_ftrace_match_adjust(char *str, const char *search)
^
static
>> kernel/trace/ftrace.c:8082:14: error: use of undeclared identifier 'direct_mutex'; did you mean 'event_mutex'?
mutex_lock(&direct_mutex);
^~~~~~~~~~~~
event_mutex
include/linux/mutex.h:187:44: note: expanded from macro 'mutex_lock'
#define mutex_lock(lock) mutex_lock_nested(lock, 0)
^
kernel/trace/trace.h:1523:21: note: 'event_mutex' declared here
extern struct mutex event_mutex;
^
kernel/trace/ftrace.c:8122:16: error: use of undeclared identifier 'direct_mutex'; did you mean 'event_mutex'?
mutex_unlock(&direct_mutex);
^~~~~~~~~~~~
event_mutex
kernel/trace/trace.h:1523:21: note: 'event_mutex' declared here
extern struct mutex event_mutex;
^
kernel/trace/ftrace.c:8158:17: error: use of undeclared identifier 'direct_mutex'; did you mean 'event_mutex'?
mutex_unlock(&direct_mutex);
^~~~~~~~~~~~
event_mutex
kernel/trace/trace.h:1523:21: note: 'event_mutex' declared here
extern struct mutex event_mutex;
^
kernel/trace/ftrace.c:8178:14: error: use of undeclared identifier 'direct_mutex'; did you mean 'event_mutex'?
mutex_lock(&direct_mutex);
^~~~~~~~~~~~
event_mutex
include/linux/mutex.h:187:44: note: expanded from macro 'mutex_lock'
#define mutex_lock(lock) mutex_lock_nested(lock, 0)
^
kernel/trace/trace.h:1523:21: note: 'event_mutex' declared here
extern struct mutex event_mutex;
^
kernel/trace/ftrace.c:8203:16: error: use of undeclared identifier 'direct_mutex'; did you mean 'event_mutex'?
mutex_unlock(&direct_mutex);
^~~~~~~~~~~~
event_mutex
kernel/trace/trace.h:1523:21: note: 'event_mutex' declared here
extern struct mutex event_mutex;
^
3 warnings and 5 errors generated.
vim +8082 kernel/trace/ftrace.c
8051
8052 /*
8053 * When registering ftrace_ops with IPMODIFY, it is necessary to make sure
8054 * it doesn't conflict with any direct ftrace_ops. If there is existing
8055 * direct ftrace_ops on a kernel function being patched, call
8056 * FTRACE_OPS_CMD_ENABLE_SHARE_IPMODIFY_PEER on it to enable sharing.
8057 *
8058 * @ops: ftrace_ops being registered.
8059 *
8060 * Returns:
8061 * 0 - @ops does not have IPMODIFY or @ops itself is DIRECT, no
8062 * change needed;
8063 * 1 - @ops has IPMODIFY, hold direct_mutex;
8064 * -EBUSY - currently registered DIRECT ftrace_ops cannot share the
8065 * same function with IPMODIFY, abort the register.
8066 * -EAGAIN - cannot make changes to currently registered DIRECT
8067 * ftrace_ops due to rare race conditions. Should retry
8068 * later. This is needed to avoid potential deadlocks
8069 * on the DIRECT ftrace_ops side.
8070 */
8071 static int prepare_direct_functions_for_ipmodify(struct ftrace_ops *ops)
8072 __acquires(&direct_mutex)
8073 {
8074 struct ftrace_func_entry *entry;
8075 struct ftrace_hash *hash;
8076 struct ftrace_ops *op;
8077 int size, i, ret;
8078
8079 if (!(ops->flags & FTRACE_OPS_FL_IPMODIFY))
8080 return 0;
8081
> 8082 mutex_lock(&direct_mutex);
8083
8084 hash = ops->func_hash->filter_hash;
8085 size = 1 << hash->size_bits;
8086 for (i = 0; i < size; i++) {
8087 hlist_for_each_entry(entry, &hash->buckets[i], hlist) {
8088 unsigned long ip = entry->ip;
8089 bool found_op = false;
8090
8091 mutex_lock(&ftrace_lock);
8092 do_for_each_ftrace_op(op, ftrace_ops_list) {
8093 if (!(op->flags & FTRACE_OPS_FL_DIRECT))
8094 continue;
8095 if (ops_references_ip(op, ip)) {
8096 found_op = true;
8097 break;
8098 }
8099 } while_for_each_ftrace_op(op);
8100 mutex_unlock(&ftrace_lock);
8101
8102 if (found_op) {
8103 if (!op->ops_func) {
8104 ret = -EBUSY;
8105 goto err_out;
8106 }
8107 ret = op->ops_func(op, FTRACE_OPS_CMD_ENABLE_SHARE_IPMODIFY_PEER);
8108 if (ret)
8109 goto err_out;
8110 }
8111 }
8112 }
8113
8114 /*
8115 * Didn't find any overlap with direct ftrace_ops, or the direct
8116 * function can share with ipmodify. Hold direct_mutex to make sure
8117 * this doesn't change until we are done.
8118 */
8119 return 1;
8120
8121 err_out:
8122 mutex_unlock(&direct_mutex);
8123 return ret;
8124 }
8125
--
0-DAY CI Kernel Test Service
https://01.org/lkp
next prev parent reply other threads:[~2022-07-18 3:17 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-07-18 0:14 [PATCH v3 bpf-next 0/4] ftrace: host klp and bpf trampoline together Song Liu
2022-07-18 0:14 ` [PATCH v3 bpf-next 1/4] ftrace: add modify_ftrace_direct_multi_nolock Song Liu
2022-07-18 12:50 ` Petr Mladek
2022-07-18 16:36 ` Song Liu
2022-07-18 0:14 ` [PATCH v3 bpf-next 2/4] ftrace: allow IPMODIFY and DIRECT ops on the same function Song Liu
2022-07-18 2:35 ` kernel test robot
2022-07-18 3:16 ` kernel test robot [this message]
2022-07-18 3:36 ` kernel test robot
2022-07-18 5:46 ` Song Liu
2022-07-18 5:46 ` Song Liu
2022-07-18 0:14 ` [PATCH v3 bpf-next 3/4] bpf, x64: Allow to use caller address from stack Song Liu
2022-07-18 0:14 ` [PATCH v3 bpf-next 4/4] bpf: support bpf_trampoline on functions with IPMODIFY (e.g. livepatch) Song Liu
2022-07-18 13:07 ` Petr Mladek
2022-07-18 16:55 ` Song Liu
2022-07-18 16:55 ` Song Liu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202207181116.PO2cQ09B-lkp@intel.com \
--to=lkp@intel.com \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=jolsa@kernel.org \
--cc=kbuild-all@lists.01.org \
--cc=kernel-team@fb.com \
--cc=linux-kernel@vger.kernel.org \
--cc=live-patching@vger.kernel.org \
--cc=llvm@lists.linux.dev \
--cc=rostedt@goodmis.org \
--cc=song@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.