From: Harvey Harrison <harvey.harrison@gmail.com>
To: Johannes Berg <johannes@sipsolutions.net>
Cc: Sebastian Siewior <lkml@ml.breakpoint.cc>,
Herbert Xu <herbert@gondor.apana.org.au>,
LKML <linux-kernel@vger.kernel.org>,
Andrew Morton <akpm@linux-foundation.org>
Subject: Re: [PATCH] crypto: make michael_block a function
Date: Fri, 16 May 2008 08:52:03 -0700 [thread overview]
Message-ID: <1210953123.5915.33.camel@brick> (raw)
In-Reply-To: <1210925405.4000.3.camel@johannes.berg>
[-- Attachment #1: Type: text/plain, Size: 1131 bytes --]
On Fri, 2008-05-16 at 10:10 +0200, Johannes Berg wrote:
> On Fri, 2008-05-16 at 09:01 +0200, Sebastian Siewior wrote:
> > * Harvey Harrison | 2008-05-15 23:17:17 [-0700]:
> >
> > >Make the michael_block macro a function and change the calling
> > >function to take a struct michael_mic_ctx * and the value for
> > >the initial xor with ctx->l.
> > >
> > >Also open-code xswap in its one use in michael_block.
> > Does this change have any performance impact?
> > The only user is wireless (I guess). Is it used frequently (sign every
> > packet for instance) or once in a while (in every re-keying)?
>
> Every packet. I have no idea whether it has performance impact, very
> hard to even guess.
>
Well, the code-size difference is significant (about 200 bytes smaller
on X86-32). This macro is essentially an inline function that is pretty
large.
Attached find the objdump -d of the original and after the patch. As it
is, this code isn't used anywhere that I can find as mac80211 has its
own implementation, I'm trying to see if there is much advantage in
keeping the private version over moving to the crypto one.
Harvey
[-- Attachment #2: michael_mic.orig --]
[-- Type: text/plain, Size: 11197 bytes --]
crypto/michael_mic.o: file format elf32-i386
Disassembly of section .text:
00000000 <michael_setkey>:
0: 83 f9 08 cmp $0x8,%ecx
3: 53 push %ebx
4: 89 d3 mov %edx,%ebx
6: 74 0d je 15 <michael_setkey+0x15>
8: 81 08 00 00 20 00 orl $0x200000,(%eax)
e: b8 ea ff ff ff mov $0xffffffea,%eax
13: eb 10 jmp 25 <michael_setkey+0x25>
15: 8b 12 mov (%edx),%edx
17: 83 c0 30 add $0x30,%eax
1a: 89 50 08 mov %edx,0x8(%eax)
1d: 8b 53 04 mov 0x4(%ebx),%edx
20: 89 50 0c mov %edx,0xc(%eax)
23: 31 c0 xor %eax,%eax
25: 5b pop %ebx
26: c3 ret
00000027 <michael_init>:
27: c7 40 34 00 00 00 00 movl $0x0,0x34(%eax)
2e: c3 ret
0000002f <michael_update>:
2f: 55 push %ebp
30: 89 cd mov %ecx,%ebp
32: 57 push %edi
33: 56 push %esi
34: 53 push %ebx
35: 89 c3 mov %eax,%ebx
37: 83 ec 08 sub $0x8,%esp
3a: 83 c3 30 add $0x30,%ebx
3d: 89 44 24 04 mov %eax,0x4(%esp)
41: 89 14 24 mov %edx,(%esp)
44: 8b 73 04 mov 0x4(%ebx),%esi
47: 85 f6 test %esi,%esi
49: 0f 84 93 00 00 00 je e2 <michael_update+0xb3>
4f: b8 04 00 00 00 mov $0x4,%eax
54: 29 f0 sub %esi,%eax
56: 39 c8 cmp %ecx,%eax
58: 89 c2 mov %eax,%edx
5a: 0f 47 d1 cmova %ecx,%edx
5d: 89 d1 mov %edx,%ecx
5f: 8d 3c 33 lea (%ebx,%esi,1),%edi
62: 8b 34 24 mov (%esp),%esi
65: c1 e9 02 shr $0x2,%ecx
68: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
6a: 89 d1 mov %edx,%ecx
6c: 83 e1 03 and $0x3,%ecx
6f: 74 02 je 73 <michael_update+0x44>
71: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
73: 89 d0 mov %edx,%eax
75: 03 43 04 add 0x4(%ebx),%eax
78: 83 f8 03 cmp $0x3,%eax
7b: 89 43 04 mov %eax,0x4(%ebx)
7e: 0f 86 d2 00 00 00 jbe 156 <michael_update+0x127>
84: 8b 44 24 04 mov 0x4(%esp),%eax
88: 29 d5 sub %edx,%ebp
8a: 01 14 24 add %edx,(%esp)
8d: 8b 53 08 mov 0x8(%ebx),%edx
90: 33 50 30 xor 0x30(%eax),%edx
93: c7 43 04 00 00 00 00 movl $0x0,0x4(%ebx)
9a: 89 53 08 mov %edx,0x8(%ebx)
9d: c1 ca 0f ror $0xf,%edx
a0: 33 53 0c xor 0xc(%ebx),%edx
a3: 89 d0 mov %edx,%eax
a5: 03 43 08 add 0x8(%ebx),%eax
a8: 89 c1 mov %eax,%ecx
aa: 89 43 08 mov %eax,0x8(%ebx)
ad: 81 e1 00 ff 00 ff and $0xff00ff00,%ecx
b3: 25 ff 00 ff 00 and $0xff00ff,%eax
b8: c1 e0 08 shl $0x8,%eax
bb: c1 e9 08 shr $0x8,%ecx
be: 09 c1 or %eax,%ecx
c0: 31 d1 xor %edx,%ecx
c2: 89 ca mov %ecx,%edx
c4: 03 53 08 add 0x8(%ebx),%edx
c7: 89 53 08 mov %edx,0x8(%ebx)
ca: c1 ca 1d ror $0x1d,%edx
cd: 31 ca xor %ecx,%edx
cf: 89 d0 mov %edx,%eax
d1: 03 43 08 add 0x8(%ebx),%eax
d4: 89 43 08 mov %eax,0x8(%ebx)
d7: c1 c8 02 ror $0x2,%eax
da: 31 d0 xor %edx,%eax
dc: 01 43 08 add %eax,0x8(%ebx)
df: 89 43 0c mov %eax,0xc(%ebx)
e2: 8b 34 24 mov (%esp),%esi
e5: eb 54 jmp 13b <michael_update+0x10c>
e7: 8b 53 08 mov 0x8(%ebx),%edx
ea: 83 c6 04 add $0x4,%esi
ed: 83 ed 04 sub $0x4,%ebp
f0: 33 56 fc xor -0x4(%esi),%edx
f3: 89 53 08 mov %edx,0x8(%ebx)
f6: c1 ca 0f ror $0xf,%edx
f9: 33 53 0c xor 0xc(%ebx),%edx
fc: 89 d0 mov %edx,%eax
fe: 03 43 08 add 0x8(%ebx),%eax
101: 89 c1 mov %eax,%ecx
103: 89 43 08 mov %eax,0x8(%ebx)
106: 81 e1 00 ff 00 ff and $0xff00ff00,%ecx
10c: 25 ff 00 ff 00 and $0xff00ff,%eax
111: c1 e0 08 shl $0x8,%eax
114: c1 e9 08 shr $0x8,%ecx
117: 09 c1 or %eax,%ecx
119: 31 d1 xor %edx,%ecx
11b: 89 ca mov %ecx,%edx
11d: 03 53 08 add 0x8(%ebx),%edx
120: 89 53 08 mov %edx,0x8(%ebx)
123: c1 ca 1d ror $0x1d,%edx
126: 31 ca xor %ecx,%edx
128: 89 d0 mov %edx,%eax
12a: 03 43 08 add 0x8(%ebx),%eax
12d: 89 43 08 mov %eax,0x8(%ebx)
130: c1 c8 02 ror $0x2,%eax
133: 31 d0 xor %edx,%eax
135: 01 43 08 add %eax,0x8(%ebx)
138: 89 43 0c mov %eax,0xc(%ebx)
13b: 83 fd 03 cmp $0x3,%ebp
13e: 77 a7 ja e7 <michael_update+0xb8>
140: 85 ed test %ebp,%ebp
142: 74 12 je 156 <michael_update+0x127>
144: 89 6b 04 mov %ebp,0x4(%ebx)
147: 31 c9 xor %ecx,%ecx
149: 89 df mov %ebx,%edi
14b: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
14d: 89 e9 mov %ebp,%ecx
14f: 83 e1 03 and $0x3,%ecx
152: 74 02 je 156 <michael_update+0x127>
154: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
156: 58 pop %eax
157: 5a pop %edx
158: 5b pop %ebx
159: 5e pop %esi
15a: 5f pop %edi
15b: 5d pop %ebp
15c: c3 ret
0000015d <michael_final>:
15d: 57 push %edi
15e: 89 d7 mov %edx,%edi
160: 56 push %esi
161: 8d 70 30 lea 0x30(%eax),%esi
164: 53 push %ebx
165: 8b 56 04 mov 0x4(%esi),%edx
168: 83 fa 01 cmp $0x1,%edx
16b: 74 14 je 181 <michael_final+0x24>
16d: 72 0c jb 17b <michael_final+0x1e>
16f: 83 fa 02 cmp $0x2,%edx
172: 74 16 je 18a <michael_final+0x2d>
174: 83 fa 03 cmp $0x3,%edx
177: 75 47 jne 1c0 <michael_final+0x63>
179: eb 27 jmp 1a2 <michael_final+0x45>
17b: 83 76 08 5a xorl $0x5a,0x8(%esi)
17f: eb 3f jmp 1c0 <michael_final+0x63>
181: 0f b6 40 30 movzbl 0x30(%eax),%eax
185: 80 cc 5a or $0x5a,%ah
188: eb 33 jmp 1bd <michael_final+0x60>
18a: 0f b6 50 30 movzbl 0x30(%eax),%edx
18e: 0f b6 46 01 movzbl 0x1(%esi),%eax
192: 81 ca 00 00 5a 00 or $0x5a0000,%edx
198: c1 e0 08 shl $0x8,%eax
19b: 09 c2 or %eax,%edx
19d: 31 56 08 xor %edx,0x8(%esi)
1a0: eb 1e jmp 1c0 <michael_final+0x63>
1a2: 0f b6 40 30 movzbl 0x30(%eax),%eax
1a6: 0f b6 56 01 movzbl 0x1(%esi),%edx
1aa: 0d 00 00 00 5a or $0x5a000000,%eax
1af: c1 e2 08 shl $0x8,%edx
1b2: 09 d0 or %edx,%eax
1b4: 0f b6 56 02 movzbl 0x2(%esi),%edx
1b8: c1 e2 10 shl $0x10,%edx
1bb: 09 d0 or %edx,%eax
1bd: 31 46 08 xor %eax,0x8(%esi)
1c0: 8b 4e 08 mov 0x8(%esi),%ecx
1c3: c1 c9 0f ror $0xf,%ecx
1c6: 33 4e 0c xor 0xc(%esi),%ecx
1c9: 89 c8 mov %ecx,%eax
1cb: 03 46 08 add 0x8(%esi),%eax
1ce: 89 c2 mov %eax,%edx
1d0: 89 46 08 mov %eax,0x8(%esi)
1d3: 81 e2 00 ff 00 ff and $0xff00ff00,%edx
1d9: 25 ff 00 ff 00 and $0xff00ff,%eax
1de: c1 e0 08 shl $0x8,%eax
1e1: c1 ea 08 shr $0x8,%edx
1e4: 09 c2 or %eax,%edx
1e6: 31 ca xor %ecx,%edx
1e8: 89 d0 mov %edx,%eax
1ea: 03 46 08 add 0x8(%esi),%eax
1ed: 89 46 08 mov %eax,0x8(%esi)
1f0: c1 c8 1d ror $0x1d,%eax
1f3: 31 d0 xor %edx,%eax
1f5: 89 c2 mov %eax,%edx
1f7: 03 56 08 add 0x8(%esi),%edx
1fa: 89 56 08 mov %edx,0x8(%esi)
1fd: c1 ca 02 ror $0x2,%edx
200: 31 c2 xor %eax,%edx
202: 89 d3 mov %edx,%ebx
204: 03 5e 08 add 0x8(%esi),%ebx
207: 89 5e 08 mov %ebx,0x8(%esi)
20a: c1 cb 0f ror $0xf,%ebx
20d: 31 d3 xor %edx,%ebx
20f: 89 d8 mov %ebx,%eax
211: 03 46 08 add 0x8(%esi),%eax
214: 89 c1 mov %eax,%ecx
216: 89 46 08 mov %eax,0x8(%esi)
219: 81 e1 00 ff 00 ff and $0xff00ff00,%ecx
21f: 25 ff 00 ff 00 and $0xff00ff,%eax
224: c1 e0 08 shl $0x8,%eax
227: c1 e9 08 shr $0x8,%ecx
22a: 09 c1 or %eax,%ecx
22c: 31 d9 xor %ebx,%ecx
22e: 89 ca mov %ecx,%edx
230: 03 56 08 add 0x8(%esi),%edx
233: 89 56 08 mov %edx,0x8(%esi)
236: c1 ca 1d ror $0x1d,%edx
239: 31 ca xor %ecx,%edx
23b: 89 d1 mov %edx,%ecx
23d: 03 4e 08 add 0x8(%esi),%ecx
240: 89 c8 mov %ecx,%eax
242: c1 c8 02 ror $0x2,%eax
245: 31 d0 xor %edx,%eax
247: 89 46 0c mov %eax,0xc(%esi)
24a: 01 c8 add %ecx,%eax
24c: 89 46 08 mov %eax,0x8(%esi)
24f: 89 07 mov %eax,(%edi)
251: 8b 46 0c mov 0xc(%esi),%eax
254: 5b pop %ebx
255: 5e pop %esi
256: 89 47 04 mov %eax,0x4(%edi)
259: 5f pop %edi
25a: c3 ret
Disassembly of section .init.text:
00000000 <michael_mic_init>:
0: b8 00 00 00 00 mov $0x0,%eax
5: e9 fc ff ff ff jmp 6 <michael_mic_init+0x6>
Disassembly of section .exit.text:
00000000 <michael_mic_exit>:
0: b8 00 00 00 00 mov $0x0,%eax
5: e9 fc ff ff ff jmp 6 <michael_mic_exit+0x6>
[-- Attachment #3: michael_mic.patched --]
[-- Type: text/plain, Size: 7598 bytes --]
crypto/michael_mic.o: file format elf32-i386
Disassembly of section .text:
00000000 <michael_block>:
0: 33 50 08 xor 0x8(%eax),%edx
3: 53 push %ebx
4: 89 d1 mov %edx,%ecx
6: c1 c9 0f ror $0xf,%ecx
9: 33 48 0c xor 0xc(%eax),%ecx
c: 8d 14 11 lea (%ecx,%edx,1),%edx
f: 89 d3 mov %edx,%ebx
11: 89 50 08 mov %edx,0x8(%eax)
14: 81 e3 00 ff 00 ff and $0xff00ff00,%ebx
1a: 81 e2 ff 00 ff 00 and $0xff00ff,%edx
20: c1 e2 08 shl $0x8,%edx
23: c1 eb 08 shr $0x8,%ebx
26: 09 d3 or %edx,%ebx
28: 31 cb xor %ecx,%ebx
2a: 89 d9 mov %ebx,%ecx
2c: 03 48 08 add 0x8(%eax),%ecx
2f: 89 48 08 mov %ecx,0x8(%eax)
32: c1 c9 1d ror $0x1d,%ecx
35: 31 d9 xor %ebx,%ecx
37: 89 ca mov %ecx,%edx
39: 03 50 08 add 0x8(%eax),%edx
3c: 5b pop %ebx
3d: 89 50 08 mov %edx,0x8(%eax)
40: c1 ca 02 ror $0x2,%edx
43: 31 ca xor %ecx,%edx
45: 01 50 08 add %edx,0x8(%eax)
48: 89 50 0c mov %edx,0xc(%eax)
4b: c3 ret
0000004c <michael_setkey>:
4c: 83 f9 08 cmp $0x8,%ecx
4f: 53 push %ebx
50: 89 d3 mov %edx,%ebx
52: 74 0d je 61 <michael_setkey+0x15>
54: 81 08 00 00 20 00 orl $0x200000,(%eax)
5a: b8 ea ff ff ff mov $0xffffffea,%eax
5f: eb 10 jmp 71 <michael_setkey+0x25>
61: 8b 12 mov (%edx),%edx
63: 83 c0 30 add $0x30,%eax
66: 89 50 08 mov %edx,0x8(%eax)
69: 8b 53 04 mov 0x4(%ebx),%edx
6c: 89 50 0c mov %edx,0xc(%eax)
6f: 31 c0 xor %eax,%eax
71: 5b pop %ebx
72: c3 ret
00000073 <michael_init>:
73: c7 40 34 00 00 00 00 movl $0x0,0x34(%eax)
7a: c3 ret
0000007b <michael_update>:
7b: 55 push %ebp
7c: 89 c5 mov %eax,%ebp
7e: 57 push %edi
7f: 83 c5 30 add $0x30,%ebp
82: 56 push %esi
83: 53 push %ebx
84: 89 cb mov %ecx,%ebx
86: 83 ec 08 sub $0x8,%esp
89: 89 44 24 04 mov %eax,0x4(%esp)
8d: 89 14 24 mov %edx,(%esp)
90: 8b 75 04 mov 0x4(%ebp),%esi
93: 85 f6 test %esi,%esi
95: 74 4c je e3 <michael_update+0x68>
97: b8 04 00 00 00 mov $0x4,%eax
9c: 29 f0 sub %esi,%eax
9e: 39 c8 cmp %ecx,%eax
a0: 89 c2 mov %eax,%edx
a2: 0f 47 d1 cmova %ecx,%edx
a5: 89 d1 mov %edx,%ecx
a7: 8d 7c 35 00 lea 0x0(%ebp,%esi,1),%edi
ab: 8b 34 24 mov (%esp),%esi
ae: c1 e9 02 shr $0x2,%ecx
b1: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
b3: 89 d1 mov %edx,%ecx
b5: 83 e1 03 and $0x3,%ecx
b8: 74 02 je bc <michael_update+0x41>
ba: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
bc: 89 d0 mov %edx,%eax
be: 03 45 04 add 0x4(%ebp),%eax
c1: 83 f8 03 cmp $0x3,%eax
c4: 89 45 04 mov %eax,0x4(%ebp)
c7: 76 4a jbe 113 <michael_update+0x98>
c9: 8b 44 24 04 mov 0x4(%esp),%eax
cd: 29 d3 sub %edx,%ebx
cf: 01 14 24 add %edx,(%esp)
d2: 8b 50 30 mov 0x30(%eax),%edx
d5: 89 e8 mov %ebp,%eax
d7: e8 24 ff ff ff call 0 <michael_block>
dc: c7 45 04 00 00 00 00 movl $0x0,0x4(%ebp)
e3: 8b 34 24 mov (%esp),%esi
e6: eb 10 jmp f8 <michael_update+0x7d>
e8: 83 c6 04 add $0x4,%esi
eb: 89 e8 mov %ebp,%eax
ed: 8b 56 fc mov -0x4(%esi),%edx
f0: 83 eb 04 sub $0x4,%ebx
f3: e8 08 ff ff ff call 0 <michael_block>
f8: 83 fb 03 cmp $0x3,%ebx
fb: 77 eb ja e8 <michael_update+0x6d>
fd: 85 db test %ebx,%ebx
ff: 74 12 je 113 <michael_update+0x98>
101: 89 5d 04 mov %ebx,0x4(%ebp)
104: 31 c9 xor %ecx,%ecx
106: 89 ef mov %ebp,%edi
108: f3 a5 rep movsl %ds:(%esi),%es:(%edi)
10a: 89 d9 mov %ebx,%ecx
10c: 83 e1 03 and $0x3,%ecx
10f: 74 02 je 113 <michael_update+0x98>
111: f3 a4 rep movsb %ds:(%esi),%es:(%edi)
113: 58 pop %eax
114: 5a pop %edx
115: 5b pop %ebx
116: 5e pop %esi
117: 5f pop %edi
118: 5d pop %ebp
119: c3 ret
0000011a <michael_final>:
11a: 56 push %esi
11b: 89 d6 mov %edx,%esi
11d: 53 push %ebx
11e: 8d 58 30 lea 0x30(%eax),%ebx
121: 8b 43 04 mov 0x4(%ebx),%eax
124: 83 f8 02 cmp $0x2,%eax
127: 74 14 je 13d <michael_final+0x23>
129: 83 f8 03 cmp $0x3,%eax
12c: 74 16 je 144 <michael_final+0x2a>
12e: 48 dec %eax
12f: ba 5a 00 00 00 mov $0x5a,%edx
134: b9 5a 00 00 00 mov $0x5a,%ecx
139: 74 1b je 156 <michael_final+0x3c>
13b: eb 23 jmp 160 <michael_final+0x46>
13d: b8 5a 00 00 00 mov $0x5a,%eax
142: eb 07 jmp 14b <michael_final+0x31>
144: 0f b6 43 02 movzbl 0x2(%ebx),%eax
148: 80 cc 5a or $0x5a,%ah
14b: 89 c1 mov %eax,%ecx
14d: 0f b6 43 01 movzbl 0x1(%ebx),%eax
151: c1 e1 08 shl $0x8,%ecx
154: 09 c1 or %eax,%ecx
156: 0f b6 03 movzbl (%ebx),%eax
159: 89 ca mov %ecx,%edx
15b: c1 e2 08 shl $0x8,%edx
15e: 09 c2 or %eax,%edx
160: 89 d8 mov %ebx,%eax
162: e8 99 fe ff ff call 0 <michael_block>
167: 89 d8 mov %ebx,%eax
169: 31 d2 xor %edx,%edx
16b: e8 90 fe ff ff call 0 <michael_block>
170: 8b 43 08 mov 0x8(%ebx),%eax
173: 89 06 mov %eax,(%esi)
175: 8b 43 0c mov 0xc(%ebx),%eax
178: 5b pop %ebx
179: 89 46 04 mov %eax,0x4(%esi)
17c: 5e pop %esi
17d: c3 ret
Disassembly of section .init.text:
00000000 <michael_mic_init>:
0: b8 00 00 00 00 mov $0x0,%eax
5: e9 fc ff ff ff jmp 6 <michael_mic_init+0x6>
Disassembly of section .exit.text:
00000000 <michael_mic_exit>:
0: b8 00 00 00 00 mov $0x0,%eax
5: e9 fc ff ff ff jmp 6 <michael_mic_exit+0x6>
next prev parent reply other threads:[~2008-05-16 15:52 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-05-16 6:17 [PATCH] crypto: make michael_block a function Harvey Harrison
2008-05-16 7:01 ` Sebastian Siewior
2008-05-16 8:10 ` Johannes Berg
2008-05-16 15:52 ` Harvey Harrison [this message]
2008-05-18 21:57 ` Sebastian Siewior
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=1210953123.5915.33.camel@brick \
--to=harvey.harrison@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=herbert@gondor.apana.org.au \
--cc=johannes@sipsolutions.net \
--cc=linux-kernel@vger.kernel.org \
--cc=lkml@ml.breakpoint.cc \
/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.