From f70796280da3afdc77b625325e3837c1264e4954 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Thu, 17 Apr 2003 02:30:41 -0700 Subject: [PATCH] [PATCH] small ipmi updates --- drivers/char/ipmi/ipmi_devintf.c | 4 ++-- drivers/char/ipmi/ipmi_kcs_intf.c | 12 ++++++++++++ drivers/char/ipmi/ipmi_msghandler.c | 4 +--- drivers/char/ipmi/ipmi_watchdog.c | 6 +++--- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/drivers/char/ipmi/ipmi_devintf.c b/drivers/char/ipmi/ipmi_devintf.c index 4db232f8fbedb..4dfebf12e2f4c 100644 --- a/drivers/char/ipmi/ipmi_devintf.c +++ b/drivers/char/ipmi/ipmi_devintf.c @@ -81,10 +81,10 @@ static unsigned int ipmi_poll(struct file *file, poll_table *wait) unsigned int mask = 0; unsigned long flags; - spin_lock_irqsave(&priv->recv_msg_lock, flags); - poll_wait(file, &priv->wait, wait); + spin_lock_irqsave(&priv->recv_msg_lock, flags); + if (! list_empty(&(priv->recv_msgs))) mask |= (POLLIN | POLLRDNORM); diff --git a/drivers/char/ipmi/ipmi_kcs_intf.c b/drivers/char/ipmi/ipmi_kcs_intf.c index 5042798ec70bb..dc30e62a1d078 100644 --- a/drivers/char/ipmi/ipmi_kcs_intf.c +++ b/drivers/char/ipmi/ipmi_kcs_intf.c @@ -629,6 +629,18 @@ static void request_events(void *send_info) atomic_set(&kcs_info->req_events, 1); } +static int new_user(void *send_info) +{ + if (!try_module_get(THIS_MODULE)) + return -EBUSY; + return 0; +} + +static void user_left(void *send_info) +{ + module_put(THIS_MODULE); +} + static int initialized = 0; /* Must be called with interrupts off and with the kcs_lock held. */ diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c index b8c3834bc141d..e52afed2cc95f 100644 --- a/drivers/char/ipmi/ipmi_msghandler.c +++ b/drivers/char/ipmi/ipmi_msghandler.c @@ -345,7 +345,7 @@ static int intf_next_seq(ipmi_smi_t intf, unsigned int i; for (i=intf->curr_seq; - i!=(intf->curr_seq-1); + (i+1)%IPMI_IPMB_NUM_SEQ != intf->curr_seq; i=(i+1)%IPMI_IPMB_NUM_SEQ) { if (! intf->seq_table[i].inuse) @@ -907,8 +907,6 @@ static inline int i_ipmi_request(ipmi_user_t user, probably, so abort. */ spin_unlock_irqrestore(&(intf->seq_lock), flags); - ipmi_free_recv_msg(recv_msg); - ipmi_free_smi_msg(smi_msg); goto out_err; } diff --git a/drivers/char/ipmi/ipmi_watchdog.c b/drivers/char/ipmi/ipmi_watchdog.c index 4cf9f79b9081a..db3b55e71a622 100644 --- a/drivers/char/ipmi/ipmi_watchdog.c +++ b/drivers/char/ipmi/ipmi_watchdog.c @@ -751,7 +751,7 @@ static void ipmi_register_watchdog(int ipmi_intf) { int rv = -EBUSY; - down_read(®ister_sem); + down_write(®ister_sem); if (watchdog_user) goto out; @@ -917,7 +917,7 @@ static int __init ipmi_wdog_init(void) } else if (strcmp(preaction, "pre_int") == 0) { preaction_val = WDOG_PRETIMEOUT_MSG_INT; } else { - action_val = WDOG_PRETIMEOUT_NONE; + preaction_val = WDOG_PRETIMEOUT_NONE; printk("ipmi_watchdog: Unknown preaction '%s', defaulting to" " none\n", preaction); } @@ -929,7 +929,7 @@ static int __init ipmi_wdog_init(void) } else if (strcmp(preop, "preop_give_data") == 0) { preop_val = WDOG_PREOP_GIVE_DATA; } else { - action_val = WDOG_PREOP_NONE; + preop_val = WDOG_PREOP_NONE; printk("ipmi_watchdog: Unknown preop '%s', defaulting to" " none\n", preop); } -- 2.53.0