aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/pcie/trans.c
diff options
context:
space:
mode:
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>2012-05-24 12:24:34 -0400
committerJohannes Berg <johannes.berg@intel.com>2012-06-06 07:21:22 -0400
commit59c647b6266506cbbceadfabfd01168148f026c5 (patch)
tree7fc0ea93110ea25bcbb96f42253931bc59199873 /drivers/net/wireless/iwlwifi/pcie/trans.c
parentcde5b48700bde6edc24c26d3d1bbec219e0ef2a1 (diff)
iwlwifi: allocate Tx cmd pool per device
Different transports will have different needs: New tranports need headroom for their own use before the Tx cmd. So allocate the Tx cmd pool in the transport and give it a unique name based on dev_name. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/pcie/trans.c')
-rw-r--r--drivers/net/wireless/iwlwifi/pcie/trans.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlwifi/pcie/trans.c b/drivers/net/wireless/iwlwifi/pcie/trans.c
index 0f59e1f2bcac..1eabb834e32a 100644
--- a/drivers/net/wireless/iwlwifi/pcie/trans.c
+++ b/drivers/net/wireless/iwlwifi/pcie/trans.c
@@ -1528,6 +1528,7 @@ void iwl_trans_pcie_free(struct iwl_trans *trans)
1528 iounmap(trans_pcie->hw_base); 1528 iounmap(trans_pcie->hw_base);
1529 pci_release_regions(trans_pcie->pci_dev); 1529 pci_release_regions(trans_pcie->pci_dev);
1530 pci_disable_device(trans_pcie->pci_dev); 1530 pci_disable_device(trans_pcie->pci_dev);
1531 kmem_cache_destroy(trans->dev_cmd_pool);
1531 1532
1532 kfree(trans); 1533 kfree(trans);
1533} 1534}
@@ -2042,6 +2043,7 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
2042{ 2043{
2043 struct iwl_trans_pcie *trans_pcie; 2044 struct iwl_trans_pcie *trans_pcie;
2044 struct iwl_trans *trans; 2045 struct iwl_trans *trans;
2046 char cmd_pool_name[100];
2045 u16 pci_cmd; 2047 u16 pci_cmd;
2046 int err; 2048 int err;
2047 2049
@@ -2138,8 +2140,25 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
2138 init_waitqueue_head(&trans->wait_command_queue); 2140 init_waitqueue_head(&trans->wait_command_queue);
2139 spin_lock_init(&trans->reg_lock); 2141 spin_lock_init(&trans->reg_lock);
2140 2142
2143 snprintf(cmd_pool_name, sizeof(cmd_pool_name), "iwl_cmd_pool:%s",
2144 dev_name(trans->dev));
2145
2146 trans->dev_cmd_headroom = 0;
2147 trans->dev_cmd_pool =
2148 kmem_cache_create(cmd_pool_name,
2149 sizeof(struct iwl_device_cmd)
2150 + trans->dev_cmd_headroom,
2151 sizeof(void *),
2152 SLAB_HWCACHE_ALIGN,
2153 NULL);
2154
2155 if (!trans->dev_cmd_pool)
2156 goto out_pci_disable_msi;
2157
2141 return trans; 2158 return trans;
2142 2159
2160out_pci_disable_msi:
2161 pci_disable_msi(pdev);
2143out_pci_release_regions: 2162out_pci_release_regions:
2144 pci_release_regions(pdev); 2163 pci_release_regions(pdev);
2145out_pci_disable_device: 2164out_pci_disable_device: