Re: XFree86 seems to be being wrongly accused of doing the wrongthing

From: Frédéric L. W. Meunier
Date: Thu Mar 18 2004 - 01:58:29 EST


Wrongly ? I don't think so, as it has presumably been fixed in
XFree86 after 4.4.0.

http://www.xfree86.org/cvs/changes.html:

6. Do the Linux KDKBDREP ioctl on the correct fd. This
prevents the fallback that tries to directly program the
keyboard repeat rate, and the related warning messages that
recent Linux kernels generate (David Dawes).

I'm attaching the patch I extracted from CVS.

Vojtech, what about adding such information to your HOWTO ? And
better, adding the URL to atkbd.c, so people stop reporting it.

On Thu, 18 Mar 2004, Peter Williams wrote:

> With 2.6.4 I'm getting the following messages very early in the boot
> long before XFree86 is started:
>
> Mar 18 16:05:31 mudlark kernel: atkbd.c: Unknown key released
> (translated set 2, code 0x7a on isa0060/serio0).
> Mar 18 16:05:31 mudlark kernel: atkbd.c: This is an XFree86 bug. It
> shouldn't access hardware directly.
>
> They are repeated 6 times and are NOT the result of any keys being
> pressed or released.

--
http://www.pervalidus.net/contact.htmlIndex: xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_io.c
diff -u xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_io.c:3.26 xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_io.c:3.27
--- xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_io.c:3.26 Mon Nov 17 22:20:41 2003
+++ xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_io.c Wed Mar 3 18:53:41 2004
@@ -1,4 +1,4 @@
-/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_io.c,v 3.26 2003/11/17 22:20:41 dawes Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_io.c,v 3.27 2004/03/03 18:53:41 dawes Exp $ */
/*
* Copyright 1992 by Orest Zborowski <obz@xxxxxxxxx>
* Copyright 1993 by David Dawes <dawes@xxxxxxxxxxx>
@@ -81,7 +81,7 @@
#endif

static int
-KDKBDREP_ioctl_ok(int rate, int delay) {
+KDKBDREP_ioctl_ok(int fd, int rate, int delay) {
#if defined(KDKBDREP) && !defined(__sparc__)
/* This ioctl is defined in <linux/kd.h> but is not
implemented anywhere - must be in some m68k patches. */
@@ -90,7 +90,7 @@
/* don't change, just test */
kbdrep_s.rate = -1;
kbdrep_s.delay = -1;
- if (ioctl( 0, KDKBDREP, &kbdrep_s )) {
+ if (ioctl( fd, KDKBDREP, &kbdrep_s )) {
return 0;
}

@@ -105,7 +105,7 @@
if (kbdrep_s.delay < 1)
kbdrep_s.delay = 1;

- if (ioctl( 0, KDKBDREP, &kbdrep_s )) {
+ if (ioctl( fd, KDKBDREP, &kbdrep_s )) {
return 0;
}

@@ -174,7 +174,7 @@
delay = xf86Info.kbdDelay;


- if(KDKBDREP_ioctl_ok(rate, delay)) /* m68k? */
+ if(KDKBDREP_ioctl_ok(xf86Info.consoleFd, rate, delay)) /* m68k? */
return;

if(KIOCSRATE_ioctl_ok(rate, delay)) /* sparc? */
Index: xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_kbd.c
diff -u xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_kbd.c:1.5 xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_kbd.c:1.6
--- xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_kbd.c:1.5 Tue Nov 4 03:14:39 2003
+++ xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_kbd.c Wed Mar 3 18:53:41 2004
@@ -1,4 +1,4 @@
-/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_kbd.c,v 1.5 2003/11/04 03:14:39 tsi Exp $ */
+/* $XFree86: xc/programs/Xserver/hw/xfree86/os-support/linux/lnx_kbd.c,v 1.6 2004/03/03 18:53:41 dawes Exp $ */

/*
* Copyright (c) 2002 by The XFree86 Project, Inc.
@@ -108,7 +108,7 @@
#endif

static int
-KDKBDREP_ioctl_ok(int rate, int delay) {
+KDKBDREP_ioctl_ok(int fd, int rate, int delay) {
#if defined(KDKBDREP) && !defined(__sparc__)
/* This ioctl is defined in <linux/kd.h> but is not
implemented anywhere - must be in some m68k patches. */
@@ -117,7 +117,7 @@
/* don't change, just test */
kbdrep_s.rate = -1;
kbdrep_s.delay = -1;
- if (ioctl( 0, KDKBDREP, &kbdrep_s )) {
+ if (ioctl( fd, KDKBDREP, &kbdrep_s )) {
return 0;
}

@@ -132,7 +132,7 @@
if (kbdrep_s.delay < 1)
kbdrep_s.delay = 1;

- if (ioctl( 0, KDKBDREP, &kbdrep_s )) {
+ if (ioctl( fd, KDKBDREP, &kbdrep_s )) {
return 0;
}

@@ -200,7 +200,7 @@
if (pKbd->delay >= 0)
delay = pKbd->delay;

- if(KDKBDREP_ioctl_ok(rate, delay)) /* m68k? */
+ if(KDKBDREP_ioctl_ok(pInfo->fd, rate, delay)) /* m68k? */
return;

if(KIOCSRATE_ioctl_ok(rate, delay)) /* sparc? */