The original patch was already merged. To make a change, you need to post a new patch based on the new head of the tree. This one just conflicts with what is already there now. Also, I think all you really need is a "#include <linux/vmalloc.h>". Post a v3 that just adds the #include? John On Sat, Sep 06, 2014 at 01:00:48PM -0400, Jade Bilkey wrote: > Signed-off-by: Jade Bilkey <herself@xxxxxxxxxxxx> > --- > > v2: vmalloc not included in some configs > Switched to using kmalloc > > drivers/net/wireless/ath/ath5k/debug.c | 96 ++++++++++++++++++++++++++++++++++ > 1 file changed, 96 insertions(+) > > diff --git a/drivers/net/wireless/ath/ath5k/debug.c b/drivers/net/wireless/ath/ath5k/debug.c > index b8d031a..ca3cd06 100644 > --- a/drivers/net/wireless/ath/ath5k/debug.c > +++ b/drivers/net/wireless/ath/ath5k/debug.c > @@ -894,6 +894,100 @@ static const struct file_operations fops_queue = { > .llseek = default_llseek, > }; > > +/* debugfs: eeprom */ > + > +struct eeprom_private { > + u16 *buf; > + int len; > +}; > + > +static int open_file_eeprom(struct inode *inode, struct file *file) > +{ > + struct eeprom_private *ep; > + struct ath5k_hw *ah = inode->i_private; > + bool res; > + int i, ret; > + u32 eesize; > + u16 val, *buf; > + > + /* Get eeprom size */ > + > + res = ath5k_hw_nvram_read(ah, AR5K_EEPROM_SIZE_UPPER, &val); > + if (!res) > + return -EACCES; > + > + if (val == 0) { > + eesize = AR5K_EEPROM_INFO_MAX + AR5K_EEPROM_INFO_BASE; > + } else { > + eesize = (val & AR5K_EEPROM_SIZE_UPPER_MASK) << > + AR5K_EEPROM_SIZE_ENDLOC_SHIFT; > + ath5k_hw_nvram_read(ah, AR5K_EEPROM_SIZE_LOWER, &val); > + eesize = eesize | val; > + } > + > + if (eesize > 4096) > + return -EINVAL; > + > + /* Create buffer and read in eeprom */ > + > + buf = kmalloc(eesize, GFP_KERNEL); > + if (!buf) { > + ret = -ENOMEM; > + goto err; > + } > + > + for (i = 0; i < eesize; ++i) { > + AR5K_EEPROM_READ(i, val); > + buf[i] = val; > + } > + > + /* Create private struct and assign to file */ > + > + ep = kmalloc(sizeof(*ep), GFP_KERNEL); > + if (!ep) { > + ret = -ENOMEM; > + goto freebuf; > + } > + > + ep->buf = buf; > + ep->len = i; > + > + file->private_data = (void *)ep; > + > + return 0; > + > +freebuf: > + kfree(buf); > +err: > + return ret; > + > +} > + > +static ssize_t read_file_eeprom(struct file *file, char __user *user_buf, > + size_t count, loff_t *ppos) > +{ > + struct eeprom_private *ep = file->private_data; > + > + return simple_read_from_buffer(user_buf, count, ppos, ep->buf, ep->len); > +} > + > +static int release_file_eeprom(struct inode *inode, struct file *file) > +{ > + struct eeprom_private *ep = file->private_data; > + > + kfree(ep->buf); > + kfree(ep); > + > + return 0; > +} > + > +static const struct file_operations fops_eeprom = { > + .open = open_file_eeprom, > + .read = read_file_eeprom, > + .release = release_file_eeprom, > + .owner = THIS_MODULE, > +}; > + > > void > ath5k_debug_init_device(struct ath5k_hw *ah) > @@ -921,6 +1015,8 @@ ath5k_debug_init_device(struct ath5k_hw *ah) > > debugfs_create_file("misc", S_IRUSR, phydir, ah, &fops_misc); > > + debugfs_create_file("eeprom", S_IRUSR, phydir, ah, &fops_eeprom); > + > debugfs_create_file("frameerrors", S_IWUSR | S_IRUSR, phydir, ah, > &fops_frameerrors); > > -- > 2.1.0 > > -- John W. Linville Someday the world will need a hero, and you linville@xxxxxxxxxxxxx might be all we have. Be ready. -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html