From: mbirgmei@email.tuwien.ac.at (Martin BIRGMEIER)
Subject: Re: [386bsd] X broken with new patchkit ?
Organization: Technical University of Vienna
Date: Thu, 28 Jan 1993 08:13:04 GMT

In article <4374@wzv.win.tue.nl> guido@gvr.win.tue.nl (Guido van Rooij) writes:
>I installed the new patchkit a few days ago. I also had keycap-0.1.1 (codrv)
>installed. This used to work fine, but now that I've installed the new
>patchkit, the keyboard isn't functioning quite well anymore when using X.
>Symptoms are that after pressing a key you have to wiat several seconds
>for the key to become visible on your xterm UNLESS you move your mouse..
>then the char immediately shows up. Anyone having the same behaviour?
>
>
>-Guido

Ok I had the same problems (plus a discussion with Nate Williams about it)
until I finally fixed it (at least it seems so :-)). Here is the patch:

------------------------------ cut here ------------------------------
*** /usr/src/sys.386bsd/i386/isa/co_kbd.c.CODRVP_ORIG	Thu Nov  5 09:39:50 1992
--- /usr/src/sys.386bsd/i386/isa/co_kbd.c	Wed Jan 27 09:37:59 1993
***************
*** 138,144 ****
  	initrb(&co_buf);
  
  	/* signal opening process only */
! 	consoftc.cs_selp = 0;
  	consoftc.cs_pgid = p->p_pid;
  
  	return 0;
--- 138,144 ----
  	initrb(&co_buf);
  
  	/* signal opening process only */
! 	consoftc.cs_selp = (pid_t) 0;
  	consoftc.cs_pgid = p->p_pid;
  
  	return 0;
***************
*** 156,162 ****
  	if (minor(dev)==0x80) return 0;
  
  	consoftc.cs_flags &= ~(CO_OPENRAW|CO_ASYNC);
! 	consoftc.cs_selp = 0;
  	consoftc.cs_pgid = 0;
  
  	/* do we need to restore console?
--- 156,162 ----
  	if (minor(dev)==0x80) return 0;
  
  	consoftc.cs_flags &= ~(CO_OPENRAW|CO_ASYNC);
! 	consoftc.cs_selp = (pid_t) 0;
  	consoftc.cs_pgid = 0;
  
  	/* do we need to restore console?
***************
*** 279,285 ****
  		return;
  	if (consoftc.cs_selp) {
  		selwakeup(consoftc.cs_selp,0);
! 		consoftc.cs_selp = 0;
  	}
  	if (consoftc.cs_flags & CO_ASYNC) {
  		if (consoftc.cs_pgid < 0)
--- 279,285 ----
  		return;
  	if (consoftc.cs_selp) {
  		selwakeup(consoftc.cs_selp,0);
! 		consoftc.cs_selp = (pid_t) 0;
  	}
  	if (consoftc.cs_flags & CO_ASYNC) {
  		if (consoftc.cs_pgid < 0)
***************
*** 306,312 ****
  			splx(s);
  			return 1;
  		}
! 		consoftc.cs_selp = p;
  	}
  	splx(s);
  	return 0;
--- 306,312 ----
  			splx(s);
  			return 1;
  		}
! 		consoftc.cs_selp = p->p_pid;
  	}
  	splx(s);
  	return 0;
***************
*** 1182,1188 ****
  				consoftc.cs_flags |= CO_OPENRAW;
  			ofl = 0;
  		}
! 		consoftc.cs_selp = 0;
  		break;
  	case KBDRESET8042:
  		doreset();
--- 1182,1188 ----
  				consoftc.cs_flags |= CO_OPENRAW;
  			ofl = 0;
  		}
! 		consoftc.cs_selp = (pid_t) 0;
  		break;
  	case KBDRESET8042:
  		doreset();
*** /usr/src/sys.386bsd/i386/isa/co_hdr.h.CODRVP_ORIG	Wed Nov  4 04:15:59 1992
--- /usr/src/sys.386bsd/i386/isa/co_hdr.h	Wed Jan 27 09:35:27 1993
***************
*** 122,128 ****
  	int	cs_timo;	/* timeouts since interrupt (unused) */
  	u_long	cs_wedgecnt;	/* times restarted (unused)*/
  	u_long	cs_ovfl;	/* buffer overflows */
! 	struct proc *cs_selp;	/* Process waiting for select call */
  	int	cs_pgid;	/* Process group for ASYNC I/O */
  /*XXX*/	struct tty *cs_constty;	/* used to restore constty if */
  				/* anyone dares to steal CONSOLE during raw open */
--- 122,128 ----
  	int	cs_timo;	/* timeouts since interrupt (unused) */
  	u_long	cs_wedgecnt;	/* times restarted (unused)*/
  	u_long	cs_ovfl;	/* buffer overflows */
! 	pid_t	cs_selp;	/* Process waiting for select call */
  	int	cs_pgid;	/* Process group for ASYNC I/O */
  /*XXX*/	struct tty *cs_constty;	/* used to restore constty if */
  				/* anyone dares to steal CONSOLE during raw open */
------------------------------ cut here ------------------------------

Cheers,

Martin

Technical University of Vienna/Dept of Comm. Engr.