diff options
author | Emmanuel Grumbach <emmanuel.grumbach@intel.com> | 2012-05-24 12:24:34 -0400 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2012-06-06 07:21:22 -0400 |
commit | 59c647b6266506cbbceadfabfd01168148f026c5 (patch) | |
tree | 7fc0ea93110ea25bcbb96f42253931bc59199873 /drivers/net/wireless/iwlwifi/pcie/trans.c | |
parent | cde5b48700bde6edc24c26d3d1bbec219e0ef2a1 (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.c | 19 |
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 | ||
2160 | out_pci_disable_msi: | ||
2161 | pci_disable_msi(pdev); | ||
2143 | out_pci_release_regions: | 2162 | out_pci_release_regions: |
2144 | pci_release_regions(pdev); | 2163 | pci_release_regions(pdev); |
2145 | out_pci_disable_device: | 2164 | out_pci_disable_device: |