On Sunday 28 March 2004 01:55, Francois Romieu wrote:
> Denis Vlasenko <vda@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> :
> [...]
>
> > Sorry Jeff your patch does not fix my problem.
> > I also verified that it happens this way:
> > (1) rx skb is processed and freed
> > (2) allocation failure for new skb
> > (3) next rx intr occurs, cur_rx->skbuff still == NULL
> > (4) oops
>
> Your previous analysis made sense: the logic responsible for low memory
> handling is broken in several ways.
>
> Patch against2.6.5-rc2-mm3 below, without warranty
I tested on 2.4.25, patch applied with minimal manual correction
in last hunk (rediffed patch attached).
Patched driver oopses in allocate_rx_buffers() shortly after boot,
before I can login. It dies here (sorry, only objdump for now,
I am -EBADLYNEEDTOSLEEP. Can track it to src line tomorrow):
0000065c <allocate_rx_buffers>:
65c: 55 push %ebp
65d: 89 e5 mov %esp,%ebp
65f: 56 push %esi
660: 53 push %ebx
661: 8b 75 08 mov 0x8(%ebp),%esi
664: 8b 5e 6c mov 0x6c(%esi),%ebx
667: 83 bb 9c 00 00 00 0c cmpl $0xc,0x9c(%ebx)
66e: 0f 84 8a 00 00 00 je 6fe <allocate_rx_buffers+0xa2>
674: 6a 20 push $0x20
676: 8b 83 b0 00 00 00 mov 0xb0(%ebx),%eax
67c: 83 c0 10 add $0x10,%eax
67f: 50 push %eax
680: e8 fc ff ff ff call 681 <allocate_rx_buffers+0x25>
685: 85 c0 test %eax,%eax
687: 5a pop %edx
688: 59 pop %ecx
689: 74 73 je 6fe <allocate_rx_buffers+0xa2>
68b: 83 80 84 00 00 00 10 addl $0x10,0x84(%eax)
692: 83 80 88 00 00 00 10 addl $0x10,0x88(%eax)
699: 85 c0 test %eax,%eax
69b: 74 61 je 6fe <allocate_rx_buffers+0xa2>
69d: 8b 93 98 00 00 00 mov 0x98(%ebx),%edx
6a3: 8b 4a 14 mov 0x14(%edx),%ecx
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
%edx == 0 here
6a6: 85 c9 test %ecx,%ecx
6a8: 74 12 je 6bc <allocate_rx_buffers+0x60>
6aa: 89 f6 mov %esi,%esi
6ac: 8b 52 10 mov 0x10(%edx),%edx
6af: 89 93 98 00 00 00 mov %edx,0x98(%ebx)
6b5: 8b 4a 14 mov 0x14(%edx),%ecx
6b8: 85 c9 test %ecx,%ecx
6ba: 75 f0 jne 6ac <allocate_rx_buffers+0x50>
6bc: 89 42 14 mov %eax,0x14(%edx)
6bf: 89 70 18 mov %esi,0x18(%eax)
6c2: 8b 93 98 00 00 00 mov 0x98(%ebx),%edx
6c8: 8b 80 88 00 00 00 mov 0x88(%eax),%eax
6ce: f0 83 44 24 00 00 lock addl $0x0,0x0(%esp,1)
6d4: 05 00 00 00 40 add $0x40000000,%eax
6d9: 89 42 08 mov %eax,0x8(%edx)
6dc: 8b 83 98 00 00 00 mov 0x98(%ebx),%eax
6e2: c7 00 00 00 00 80 movl $0x80000000,(%eax)
6e8: 8b 83 9c 00 00 00 mov 0x9c(%ebx),%eax
6ee: 40 inc %eax
6ef: 83 f8 0c cmp $0xc,%eax
6f2: 89 83 9c 00 00 00 mov %eax,0x9c(%ebx)
6f8: 0f 85 76 ff ff ff jne 674 <allocate_rx_buffers+0x18>
6fe: 8d 65 f8 lea 0xfffffff8(%ebp),%esp
...
--
vda
fealnx_oom.24.patch
Description: Text Data
|