cvs commit: src/sys/dev/iwi if_iwi.c if_iwivar.h

Luigi Rizzo luigi at FreeBSD.org
Tue Feb 20 15:46:10 UTC 2007


luigi       2007-02-20 15:45:59 UTC

  FreeBSD src repository

  Modified files:
    sys/dev/iwi          if_iwi.c if_iwivar.h 
  Log:
  Address a few issues with the iwi driver, namely:
  
  + do not release the dma-ble region used for downloading firmware.
    This should fix the problems that some people were seeing, due to
    memory becoming too fragmented which prevented subsequent allocations
    of a suitable contiguous region of memory;
  
  + document the firmware format and usage in if_iwivar.h
  
  + use a loop to allocate the four tx rings, instead of replicating
    the body of the loop.
  
  + add debugging code IWI_LOCK_ASSERT() to detect missing locks.
    These only do a printf, and should go away once we figure out why
    the driver sometimes freezes the system due to a (yet unidentified)
    race condition.
  
  + add a device_printf() in iwi_ioctl() in certain conditions
    (see comment in the code).  This helps preventing the race condition
    mentioned above, and makes the system survive. This printf will
    also go away once fixing this bug is completed.
  
  + change iwi_getfw() to return 0 on success, 1 on error, consistently
    with other functions.
  
  + fix the argument of a sizeof() in iwi_get_firmware()
  
  + use le32toh() to access little-endian fields
  
  + simplify error handling in iwi_load_firmware() and iwi_init_locked()
  
  The bugs fixed by this commit (the freezing one especially) are serious
  enough to call for a quick MFC
  
  MFC after: 3 days
  
  Revision  Changes    Path
  1.47      +127 -78   src/sys/dev/iwi/if_iwi.c
  1.13      +20 -0     src/sys/dev/iwi/if_iwivar.h


More information about the cvs-all mailing list