|
|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Eugene Grosbein 2:5006/1 15 Feb 2006 19:57:04 To : Eugene Grosbein Subject : Re: быстрый reset -------------------------------------------------------------------------------- 15 фев 2006, среда, в 17:46 KRAST, Eugene Grosbein написал(а): EG> При загрузке FreeBSD с USB (и последующей работе с /dev/da0s1a, EG> смонтированным в r/o) может возникнуть ситуация, когда umass0 теряется EG> ядром (выдернули из порта). Даже если он потом обратно появляется, EG> система оказывается частично неработоспособна. EG> Есть ли возможность при определении такой ситуации выполнить EG> быструю профилактическую перезагрузку? Судя по всему, нет. Даже panic() вызывает сброс буферов (только двойной panic() не делает этого). Пришлось сделать sysctl kern.do_cpu.reset, при записи ненулевого значения в него происходит рестарт CPU с выходом в BIOS POST и загрузкой "с нуля". - --- sys/kern/kern_shutdown.c.orig Wed Feb 15 13:17:58 2006 +++ sys/kern/kern_shutdown.c Wed Feb 15 18:15:21 2006 @@ -575,6 +575,25 @@ DELAY(poweroff_delay * 1000); } +static int do_cpu_reset = 0; + +static int +sysctl_do_cpu_reset(SYSCTL_HANDLER_ARGS) +{ + int error; + int r; + error = sysctl_handle_int(oidp, &r, 0, req); + if (error != 0 || req->newptr == NULL) + return (error); + if ((do_cpu_reset = r)) + cpu_reset(); + return (error); +} + +SYSCTL_PROC(_kern, OID_AUTO, do_cpu_reset, CTLTYPE_INT|CTLFLAG_RW, + 0, sizeof(do_cpu_reset), sysctl_do_cpu_reset, "I", + "Write 1 here to reset CPU"); + /* * Some system processes (e.g. syncer) need to be stopped at appropriate * points in their main loops prior to a system shutdown, so that they Eugene -- Choose no friends --- slrn/0.9.8.0 (FreeBSD) * Origin: Svyaz Service JSC (2:5006/1@fidonet) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/2609315554fdd.html, оценка из 5, голосов 10
|