From patchwork Sat Mar 30 03:10:55 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Chen Gang X-Patchwork-Id: 232510 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 8674A2C009C for ; Sat, 30 Mar 2013 14:11:41 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757829Ab3C3DL1 (ORCPT ); Fri, 29 Mar 2013 23:11:27 -0400 Received: from intranet.asianux.com ([58.214.24.6]:36785 "EHLO intranet.asianux.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757801Ab3C3DL0 (ORCPT ); Fri, 29 Mar 2013 23:11:26 -0400 Received: by intranet.asianux.com (Postfix, from userid 103) id 20A92184031B; Sat, 30 Mar 2013 11:11:25 +0800 (CST) X-Spam-Score: -100.8 X-Spam-Checker-Version: SpamAssassin 3.1.9 (2007-02-13) on intranet.asianux.com X-Spam-Level: X-Spam-Status: No, score=-100.8 required=5.0 tests=AWL,BAYES_00, RATWARE_GECKO_BUILD,USER_IN_WHITELIST autolearn=no version=3.1.9 Received: from [10.1.0.143] (unknown [219.143.36.82]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by intranet.asianux.com (Postfix) with ESMTP id A97CF1840236; Sat, 30 Mar 2013 11:11:24 +0800 (CST) Message-ID: <515657BF.7010101@asianux.com> Date: Sat, 30 Mar 2013 11:10:55 +0800 From: Chen Gang User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130110 Thunderbird/17.0.2 MIME-Version: 1.0 To: David Miller CC: edumazet@google.com, dborkman@redhat.com, wad@chromium.org, eparis@redhat.com, netdev@vger.kernel.org Subject: Re: [PATCH v2] include/linux: printk is needed in filter.h when CONFIG_BPF_JIT is defined References: <5153DC24.4010104@asianux.com> <5154ED65.5090607@asianux.com> <20130329.153447.426374969178935845.davem@davemloft.net> In-Reply-To: <20130329.153447.426374969178935845.davem@davemloft.net> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org On 2013年03月30日 03:34, David Miller wrote: > From: Chen Gang > Date: Fri, 29 Mar 2013 09:24:53 +0800 > >> > >> > for make V=1 EXTRA_CFLAGS=-W ARCH=arm allmodconfig >> > printk is need when CONFIG_BPF_JIT is defined >> > or it will report pr_err and print_hex_dump are implicit declaration >> > >> > Signed-off-by: Chen Gang > There are no references to pr_err nor print_hex_dump in this > filter.h header file. maybe we see the different tree. I find it in next-20130328. please help check, thanks. commit 79617801ea0c0e6664cb497d4c1892c2ff407364 Author: Daniel Borkmann Date: Thu Mar 21 22:22:03 2013 +0100 filter: bpf_jit_comp: refactor and unify BPF JIT image dump output If bpf_jit_enable > 1, then we dump the emitted JIT compiled image after creation. Currently, only SPARC and PowerPC has similar output as in the reference implementation on x86_64. Make a small helper function in order to reduce duplicated code and make the dump output uniform across architectures x86_64, SPARC, PPC, ARM (e.g. on ARM flen, pass and proglen are currently not shown, but would be interesting to know as well), also for future BPF JIT implementations on other archs. Cc: Mircea Gherzan Cc: Matt Evans Cc: Eric Dumazet Cc: David S. Miller Signed-off-by: Daniel Borkmann Signed-off-by: David S. Miller diff --git a/include/linux/filter.h b/include/linux/filter.h index d2059cb..d7d2508 100644 --- a/include/linux/filter.h +++ b/include/linux/filter.h @@ -50,6 +50,16 @@ extern int sk_get_filter(struct sock *sk, struct sock_filter __user *filter, uns #ifdef CONFIG_BPF_JIT extern void bpf_jit_compile(struct sk_filter *fp); extern void bpf_jit_free(struct sk_filter *fp); + +static inline void bpf_jit_dump(unsigned int flen, unsigned int proglen, + u32 pass, void *image) +{ + pr_err("flen=%u proglen=%u pass=%u image=%p\n", + flen, proglen, pass, image); + if (image) + print_hex_dump(KERN_ERR, "JIT code: ", DUMP_PREFIX_ADDRESS, + 16, 1, image, proglen, false); +} #define SK_RUN_FILTER(FILTER, SKB) (*FILTER->bpf_func)(SKB, FILTER->insns) #else static inline void bpf_jit_compile(struct sk_filter *fp)