Subject: [wscons] why does ioctl fail if no mux is attached?
To: <>
From: Roland Dowdeswell <elric@imrryr.org>
List: tech-kern
Date: 05/07/2002 02:29:22
So, when I tried to set my alpha up to be a multi-headed machine
a while ago[1], I noticed that the only major obstacle that I ran
into was the fact that any ioctl(2) to a wsdisplay which does not
have an attached keyboard will fail with ENXIO.  I applied the
following patch to src/sys/dev/wscons/wsdisplay.c and then I was
on my way:

Index: wsdisplay.c
===================================================================
RCS file: /cvsroot/syssrc/sys/dev/wscons/wsdisplay.c,v
retrieving revision 1.62
diff -u -r1.62 wsdisplay.c
--- wsdisplay.c	2002/03/17 19:41:05	1.62
+++ wsdisplay.c	2002/05/03 18:06:26
@@ -932,11 +932,11 @@
 	}
 #endif
 	inp = sc->sc_input;
-	if (inp == NULL)
-		return (ENXIO);
-	error = wsevsrc_display_ioctl(inp, cmd, data, flag, p);
-	if (error != EPASSTHROUGH)
-		return (error);
+	if (inp != NULL) {
+		error = wsevsrc_display_ioctl(inp, cmd, data, flag, p);
+		if (error != EPASSTHROUGH)
+			return (error);
+	}
 #endif /* NWSKBD > 0 */
 
 	switch (cmd) {

The problem is that only one of the cards actually gets the keyboard
device and it is non-trivial to come up with a kernel config which
actually attaches wsmuxes to the other devices, i.e. you have to
hand craft something.

I am suggesting that we apply this patch to the source tree, but
I would like to solicit comments of anyone who is familiar with
the wscons code about any other potential side effects that this
change might have.

I think that this is not a bad approach, because I do not think
that it makes sense to fail arbitrary ioctl(2)s on a wsdisplay just
because a subsystem that they may not actually use is absent.

Comments?

Thanks,

[1]	please refer to:
	http://mail-index.netbsd.org/port-alpha/2002/05/03/0002.html

 == Roland Dowdeswell                      http://www.Imrryr.ORG/~elric/  ==
 == The Unofficial NetBSD Web Pages        http://www.Imrryr.ORG/NetBSD/  ==
 == The NetBSD Project                            http://www.NetBSD.ORG/  ==