On Mon, 8 Jan 2001, Alan Cox wrote:
> > @@ -2709,7 +2709,10 @@ static void dfx_rcv_init(DFX_board_t *bp
> > struct sk_buff *newskb;
> > bp->descr_block_virt->rcv_data[i+j].long_0 = (u32)
>(PI_RCV_DESCR_M_SOP |
> > ((PI_RCV_DATA_K_SIZE_MAX / PI_ALIGN_K_RCV_DATA_BUFF)
><< PI_RCV_DESCR_V_SEG_LEN));
> > - newskb = dev_alloc_skb(NEW_SKB_SIZE);
> > + while (!(newskb = dev_alloc_skb(NEW_SKB_SIZE))) {
> > + printk(KERN_WARNING "%s: Could not allocate receive
>buffer.\n", bp->dev->name);
> > + schedule();
> > + }
>
> Wouldn't it be cleaner to malloc the new buffer and if that fails drop the
> just received frame and reuse that skbuff?
It would, but this would require quite a serious driver rewrite --
buffers would only be allocated when a frame arrives and not when the
board is initialized (no idea why it is handled differently now, maybe an
OSF/1 legacy...). I might see if I can do it but not at the moment -- I
have definitely too many other tasks pending.
An alternate short-term solution could be just to return -ENOMEM and let
the caller of init_module() handle it. But this way there may never be
much enough real memory available.
> schedule definitely isnt going to help
It does help. Note the code is allocating ~1.2MB in one run and there is
plenty of virtual memory available (but not real one).
Maciej
--
+ Maciej W. Rozycki, Technical University of Gdansk, Poland +
+--------------------------------------------------------------+
+ e-mail: [EMAIL PROTECTED], PGP key available +
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/