From: Hagen Paul Pfeifer <hagen@jauu.net>
To: David Miller <davem@davemloft.net>
Cc: shemminger@vyatta.com, netdev@vger.kernel.org,
Linus Torvalds <torvalds@linux-foundation.org>
Subject: Re: [PATCH] net: optimize Berkeley Packet Filter (BPF) processing
Date: Sun, 20 Jun 2010 23:57:44 +0200 [thread overview]
Message-ID: <20100620215743.GA4036@nuttenaction> (raw)
In-Reply-To: <20100620.150928.245399526.davem@davemloft.net>
* David Miller | 2010-06-20 15:09:28 [-0700]:
>I think from this perspective, the change is fine too, nothing visible
>to the user is being changed here.
Fine! I have a fundamental question: can we start to use a C language
extension, known as "Labels as Values" in the kernel? I checked this and at
least gcc, llvm and icc support this extension (btw: c1x[1] don't mention
this):
static int sk_run_filter(struct sock_filter *filter) {
static const void *codetable[] =
{ &&BPF_S_RET_K, &&BPF_S_ALU_ADD_X, &&BPF_S_ALU_SUB_X, &&BPF_S_ALU_MUL_X };
int pc = 0;
goto *codetable[*(filter[pc++].code)];
BPF_S_RET_K:
return k;
BPF_S_ALU_ADD_X:
A += X;
goto *codetable[*(filter[pc++].code)];
BPF_S_ALU_SUB_X:
A -= X;
goto *codetable[*(filter[pc++].code)];
BPF_S_ALU_MUL_X:
A *= X
goto *codetable[*(filter[pc++].code)];
}
At least for gcc and llvm the results are quite impressive: http://llvm.org/bugs/show_bug.cgi?id=3120
arch/m68k/amiga/config.c:amiga_reset() seems to be the only user in the kernel
who use this extension (and nobody complains? ;-)
Cheers, Hagen
[1] http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1425.pdf
--
Hagen Paul Pfeifer <hagen@jauu.net> || http://blog.jauu.net/
Telephone: +49 174 5455209 || Key Id: 0x98350C22
Key Fingerprint: 490F 557B 6C48 6D7E 5706 2EA2 4A22 8D45 9835 0C22
next prev parent reply other threads:[~2010-06-20 22:57 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-06-20 3:05 [PATCH] net: optimize Berkeley Packet Filter (BPF) processing Hagen Paul Pfeifer
2010-06-20 5:16 ` Stephen Hemminger
2010-06-20 9:50 ` Hagen Paul Pfeifer
2010-06-20 18:49 ` Stephen Hemminger
2010-06-20 22:09 ` David Miller
2010-06-20 21:57 ` Hagen Paul Pfeifer [this message]
2010-06-21 2:15 ` Changli Gao
2010-06-21 7:57 ` Hagen Paul Pfeifer
2010-06-26 4:36 ` David Miller
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=20100620215743.GA4036@nuttenaction \
--to=hagen@jauu.net \
--cc=davem@davemloft.net \
--cc=netdev@vger.kernel.org \
--cc=shemminger@vyatta.com \
--cc=torvalds@linux-foundation.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.