aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorWey-Yi Guy <wey-yi.w.guy@intel.com>2009-11-20 15:05:00 -0500
committerJohn W. Linville <linville@tuxdriver.com>2009-11-23 17:05:34 -0500
commit2943f136ffe29adb08162197b129bf8106e8191c (patch)
tree9fb6a22a316588f3756b859f299de87e7e454b98 /drivers
parentd23db556819c00d297c0f447bdd75b282d563122 (diff)
iwlwifi: dynamically allocate buffer for sram debugfs file
Dynamically allocate memory for dumping SRAM based on the length of memory to be displayed. Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com> Signed-off-by: Reinette Chatre <reinette.chatre@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-debugfs.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-debugfs.c b/drivers/net/wireless/iwlwifi/iwl-debugfs.c
index 4630094b4ca1..016ff4014a7b 100644
--- a/drivers/net/wireless/iwlwifi/iwl-debugfs.c
+++ b/drivers/net/wireless/iwlwifi/iwl-debugfs.c
@@ -228,13 +228,21 @@ static ssize_t iwl_dbgfs_sram_read(struct file *file,
228 size_t count, loff_t *ppos) 228 size_t count, loff_t *ppos)
229{ 229{
230 u32 val; 230 u32 val;
231 char buf[1024]; 231 char *buf;
232 ssize_t ret; 232 ssize_t ret;
233 int i; 233 int i;
234 int pos = 0; 234 int pos = 0;
235 struct iwl_priv *priv = (struct iwl_priv *)file->private_data; 235 struct iwl_priv *priv = (struct iwl_priv *)file->private_data;
236 const size_t bufsz = sizeof(buf); 236 size_t bufsz;
237 237
238 bufsz = 30 + priv->dbgfs->sram_len * sizeof(char) * 12;
239 buf = kmalloc(bufsz, GFP_KERNEL);
240 if (!buf)
241 return -ENOMEM;
242 pos += scnprintf(buf + pos, bufsz - pos, "sram_len: %d\n",
243 priv->dbgfs->sram_len);
244 pos += scnprintf(buf + pos, bufsz - pos, "sram_offset: %d\n",
245 priv->dbgfs->sram_offset);
238 for (i = priv->dbgfs->sram_len; i > 0; i -= 4) { 246 for (i = priv->dbgfs->sram_len; i > 0; i -= 4) {
239 val = iwl_read_targ_mem(priv, priv->dbgfs->sram_offset + \ 247 val = iwl_read_targ_mem(priv, priv->dbgfs->sram_offset + \
240 priv->dbgfs->sram_len - i); 248 priv->dbgfs->sram_len - i);
@@ -251,11 +259,14 @@ static ssize_t iwl_dbgfs_sram_read(struct file *file,
251 break; 259 break;
252 } 260 }
253 } 261 }
262 if (!(i % 16))
263 pos += scnprintf(buf + pos, bufsz - pos, "\n");
254 pos += scnprintf(buf + pos, bufsz - pos, "0x%08x ", val); 264 pos += scnprintf(buf + pos, bufsz - pos, "0x%08x ", val);
255 } 265 }
256 pos += scnprintf(buf + pos, bufsz - pos, "\n"); 266 pos += scnprintf(buf + pos, bufsz - pos, "\n");
257 267
258 ret = simple_read_from_buffer(user_buf, count, ppos, buf, pos); 268 ret = simple_read_from_buffer(user_buf, count, ppos, buf, pos);
269 kfree(buf);
259 return ret; 270 return ret;
260} 271}
261 272