iwlwifi: don't use stack memory for kmem cache name
authorJohannes Berg <johannes.berg@intel.com>
Thu, 12 Jul 2012 11:56:28 +0000 (13:56 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Thu, 12 Jul 2012 12:37:39 +0000 (14:37 +0200)
Since the kmem cache API doesn't internally allocate
the name but just points to the name that was passed
in we can't use stack memory for it. Move the name
into the transport struct.

Reported-by: Stanislaw Gruszka <sgruszka@redhat.com>
Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/iwlwifi/iwl-trans.h
drivers/net/wireless/iwlwifi/pcie/trans.c

index 867d8e194da4adb420d63409ace08d3f0ef915b1..92576a3e84ef1c8cf04e6881b5b2691924a89b09 100644 (file)
@@ -458,6 +458,7 @@ struct iwl_trans {
        /* The following fields are internal only */
        struct kmem_cache *dev_cmd_pool;
        size_t dev_cmd_headroom;
+       char dev_cmd_pool_name[50];
 
        /* pointer to trans specific struct */
        /*Ensure that this pointer will always be aligned to sizeof pointer */
index 203d575e44931c3e3807f59b0effe30de4e7bcdb..69bf6156fdf6c12f7e704d9454239d78d7047580 100644 (file)
@@ -2080,7 +2080,6 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
 {
        struct iwl_trans_pcie *trans_pcie;
        struct iwl_trans *trans;
-       char cmd_pool_name[100];
        u16 pci_cmd;
        int err;
 
@@ -2178,12 +2177,12 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
        init_waitqueue_head(&trans->wait_command_queue);
        spin_lock_init(&trans->reg_lock);
 
-       snprintf(cmd_pool_name, sizeof(cmd_pool_name), "iwl_cmd_pool:%s",
-                dev_name(trans->dev));
+       snprintf(trans->dev_cmd_pool_name, sizeof(trans->dev_cmd_pool_name),
+                "iwl_cmd_pool:%s", dev_name(trans->dev));
 
        trans->dev_cmd_headroom = 0;
        trans->dev_cmd_pool =
-               kmem_cache_create(cmd_pool_name,
+               kmem_cache_create(trans->dev_cmd_pool_name,
                                  sizeof(struct iwl_device_cmd)
                                  + trans->dev_cmd_headroom,
                                  sizeof(void *),