Now that we have KMS, it becomes possible to switch to the console
before entering ddb. Of course this will only work on devices
supported by inteldrm for now.
ok?
Index: arch/i386/i386/db_interface.c
===================================================================
RCS file: /cvs/src/sys/arch/i386/i386/db_interface.c,v
retrieving revision 1.27
diff -u -p -r1.27 db_interface.c
--- arch/i386/i386/db_interface.c 4 Apr 2011 22:37:30 -0000 1.27
+++ arch/i386/i386/db_interface.c 26 Mar 2013 00:28:23 -0000
@@ -57,6 +57,11 @@
#include <dev/acpi/acpidebug.h>
#endif /* NACPI > 0 */
+#include "wsdisplay.h"
+#if NWSDISPLAY > 0
+#include <dev/wscons/wsdisplayvar.h>
+#endif
+
extern label_t *db_recover;
extern char *trap_type[];
extern int trap_types;
@@ -100,6 +105,10 @@ int
kdb_trap(int type, int code, db_regs_t *regs)
{
int s;
+
+#if NWSDISPLAY > 0
+ wsdisplay_switchtoconsole();
+#endif
switch (type) {
case T_BPTFLT: /* breakpoint */
Index: arch/amd64/amd64/db_interface.c
===================================================================
RCS file: /cvs/src/sys/arch/amd64/amd64/db_interface.c,v
retrieving revision 1.16
diff -u -p -r1.16 db_interface.c
--- arch/amd64/amd64/db_interface.c 1 Apr 2010 19:47:59 -0000 1.16
+++ arch/amd64/amd64/db_interface.c 26 Mar 2013 00:28:23 -0000
@@ -62,6 +62,11 @@
#include <dev/acpi/acpidebug.h>
#endif /* NACPI > 0 */
+#include "wsdisplay.h"
+#if NWSDISPLAY > 0
+#include <dev/wscons/wsdisplayvar.h>
+#endif
+
extern label_t *db_recover;
extern char *trap_type[];
extern int trap_types;
@@ -106,6 +111,10 @@ int
kdb_trap(int type, int code, db_regs_t *regs)
{
int s;
+
+#if NWSDISPLAY > 0
+ wsdisplay_switchtoconsole();
+#endif
switch (type) {
case T_BPTFLT: /* breakpoint */
Index: dev/pci/drm/i915/i915_drv.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/drm/i915/i915_drv.c,v
retrieving revision 1.7
diff -u -p -r1.7 i915_drv.c
--- dev/pci/drm/i915/i915_drv.c 25 Mar 2013 19:50:56 -0000 1.7
+++ dev/pci/drm/i915/i915_drv.c 26 Mar 2013 00:28:24 -0000
@@ -699,6 +699,10 @@ inteldrm_show_screen(void *v, void *cook
void (*cb)(void *, int, int), void *cbarg)
{
struct inteldrm_softc *dev_priv = v;
+ struct rasops_info *ri = &dev_priv->ro;
+
+ if (cookie == ri->ri_active)
+ return (0);
dev_priv->switchcb = cb;
dev_priv->switchcbarg = cbarg;