iwlwifi: always copy first 16 bytes of commands
authorJohannes Berg <johannes.berg@intel.com>
Mon, 25 Feb 2013 15:01:34 +0000 (16:01 +0100)
committerBen Hutchings <ben@decadent.org.uk>
Wed, 20 Mar 2013 15:03:24 +0000 (15:03 +0000)
commit81745233d8df3f506f4f571fb0e6dc43a54ba906
tree307a762cd30773602382b24a6ae9c28dc64cd5b7
parentf2551932b8733af396ba761995e6a65bcc82e633
iwlwifi: always copy first 16 bytes of commands

commit 8a964f44e01ad3bbc208c3e80d931ba91b9ea786 upstream.

The FH hardware will always write back to the scratch field
in commands, even host commands not just TX commands, which
can overwrite parts of the command. This is problematic if
the command is re-used (with IWL_HCMD_DFL_NOCOPY) and can
cause calibration issues.

Address this problem by always putting at least the first
16 bytes into the buffer we also use for the command header
and therefore make the DMA engine write back into this.

For commands that are smaller than 16 bytes also always map
enough memory for the DMA engine to write back to.

Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
[bwh: Backported to 3.2:
 - Adjust context
 - Drop the IWL_HCMD_DFL_DUP handling
 - Fix descriptor addresses and lengths for tracepoint, but otherwise
   leave it unchanged]
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
drivers/net/wireless/iwlwifi/iwl-trans-pcie-int.h
drivers/net/wireless/iwlwifi/iwl-trans-pcie-tx.c