[PATCH][2.6.0-test7] digi_acceleport.c has bogus "address of" operator

From: Kurtis D. Rader
Date: Thu Oct 16 2003 - 00:52:25 EST


http://bugme.osdl.org/show_bug.cgi?id=1365

The digi_acceleport.c USB serial driver has a bogus "address of" operator
that results in panics like this:

kernel BUG at include/asm/spinlock.h:120!
invalid operand: 0000 [#1]
Call Trace:
[<f88e9000>] digi_wakeup_write_lock+0x0/0xaa [digi_acceleport]
[<c0236842>] console_callback+0xa0/0xc2
[<c0136ebc>] worker_thread+0x228/0x3ce
[<f88e9000>] digi_wakeup_write_lock+0x0/0xaa [digi_acceleport]
[<c011e8b6>] default_wake_function+0x0/0x2e
[<c010993e>] ret_from_fork+0x6/0x14
[<c011e8b6>] default_wake_function+0x0/0x2e
[<c0136c94>] worker_thread+0x0/0x3ce
[<c010740d>] kernel_thread_helper+0x5/0xc

The problem is that digi_wakeup_write_lock() takes a pointer to a struct
usb_serial_port. However, what gets passed is a pointer to a pointer to a
struct usb_serial_port.

=== diff -rup drivers/usb/serial/digi_acceleport.c.orig drivers/usb/serial/digi_acceleport.c
--- drivers/usb/serial/digi_acceleport.c.orig 2003-10-15 22:03:26.000000000 -0700
+++ drivers/usb/serial/digi_acceleport.c 2003-10-15 21:10:21.000000000 -0700
@@ -1728,8 +1728,7 @@ dbg( "digi_startup: TOP" );
init_waitqueue_head( &priv->dp_flush_wait );
priv->dp_in_close = 0;
init_waitqueue_head( &priv->dp_close_wait );
- INIT_WORK(&priv->dp_wakeup_work, (void *)digi_wakeup_write_lock,
- (void *)(&serial->port[i]));
+ INIT_WORK(&priv->dp_wakeup_work, digi_wakeup_write_lock, serial->port[i]);

/* initialize write wait queue for this port */
init_waitqueue_head( &serial->port[i]->write_wait );

--
Kurtis D. Rader, Systems Support Engineer service: 800-IBM-SERV
IBM Integrated Technology Services email: kdrader@xxxxxxxxxx
15300 SW Koll Pkwy, MS RHE2-O2 DID: +1 503-578-3714
Beaverton, OR 97006-6063 http://www.ibm.com
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/