This is a discussion on network driver that uses skb destructor within the Linux Networking forums, part of the Linux Forums category; I would like to write a network driver that uses DMA and manages it's own memory. The most common ...
|
|||||||
| FAQ | Members List | Calendar | Search | Today's Posts | Mark Forums Read |
|
|||
|
I would like to write a network driver that uses DMA and manages
it's own memory. The most common approach seem to be to allocate the memory for DMA transfer using dev_alloc_skb(), get the HW DMA engine to transfer the packet into this skb buffer and later free it using dev_kfree_skb(). For various reasons (mainly to support legacy source code) I would like to allocate and free the buffer using my own functions. Theoretically, I could get away by using skb->destructor. When I receive a packet I could allocate a zero length skb, point skb->data to my (already allocated) buffer which contains the packet and register the skb->destructor callback. Later, when this skb would be freed my destructor callback would be called and it would return the buffer to driver's pool. It seems to me that it should work, but I'm a little bit cautions because I could not find a single network driver (in 2.4 kernel) that uses such an approach and I'm not extremely eager to be the first one to try. Anybody tried to implement similar approach ? Any thoughts why this would (or would not) work ? Thanks a lot. |
|
|||
|
On Mon, 29 Dec 2003 18:47:38 +0200, Alexander Sirotkin wrote:
> I would like to write a network driver that uses DMA and manages > it's own memory. >[...] > For various reasons (mainly to support legacy source code) I would like > to allocate and free the buffer using my own functions. Theoretically, > I could get away by using skb->destructor. >[...] > Anybody tried to implement similar approach ? > Any thoughts why this would (or would not) work ? It should work, IMHO. Check how AF_UNIX does it. I might note that reusing WinCE or such too literally always caused crappage in my experience. You might want to ponder if it is worth bothering. -- Pete |
|
|||
|
Somebody on the LKML pointed out that it would not work because
skb->destructor can be overwritten at higher levels and there is no way to chain destructors.... I gues I'll have to do this a hard way... Pete Zaitcev wrote: > On Mon, 29 Dec 2003 18:47:38 +0200, Alexander Sirotkin wrote: > > >>I would like to write a network driver that uses DMA and manages >>it's own memory. >>[...] >>For various reasons (mainly to support legacy source code) I would like >>to allocate and free the buffer using my own functions. Theoretically, >>I could get away by using skb->destructor. >>[...] >>Anybody tried to implement similar approach ? >>Any thoughts why this would (or would not) work ? > > > It should work, IMHO. Check how AF_UNIX does it. > > I might note that reusing WinCE or such too literally always > caused crappage in my experience. You might want to ponder > if it is worth bothering. > > -- Pete > |
|
|||
|
Alexander Sirotkin <demiurg@ti.com> writes:
> Somebody on the LKML pointed out that it would not work because > skb->destructor can be overwritten at higher levels and there is > no way to chain destructors.... Correct. That's intentional even. > I gues I'll have to do this a hard way... AKA the correct way. -Andi |