From: "Kurtis D. Rader" 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 BUGs. 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. drivers/usb/serial/digi_acceleport.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff -puN drivers/usb/serial/digi_acceleport.c~digi_accelport-oops-fix drivers/usb/serial/digi_acceleport.c --- 25/drivers/usb/serial/digi_acceleport.c~digi_accelport-oops-fix 2003-10-16 00:26:33.000000000 -0700 +++ 25-akpm/drivers/usb/serial/digi_acceleport.c 2003-10-16 00:26:33.000000000 -0700 @@ -1728,8 +1728,8 @@ 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 ); _