@@ -363,7 +363,7 @@ static int __ipmi_set_timeout(struct ipmi_smi_msg *smi_msg,
363
363
{
364
364
struct kernel_ipmi_msg msg ;
365
365
unsigned char data [6 ];
366
- int rv ;
366
+ int rv = 0 ;
367
367
struct ipmi_system_interface_addr addr ;
368
368
int hbnow = 0 ;
369
369
@@ -405,14 +405,18 @@ static int __ipmi_set_timeout(struct ipmi_smi_msg *smi_msg,
405
405
msg .cmd = IPMI_WDOG_SET_TIMER ;
406
406
msg .data = data ;
407
407
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 );
416
420
if (rv )
417
421
pr_warn ("set timeout error: %d\n" , rv );
418
422
else if (send_heartbeat_now )
@@ -431,9 +435,7 @@ static int _ipmi_set_timeout(int do_heartbeat)
431
435
432
436
atomic_set (& msg_tofree , 2 );
433
437
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 );
437
439
if (rv ) {
438
440
atomic_set (& msg_tofree , 0 );
439
441
return rv ;
@@ -460,27 +462,10 @@ static int ipmi_set_timeout(int do_heartbeat)
460
462
return rv ;
461
463
}
462
464
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
-
479
465
static void panic_halt_ipmi_heartbeat (void )
480
466
{
481
467
struct kernel_ipmi_msg msg ;
482
468
struct ipmi_system_interface_addr addr ;
483
- int rv ;
484
469
485
470
/*
486
471
* Don't reset the timer if we have the timer turned off, that
@@ -497,24 +482,10 @@ static void panic_halt_ipmi_heartbeat(void)
497
482
msg .cmd = IPMI_WDOG_RESET_TIMER ;
498
483
msg .data = NULL ;
499
484
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 );
511
487
}
512
488
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
-
518
489
/*
519
490
* Special call, doesn't claim any locks. This is only to be called
520
491
* 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)
526
497
int send_heartbeat_now ;
527
498
int rv ;
528
499
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 );
536
501
if (rv ) {
537
- atomic_sub (2 , & panic_done_count );
538
502
pr_warn ("Unable to extend the watchdog timeout\n" );
539
503
} else {
540
504
if (send_heartbeat_now )
541
505
panic_halt_ipmi_heartbeat ();
542
506
}
543
- while (atomic_read (& panic_done_count ) != 0 )
544
- ipmi_poll_interface (watchdog_user );
545
507
}
546
508
547
509
static int __ipmi_heartbeat (void )
0 commit comments