Re: moused related panic

From: Giorgos Keramidas <keramida_at_freebsd.org>
Date: Tue, 6 Sep 2005 03:16:33 +0300
On 2005-09-05 21:58, Slawa Olhovchenkov <slw_at_zxy.spb.ru> wrote:
> On Mon, Sep 05, 2005 at 12:27:13PM -0400, Craig Rodrigues wrote:
>
> > On Sat, Sep 03, 2005 at 04:33:44PM +0300, Giorgos Keramidas wrote:
> > > This was on a console running with 132x25 mode.
> >
> > Can you try this?
>
> 1. I think your remember '()' around '||'
> 2. Now mouse cursor not moved.

Both true.

Another mildly strange thing I noticed by breaking into the debugger and
setting a breakpoint in set_mouse_pos() is that it seems to be called with too
many arguments in its stack frame:

# [thread pid 538 tid 100068 ]
# Breakpoint at   set_mouse_pos:  pushl   %ebp
# db> where
# Tracing pid 538 tid 100068 td 0xc1d35a80
# set_mouse_pos(c1ab6c00,c014630a,c3c811e0,3,c1d35a80) at set_mouse_pos
# scioctl(c1aa8b00,c014630a,c3c811e0,3,c1d35a80) at scioctl+0x88
# giant_ioctl(c1aa8b00,c014630a,c3c811e0,3,c1d35a80) at giant_ioctl+0x33
# devfs_ioctl_f(c1baebd0,c014630a,c3c811e0,c1973d00,c1d35a80) at devfs_ioctl_f+0xaf
# ioctl(c1d35a80,da920d04,3,0,297) at ioctl+0x370
# syscall(3b,3b,3b,80000000,0) at syscall+0x22f
# Xint0x80_syscall() at Xint0x80_syscall+0x1f
# --- syscall (54, FreeBSD ELF32, ioctl), eip = 0x28138e4b, esp = 0xbfbfe6fc, ebp = 0xbfbfe8b8 ---

That's relatively odd, if we bear in mind that set_mouse_pos() in scmouse.c is
defined as:

	static void set_mouse_pos(scr_stat *scp);

Where would the extra arguments come from in the KDB trace?

The diff I was using when this was traced, is:

%%%
Index: scmouse.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/syscons/scmouse.c,v
retrieving revision 1.38
diff -u -r1.38 scmouse.c
--- scmouse.c	30 Aug 2005 18:58:16 -0000	1.38
+++ scmouse.c	6 Sep 2005 00:13:52 -0000
_at__at_ -140,6 +140,8 _at__at_
 static void
 set_mouse_pos(scr_stat *scp)
 {
+    KASSERT(scp != NULL, ("null scp"));
+
     if (scp->mouse_xpos < scp->xoff*scp->font_width)
 	scp->mouse_xpos = scp->xoff*scp->font_width;
     if (scp->mouse_ypos < scp->yoff*scp->font_size)
_at__at_ -157,7 +159,9 _at__at_
 	    scp->mouse_ypos = (scp->ysize + scp->yoff)*scp->font_size - 1;
     }
 
-    if (scp->mouse_xpos != scp->mouse_oldxpos || scp->mouse_ypos != scp->mouse_oldypos) {
+    if ((scp->mouse_xpos != scp->mouse_oldxpos ||
+        scp->mouse_ypos != scp->mouse_oldypos) &&
+	scp->font_size != 0 && scp->font_width != 0) {
 	scp->status |= MOUSE_MOVED;
     	scp->mouse_pos =
 	    (scp->mouse_ypos/scp->font_size - scp->yoff)*scp->xsize 
%%%
Received on Mon Sep 05 2005 - 22:17:29 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:42 UTC