Commit a860820d authored by David S. Miller's avatar David S. Miller
parents 457ca7bb 94c7f2d4
...@@ -149,7 +149,8 @@ struct sk_buff *wimax_msg_alloc(struct wimax_dev *wimax_dev, ...@@ -149,7 +149,8 @@ struct sk_buff *wimax_msg_alloc(struct wimax_dev *wimax_dev,
} }
result = nla_put(skb, WIMAX_GNL_MSG_DATA, size, msg); result = nla_put(skb, WIMAX_GNL_MSG_DATA, size, msg);
if (result < 0) { if (result < 0) {
dev_err(dev, "no memory to add payload in attribute\n"); dev_err(dev, "no memory to add payload (msg %p size %zu) in "
"attribute: %d\n", msg, size, result);
goto error_nla_put; goto error_nla_put;
} }
genlmsg_end(skb, genl_msg); genlmsg_end(skb, genl_msg);
...@@ -299,10 +300,10 @@ int wimax_msg(struct wimax_dev *wimax_dev, const char *pipe_name, ...@@ -299,10 +300,10 @@ int wimax_msg(struct wimax_dev *wimax_dev, const char *pipe_name,
struct sk_buff *skb; struct sk_buff *skb;
skb = wimax_msg_alloc(wimax_dev, pipe_name, buf, size, gfp_flags); skb = wimax_msg_alloc(wimax_dev, pipe_name, buf, size, gfp_flags);
if (skb == NULL) if (IS_ERR(skb))
goto error_msg_new; result = PTR_ERR(skb);
else
result = wimax_msg_send(wimax_dev, skb); result = wimax_msg_send(wimax_dev, skb);
error_msg_new:
return result; return result;
} }
EXPORT_SYMBOL_GPL(wimax_msg); EXPORT_SYMBOL_GPL(wimax_msg);
......
...@@ -338,7 +338,20 @@ void __wimax_state_change(struct wimax_dev *wimax_dev, enum wimax_st new_state) ...@@ -338,7 +338,20 @@ void __wimax_state_change(struct wimax_dev *wimax_dev, enum wimax_st new_state)
*/ */
void wimax_state_change(struct wimax_dev *wimax_dev, enum wimax_st new_state) void wimax_state_change(struct wimax_dev *wimax_dev, enum wimax_st new_state)
{ {
/*
* A driver cannot take the wimax_dev out of the
* __WIMAX_ST_NULL state unless by calling wimax_dev_add(). If
* the wimax_dev's state is still NULL, we ignore any request
* to change its state because it means it hasn't been yet
* registered.
*
* There is no need to complain about it, as routines that
* call this might be shared from different code paths that
* are called before or after wimax_dev_add() has done its
* job.
*/
mutex_lock(&wimax_dev->mutex); mutex_lock(&wimax_dev->mutex);
if (wimax_dev->state > __WIMAX_ST_NULL)
__wimax_state_change(wimax_dev, new_state); __wimax_state_change(wimax_dev, new_state);
mutex_unlock(&wimax_dev->mutex); mutex_unlock(&wimax_dev->mutex);
return; return;
...@@ -376,7 +389,7 @@ EXPORT_SYMBOL_GPL(wimax_state_get); ...@@ -376,7 +389,7 @@ EXPORT_SYMBOL_GPL(wimax_state_get);
void wimax_dev_init(struct wimax_dev *wimax_dev) void wimax_dev_init(struct wimax_dev *wimax_dev)
{ {
INIT_LIST_HEAD(&wimax_dev->id_table_node); INIT_LIST_HEAD(&wimax_dev->id_table_node);
__wimax_state_set(wimax_dev, WIMAX_ST_UNINITIALIZED); __wimax_state_set(wimax_dev, __WIMAX_ST_NULL);
mutex_init(&wimax_dev->mutex); mutex_init(&wimax_dev->mutex);
mutex_init(&wimax_dev->mutex_reset); mutex_init(&wimax_dev->mutex_reset);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment