Date: Mon, 15 Dec 2008 15:41:28 +0000 (UTC) From: Doug Rabson <dfr@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r186129 - user/dfr/xenhvm/6/sys/dev/xen/console Message-ID: <200812151541.mBFFfSqJ099101@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: dfr Date: Mon Dec 15 15:41:28 2008 New Revision: 186129 URL: http://svn.freebsd.org/changeset/base/186129 Log: Make console input work when in DDB. Modified: user/dfr/xenhvm/6/sys/dev/xen/console/console.c Modified: user/dfr/xenhvm/6/sys/dev/xen/console/console.c ============================================================================== --- user/dfr/xenhvm/6/sys/dev/xen/console/console.c Mon Dec 15 15:31:10 2008 (r186128) +++ user/dfr/xenhvm/6/sys/dev/xen/console/console.c Mon Dec 15 15:41:28 2008 (r186129) @@ -19,6 +19,7 @@ #include <xen/xen_intr.h> #include <sys/cons.h> #include <sys/proc.h> +#include <sys/kdb.h> #include <dev/xen/console/xencons_ring.h> #include <xen/interface/io/console.h> @@ -140,12 +141,17 @@ xccngetc(struct consdev *dev) return 0; do { if ((c = xccncheckc(dev)) == -1) { - /* polling without sleeping in Xen doesn't work well. - * Sleeping gives other things like clock a chance to - * run - */ - tsleep(&cn_mtx, PWAIT | PCATCH, "console sleep", - XC_POLLTIME); +#ifdef KDB + if (!kdb_active) +#endif + /* + * Polling without sleeping in Xen + * doesn't work well. Sleeping gives + * other things like clock a chance to + * run + */ + tsleep(&cn_mtx, PWAIT | PCATCH, + "console sleep", XC_POLLTIME); } } while(c == -1); return c; @@ -155,11 +161,13 @@ int xccncheckc(struct consdev *dev) { int ret = (xc_mute ? 0 : -1); - if (xencons_has_input()) - xencons_handle_input(NULL); + + if (xencons_has_input()) + xencons_handle_input(NULL); CN_LOCK(cn_mtx); if ((rp - rc)) { + if (kdb_active) printf("%s:%d\n", __func__, __LINE__); /* we need to return only one char */ ret = (int)rbuf[RBUF_MASK(rc)]; rc++; @@ -295,7 +303,11 @@ xencons_rx(char *buf, unsigned len) HYPERVISOR_shared_info->evtchn_mask[0]); #endif for (i = 0; i < len; i++) { - if (xen_console_up) + if (xen_console_up +#ifdef DDB + && !kdb_active +#endif + ) (*linesw[tp->t_line]->l_rint)(buf[i], tp); else rbuf[RBUF_MASK(rp++)] = buf[i]; @@ -549,12 +561,3 @@ xcons_force_flush(void) } DRIVER_MODULE(xc, nexus, xc_driver, xc_devclass, 0, 0); -/* - * Local variables: - * mode: C - * c-set-style: "BSD" - * c-basic-offset: 8 - * tab-width: 4 - * indent-tabs-mode: t - * End: - */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200812151541.mBFFfSqJ099101>