Re: Xorg & HAL on GNU/kFreeBSD
On Wed, Aug 19, 2009 at 07:00:48PM +0200, Aurelien Jarno wrote:
> On Wed, Aug 19, 2009 at 02:38:08PM +0200, Aurelien Jarno wrote:
> > On Thu, Aug 13, 2009 at 11:50:11PM +0200, Aurelien Jarno wrote:
> > > - You have to drop the same kind of file for the mouse (see attached
> > > file 10-x11-input-mouse.fdi) to /etc/hal/fdi/policy. I haven't
> > > reported the bug to the BTS, as it don't fully work here. While the
> > > mouse is detected correctly, the cursor doesn't move.
> >
> > It seems to work with an USB mouse, but I still haven't manage to solve
> > the issue with a PS/2 mouse.
>
> Actually PS/2 mice work well with a 7.1 kernel, but not with a 7.2 one.
> The old version of Xorg from debian-ports works with both 7.1 and 7.2
> kernels.
>
Continuing my monologue, I have found that *reverting* the following
patch fixes or workaround the problem. But doing so may also hide a
problem elsewhere. Any idea?
------------------------------------------------------------------------
r189870 | rnoland | 2009-03-16 09:21:51 +0100 (lun. 16 mars 2009) | 6 lignes
Teach psm about O_ASYNC
This makes Xorg happy if you aren't using moused.
MFC after: 3 days
Index: sys/dev/atkbdc/psm.c
===================================================================
--- sys/dev/atkbdc/psm.c (.../7.1.0/sys/dev/atkbdc) (révision 196387)
+++ sys/dev/atkbdc/psm.c (.../7.2.0/sys/dev/atkbdc) (révision 196387)
@@ -70,7 +70,10 @@
#include <sys/module.h>
#include <sys/bus.h>
#include <sys/conf.h>
+#include <sys/filio.h>
#include <sys/poll.h>
+#include <sys/sigio.h>
+#include <sys/signalvar.h>
#include <sys/syslog.h>
#include <machine/bus.h>
#include <sys/rman.h>
@@ -212,6 +215,7 @@
struct cdev *bdev;
int lasterr;
int cmdcount;
+ struct sigio *async; /* Processes waiting for SIGIO */
};
static devclass_t psm_devclass;
#define PSM_SOFTC(unit) \
@@ -1383,6 +1387,7 @@
sc->mode.level = sc->dflt_mode.level;
sc->mode.protocol = sc->dflt_mode.protocol;
sc->watchdog = FALSE;
+ sc->async = NULL;
/* flush the event queue */
sc->queue.count = 0;
@@ -1522,6 +1527,12 @@
/* remove anything left in the output buffer */
empty_aux_buffer(sc->kbdc, 10);
+ /* clean up and sigio requests */
+ if (sc->async != NULL) {
+ funsetown(&sc->async);
+ sc->async = NULL;
+ }
+
/* close is almost always successful */
sc->state &= ~PSM_OPEN;
kbdc_lock(sc->kbdc, FALSE);
@@ -2083,6 +2094,15 @@
break;
#endif /* MOUSE_GETHWID */
+ case FIONBIO:
+ case FIOASYNC:
+ break;
+ case FIOSETOWN:
+ error = fsetown(*(int *)addr, &sc->async);
+ break;
+ case FIOGETOWN:
+ *(int *) addr = fgetown(&sc->async);
+ break;
default:
return (ENOTTY);
}
@@ -2972,6 +2992,9 @@
wakeup(sc);
}
selwakeuppri(&sc->rsel, PZERO);
+ if (sc->async != NULL) {
+ pgsigio(&sc->async, SIGIO, 0);
+ }
sc->state &= ~PSM_SOFTARMED;
splx(s);
}
--
Aurelien Jarno GPG: 1024D/F1BCDB73
aurelien@aurel32.net http://www.aurel32.net
Reply to: