• Reinette Chatre's avatar
    iwlwifi: DMA fixes · df833b1d
    Reinette Chatre authored
    A few issues wrt DMA were uncovered when using the driver with swiotlb.
    - driver should not use memory after it has been mapped
    - iwl3945's RX queue management cannot use all of iwlagn because
      the size of the RX buffer is different. Revert back to using
      iwl3945 specific routines that map/unmap memory.
    - no need to "dma_syn_single_range_for_cpu" followed by pci_unmap_single,
      we can just call pci_unmap_single initially
    - only map the memory area that will be used by device. this is especially
      relevant to the mapping of iwl_cmd. we should not map the entire
      structure because the meta data at the beginning of structure contains
      the address to be used later for unmapping. If the address to be used for
      unmapping is stored in mapped data it creates a problem.
    - ensure that _if_ memory needs to be modified after it is mapped that we
      call _sync_single_for_cpu first, and then release it back to device with
      _sync_single_for_device
    - we mapped the wrong length of data for host commands, with mapped length
      differing with length provided to device, fix that.
    
    Thanks to Jason Andryuk <jandryuk@gmail.com> for significant bisecting
    help to find these issues.
    
    This fixes http://www.intellinuxwireless.org/bugzilla/show_bug.cgi?id=1964Signed-off-by: default avatarReinette Chatre <reinette.chatre@intel.com>
    Tested-by: default avatarJason Andryuk <jandryuk@gmail.com>
    Tested-by: default avatarBen Gamari <bgamari@gmail.com>
    Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
    df833b1d
iwl-3945.c 79.9 KB