shithub: plan9front

Download patch

ref: 96850d8bb40e282217776e17977dd8ac10d0d10f
parent: c74458c98b3cba6ed33a63b9f02a10e9828f9097
author: Sigrid <ftrvxmtrx@gmail.com>
date: Tue Dec 8 05:01:44 EST 2020

vmx: add -D option to enable debug messages, use vmdebug for non-fatal "errors"

--- a/sys/man/1/vmx
+++ b/sys/man/1/vmx
@@ -4,6 +4,9 @@
 .SH SYNOPSIS
 .B vmx
 [
+.B -D
+]
+[
 .B -M
 .I mem
 ]
@@ -57,6 +60,9 @@
 Boot modules can be specified with the
 .B -m
 argument.
+.PP
+.B -D
+enables debug messages.
 .PP
 If
 .B -v
--- a/sys/src/cmd/vmx/exith.c
+++ b/sys/src/cmd/vmx/exith.c
@@ -294,7 +294,7 @@
 		break;
 	default:
 		if((ax & 0xf0000000) != 0x40000000)
-			vmerror("unknown cpuid field eax=%#ux", ax);
+			vmdebug("unknown cpuid field eax=%#ux", ax);
 	zero:
 		ax = cx = 0;
 		break;
@@ -327,10 +327,10 @@
 		break;
 	default:
 		if(rd){
-			vmerror("read from unknown MSR %#ux ignored", cx);
+			vmdebug("read from unknown MSR %#ux ignored", cx);
 			val = 0;
 		}else
-			vmerror("write to unknown MSR %#ux ignored (val=%#ullx)", cx, val);
+			vmdebug("write to unknown MSR %#ux ignored (val=%#ullx)", cx, val);
 		break;
 	}
 	if(rd){
--- a/sys/src/cmd/vmx/fns.h
+++ b/sys/src/cmd/vmx/fns.h
@@ -11,7 +11,7 @@
 void rtcadvance(void);
 void settimer(vlong targ);
 void vmerror(char *, ...);
-#define vmdebug vmerror
+void vmdebug(char *, ...);
 int ctl(char *, ...);
 void registermmio(uvlong, uvlong, uvlong (*)(int, uvlong, uvlong));
 void irqline(int, int);
--- a/sys/src/cmd/vmx/io.c
+++ b/sys/src/cmd/vmx/io.c
@@ -726,7 +726,7 @@
 		case 0xf2: keyputc(0xfa); keyputc(0xab); keyputc(0x41); break; /* keyboard id */
 		case 0xee: keyputc(0xee); break; /* echo */
 		default:
-			vmerror("unknown kbd command %#ux", val);
+			vmdebug("unknown kbd command %#ux", val);
 			keyputc(0xfe);
 		}
 	}
@@ -1203,9 +1203,9 @@
 iowhine(int isin, u16int port, u32int val, int sz, void *mod)
 {
 	if(isin)
-		vmerror("%s%sread from unknown i/o port %#ux ignored (sz=%d, pc=%#ullx)", mod != nil ? mod : "", mod != nil ? ": " : "", port, sz, rget(RPC));
+		vmdebug("%s%sread from unknown i/o port %#ux ignored (sz=%d, pc=%#ullx)", mod != nil ? mod : "", mod != nil ? ": " : "", port, sz, rget(RPC));
 	else
-		vmerror("%s%swrite to unknown i/o port %#ux ignored (val=%#ux, sz=%d, pc=%#ullx)", mod != nil ? mod : "", mod != nil ? ": " : "", port, val, sz, rget(RPC));
+		vmdebug("%s%swrite to unknown i/o port %#ux ignored (val=%#ux, sz=%d, pc=%#ullx)", mod != nil ? mod : "", mod != nil ? ": " : "", port, val, sz, rget(RPC));
 	return -1;
 }
 
--- a/sys/src/cmd/vmx/vga.c
+++ b/sys/src/cmd/vmx/vga.c
@@ -178,7 +178,7 @@
 		switch(vga.sidx){
 		case 0: vga.seq[vga.sidx] = val & 3; return 0;
 		case 4: vga.seq[vga.sidx] = val & 0xe; return 0;
-		default: vmerror("vga: write to unknown sequencer register %#ux (val=%#ux)", vga.sidx, val); return 0;
+		default: vmdebug("vga: write to unknown sequencer register %#ux (val=%#ux)", vga.sidx, val); return 0;
 		}
 	case 0x3c6: return 0;
 	case 0x3c7: vga.rdidx = val << 2; return 0;
@@ -194,7 +194,7 @@
 		case 4: vga.graph[vga.gidx] = val & 3; break;
 		case 8: vga.graph[vga.gidx] = val; break;
 		default:
-			vmerror("vga: write to unknown graphics register %#ux (val=%#ux)", vga.gidx, val);
+			vmdebug("vga: write to unknown graphics register %#ux (val=%#ux)", vga.gidx, val);
 		}
 		return 0;
 	case 0x3d4: vga.cidx = val; return 0;
@@ -204,7 +204,7 @@
 			vga.crtc[vga.cidx] = val;
 			return 0;
 		default:
-			vmerror("vga: write to unknown CRTC register %#ux (val=%#ux)", vga.cidx, val);
+			vmdebug("vga: write to unknown CRTC register %#ux (val=%#ux)", vga.cidx, val);
 		}
 		return 0;
 	case 0x103c0: return vga.aidx & 0x3f;
@@ -215,7 +215,7 @@
 		case 0:
 		case 4:
 			return vga.seq[vga.sidx];
-		default: vmerror("vga: read from unknown sequencer register %#ux (val=%#ux)", vga.sidx, val); return 0;
+		default: vmdebug("vga: read from unknown sequencer register %#ux (val=%#ux)", vga.sidx, val); return 0;
 		}
 	case 0x103c6: return 0xff;
 	case 0x103c7: return vga.rdidx >> 2;
@@ -232,7 +232,7 @@
 		case 8:
 			return vga.graph[vga.gidx];
 		default:
-			vmerror("vga: read from unknown graphics register %#ux", vga.gidx);
+			vmdebug("vga: read from unknown graphics register %#ux", vga.gidx);
 			return 0;
 		}
 	case 0x103d4: return vga.cidx;
@@ -241,7 +241,7 @@
 		case 10: case 11: case 12: case 13: case 14: case 15:
 			return vga.crtc[vga.cidx];
 		default:
-			vmerror("vga: read from unknown CRTC register %#ux", vga.cidx);
+			vmdebug("vga: read from unknown CRTC register %#ux", vga.cidx);
 			return 0;
 		}
 	case 0x103ca:
@@ -374,7 +374,7 @@
 					nkdown[k->code >> 6] |= 1ULL<<(k->code&63);
 					break;
 				}
-			if(k == nil) vmerror("unknown key %d", r);
+			if(k == nil) vmdebug("unknown key %d", r);
 		}
 		if(mousegrab && (nkdown[0]>>29 & 1) != 0 && (nkdown[0]>>56 & 1) != 0){
 			mousegrab = 0;
--- a/sys/src/cmd/vmx/vmx.c
+++ b/sys/src/cmd/vmx/vmx.c
@@ -11,7 +11,7 @@
 int ctlfd, regsfd, mapfd, waitfd;
 Channel *waitch, *sleepch, *notifch;
 enum { MSEC = 1000*1000, MinSleep = MSEC, SleeperPoll = 2000*MSEC } ;
-int getexit, state;
+int getexit, state, debug;
 typedef struct VmxNotif VmxNotif;
 struct VmxNotif {
 	void (*f)(void *);
@@ -48,6 +48,23 @@
 	fmtfdflush(&f);
 }
 
+void
+vmdebug(char *fmt, ...)
+{
+	Fmt f;
+	char buf[256];
+	va_list arg;
+
+	if(debug == 0)
+		return;
+	fmtfdinit(&f, 2, buf, sizeof buf);
+	va_start(arg, fmt);
+	fmtvprint(&f, fmt, arg);
+	va_end(arg);
+	fmtprint(&f, "\n");
+	fmtfdflush(&f);
+}
+
 int
 ctl(char *fmt, ...)
 {
@@ -599,7 +616,8 @@
 	waitch = chancreate(sizeof(char *), 32);
 	sleepch = chancreate(sizeof(ulong), 32);
 	notifch = chancreate(sizeof(VmxNotif), 16);
-	
+	debug = 0;
+
 	ARGBEGIN {
 	case 'm':
 		bootmod = realloc(bootmod, (bootmodn + 1) * sizeof(char *));
@@ -633,6 +651,9 @@
 			edevt[edevn] = "virtio block";
 		}
 		edevn++;
+		break;
+	case 'D':
+		debug++;
 		break;
 	case 'M':
 		gmemsz = siparse(EARGF(usage()));
--