Skip to content

Commit 971a004

Browse files
committed
ipmi:watchdog: Use the new interface for panic messages
It's available, remove all the duplicate code. Signed-off-by: Corey Minyard <cminyard@mvista.com>
1 parent 6f7f660 commit 971a004

File tree

1 file changed

+17
-55
lines changed

1 file changed

+17
-55
lines changed

drivers/char/ipmi/ipmi_watchdog.c

Lines changed: 17 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,7 @@ static int __ipmi_set_timeout(struct ipmi_smi_msg *smi_msg,
363363
{
364364
struct kernel_ipmi_msg msg;
365365
unsigned char data[6];
366-
int rv;
366+
int rv = 0;
367367
struct ipmi_system_interface_addr addr;
368368
int hbnow = 0;
369369

@@ -405,14 +405,18 @@ static int __ipmi_set_timeout(struct ipmi_smi_msg *smi_msg,
405405
msg.cmd = IPMI_WDOG_SET_TIMER;
406406
msg.data = data;
407407
msg.data_len = sizeof(data);
408-
rv = ipmi_request_supply_msgs(watchdog_user,
409-
(struct ipmi_addr *) &addr,
410-
0,
411-
&msg,
412-
NULL,
413-
smi_msg,
414-
recv_msg,
415-
1);
408+
if (smi_msg)
409+
rv = ipmi_request_supply_msgs(watchdog_user,
410+
(struct ipmi_addr *) &addr,
411+
0,
412+
&msg,
413+
NULL,
414+
smi_msg,
415+
recv_msg,
416+
1);
417+
else
418+
ipmi_panic_request_and_wait(watchdog_user,
419+
(struct ipmi_addr *) &addr, &msg);
416420
if (rv)
417421
pr_warn("set timeout error: %d\n", rv);
418422
else if (send_heartbeat_now)
@@ -431,9 +435,7 @@ static int _ipmi_set_timeout(int do_heartbeat)
431435

432436
atomic_set(&msg_tofree, 2);
433437

434-
rv = __ipmi_set_timeout(&smi_msg,
435-
&recv_msg,
436-
&send_heartbeat_now);
438+
rv = __ipmi_set_timeout(&smi_msg, &recv_msg, &send_heartbeat_now);
437439
if (rv) {
438440
atomic_set(&msg_tofree, 0);
439441
return rv;
@@ -460,27 +462,10 @@ static int ipmi_set_timeout(int do_heartbeat)
460462
return rv;
461463
}
462464

463-
static atomic_t panic_done_count = ATOMIC_INIT(0);
464-
465-
static void panic_smi_free(struct ipmi_smi_msg *msg)
466-
{
467-
atomic_dec(&panic_done_count);
468-
}
469-
static void panic_recv_free(struct ipmi_recv_msg *msg)
470-
{
471-
atomic_dec(&panic_done_count);
472-
}
473-
474-
static struct ipmi_smi_msg panic_halt_heartbeat_smi_msg =
475-
INIT_IPMI_SMI_MSG(panic_smi_free);
476-
static struct ipmi_recv_msg panic_halt_heartbeat_recv_msg =
477-
INIT_IPMI_RECV_MSG(panic_recv_free);
478-
479465
static void panic_halt_ipmi_heartbeat(void)
480466
{
481467
struct kernel_ipmi_msg msg;
482468
struct ipmi_system_interface_addr addr;
483-
int rv;
484469

485470
/*
486471
* Don't reset the timer if we have the timer turned off, that
@@ -497,24 +482,10 @@ static void panic_halt_ipmi_heartbeat(void)
497482
msg.cmd = IPMI_WDOG_RESET_TIMER;
498483
msg.data = NULL;
499484
msg.data_len = 0;
500-
atomic_add(2, &panic_done_count);
501-
rv = ipmi_request_supply_msgs(watchdog_user,
502-
(struct ipmi_addr *) &addr,
503-
0,
504-
&msg,
505-
NULL,
506-
&panic_halt_heartbeat_smi_msg,
507-
&panic_halt_heartbeat_recv_msg,
508-
1);
509-
if (rv)
510-
atomic_sub(2, &panic_done_count);
485+
ipmi_panic_request_and_wait(watchdog_user, (struct ipmi_addr *) &addr,
486+
&msg);
511487
}
512488

513-
static struct ipmi_smi_msg panic_halt_smi_msg =
514-
INIT_IPMI_SMI_MSG(panic_smi_free);
515-
static struct ipmi_recv_msg panic_halt_recv_msg =
516-
INIT_IPMI_RECV_MSG(panic_recv_free);
517-
518489
/*
519490
* Special call, doesn't claim any locks. This is only to be called
520491
* at panic or halt time, in run-to-completion mode, when the caller
@@ -526,22 +497,13 @@ static void panic_halt_ipmi_set_timeout(void)
526497
int send_heartbeat_now;
527498
int rv;
528499

529-
/* Wait for the messages to be free. */
530-
while (atomic_read(&panic_done_count) != 0)
531-
ipmi_poll_interface(watchdog_user);
532-
atomic_add(2, &panic_done_count);
533-
rv = __ipmi_set_timeout(&panic_halt_smi_msg,
534-
&panic_halt_recv_msg,
535-
&send_heartbeat_now);
500+
rv = __ipmi_set_timeout(NULL, NULL, &send_heartbeat_now);
536501
if (rv) {
537-
atomic_sub(2, &panic_done_count);
538502
pr_warn("Unable to extend the watchdog timeout\n");
539503
} else {
540504
if (send_heartbeat_now)
541505
panic_halt_ipmi_heartbeat();
542506
}
543-
while (atomic_read(&panic_done_count) != 0)
544-
ipmi_poll_interface(watchdog_user);
545507
}
546508

547509
static int __ipmi_heartbeat(void)

0 commit comments

Comments
 (0)