Changes in uspace/srv/system/system.c [ad9e225:77a0119] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/srv/system/system.c
rad9e225 r77a0119 1 1 /* 2 * Copyright (c) 202 4Jiri Svoboda2 * Copyright (c) 2025 Jiri Svoboda 3 3 * Copyright (c) 2005 Martin Decky 4 4 * All rights reserved. … … 35 35 */ 36 36 37 #include <devman.h> 37 38 #include <fibril.h> 38 39 #include <futil.h> … … 48 49 #include <str.h> 49 50 #include <loc.h> 51 #include <shutdown.h> 50 52 #include <str_error.h> 51 53 #include <config.h> … … 84 86 85 87 static void system_srv_conn(ipc_call_t *, void *); 86 static errno_t system_srv_shutdown(void *); 88 static errno_t system_srv_poweroff(void *); 89 static errno_t system_srv_restart(void *); 87 90 88 91 system_ops_t system_srv_ops = { 89 .shutdown = system_srv_shutdown 92 .poweroff = system_srv_poweroff, 93 .restart = system_srv_restart 90 94 }; 91 95 … … 382 386 printf("%s: System volume is configured.\n", NAME); 383 387 384 /* Wait untilsystem volume is mounted */388 /* Verify that system volume is mounted */ 385 389 sv_mounted = false; 386 390 387 while (true) { 388 rc = vol_get_parts(vol, &part_ids, &nparts); 391 rc = vol_get_parts(vol, &part_ids, &nparts); 392 if (rc != EOK) { 393 printf("Error getting list of volumes.\n"); 394 goto error; 395 } 396 397 for (i = 0; i < nparts; i++) { 398 rc = vol_part_info(vol, part_ids[i], &pinfo); 389 399 if (rc != EOK) { 390 printf("Error getting list of volumes.\n"); 400 printf("Error getting partition " 401 "information.\n"); 402 rc = EIO; 391 403 goto error; 392 404 } 393 405 394 for (i = 0; i < nparts; i++) { 395 rc = vol_part_info(vol, part_ids[i], &pinfo); 396 if (rc != EOK) { 397 printf("Error getting partition " 398 "information.\n"); 399 rc = EIO; 400 goto error; 401 } 402 403 if (str_cmp(pinfo.cur_mp, "/w") == 0) { 404 sv_mounted = true; 405 break; 406 } 406 if (str_cmp(pinfo.cur_mp, "/w") == 0) { 407 sv_mounted = true; 408 break; 407 409 } 408 409 if (sv_mounted) 410 break; 411 412 free(part_ids); 413 part_ids = NULL; 414 415 fibril_sleep(1); 416 printf("Sleeping(1) for system volume.\n"); 417 } 410 } 411 412 if (sv_mounted == false) { 413 printf("System volume not found.\n"); 414 rc = EIO; 415 goto error; 416 } 417 418 free(part_ids); 419 part_ids = NULL; 420 418 421 } 419 422 … … 520 523 /* Eject all volumes. */ 521 524 525 log_msg(LOG_DEFAULT, LVL_NOTE, "Ejecting volumes."); 526 522 527 rc = vol_create(&vol); 523 528 if (rc != EOK) { … … 534 539 535 540 for (i = 0; i < nparts; i++) { 536 rc = vol_part_eject(vol, part_ids[i] );541 rc = vol_part_eject(vol, part_ids[i], vef_none); 537 542 if (rc != EOK) { 538 543 log_msg(LOG_DEFAULT, LVL_ERROR, "Error ejecting " … … 544 549 free(part_ids); 545 550 vol_destroy(vol); 551 546 552 return EOK; 547 553 error: … … 610 616 } 611 617 612 /** System shutdownrequest.618 /** System poweroff request. 613 619 * 614 620 * @param arg Argument (sys_srv_t *) 615 621 */ 616 static errno_t system_srv_ shutdown(void *arg)622 static errno_t system_srv_poweroff(void *arg) 617 623 { 618 624 sys_srv_t *syssrv = (sys_srv_t *)arg; 619 625 errno_t rc; 620 626 621 log_msg(LOG_DEFAULT, LVL_NOTE, "system_srv_ shutdown");627 log_msg(LOG_DEFAULT, LVL_NOTE, "system_srv_poweroff"); 622 628 623 629 rc = system_sys_shutdown(); 624 630 if (rc != EOK) { 625 log_msg(LOG_DEFAULT, LVL_NOTE, "system_srv_ shutdownfailed");631 log_msg(LOG_DEFAULT, LVL_NOTE, "system_srv_poweroff failed"); 626 632 system_srv_shutdown_failed(&syssrv->srv); 627 633 } 628 634 629 log_msg(LOG_DEFAULT, LVL_NOTE, "system_srv_shutdown complete"); 635 log_msg(LOG_DEFAULT, LVL_NOTE, "system_srv_poweroff complete"); 636 system_srv_shutdown_complete(&syssrv->srv); 637 return EOK; 638 } 639 640 /** System restart request. 641 * 642 * @param arg Argument (sys_srv_t *) 643 */ 644 static errno_t system_srv_restart(void *arg) 645 { 646 sys_srv_t *syssrv = (sys_srv_t *)arg; 647 errno_t rc; 648 649 log_msg(LOG_DEFAULT, LVL_NOTE, "system_srv_restart"); 650 651 rc = system_sys_shutdown(); 652 if (rc != EOK) { 653 log_msg(LOG_DEFAULT, LVL_NOTE, "system_srv_restart failed"); 654 system_srv_shutdown_failed(&syssrv->srv); 655 } 656 657 /* Quiesce the device tree. */ 658 659 log_msg(LOG_DEFAULT, LVL_NOTE, "Quiescing devices."); 660 661 rc = devman_quiesce_devices("/hw"); 662 if (rc != EOK) { 663 log_msg(LOG_DEFAULT, LVL_ERROR, 664 "Failed to quiesce device tree."); 665 return rc; 666 } 667 668 sys_reboot(); 669 670 log_msg(LOG_DEFAULT, LVL_NOTE, "system_srv_restart complete"); 630 671 system_srv_shutdown_complete(&syssrv->srv); 631 672 return EOK;
Note:
See TracChangeset
for help on using the changeset viewer.