netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Re: [PATCH] x86: bpf_jit_comp: simplify trivial boolean return
@ 2014-11-26 17:23 Alexei Starovoitov
  2014-11-26 18:02 ` Joe Perches
  2014-12-04 23:00 ` [PATCH] x86: bpf_jit_comp: Reduce is_ereg() code size Joe Perches
  0 siblings, 2 replies; 13+ messages in thread
From: Alexei Starovoitov @ 2014-11-26 17:23 UTC (permalink / raw)
  To: Joe Perches
  Cc: Quentin Lambert, David S. Miller, Alexey Kuznetsov, James Morris,
	Hideaki YOSHIFUJI, Patrick McHardy, Thomas Gleixner, Ingo Molnar,
	H. Peter Anvin, x86, netdev@vger.kernel.org,
	linux-kernel@vger.kernel.org

On Wed, Nov 26, 2014 at 8:58 AM, Joe Perches <joe@perches.com> wrote:
> On Wed, 2014-11-26 at 08:42 -0800, Alexei Starovoitov wrote:
>> On Wed, Nov 26, 2014 at 1:18 AM, Quentin Lambert
>> <lambert.quentin@gmail.com> wrote:
>> > Remove if then else statements preceding
>> > boolean return.
> []
>> > diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c
> []
>> > @@ -135,11 +135,9 @@ static const int reg2hex[] = {
>> >   */
>> >  static inline bool is_ereg(u32 reg)
>> >  {
>> > -       if (reg == BPF_REG_5 || reg == AUX_REG ||
>> > -           (reg >= BPF_REG_7 && reg <= BPF_REG_9))
>> > -               return true;
>> > -       else
>> > -               return false;
>> > +       return (reg == BPF_REG_5 ||
>> > +               reg == AUX_REG ||
>> > +               (reg >= BPF_REG_7 && reg <= BPF_REG_9));
>>
>> please remove extra () around the whole expression, and
>> align in properly, and
>> don't move reg==AUX_REG check to a different line.
>> Subject is not warranted. I don't think it's a simplification.
>
> It's not really a simplification,
> gcc should emit the same object code.

exactly.

>> imo existing code is fine and I don't think the time spent
>> reviewing such changes is worth it when there is no
>> improvement in readability.
>
> Is there any value in reordering these tests for frequency
> or maybe using | instead of || to avoid multiple jumps?

probably not. It's not a critical path.
compiler may fuse conditions depending on values anyway.
If it was a critical path, we could have used
(1 << reg) & mask trick.
I picked explicit 'return true' else 'return false' here,
because it felt easier to read. Just a matter of taste.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] x86: bpf_jit_comp: simplify trivial boolean return
  2014-11-26 17:23 [PATCH] x86: bpf_jit_comp: simplify trivial boolean return Alexei Starovoitov
@ 2014-11-26 18:02 ` Joe Perches
  2014-12-04 23:00 ` [PATCH] x86: bpf_jit_comp: Reduce is_ereg() code size Joe Perches
  1 sibling, 0 replies; 13+ messages in thread
From: Joe Perches @ 2014-11-26 18:02 UTC (permalink / raw)
  To: Alexei Starovoitov
  Cc: Quentin Lambert, David S. Miller, Alexey Kuznetsov, James Morris,
	Hideaki YOSHIFUJI, Patrick McHardy, Thomas Gleixner, Ingo Molnar,
	H. Peter Anvin, x86, netdev@vger.kernel.org,
	linux-kernel@vger.kernel.org

On Wed, 2014-11-26 at 09:23 -0800, Alexei Starovoitov wrote:
> On Wed, Nov 26, 2014 at 8:58 AM, Joe Perches <joe@perches.com> wrote:

> > Is there any value in reordering these tests for frequency
> > or maybe using | instead of || to avoid multiple jumps?
> 
> probably not. It's not a critical path.
> compiler may fuse conditions depending on values anyway.
> If it was a critical path, we could have used
> (1 << reg) & mask trick.
> I picked explicit 'return true' else 'return false' here,
> because it felt easier to read. Just a matter of taste.

There is a size difference though: (allyesconfig)

$ size arch/x86/net/built-in.o*
   text	   data	    bss	    dec	    hex	filename
  12999	   1012	   4336	  18347	   47ab	arch/x86/net/built-in.o.new
  13177	   1076	   4592	  18845	   499d	arch/x86/net/built-in.o.old
---
diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c
index 3f62734..09e2cea 100644
--- a/arch/x86/net/bpf_jit_comp.c
+++ b/arch/x86/net/bpf_jit_comp.c
@@ -135,11 +135,11 @@ static const int reg2hex[] = {
  */
 static inline bool is_ereg(u32 reg)
 {
-	if (reg == BPF_REG_5 || reg == AUX_REG ||
-	    (reg >= BPF_REG_7 && reg <= BPF_REG_9))
-		return true;
-	else
-		return false;
+	return (1 << reg) & (BIT(BPF_REG_5) |
+			     BIT(AUX_REG) |
+			     BIT(BPF_REG_7) |
+			     BIT(BPF_REG_8) |
+			     BIT(BPF_REG_9));
 }
 
 /* add modifiers if 'reg' maps to x64 registers r8..r15 */

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH] x86: bpf_jit_comp: Reduce is_ereg() code size
  2014-11-26 17:23 [PATCH] x86: bpf_jit_comp: simplify trivial boolean return Alexei Starovoitov
  2014-11-26 18:02 ` Joe Perches
@ 2014-12-04 23:00 ` Joe Perches
  2014-12-04 23:12   ` Alexei Starovoitov
                     ` (2 more replies)
  1 sibling, 3 replies; 13+ messages in thread
From: Joe Perches @ 2014-12-04 23:00 UTC (permalink / raw)
  To: Alexei Starovoitov
  Cc: Quentin Lambert, David S. Miller, Alexey Kuznetsov, James Morris,
	Hideaki YOSHIFUJI, Patrick McHardy, Thomas Gleixner, Ingo Molnar,
	H. Peter Anvin, x86, netdev@vger.kernel.org,
	linux-kernel@vger.kernel.org

Use the (1 << reg) & mask trick to reduce code size.

x86-64 size difference -O2 without profiling for various
gcc versions:

$ size arch/x86/net/bpf_jit_comp.o*
   text    data     bss     dec     hex filename
   9266       4       0    9270    2436 arch/x86/net/bpf_jit_comp.o.4.4.new
  10042       4       0   10046    273e arch/x86/net/bpf_jit_comp.o.4.4.old
   9109       4       0    9113    2399 arch/x86/net/bpf_jit_comp.o.4.6.new
   9717       4       0    9721    25f9 arch/x86/net/bpf_jit_comp.o.4.6.old
   8789       4       0    8793    2259 arch/x86/net/bpf_jit_comp.o.4.7.new
  10245       4       0   10249    2809 arch/x86/net/bpf_jit_comp.o.4.7.old
   9671       4       0    9675    25cb arch/x86/net/bpf_jit_comp.o.4.9.new
  10679       4       0   10683    29bb arch/x86/net/bpf_jit_comp.o.4.9.old

Signed-off-by: Joe Perches <joe@perches.com>
---

compiled, untested by me, but per Alexei Starovoitov this passes
the test_bpf suite

diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c
index 3f62734..09e2cea 100644
--- a/arch/x86/net/bpf_jit_comp.c
+++ b/arch/x86/net/bpf_jit_comp.c
@@ -135,11 +135,11 @@ static const int reg2hex[] = {
  */
 static inline bool is_ereg(u32 reg)
 {
-	if (reg == BPF_REG_5 || reg == AUX_REG ||
-	    (reg >= BPF_REG_7 && reg <= BPF_REG_9))
-		return true;
-	else
-		return false;
+	return (1 << reg) & (BIT(BPF_REG_5) |
+			     BIT(AUX_REG) |
+			     BIT(BPF_REG_7) |
+			     BIT(BPF_REG_8) |
+			     BIT(BPF_REG_9));
 }
 
 /* add modifiers if 'reg' maps to x64 registers r8..r15 */

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH] x86: bpf_jit_comp: Reduce is_ereg() code size
  2014-12-04 23:00 ` [PATCH] x86: bpf_jit_comp: Reduce is_ereg() code size Joe Perches
@ 2014-12-04 23:12   ` Alexei Starovoitov
  2014-12-04 23:14   ` Eric Dumazet
  2014-12-09 19:57   ` David Miller
  2 siblings, 0 replies; 13+ messages in thread
From: Alexei Starovoitov @ 2014-12-04 23:12 UTC (permalink / raw)
  To: Joe Perches, Daniel Borkmann
  Cc: Quentin Lambert, David S. Miller, Alexey Kuznetsov, James Morris,
	Hideaki YOSHIFUJI, Patrick McHardy, Thomas Gleixner, Ingo Molnar,
	H. Peter Anvin, x86@kernel.org, netdev@vger.kernel.org,
	linux-kernel@vger.kernel.org

On Thu, Dec 4, 2014 at 3:00 PM, Joe Perches <joe@perches.com> wrote:
> Use the (1 << reg) & mask trick to reduce code size.
>
> x86-64 size difference -O2 without profiling for various
> gcc versions:
>
> $ size arch/x86/net/bpf_jit_comp.o*
>    text    data     bss     dec     hex filename
>    9266       4       0    9270    2436 arch/x86/net/bpf_jit_comp.o.4.4.new
>   10042       4       0   10046    273e arch/x86/net/bpf_jit_comp.o.4.4.old
>    9109       4       0    9113    2399 arch/x86/net/bpf_jit_comp.o.4.6.new
>    9717       4       0    9721    25f9 arch/x86/net/bpf_jit_comp.o.4.6.old
>    8789       4       0    8793    2259 arch/x86/net/bpf_jit_comp.o.4.7.new
>   10245       4       0   10249    2809 arch/x86/net/bpf_jit_comp.o.4.7.old
>    9671       4       0    9675    25cb arch/x86/net/bpf_jit_comp.o.4.9.new
>   10679       4       0   10683    29bb arch/x86/net/bpf_jit_comp.o.4.9.old
>
> Signed-off-by: Joe Perches <joe@perches.com>

probably it was worth noting in comment that
reg is 4-bit value and AUX_REG==12, so it won't overflow.

Dave, it's for net-next of course.

Suggested-by: Alexei Starovoitov <ast@plumgrid.com>
Tested-by: Alexei Starovoitov <ast@plumgrid.com>

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] x86: bpf_jit_comp: Reduce is_ereg() code size
  2014-12-04 23:00 ` [PATCH] x86: bpf_jit_comp: Reduce is_ereg() code size Joe Perches
  2014-12-04 23:12   ` Alexei Starovoitov
@ 2014-12-04 23:14   ` Eric Dumazet
  2014-12-04 23:31     ` Alexei Starovoitov
  2014-12-04 23:35     ` [PATCH] x86: bpf_jit_comp: Reduce is_ereg() code size Joe Perches
  2014-12-09 19:57   ` David Miller
  2 siblings, 2 replies; 13+ messages in thread
From: Eric Dumazet @ 2014-12-04 23:14 UTC (permalink / raw)
  To: Joe Perches
  Cc: Alexei Starovoitov, Quentin Lambert, David S. Miller,
	Alexey Kuznetsov, James Morris, Hideaki YOSHIFUJI,
	Patrick McHardy, Thomas Gleixner, Ingo Molnar, H. Peter Anvin,
	x86, netdev@vger.kernel.org, linux-kernel@vger.kernel.org

On Thu, 2014-12-04 at 15:00 -0800, Joe Perches wrote:
> Use the (1 << reg) & mask trick to reduce code size.
> 
> x86-64 size difference -O2 without profiling for various
> gcc versions:

> 
> Signed-off-by: Joe Perches <joe@perches.com>
> ---
> 
> compiled, untested by me, but per Alexei Starovoitov this passes
> the test_bpf suite

Really, the root cause of this is the 'inline' abuse in non fast paths
for non trivial functions.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] x86: bpf_jit_comp: Reduce is_ereg() code size
  2014-12-04 23:14   ` Eric Dumazet
@ 2014-12-04 23:31     ` Alexei Starovoitov
  2014-12-05  0:46       ` Eric Dumazet
  2014-12-04 23:35     ` [PATCH] x86: bpf_jit_comp: Reduce is_ereg() code size Joe Perches
  1 sibling, 1 reply; 13+ messages in thread
From: Alexei Starovoitov @ 2014-12-04 23:31 UTC (permalink / raw)
  To: Eric Dumazet
  Cc: Joe Perches, Quentin Lambert, David S. Miller, Alexey Kuznetsov,
	James Morris, Hideaki YOSHIFUJI, Patrick McHardy, Thomas Gleixner,
	Ingo Molnar, H. Peter Anvin, x86@kernel.org,
	netdev@vger.kernel.org, linux-kernel@vger.kernel.org

On Thu, Dec 4, 2014 at 3:14 PM, Eric Dumazet <eric.dumazet@gmail.com> wrote:
> On Thu, 2014-12-04 at 15:00 -0800, Joe Perches wrote:
>> Use the (1 << reg) & mask trick to reduce code size.
>>
>> x86-64 size difference -O2 without profiling for various
>> gcc versions:
>
>>
>> Signed-off-by: Joe Perches <joe@perches.com>
>> ---
>>
>> compiled, untested by me, but per Alexei Starovoitov this passes
>> the test_bpf suite
>
> Really, the root cause of this is the 'inline' abuse in non fast paths
> for non trivial functions.

well, it is a trivial function even from compiler point of view.
Dropping inline keyword doesn't help. gcc still inlines them.
Changing all 3 functions to _noinline_ doesn't help either.
So I think this patch is actually quite helpful to reduce code size.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] x86: bpf_jit_comp: Reduce is_ereg() code size
  2014-12-04 23:14   ` Eric Dumazet
  2014-12-04 23:31     ` Alexei Starovoitov
@ 2014-12-04 23:35     ` Joe Perches
  1 sibling, 0 replies; 13+ messages in thread
From: Joe Perches @ 2014-12-04 23:35 UTC (permalink / raw)
  To: Eric Dumazet
  Cc: Alexei Starovoitov, Quentin Lambert, David S. Miller,
	Alexey Kuznetsov, James Morris, Hideaki YOSHIFUJI,
	Patrick McHardy, Thomas Gleixner, Ingo Molnar, H. Peter Anvin,
	x86, netdev@vger.kernel.org, linux-kernel@vger.kernel.org

On Thu, 2014-12-04 at 15:14 -0800, Eric Dumazet wrote:
> On Thu, 2014-12-04 at 15:00 -0800, Joe Perches wrote:
> > Use the (1 << reg) & mask trick to reduce code size.
[]
> Really, the root cause of this is the 'inline' abuse in non fast paths
> for non trivial functions.

There is no object size change with is_ereg()
defined "static inline" or "static"

Curiously, if you mark it noinline, the size increases.

gcc 4.9.1, x86-64, -O2 no profiling support

$ size arch/x86/net/bpf_jit_comp.o.st*
   text	   data	    bss	    dec	    hex	filename
  10679	      4	      0	  10683	   29bb	arch/x86/net/bpf_jit_comp.o.static_inline
  11535	      4	      0	  11539	   2d13	arch/x86/net/bpf_jit_comp.o.static_noinline
  10679	      4	      0	  10683	   29bb	arch/x86/net/bpf_jit_comp.o.static_without_inline

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] x86: bpf_jit_comp: Reduce is_ereg() code size
  2014-12-04 23:31     ` Alexei Starovoitov
@ 2014-12-05  0:46       ` Eric Dumazet
  2014-12-05  1:01         ` [PATCH] x86: bpf_jit_comp: Remove inline from static function definitions Joe Perches
  0 siblings, 1 reply; 13+ messages in thread
From: Eric Dumazet @ 2014-12-05  0:46 UTC (permalink / raw)
  To: Alexei Starovoitov
  Cc: Joe Perches, Quentin Lambert, David S. Miller, Alexey Kuznetsov,
	James Morris, Hideaki YOSHIFUJI, Patrick McHardy, Thomas Gleixner,
	Ingo Molnar, H. Peter Anvin, x86@kernel.org,
	netdev@vger.kernel.org, linux-kernel@vger.kernel.org

On Thu, 2014-12-04 at 15:31 -0800, Alexei Starovoitov wrote:

> well, it is a trivial function even from compiler point of view.
> Dropping inline keyword doesn't help. gcc still inlines them.
> Changing all 3 functions to _noinline_ doesn't help either.
> So I think this patch is actually quite helpful to reduce code size.

Well, again this might depend on CONFIG_CC_OPTIMIZE_FOR_SIZE

I guess people trying to get very small kernels are using this option.

My point was : If we care about code size, we should also remove these
inline keywords at the same time, to increase SNR of netdev/lkml lists.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH] x86: bpf_jit_comp: Remove inline from static function definitions
  2014-12-05  0:46       ` Eric Dumazet
@ 2014-12-05  1:01         ` Joe Perches
  2014-12-05  1:21           ` Alexei Starovoitov
  2014-12-09 19:57           ` David Miller
  0 siblings, 2 replies; 13+ messages in thread
From: Joe Perches @ 2014-12-05  1:01 UTC (permalink / raw)
  To: Eric Dumazet
  Cc: Alexei Starovoitov, Quentin Lambert, David S. Miller,
	Alexey Kuznetsov, James Morris, Hideaki YOSHIFUJI,
	Patrick McHardy, Thomas Gleixner, Ingo Molnar, H. Peter Anvin,
	x86@kernel.org, netdev@vger.kernel.org,
	linux-kernel@vger.kernel.org

Let the compiler decide instead.

No change in object size x86-64 -O2 no profiling

Signed-off-by: Joe Perches <joe@perches.com>
Suggested-by: Eric Dumazet <eric.dumazet@gmail.com>
---
On Thu, 2014-12-04 at 16:46 -0800, Eric Dumazet wrote:
> On Thu, 2014-12-04 at 15:31 -0800, Alexei Starovoitov wrote:
> 
> > well, it is a trivial function even from compiler point of view.
> > Dropping inline keyword doesn't help. gcc still inlines them.
> > Changing all 3 functions to _noinline_ doesn't help either.
> > So I think this patch is actually quite helpful to reduce code size.
> 
> Well, again this might depend on CONFIG_CC_OPTIMIZE_FOR_SIZE

-Os has a different size delta, but it's still
smaller using this new function.

> I guess people trying to get very small kernels are using this option.
> 
> My point was : If we care about code size, we should also remove these
> inline keywords at the same time, to increase SNR of netdev/lkml lists.

Because there's no object change here, inline removals
would probably be a good thing for this file.

 arch/x86/net/bpf_jit_comp.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)

diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c
index 09e2cea..626e013 100644
--- a/arch/x86/net/bpf_jit_comp.c
+++ b/arch/x86/net/bpf_jit_comp.c
@@ -24,7 +24,7 @@ extern u8 sk_load_byte_positive_offset[];
 extern u8 sk_load_word_negative_offset[], sk_load_half_negative_offset[];
 extern u8 sk_load_byte_negative_offset[];
 
-static inline u8 *emit_code(u8 *ptr, u32 bytes, unsigned int len)
+static u8 *emit_code(u8 *ptr, u32 bytes, unsigned int len)
 {
 	if (len == 1)
 		*ptr = bytes;
@@ -52,12 +52,12 @@ static inline u8 *emit_code(u8 *ptr, u32 bytes, unsigned int len)
 #define EMIT4_off32(b1, b2, b3, b4, off) \
 	do {EMIT4(b1, b2, b3, b4); EMIT(off, 4); } while (0)
 
-static inline bool is_imm8(int value)
+static bool is_imm8(int value)
 {
 	return value <= 127 && value >= -128;
 }
 
-static inline bool is_simm32(s64 value)
+static bool is_simm32(s64 value)
 {
 	return value == (s64) (s32) value;
 }
@@ -94,7 +94,7 @@ static int bpf_size_to_x86_bytes(int bpf_size)
 #define X86_JGE 0x7D
 #define X86_JG  0x7F
 
-static inline void bpf_flush_icache(void *start, void *end)
+static void bpf_flush_icache(void *start, void *end)
 {
 	mm_segment_t old_fs = get_fs();
 
@@ -133,7 +133,7 @@ static const int reg2hex[] = {
  * which need extra byte of encoding.
  * rax,rcx,...,rbp have simpler encoding
  */
-static inline bool is_ereg(u32 reg)
+static bool is_ereg(u32 reg)
 {
 	return (1 << reg) & (BIT(BPF_REG_5) |
 			     BIT(AUX_REG) |
@@ -143,14 +143,14 @@ static inline bool is_ereg(u32 reg)
 }
 
 /* add modifiers if 'reg' maps to x64 registers r8..r15 */
-static inline u8 add_1mod(u8 byte, u32 reg)
+static u8 add_1mod(u8 byte, u32 reg)
 {
 	if (is_ereg(reg))
 		byte |= 1;
 	return byte;
 }
 
-static inline u8 add_2mod(u8 byte, u32 r1, u32 r2)
+static u8 add_2mod(u8 byte, u32 r1, u32 r2)
 {
 	if (is_ereg(r1))
 		byte |= 1;
@@ -160,13 +160,13 @@ static inline u8 add_2mod(u8 byte, u32 r1, u32 r2)
 }
 
 /* encode 'dst_reg' register into x64 opcode 'byte' */
-static inline u8 add_1reg(u8 byte, u32 dst_reg)
+static u8 add_1reg(u8 byte, u32 dst_reg)
 {
 	return byte + reg2hex[dst_reg];
 }
 
 /* encode 'dst_reg' and 'src_reg' registers into x64 opcode 'byte' */
-static inline u8 add_2reg(u8 byte, u32 dst_reg, u32 src_reg)
+static u8 add_2reg(u8 byte, u32 dst_reg, u32 src_reg)
 {
 	return byte + reg2hex[dst_reg] + (reg2hex[src_reg] << 3);
 }

^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH] x86: bpf_jit_comp: Remove inline from static function definitions
  2014-12-05  1:01         ` [PATCH] x86: bpf_jit_comp: Remove inline from static function definitions Joe Perches
@ 2014-12-05  1:21           ` Alexei Starovoitov
  2014-12-05  1:43             ` Joe Perches
  2014-12-09 19:57           ` David Miller
  1 sibling, 1 reply; 13+ messages in thread
From: Alexei Starovoitov @ 2014-12-05  1:21 UTC (permalink / raw)
  To: Joe Perches
  Cc: Eric Dumazet, Quentin Lambert, David S. Miller, Alexey Kuznetsov,
	James Morris, Hideaki YOSHIFUJI, Patrick McHardy, Thomas Gleixner,
	Ingo Molnar, H. Peter Anvin, x86@kernel.org,
	netdev@vger.kernel.org, linux-kernel@vger.kernel.org

On Thu, Dec 4, 2014 at 5:01 PM, Joe Perches <joe@perches.com> wrote:
> Let the compiler decide instead.
>
> No change in object size x86-64 -O2 no profiling
>
> Signed-off-by: Joe Perches <joe@perches.com>
> Suggested-by: Eric Dumazet <eric.dumazet@gmail.com>

Acked-by: Alexei Starovoitov <ast@plumgrid.com>

Dave, this is on top of previous patch:
http://patchwork.ozlabs.org/patch/417960/

Joe, please mention dependencies next time.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] x86: bpf_jit_comp: Remove inline from static function definitions
  2014-12-05  1:21           ` Alexei Starovoitov
@ 2014-12-05  1:43             ` Joe Perches
  0 siblings, 0 replies; 13+ messages in thread
From: Joe Perches @ 2014-12-05  1:43 UTC (permalink / raw)
  To: Alexei Starovoitov
  Cc: Eric Dumazet, Quentin Lambert, David S. Miller, Alexey Kuznetsov,
	James Morris, Hideaki YOSHIFUJI, Patrick McHardy, Thomas Gleixner,
	Ingo Molnar, H. Peter Anvin, x86@kernel.org,
	netdev@vger.kernel.org, linux-kernel@vger.kernel.org

On Thu, 2014-12-04 at 17:21 -0800, Alexei Starovoitov wrote:
> Joe, please mention dependencies next time.

No real need here.
It's in the same thread.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] x86: bpf_jit_comp: Reduce is_ereg() code size
  2014-12-04 23:00 ` [PATCH] x86: bpf_jit_comp: Reduce is_ereg() code size Joe Perches
  2014-12-04 23:12   ` Alexei Starovoitov
  2014-12-04 23:14   ` Eric Dumazet
@ 2014-12-09 19:57   ` David Miller
  2 siblings, 0 replies; 13+ messages in thread
From: David Miller @ 2014-12-09 19:57 UTC (permalink / raw)
  To: joe
  Cc: alexei.starovoitov, lambert.quentin, kuznet, jmorris, yoshfuji,
	kaber, tglx, mingo, hpa, x86, netdev, linux-kernel

From: Joe Perches <joe@perches.com>
Date: Thu, 04 Dec 2014 15:00:48 -0800

> Use the (1 << reg) & mask trick to reduce code size.
> 
> x86-64 size difference -O2 without profiling for various
> gcc versions:
> 
> $ size arch/x86/net/bpf_jit_comp.o*
>    text    data     bss     dec     hex filename
>    9266       4       0    9270    2436 arch/x86/net/bpf_jit_comp.o.4.4.new
>   10042       4       0   10046    273e arch/x86/net/bpf_jit_comp.o.4.4.old
>    9109       4       0    9113    2399 arch/x86/net/bpf_jit_comp.o.4.6.new
>    9717       4       0    9721    25f9 arch/x86/net/bpf_jit_comp.o.4.6.old
>    8789       4       0    8793    2259 arch/x86/net/bpf_jit_comp.o.4.7.new
>   10245       4       0   10249    2809 arch/x86/net/bpf_jit_comp.o.4.7.old
>    9671       4       0    9675    25cb arch/x86/net/bpf_jit_comp.o.4.9.new
>   10679       4       0   10683    29bb arch/x86/net/bpf_jit_comp.o.4.9.old
> 
> Signed-off-by: Joe Perches <joe@perches.com>

Applied.

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH] x86: bpf_jit_comp: Remove inline from static function definitions
  2014-12-05  1:01         ` [PATCH] x86: bpf_jit_comp: Remove inline from static function definitions Joe Perches
  2014-12-05  1:21           ` Alexei Starovoitov
@ 2014-12-09 19:57           ` David Miller
  1 sibling, 0 replies; 13+ messages in thread
From: David Miller @ 2014-12-09 19:57 UTC (permalink / raw)
  To: joe
  Cc: eric.dumazet, alexei.starovoitov, lambert.quentin, kuznet,
	jmorris, yoshfuji, kaber, tglx, mingo, hpa, x86, netdev,
	linux-kernel

From: Joe Perches <joe@perches.com>
Date: Thu, 04 Dec 2014 17:01:24 -0800

> Let the compiler decide instead.
> 
> No change in object size x86-64 -O2 no profiling
> 
> Signed-off-by: Joe Perches <joe@perches.com>
> Suggested-by: Eric Dumazet <eric.dumazet@gmail.com>

Applied.

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2014-12-09 19:57 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-11-26 17:23 [PATCH] x86: bpf_jit_comp: simplify trivial boolean return Alexei Starovoitov
2014-11-26 18:02 ` Joe Perches
2014-12-04 23:00 ` [PATCH] x86: bpf_jit_comp: Reduce is_ereg() code size Joe Perches
2014-12-04 23:12   ` Alexei Starovoitov
2014-12-04 23:14   ` Eric Dumazet
2014-12-04 23:31     ` Alexei Starovoitov
2014-12-05  0:46       ` Eric Dumazet
2014-12-05  1:01         ` [PATCH] x86: bpf_jit_comp: Remove inline from static function definitions Joe Perches
2014-12-05  1:21           ` Alexei Starovoitov
2014-12-05  1:43             ` Joe Perches
2014-12-09 19:57           ` David Miller
2014-12-04 23:35     ` [PATCH] x86: bpf_jit_comp: Reduce is_ereg() code size Joe Perches
2014-12-09 19:57   ` David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).