cvs commit: src/sys/compat/ndis kern_ndis.c src/sys/dev/if_ndis if_ndis.c

Brian F. Feldman green at FreeBSD.org
Fri Dec 26 01:28:35 PST 2003


Bill Paul <wpaul at FreeBSD.org> wrote:
> wpaul       2003/12/25 23:01:05 PST
> 
>   FreeBSD src repository
> 
>   Modified files:
>     sys/compat/ndis      kern_ndis.c 
>     sys/dev/if_ndis      if_ndis.c 
>   Log:
>   Attempt to handle the status field in the ndis_packet oob area correctly.
>   
>   For received packets, an status of NDIS_STATUS_RESOURCES means we need
>   to copy the packet data and return the ndis_packet to the driver immediatel.
>   NDIS_STATUS_SUCCESS means we get to hold onto the packet, but we have
>   to set the status to NDIS_STATUS_PENDING so the driver knows we're
>   going to hang onto it for a while.
>   
>   For transmit packets, NDIS_STATUS_PENDING means the driver will
>   asynchronously return the packet to us via the ndis_txeof() routine,
>   and NDIS_STATUS_SUCCESS means the driver sent the frame, and NDIS
>   (i.e. the OS) retains ownership of the packet and can free it
>   right away.

FWIW, ndis_return_packet() was incorrectly calling ndis_chars.nmc_return_packet_func
for both txeof and rxeof: from what you 
say, it should never be calling returnfunc() on txeof but it obviously does 
so every time, and my card never returns NDIS_STATUS_PENDING in p->np_oob.npo_status
so every time an rxeof is handled the .sys itself locks up because 
ndis_chars.nmc_return_packet_func is being called when the driver needs it 
to be freed by NDIS itself.  Either way, the wrong things definitely get 
freed by the ndis_free_packet() because the free() calls themselves end up 
crashing :-(

-- 
Brian Fundakowski Feldman                           \'[ FreeBSD ]''''''''''\
  <> green at FreeBSD.org                               \  The Power to Serve! \
 Opinions expressed are my own.                       \,,,,,,,,,,,,,,,,,,,,,,\




More information about the cvs-src mailing list