diff options
author | dhain <none@none> | 2005-10-26 16:23:44 -0700 |
---|---|---|
committer | dhain <none@none> | 2005-10-26 16:23:44 -0700 |
commit | 6d22b73346a02763769401e9f28b596670cc3d16 (patch) | |
tree | e7d7f39c1e781bfcbe0eabe6de0780f2eca0205c /usr/src/lib | |
parent | 595aa6e48d8a5812a3a42afa5f63ee6f772c7f4e (diff) | |
download | illumos-gate-6d22b73346a02763769401e9f28b596670cc3d16.tar.gz |
5107846 DR hangs on fcode_interpreter() running parallel DR.
5043347 PANIC with efcode probing of bad I/O hw in slot;
Diffstat (limited to 'usr/src/lib')
-rw-r--r-- | usr/src/lib/efcode/efdaemon/efdaemon.c | 19 | ||||
-rw-r--r-- | usr/src/lib/efcode/fcdriver/get_req.c | 10 | ||||
-rw-r--r-- | usr/src/lib/efcode/fcdriver/misc.c | 9 |
3 files changed, 29 insertions, 9 deletions
diff --git a/usr/src/lib/efcode/efdaemon/efdaemon.c b/usr/src/lib/efcode/efdaemon/efdaemon.c index 7aba030848..2450d2d1fa 100644 --- a/usr/src/lib/efcode/efdaemon/efdaemon.c +++ b/usr/src/lib/efcode/efdaemon/efdaemon.c @@ -20,7 +20,7 @@ * CDDL HEADER END */ /* - * Copyright 2000-2002 Sun Microsystems, Inc. All rights reserved. + * Copyright 2005 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -42,6 +42,7 @@ #include <syslog.h> #include <errno.h> #include <sys/wait.h> +#include <sys/fcode.h> char efcode_sh_file[] = "/usr/lib/efcode/efcode.sh"; char dev_fcode_file[] = "/dev/fcode"; @@ -57,6 +58,7 @@ main(int argc, char **argv) char tc; pid_t pid, tpid; long nerr = 0; + int error; openlog("efdaemon", LOG_PID|LOG_CONS, LOG_DAEMON); @@ -160,10 +162,21 @@ main(int argc, char **argv) else if (pid != tpid) syslog(LOG_ERR, "Wait error, expect pid: %d" " got %d, status: %x\n", pid, tpid, status); - else if (status) + else if (status) { syslog(LOG_ERR, "Wait pid: %d status: %x\n", pid, status); - else if (debug) + if (WIFEXITED(status) && + (WEXITSTATUS(status) == 1)) { + error = FC_FCODE_ABORT; + } else { + error = FC_EXEC_FAILED; + } + if (ioctl(fd, FC_SET_FCODE_ERROR, &error) < 0) { + syslog(LOG_ERR, + "ioctl(FC_SET_FCODE_ERROR)" + " failed\n"); + } + } else if (debug) syslog(LOG_DEBUG, "Wait: pid: %d\n", pid); close(fd); continue; diff --git a/usr/src/lib/efcode/fcdriver/get_req.c b/usr/src/lib/efcode/fcdriver/get_req.c index 6a87b375d5..1423524a5d 100644 --- a/usr/src/lib/efcode/fcdriver/get_req.c +++ b/usr/src/lib/efcode/fcdriver/get_req.c @@ -20,7 +20,7 @@ * CDDL HEADER END */ /* - * Copyright 2003 Sun Microsystems, Inc. All rights reserved. + * Copyright 2005 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -252,7 +252,9 @@ void find_fcode(fcode_env_t *env) { fstack_t *dp = env->ds; + common_data_t *cdp = env->private; static char func_name[] = "find_fcode"; + int error; my_unit(env); push_a_string(env, "device-id"); @@ -300,7 +302,13 @@ find_fcode(fcode_env_t *env) func_name, TOS); return; } + debug_msg(DEBUG_FIND_FCODE, "%s: not found\n", func_name); + error = FC_NO_FCODE; + if (ioctl(cdp->fcode_fd, FC_SET_FCODE_ERROR, &error) < 0) { + log_perror(MSG_FATAL, "ioctl(FC_SET_FCODE_ERROR) failed"); + return; + } } int diff --git a/usr/src/lib/efcode/fcdriver/misc.c b/usr/src/lib/efcode/fcdriver/misc.c index 4e62b11e03..b2ea8a9e00 100644 --- a/usr/src/lib/efcode/fcdriver/misc.c +++ b/usr/src/lib/efcode/fcdriver/misc.c @@ -20,8 +20,8 @@ * CDDL HEADER END */ /* - * Copyright (c) 2000 by Sun Microsystems, Inc. - * All rights reserved. + * Copyright 2005 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. */ #pragma ident "%Z%%M% %I% %E% SMI" @@ -54,9 +54,8 @@ fc_reg_read(fcode_env_t *env, char *service, fstack_t virt, int *errp) /* Don't report error on peeks */ *errp = error; else if (error) { - log_message(MSG_ERROR, "fc_read_reg: ERROR: cookie: %llx" + forth_abort(env, "fc_read_reg: ERROR: cookie: %llx" " virt: %llx\n", (uint64_t)virt, (uint64_t)virtaddr); - data = 0; } return (data); } @@ -81,7 +80,7 @@ fc_reg_write(fcode_env_t *env, char *service, fstack_t virt, fc_cell_t data, /* Don't report error on pokes */ *errp = error; else if (error) { - log_message(MSG_ERROR, "fc_write_reg: ERROR: cookie: %llx" + forth_abort(env, "fc_write_reg: ERROR: cookie: %llx" " virt: %llx\n", (uint64_t)virt, (uint64_t)virtaddr); } } |