Skip to content

Commit

Permalink
libertas: fix lbs_rtap attribute in sysfs
Browse files Browse the repository at this point in the history
At least it doesn't oops when you attempt to read or write it now.
Only when you enable it and then later turn it off. And when it's
enabled I don't see how it actually works.

But one fewer oops is good, for now...

Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
David Woodhouse authored and David S. Miller committed Jan 28, 2008
1 parent 59f3e4b commit e7deced
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 14 deletions.
2 changes: 0 additions & 2 deletions drivers/net/wireless/libertas/dev.h
Original file line number Diff line number Diff line change
Expand Up @@ -143,8 +143,6 @@ struct lbs_private {
all other bits reserved 0 */
u8 dnld_sent;

struct device *hotplug_device;

/** thread to service interrupts */
struct task_struct *main_thread;
wait_queue_head_t waitq;
Expand Down
18 changes: 6 additions & 12 deletions drivers/net/wireless/libertas/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -256,8 +256,7 @@ void lbs_remove_rtap(struct lbs_private *priv);
static ssize_t lbs_rtap_get(struct device *dev,
struct device_attribute *attr, char * buf)
{
struct lbs_private *priv = (struct lbs_private *)
(to_net_dev(dev))->priv;
struct lbs_private *priv = to_net_dev(dev)->priv;
struct lbs_adapter *adapter = priv->adapter;
return snprintf(buf, 5, "0x%X\n", adapter->monitormode);
}
Expand All @@ -269,8 +268,7 @@ static ssize_t lbs_rtap_set(struct device *dev,
struct device_attribute *attr, const char * buf, size_t count)
{
int monitor_mode;
struct lbs_private *priv = (struct lbs_private *)
(to_net_dev(dev))->priv;
struct lbs_private *priv = to_net_dev(dev)->priv;
struct lbs_adapter *adapter = priv->adapter;

sscanf(buf, "%x", &monitor_mode);
Expand Down Expand Up @@ -1158,7 +1156,6 @@ struct lbs_private *lbs_add_card(void *card, struct device *dmdev)
priv->card = card;
priv->mesh_open = 0;
priv->infra_open = 0;
priv->hotplug_device = dmdev;

/* Setup the OS Interface to our functions */
dev->open = lbs_open;
Expand All @@ -1178,15 +1175,13 @@ struct lbs_private *lbs_add_card(void *card, struct device *dmdev)
SET_NETDEV_DEV(dev, dmdev);

priv->rtap_net_dev = NULL;
if (device_create_file(dmdev, &dev_attr_lbs_rtap))
goto err_init_adapter;

lbs_deb_thread("Starting main thread...\n");
init_waitqueue_head(&priv->waitq);
priv->main_thread = kthread_run(lbs_thread, dev, "lbs_main");
if (IS_ERR(priv->main_thread)) {
lbs_deb_thread("Error creating main thread.\n");
goto err_kthread_run;
goto err_init_adapter;
}

priv->work_thread = create_singlethread_workqueue("lbs_worker");
Expand All @@ -1196,9 +1191,6 @@ struct lbs_private *lbs_add_card(void *card, struct device *dmdev)

goto done;

err_kthread_run:
device_remove_file(dmdev, &dev_attr_lbs_rtap);

err_init_adapter:
lbs_free_adapter(priv);

Expand All @@ -1224,7 +1216,7 @@ int lbs_remove_card(struct lbs_private *priv)
lbs_remove_rtap(priv);

dev = priv->dev;
device_remove_file(priv->hotplug_device, &dev_attr_lbs_rtap);
device_remove_file(&dev->dev, &dev_attr_lbs_rtap);

cancel_delayed_work(&priv->scan_work);
cancel_delayed_work(&priv->assoc_work);
Expand Down Expand Up @@ -1273,6 +1265,8 @@ int lbs_start_card(struct lbs_private *priv)
lbs_pr_err("cannot register ethX device\n");
goto done;
}
if (device_create_file(&dev->dev, &dev_attr_lbs_rtap))
lbs_pr_err("cannot register lbs_rtap attribute\n");

lbs_debugfs_init_one(priv, dev);

Expand Down

0 comments on commit e7deced

Please sign in to comment.