From c5a04aaadcc0cd1cee7174ed5fbb376ee30332d1 Mon Sep 17 00:00:00 2001 From: nbd Date: Mon, 1 Mar 2010 21:48:55 +0000 Subject: mac80211: add the new 802.11n minstrel rate control implementation (optional, not used by default) git-svn-id: svn://svn.openwrt.org/openwrt/trunk@19943 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../patches/570-minstrel_debugfs_cleanup.patch | 80 ++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 package/mac80211/patches/570-minstrel_debugfs_cleanup.patch (limited to 'package/mac80211/patches/570-minstrel_debugfs_cleanup.patch') diff --git a/package/mac80211/patches/570-minstrel_debugfs_cleanup.patch b/package/mac80211/patches/570-minstrel_debugfs_cleanup.patch new file mode 100644 index 000000000..9a13bae70 --- /dev/null +++ b/package/mac80211/patches/570-minstrel_debugfs_cleanup.patch @@ -0,0 +1,80 @@ +--- a/net/mac80211/rc80211_minstrel.h ++++ b/net/mac80211/rc80211_minstrel.h +@@ -80,6 +80,11 @@ struct minstrel_priv { + unsigned int lookaround_rate_mrr; + }; + ++struct minstrel_debugfs_info { ++ size_t len; ++ char buf[]; ++}; ++ + void minstrel_add_sta_debugfs(void *priv, void *priv_sta, struct dentry *dir); + void minstrel_remove_sta_debugfs(void *priv, void *priv_sta); + +--- a/net/mac80211/rc80211_minstrel_debugfs.c ++++ b/net/mac80211/rc80211_minstrel_debugfs.c +@@ -52,21 +52,15 @@ + #include + #include "rc80211_minstrel.h" + +-struct minstrel_stats_info { +- struct minstrel_sta_info *mi; +- char buf[4096]; +- size_t len; +-}; +- + static int + minstrel_stats_open(struct inode *inode, struct file *file) + { + struct minstrel_sta_info *mi = inode->i_private; +- struct minstrel_stats_info *ms; ++ struct minstrel_debugfs_info *ms; + unsigned int i, tp, prob, eprob; + char *p; + +- ms = kmalloc(sizeof(*ms), GFP_KERNEL); ++ ms = kmalloc(sizeof(*ms) + 4096, GFP_KERNEL); + if (!ms) + return -ENOMEM; + +@@ -107,35 +101,18 @@ minstrel_stats_open(struct inode *inode, + } + + static ssize_t +-minstrel_stats_read(struct file *file, char __user *buf, size_t len, loff_t *o) ++minstrel_stats_read(struct file *file, char __user *buf, size_t len, loff_t *ppos) + { +- struct minstrel_stats_info *ms; +- char *src; ++ struct minstrel_debugfs_info *ms; + + ms = file->private_data; +- src = ms->buf; +- +- len = min(len, ms->len); +- if (len <= *o) +- return 0; +- +- src += *o; +- len -= *o; +- *o += len; +- +- if (copy_to_user(buf, src, len)) +- return -EFAULT; +- +- return len; ++ return simple_read_from_buffer(buf, len, ppos, ms->buf, ms->len); + } + + static int + minstrel_stats_release(struct inode *inode, struct file *file) + { +- struct minstrel_stats_info *ms = file->private_data; +- +- kfree(ms); +- ++ kfree(file->private_data); + return 0; + } + -- cgit v1.2.3