On Mon, Mar 28, 2005 at 10:33:17PM -0800, Grant Grundler wrote:
> Same config/kernel as before: 2.6.11 + SVN gen2 version 2050.
...
> ip is at ib_sa_mcmember_rec_callback+0x90/0xe0 [ib_sa]
...
> [<a0000002000a54d0>] ib_sa_mcmember_rec_callback+0x90/0xe0 [ib_sa]
> sp=e000000101fcfd20 bsp=e000000101fc9020
> [<a0000002000a5a30>] send_handler+0x110/0x280 [ib_sa]
> sp=e000000101fcfd70 bsp=e000000101fc8fd0
> [<a00000020011a5b0>] ib_mad_complete_send_wr+0x270/0x300 [ib_mad]
> sp=e000000101fcfd70 bsp=e000000101fc8f90
...
Roland,
I can't unravel a64 asm as well as I'd like.
Fortunately, this ut the code is pretty straighforward.
+0x60 to +0x8c is the "true" part of this statement:
if (mad) {
struct ib_sa_mcmember_rec rec;
ib_unpack(mcmember_rec_table, ARRAY_SIZE(mcmember_rec_table),
mad->data, &rec);
query->callback(status, &rec, query->context);
} else
query->callback(status, NULL, query->context);
And +0x90 is the "else" (false) part.
I *think*:
r32 = *sa_query
r33 = status
r34 = *mad
Following asm is from sa_query.o - ie unlinked:
101c: 04 07 fd 8c adds r35=-16,r32
1020: 0a 40 00 44 09 39 [MMI] cmp.eq p8,p9=0,r34;;
...
105c: 40 00 00 43 (p08) br.cond.dpnt.few 1090
<ib_sa_mcmember_rec_callback+0x90>
1060: 11 00 00 00 01 00 [MIB] nop.m 0x0
1062: PCREL21B ib_unpack
1066: 00 00 00 02 00 00 nop.i 0x0
106c: 08 00 00 50 br.call.sptk.many b0=1060
<ib_sa_mcmember_rec_callback+0x60>;;
...
1080: 0a 70 00 46 18 10 [MMI] ld8 r14=[r35];;
1086: 90 02 0c 30 20 00 ld8 r41=[r3]
108c: 00 00 04 00 nop.i 0x0
==> 1090: 0a 40 20 1c 18 14 [MMI] ld8 r8=[r14],8;; <==
1096: 10 00 38 30 20 e0 ld8 r1=[r14]
109c: 80 08 00 07 mov b7=r8
10a0: 11 00 00 00 01 00 [MIB] nop.m 0x0
10a6: 00 00 00 02 00 00 nop.i 0x0
(b) 10ac: 78 00 80 10 br.call.sptk.many b0=b7;;
10b0: 00 08 00 4c 00 21 [MII] mov r1=r38
10b6: 00 28 01 55 00 00 mov.i ar.pfs=r37
10bc: 40 0a 00 07 mov b0=r36
10c0: 11 60 40 19 00 21 [MIB] adds r12=80,r12
10c6: 00 00 00 02 00 80 nop.i 0x0
10cc: 08 00 84 00 br.ret.sptk.many b0;;
My take is (b) is the indirect call with the differences in the parameters
factored out of the if/else statement.
+0xcc is the return from ib_sa_mcmember_rec_callback().
I'm pretty sure +0x90 trying to reference query->context.
tombstone showed r14 was zero.
So it would have blown up regardless if which path we took.
This is the first place query (r14) is dereferenced.
hth,
grant
_______________________________________________
openib-general mailing list
[email protected]
http://openib.org/mailman/listinfo/openib-general
To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general