Commit a40a7201 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'ipmi' (patches from Corey Minyard)

Merge ipmi patches from Corey Minyard:
 "These have been in linux-next for a while, ready for 3.18"

* emailed patches from Corey Minyard <minyard@acm.org>:
  ipmi: Clear drvdata when interface is removed
  ipmi: work around gcc-4.9 build warning
  ipmi/of: Don't use unavailable interfaces
  ipmi: Clean up the error handling for channel config errors
parents 74da3863 567eded9
...@@ -2796,7 +2796,6 @@ channel_handler(ipmi_smi_t intf, struct ipmi_recv_msg *msg) ...@@ -2796,7 +2796,6 @@ channel_handler(ipmi_smi_t intf, struct ipmi_recv_msg *msg)
= IPMI_CHANNEL_MEDIUM_IPMB; = IPMI_CHANNEL_MEDIUM_IPMB;
intf->channels[0].protocol intf->channels[0].protocol
= IPMI_CHANNEL_PROTOCOL_IPMB; = IPMI_CHANNEL_PROTOCOL_IPMB;
rv = -ENOSYS;
intf->curr_channel = IPMI_MAX_CHANNELS; intf->curr_channel = IPMI_MAX_CHANNELS;
wake_up(&intf->waitq); wake_up(&intf->waitq);
...@@ -2821,12 +2820,12 @@ channel_handler(ipmi_smi_t intf, struct ipmi_recv_msg *msg) ...@@ -2821,12 +2820,12 @@ channel_handler(ipmi_smi_t intf, struct ipmi_recv_msg *msg)
if (rv) { if (rv) {
/* Got an error somehow, just give up. */ /* Got an error somehow, just give up. */
printk(KERN_WARNING PFX
"Error sending channel information for channel"
" %d: %d\n", intf->curr_channel, rv);
intf->curr_channel = IPMI_MAX_CHANNELS; intf->curr_channel = IPMI_MAX_CHANNELS;
wake_up(&intf->waitq); wake_up(&intf->waitq);
printk(KERN_WARNING PFX
"Error sending channel information: %d\n",
rv);
} }
} }
out: out:
...@@ -2964,8 +2963,12 @@ int ipmi_register_smi(struct ipmi_smi_handlers *handlers, ...@@ -2964,8 +2963,12 @@ int ipmi_register_smi(struct ipmi_smi_handlers *handlers,
intf->null_user_handler = channel_handler; intf->null_user_handler = channel_handler;
intf->curr_channel = 0; intf->curr_channel = 0;
rv = send_channel_info_cmd(intf, 0); rv = send_channel_info_cmd(intf, 0);
if (rv) if (rv) {
printk(KERN_WARNING PFX
"Error sending channel information for channel"
" 0, %d\n", rv);
goto out; goto out;
}
/* Wait for the channel info to be read. */ /* Wait for the channel info to be read. */
wait_event(intf->waitq, wait_event(intf->waitq,
......
...@@ -965,9 +965,9 @@ static inline int ipmi_si_is_busy(struct timespec *ts) ...@@ -965,9 +965,9 @@ static inline int ipmi_si_is_busy(struct timespec *ts)
return ts->tv_nsec != -1; return ts->tv_nsec != -1;
} }
static int ipmi_thread_busy_wait(enum si_sm_result smi_result, static inline int ipmi_thread_busy_wait(enum si_sm_result smi_result,
const struct smi_info *smi_info, const struct smi_info *smi_info,
struct timespec *busy_until) struct timespec *busy_until)
{ {
unsigned int max_busy_us = 0; unsigned int max_busy_us = 0;
...@@ -2658,6 +2658,9 @@ static int ipmi_probe(struct platform_device *dev) ...@@ -2658,6 +2658,9 @@ static int ipmi_probe(struct platform_device *dev)
if (!match) if (!match)
return -EINVAL; return -EINVAL;
if (!of_device_is_available(np))
return -EINVAL;
ret = of_address_to_resource(np, 0, &resource); ret = of_address_to_resource(np, 0, &resource);
if (ret) { if (ret) {
dev_warn(&dev->dev, PFX "invalid address from OF\n"); dev_warn(&dev->dev, PFX "invalid address from OF\n");
...@@ -3655,6 +3658,9 @@ static void cleanup_one_si(struct smi_info *to_clean) ...@@ -3655,6 +3658,9 @@ static void cleanup_one_si(struct smi_info *to_clean)
if (!to_clean) if (!to_clean)
return; return;
if (to_clean->dev)
dev_set_drvdata(to_clean->dev, NULL);
list_del(&to_clean->link); list_del(&to_clean->link);
/* Tell the driver that we are shutting down. */ /* Tell the driver that we are shutting down. */
......
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