From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751620AbbCUQC6 (ORCPT ); Sat, 21 Mar 2015 12:02:58 -0400 Received: from mail-ie0-f173.google.com ([209.85.223.173]:34714 "EHLO mail-ie0-f173.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751510AbbCUQC4 (ORCPT ); Sat, 21 Mar 2015 12:02:56 -0400 Message-ID: <550D962E.7010400@plumgrid.com> Date: Sat, 21 Mar 2015 09:02:54 -0700 From: Alexei Starovoitov User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:31.0) Gecko/20100101 Thunderbird/31.5.0 MIME-Version: 1.0 To: Masami Hiramatsu CC: Ingo Molnar , Steven Rostedt , Namhyung Kim , Arnaldo Carvalho de Melo , Jiri Olsa , "David S. Miller" , Daniel Borkmann , Peter Zijlstra , linux-api@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v9 tip 3/9] tracing: attach BPF programs to kprobes References: <1426894210-27441-1-git-send-email-ast@plumgrid.com> <1426894210-27441-4-git-send-email-ast@plumgrid.com> <550D60C2.8010502@hitachi.com> In-Reply-To: <550D60C2.8010502@hitachi.com> Content-Type: text/plain; charset=iso-2022-jp Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 3/21/15 5:14 AM, Masami Hiramatsu wrote: > (2015/03/21 8:30), Alexei Starovoitov wrote: >> >> Note, kprobes are _not_ a stable kernel ABI, so bpf programs attached to >> kprobes must be recompiled for every kernel version and user must supply correct >> LINUX_VERSION_CODE in attr.kern_version during bpf_prog_load() call. >> > > Would you mean that the ABI of kprobe-based BPF programs? Kprobe API/ABIs > (register_kprobe() etc.) are stable, but the code who use kprobes certainly > depends the kernel binary by design. So, if you meant it, BPF programs must > be recompiled for every kernel binaries (including configuration changes, > not only its version). yes. I mainly meant that bpf+kprobe programs must be recompiled for every kernel binary. But you're incorrect saying that register_kprobe API is stable. It's equally kernel dependent. register_kprobe(struct kprobe *p) is export_gpl, but it takes kernel internal 'struct kprobe' and it's not declared in uapi header. Prototype of kprobe_handler_t is also kernel internal, so whoever is using kprobes must recompile their code every time. If we want, we can change register_kprobe function name to something else. Just like kernel modules cannot expect that exported symbols will stay around from version to version. We don't care when we break out of tree modules.