USB prevents system from powering off and ucom prevents usb from being unloaded - ideas?

Shunsuke Akiyama akiyama at jp.FreeBSD.org
Mon Jan 21 05:15:03 PST 2008


Hi, Michael

Please try attached patch for current.
For other branches, please get a patch from

  http://people.freebsd.org/~akiyama/patches/

I've only tested it on RELENG_6 branch, but it would work for both
current and RELENG_7.

Regards,

At Wed, 16 Jan 2008 17:08:34 +0100,
Michael Nottebrock wrote:
> 
> [1  <text/plain; us-ascii (quoted-printable)>]
> Subject line is the executive summary of my problem:
> 
> I have a box with an Intel 945GC A2 chipset that will not poweroff on shutdown 
> if the usb kernel module is loaded (or statically compiled into the kernel). 
> Unloading the usb kernel modules sometime during shutdown (I hacked the usbd 
> rc script for this) to work around the problem helped until I needed to hook 
> up another device which uses ucom(4) to the machine. On kldunload, ucom 
> claims to detach, but remains loaded and subsequent kldunload attempts 
> trigger the error "kldunload: attempt to unload file that was loaded by the 
> kernel". The stuck ucom in turn prevents usb from getting unloaded and the 
> machine cannot poweroff.
> 
> I have already tried disabling EHCI, but it does not help. Any ideas on either 
> getting uhci to properly detach on shutdown or getting rid of ucom?
> 
> 
> Cheers,
> -- 
>    ,_,   | Michael Nottebrock               | lofi at freebsd.org
>  (/^ ^\) | FreeBSD - The Power to Serve     | http://www.freebsd.org
>    \u/   | K Desktop Environment on FreeBSD | http://freebsd.kde.org
> [2 This is a digitally signed message part. <application/pgp-signature (7bit)>]
> 

Index: sys/dev/usb/ucom.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/usb/ucom.c,v
retrieving revision 1.64
diff -u -r1.64 ucom.c
--- sys/dev/usb/ucom.c	25 Jun 2007 06:40:20 -0000	1.64
+++ sys/dev/usb/ucom.c	21 Jan 2008 12:54:00 -0000
@@ -1,7 +1,8 @@
 /*	$NetBSD: ucom.c,v 1.40 2001/11/13 06:24:54 lukem Exp $	*/
 
 /*-
- * Copyright (c) 2001-2003, 2005 Shunsuke Akiyama <akiyama at jp.FreeBSD.org>.
+ * Copyright (c) 2001-2003, 2005, 2008
+ *	Shunsuke Akiyama <akiyama at jp.FreeBSD.org>.
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -113,6 +114,7 @@
 #define DPRINTFN(n, x)
 #endif
 
+static int ucom_modevent(module_t, int, void *);
 static void ucom_cleanup(struct ucom_softc *);
 static int ucomparam(struct tty *, struct termios *);
 static void ucomstart(struct tty *);
@@ -135,7 +137,7 @@
 
 static moduledata_t ucom_mod = {
 	"ucom",
-	NULL,
+	ucom_modevent,
 	NULL
 };
 
@@ -143,6 +145,21 @@
 MODULE_DEPEND(ucom, usb, 1, 1, 1);
 MODULE_VERSION(ucom, UCOM_MODVER);
 
+static int
+ucom_modevent(module_t mod, int type, void *data)
+{
+	switch (type) {
+	case MOD_LOAD:
+		break;
+	case MOD_UNLOAD:
+		break;
+	default:
+		return (EOPNOTSUPP);
+		break;
+	}
+	return (0);
+}
+
 int
 ucom_attach(struct ucom_softc *sc)
 {

-- 
Shunsuke Akiyama
akiyama at jp.FreeBSD.org
akiyama at FreeBSD.org


More information about the freebsd-stable mailing list