From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752657AbdBHChy (ORCPT ); Tue, 7 Feb 2017 21:37:54 -0500 Received: from szxga01-in.huawei.com ([58.251.152.64]:64332 "EHLO szxga01-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751859AbdBHChw (ORCPT ); Tue, 7 Feb 2017 21:37:52 -0500 Subject: Re: [PATCH v3 2/5] bpf: Simplify bpf_load_program() error handling in the library To: =?UTF-8?Q?Micka=c3=abl_Sala=c3=bcn?= , References: <20170207205609.8035-1-mic@digikod.net> <20170207205609.8035-3-mic@digikod.net> CC: Alexei Starovoitov , Arnaldo Carvalho de Melo , Daniel Borkmann , "David S . Miller" , Joe Stringer , From: "Wangnan (F)" Message-ID: <59c4e38e-baa3-e130-3d74-14aa6b11bda5@huawei.com> Date: Wed, 8 Feb 2017 10:35:46 +0800 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.5.1 MIME-Version: 1.0 In-Reply-To: <20170207205609.8035-3-mic@digikod.net> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 8bit X-Originating-IP: [10.111.194.139] X-CFilter-Loop: Reflected X-Mirapoint-Virus-RAPID-Raw: score=unknown(0), refid=str=0001.0A090203.589A8477.005D,ss=1,re=0.000,recu=0.000,reip=0.000,cl=1,cld=1,fgs=0, ip=0.0.0.0, so=2013-06-18 04:22:30, dmn=2013-03-21 17:37:32 X-Mirapoint-Loop-Id: 3ad273fc21d3028335d178713c30ea30 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2017/2/8 4:56, Mickaël Salaün wrote: > Do not call a second time bpf(2) when a program load failed. BPF_PROG_LOAD should success most of the time. Setting log_level to 0 by default and require log buffer when failure can make it faster in normal case. Thank you. > Signed-off-by: Mickaël Salaün > Cc: Alexei Starovoitov > Cc: Arnaldo Carvalho de Melo > Cc: Daniel Borkmann > Cc: Wang Nan > --- > tools/lib/bpf/bpf.c | 18 ++++++------------ > 1 file changed, 6 insertions(+), 12 deletions(-) > > diff --git a/tools/lib/bpf/bpf.c b/tools/lib/bpf/bpf.c > index 3ddb58a36d3c..fda3f494f1cd 100644 > --- a/tools/lib/bpf/bpf.c > +++ b/tools/lib/bpf/bpf.c > @@ -73,7 +73,6 @@ int bpf_load_program(enum bpf_prog_type type, struct bpf_insn *insns, > size_t insns_cnt, char *license, > __u32 kern_version, char *log_buf, size_t log_buf_sz) > { > - int fd; > union bpf_attr attr; > > bzero(&attr, sizeof(attr)); > @@ -81,20 +80,15 @@ int bpf_load_program(enum bpf_prog_type type, struct bpf_insn *insns, > attr.insn_cnt = (__u32)insns_cnt; > attr.insns = ptr_to_u64(insns); > attr.license = ptr_to_u64(license); > - attr.log_buf = ptr_to_u64(NULL); > - attr.log_size = 0; > - attr.log_level = 0; > + attr.log_buf = ptr_to_u64(log_buf); > + attr.log_size = log_buf_sz; > attr.kern_version = kern_version; > > - fd = sys_bpf(BPF_PROG_LOAD, &attr, sizeof(attr)); > - if (fd >= 0 || !log_buf || !log_buf_sz) > - return fd; > + if (log_buf && log_buf_sz > 0) { > + attr.log_level = 1; > + log_buf[0] = 0; > + } > > - /* Try again with log */ > - attr.log_buf = ptr_to_u64(log_buf); > - attr.log_size = log_buf_sz; > - attr.log_level = 1; > - log_buf[0] = 0; > return sys_bpf(BPF_PROG_LOAD, &attr, sizeof(attr)); > } >