| From 4e17deac29d497cde8e28e8f24f663b46c4cd27c Mon Sep 17 00:00:00 2001 |
| From: Avery Pennarun <apenwarr@gmail.com> |
| Date: Fri, 25 Apr 2014 08:03:01 -0400 |
| Subject: [PATCH] mwifiex: add /sys/kernel/debug/mwifiex/*/crash, to simulate |
| crashes. |
| |
| For our first test case, just simulate a device disconnect/reconnect to make |
| it easier to check this code for race conditions, null pointers, etc. |
| --- |
| drivers/net/wireless/mwifiex/debugfs.c | 38 ++++++++++++++++++++++++++++++++++ |
| 1 file changed, 38 insertions(+) |
| |
| diff --git a/drivers/net/wireless/mwifiex/debugfs.c b/drivers/net/wireless/mwifiex/debugfs.c |
| index b8a49aa..a3c0678 100644 |
| --- a/drivers/net/wireless/mwifiex/debugfs.c |
| +++ b/drivers/net/wireless/mwifiex/debugfs.c |
| @@ -669,6 +669,42 @@ done: |
| return ret; |
| } |
| |
| +/* |
| + * Proc crash write handler. |
| + * |
| + * This function is called when the 'crash' file is opened for writing. |
| + * |
| + * Write a '1' to this file to simulate a device disconnect/reconnect. In |
| + * the future, other numbers may be used to simulate different kinds of |
| + * crashes. |
| + */ |
| +static ssize_t |
| +mwifiex_crash_write(struct file *file, |
| + const char __user *ubuf, size_t count, loff_t *ppos) |
| +{ |
| + struct mwifiex_private *priv = |
| + (struct mwifiex_private *) file->private_data; |
| + char buf[16]; |
| + int mode; |
| + |
| + memset(buf, 0, sizeof(buf)); |
| + if (simple_write_to_buffer(buf, sizeof(buf) - 1, ppos, ubuf, count) < 0) { |
| + return -EFAULT; |
| + } |
| + |
| + mode = simple_strtol(buf, NULL, 0); |
| + *ppos += count; |
| + switch (mode) { |
| + case 1: |
| + pr_warn("causing crash: disconnect/reconnect"); |
| + priv->adapter->if_ops.card_reset(priv->adapter); |
| + break; |
| + default: |
| + return -EIO; |
| + } |
| + |
| + return count; |
| +} |
| |
| #define MWIFIEX_DFS_ADD_FILE(name) do { \ |
| if (!debugfs_create_file(#name, 0644, priv->dfs_dev_dir, \ |
| @@ -701,6 +737,7 @@ MWIFIEX_DFS_FILE_READ_OPS(debug); |
| MWIFIEX_DFS_FILE_READ_OPS(getlog); |
| MWIFIEX_DFS_FILE_OPS(regrdwr); |
| MWIFIEX_DFS_FILE_OPS(rdeeprom); |
| +MWIFIEX_DFS_FILE_WRITE_OPS(crash); |
| |
| /* |
| * This function creates the debug FS directory structure and the files. |
| @@ -722,6 +759,7 @@ mwifiex_dev_debugfs_init(struct mwifiex_private *priv) |
| MWIFIEX_DFS_ADD_FILE(getlog); |
| MWIFIEX_DFS_ADD_FILE(regrdwr); |
| MWIFIEX_DFS_ADD_FILE(rdeeprom); |
| + MWIFIEX_DFS_ADD_FILE(crash); |
| } |
| |
| /* |
| -- |
| 1.9.1.423.g4596e3a |
| |