PERFORCE change 175478 for review

Hans Petter Selasky hselasky at FreeBSD.org
Mon Mar 8 17:21:15 UTC 2010


http://p4web.freebsd.org/chv.cgi?CH=175478

Change 175478 by hselasky at hselasky_laptop001 on 2010/03/08 17:20:58

	
	IFC @ 175475
		- revert local patches. Scott Long is apparently 
		working on a better solution replacing the root
		mount hold system.

Affected files ...

.. //depot/projects/usb/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c#12 integrate
.. //depot/projects/usb/src/sys/dev/pccbb/pccbb.c#16 integrate
.. //depot/projects/usb/src/sys/dev/pccbb/pccbb_pci.c#13 integrate
.. //depot/projects/usb/src/sys/dev/pccbb/pccbbvar.h#10 integrate
.. //depot/projects/usb/src/sys/dev/usb/controller/ohci_pci.c#16 integrate
.. //depot/projects/usb/src/sys/dev/usb/controller/usb_controller.c#37 integrate
.. //depot/projects/usb/src/sys/dev/usb/usb_bus.h#18 integrate
.. //depot/projects/usb/src/sys/geom/journal/g_journal.c#14 integrate
.. //depot/projects/usb/src/sys/geom/journal/g_journal.h#4 integrate
.. //depot/projects/usb/src/sys/geom/mirror/g_mirror.c#12 integrate
.. //depot/projects/usb/src/sys/geom/mirror/g_mirror.h#5 integrate
.. //depot/projects/usb/src/sys/geom/part/g_part.c#24 integrate
.. //depot/projects/usb/src/sys/geom/raid3/g_raid3.c#12 integrate
.. //depot/projects/usb/src/sys/geom/raid3/g_raid3.h#5 integrate
.. //depot/projects/usb/src/sys/kern/kern_cons.c#5 integrate
.. //depot/projects/usb/src/sys/kern/vfs_mount.c#35 integrate
.. //depot/projects/usb/src/sys/modules/usb/run/Makefile#2 integrate
.. //depot/projects/usb/src/sys/sys/videodev.h#10 delete
.. //depot/projects/usb/src/tools/tools/usb/print-usb-if-vids.sh#3 integrate
.. //depot/projects/usb/src/usr.bin/usbhidaction/usbhidaction.1#2 integrate
.. //depot/projects/usb/src/usr.bin/usbhidaction/usbhidaction.c#3 integrate
.. //depot/projects/usb/src/usr.bin/usbhidctl/usbhid.c#4 integrate
.. //depot/projects/usb/src/usr.bin/usbhidctl/usbhidctl.1#2 integrate
.. //depot/projects/usb/src/usr.sbin/usbdevs/usbdevs.c#5 integrate

Differences ...

==== //depot/projects/usb/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c#12 (text+ko) ====

@@ -3066,6 +3066,7 @@
 		destroy_dev(zfsdev);
 }
 
+static struct root_hold_token *zfs_root_token;
 struct proc *zfsproc;
 
 uint_t zfs_fsyncer_key;
@@ -3078,6 +3079,8 @@
 
 	switch (type) {
 	case MOD_LOAD:
+		zfs_root_token = root_mount_hold("ZFS");
+
 		mutex_init(&zfs_share_lock, NULL, MUTEX_DEFAULT, NULL);
 
 		spa_init(FREAD | FWRITE);
@@ -3088,6 +3091,7 @@
 		tsd_create(&rrw_tsd_key, NULL);
 
 		printf("ZFS storage pool version " SPA_VERSION_STRING "\n");
+		root_mount_rel(zfs_root_token);
 
 		zfsdev_init();
 		break;

==== //depot/projects/usb/src/sys/dev/pccbb/pccbb.c#16 (text+ko) ====

@@ -500,6 +500,15 @@
 		mtx_unlock(&Giant);
 
 		/*
+		 * First time through we need to tell mountroot that we're
+		 * done.
+		 */
+		if (sc->sc_root_token) {
+			root_mount_rel(sc->sc_root_token);
+			sc->sc_root_token = NULL;
+		}
+
+		/*
 		 * Wait until it has been 250ms since the last time we
 		 * get an interrupt.  We handle the rest of the interrupt
 		 * at the top of the loop.  Although we clear the bit in the

==== //depot/projects/usb/src/sys/dev/pccbb/pccbb_pci.c#13 (text+ko) ====

@@ -439,6 +439,7 @@
 		device_printf(brdev, "unable to create event thread.\n");
 		panic("cbb_create_event_thread");
 	}
+	sc->sc_root_token = root_mount_hold(device_get_nameunit(sc->dev));
 	return (0);
 err:
 	if (sc->irq_res)

==== //depot/projects/usb/src/sys/dev/pccbb/pccbbvar.h#10 (text+ko) ====

@@ -88,6 +88,7 @@
 	struct proc	*event_thread;
 	void (*chipinit)(struct cbb_softc *);
 	int	powerintr;
+	struct root_hold_token *sc_root_token;
 };
 
 /* result of detect_card */

==== //depot/projects/usb/src/sys/dev/usb/controller/ohci_pci.c#16 (text+ko) ====

@@ -168,7 +168,6 @@
 
 	case 0x03f110de:
 		return ("nVidia nForce MCP61 USB Controller");
-
 	case 0x0aa510de:
 		return ("nVidia nForce MCP79 USB Controller");
 	case 0x0aa710de:

==== //depot/projects/usb/src/sys/dev/usb/controller/usb_controller.c#37 (text+ko) ====

@@ -78,6 +78,11 @@
     "Debug level");
 #endif
 
+static int usb_no_boot_wait = 0;
+TUNABLE_INT("hw.usb.no_boot_wait", &usb_no_boot_wait);
+SYSCTL_INT(_hw_usb, OID_AUTO, no_boot_wait, CTLFLAG_RDTUN, &usb_no_boot_wait, 0,
+    "No device enumerate waiting at boot.");
+
 static devclass_t usb_devclass;
 
 static device_method_t usb_methods[] = {
@@ -129,6 +134,11 @@
 		return (ENXIO);
 	}
 
+	if (usb_no_boot_wait == 0) {
+		/* delay vfs_mountroot until the bus is explored */
+		bus->bus_roothold = root_mount_hold(device_get_nameunit(dev));
+	}
+
 	usb_attach_sub(dev, bus);
 
 	return (0);			/* return success */
@@ -151,6 +161,12 @@
 	/* Stop power watchdog */
 	usb_callout_drain(&bus->power_wdog);
 
+	/* Let the USB explore process detach all devices. */
+	if (bus->bus_roothold != NULL) {
+		root_mount_rel(bus->bus_roothold);
+		bus->bus_roothold = NULL;
+	}
+
 	USB_BUS_LOCK(bus);
 	if (usb_proc_msignal(&bus->explore_proc,
 	    &bus->detach_msg[0], &bus->detach_msg[1])) {
@@ -214,16 +230,19 @@
 
 		USB_BUS_UNLOCK(bus);
 
-#if USB_HAVE_POWERD
 		/*
 		 * First update the USB power state!
 		 */
 		usb_bus_powerd(bus);
-#endif
-		/* Explore the Root USB HUB. */
+
+		 /* Explore the Root USB HUB. */
 		(udev->hub->explore) (udev);
 		USB_BUS_LOCK(bus);
 	}
+	if (bus->bus_roothold != NULL) {
+		root_mount_rel(bus->bus_roothold);
+		bus->bus_roothold = NULL;
+	}
 }
 
 /*------------------------------------------------------------------------*
@@ -276,13 +295,11 @@
 	 */
 	usb_proc_rewakeup(&bus->explore_proc);	/* recover from DDB */
 
-#if USB_HAVE_POWERD
 	USB_BUS_UNLOCK(bus);
 
 	usb_bus_power_update(bus);
 
 	USB_BUS_LOCK(bus);
-#endif
 }
 
 /*------------------------------------------------------------------------*

==== //depot/projects/usb/src/sys/dev/usb/usb_bus.h#18 (text+ko) ====

@@ -51,6 +51,7 @@
 struct usb_bus {
 	struct usb_bus_stat stats_err;
 	struct usb_bus_stat stats_ok;
+	struct root_hold_token *bus_roothold;
 	/*
 	 * There are two callback processes. One for Giant locked
 	 * callbacks. One for non-Giant locked callbacks. This should

==== //depot/projects/usb/src/sys/geom/journal/g_journal.c#14 (text+ko) ====

@@ -2108,6 +2108,12 @@
 	g_topology_unlock();
 	last_write = time_second;
 
+	if (sc->sc_rootmount != NULL) {
+		GJ_DEBUG(1, "root_mount_rel %p", sc->sc_rootmount);
+		root_mount_rel(sc->sc_rootmount);
+		sc->sc_rootmount = NULL;
+	}
+
 	for (;;) {
 		/* Get first request from the queue. */
 		mtx_lock(&sc->sc_mtx);
@@ -2305,6 +2311,9 @@
 		sc->sc_inactive.jj_queue = NULL;
 		sc->sc_active.jj_queue = NULL;
 
+		sc->sc_rootmount = root_mount_hold("GJOURNAL");
+		GJ_DEBUG(1, "root_mount_hold %p", sc->sc_rootmount);
+
 		callout_init(&sc->sc_callout, CALLOUT_MPSAFE);
 		if (md->md_type != GJ_TYPE_COMPLETE) {
 			/*
@@ -2436,6 +2445,12 @@
 
 	g_topology_unlock();
 
+	if (sc->sc_rootmount != NULL) {
+		GJ_DEBUG(1, "root_mount_rel %p", sc->sc_rootmount);
+		root_mount_rel(sc->sc_rootmount);
+		sc->sc_rootmount = NULL;
+	}
+
 	callout_drain(&sc->sc_callout);
 	mtx_lock(&sc->sc_mtx);
 	wakeup(sc);

==== //depot/projects/usb/src/sys/geom/journal/g_journal.h#4 (text+ko) ====

@@ -163,6 +163,8 @@
 
 	struct callout	 sc_callout;
 	struct proc	*sc_worker;
+
+	struct root_hold_token *sc_rootmount;
 };
 #define	sc_dprovider	sc_dconsumer->provider
 #define	sc_jprovider	sc_jconsumer->provider

==== //depot/projects/usb/src/sys/geom/mirror/g_mirror.c#12 (text+ko) ====

@@ -1722,6 +1722,13 @@
 static int
 g_mirror_try_destroy(struct g_mirror_softc *sc)
 {
+
+	if (sc->sc_rootmount != NULL) {
+		G_MIRROR_DEBUG(1, "root_mount_rel[%u] %p", __LINE__,
+		    sc->sc_rootmount);
+		root_mount_rel(sc->sc_rootmount);
+		sc->sc_rootmount = NULL;
+	}
 	g_topology_lock();
 	if (!g_mirror_can_destroy(sc)) {
 		g_topology_unlock();
@@ -2188,6 +2195,10 @@
 			 */
 			callout_drain(&sc->sc_callout);
 			sc->sc_flags |= G_MIRROR_DEVICE_FLAG_DESTROY;
+			G_MIRROR_DEBUG(1, "root_mount_rel[%u] %p", __LINE__,
+			    sc->sc_rootmount);
+			root_mount_rel(sc->sc_rootmount);
+			sc->sc_rootmount = NULL;
 			return;
 		} else {
 			return;
@@ -2211,6 +2222,10 @@
 			if (ndisks == 0) {
 				/* No valid disks found, destroy device. */
 				sc->sc_flags |= G_MIRROR_DEVICE_FLAG_DESTROY;
+				G_MIRROR_DEBUG(1, "root_mount_rel[%u] %p",
+				    __LINE__, sc->sc_rootmount);
+				root_mount_rel(sc->sc_rootmount);
+				sc->sc_rootmount = NULL;
 				return;
 			}
 		} else {
@@ -2364,6 +2379,12 @@
 			 */
 			if (sc->sc_provider == NULL)
 				g_mirror_launch_provider(sc);
+			if (sc->sc_rootmount != NULL) {
+				G_MIRROR_DEBUG(1, "root_mount_rel[%u] %p",
+				    __LINE__, sc->sc_rootmount);
+				root_mount_rel(sc->sc_rootmount);
+				sc->sc_rootmount = NULL;
+			}
 		}
 		/*
 		 * Genid should be bumped immediately, so do it here.
@@ -2891,6 +2912,8 @@
 	G_MIRROR_DEBUG(1, "Device %s created (%u components, id=%u).",
 	    sc->sc_name, sc->sc_ndisks, sc->sc_id);
 
+	sc->sc_rootmount = root_mount_hold("GMIRROR");
+	G_MIRROR_DEBUG(1, "root_mount_hold %p", sc->sc_rootmount);
 	/*
 	 * Run timeout.
 	 */

==== //depot/projects/usb/src/sys/geom/mirror/g_mirror.h#5 (text+ko) ====

@@ -207,6 +207,8 @@
 	struct mtx	sc_events_mtx;
 
 	struct callout	sc_callout;
+
+	struct root_hold_token *sc_rootmount;
 };
 #define	sc_name	sc_geom->name
 

==== //depot/projects/usb/src/sys/geom/part/g_part.c#24 (text+ko) ====

@@ -1471,6 +1471,7 @@
 	struct g_geom *gp;
 	struct g_part_entry *entry;
 	struct g_part_table *table;
+	struct root_hold_token *rht;
 	int attr, depth;
 	int error;
 
@@ -1496,6 +1497,7 @@
 		return (NULL);
 	}
 
+	rht = root_mount_hold(mp->name);
 	g_topology_unlock();
 
 	/*
@@ -1540,11 +1542,13 @@
 			g_part_new_provider(gp, table, entry);
 	}
 
+	root_mount_rel(rht);
 	g_access(cp, -1, 0, 0);
 	return (gp);
 
  fail:
 	g_topology_lock();
+	root_mount_rel(rht);
 	g_access(cp, -1, 0, 0);
 	g_part_wither(gp, error);
 	return (NULL);

==== //depot/projects/usb/src/sys/geom/raid3/g_raid3.c#12 (text+ko) ====

@@ -1985,6 +1985,13 @@
 	g_topology_assert_not();
 	sx_assert(&sc->sc_lock, SX_XLOCKED);
 
+	if (sc->sc_rootmount != NULL) {
+		G_RAID3_DEBUG(1, "root_mount_rel[%u] %p", __LINE__,
+		    sc->sc_rootmount);
+		root_mount_rel(sc->sc_rootmount);
+		sc->sc_rootmount = NULL;
+	}
+
 	g_topology_lock();
 	if (!g_raid3_can_destroy(sc)) {
 		g_topology_unlock();
@@ -2482,6 +2489,10 @@
 				 * Timeout expired, so destroy device.
 				 */
 				sc->sc_flags |= G_RAID3_DEVICE_FLAG_DESTROY;
+				G_RAID3_DEBUG(1, "root_mount_rel[%u] %p",
+				    __LINE__, sc->sc_rootmount);
+				root_mount_rel(sc->sc_rootmount);
+				sc->sc_rootmount = NULL;
 			}
 			return;
 		}
@@ -2624,6 +2635,12 @@
 		}
 		if (sc->sc_provider == NULL)
 			g_raid3_launch_provider(sc);
+		if (sc->sc_rootmount != NULL) {
+			G_RAID3_DEBUG(1, "root_mount_rel[%u] %p", __LINE__,
+			    sc->sc_rootmount);
+			root_mount_rel(sc->sc_rootmount);
+			sc->sc_rootmount = NULL;
+		}
 		break;
 	case G_RAID3_DEVICE_STATE_COMPLETE:
 		/*
@@ -2651,6 +2668,12 @@
 		}
 		if (sc->sc_provider == NULL)
 			g_raid3_launch_provider(sc);
+		if (sc->sc_rootmount != NULL) {
+			G_RAID3_DEBUG(1, "root_mount_rel[%u] %p", __LINE__,
+			    sc->sc_rootmount);
+			root_mount_rel(sc->sc_rootmount);
+			sc->sc_rootmount = NULL;
+		}
 		break;
 	default:
 		KASSERT(1 == 0, ("Wrong device state (%s, %s).", sc->sc_name,
@@ -3195,6 +3218,9 @@
 	G_RAID3_DEBUG(1, "Device %s created (%u components, id=%u).",
 	    sc->sc_name, sc->sc_ndisks, sc->sc_id);
 
+	sc->sc_rootmount = root_mount_hold("GRAID3");
+	G_RAID3_DEBUG(1, "root_mount_hold %p", sc->sc_rootmount);
+
 	/*
 	 * Run timeout.
 	 */

==== //depot/projects/usb/src/sys/geom/raid3/g_raid3.h#5 (text+ko) ====

@@ -242,6 +242,8 @@
 	struct mtx	sc_events_mtx;
 
 	struct callout	sc_callout;
+
+	struct root_hold_token *sc_rootmount;
 };
 #define	sc_name	sc_geom->name
 

==== //depot/projects/usb/src/sys/kern/kern_cons.c#5 (text+ko) ====

@@ -353,10 +353,8 @@
 
 	if (cn_mute)
 		return (-1);
-	while ((c = cncheckc()) == -1) {
-		if (!kdb_active)
-			pause("WKEY", hz / 100);	/* give USB a chance */
-	}
+	while ((c = cncheckc()) == -1)
+		;
 	if (c == '\r')
 		c = '\n';		/* console input is always ICRNL */
 	return (c);
@@ -371,7 +369,6 @@
 
 	if (cn_mute)
 		return (-1);
-
 	STAILQ_FOREACH(cnd, &cn_devlist, cnd_next) {
 		cn = cnd->cnd_cn;
 		if (!kdb_active || !(cn->cn_flags & CN_FLAG_NODEBUG)) {

==== //depot/projects/usb/src/sys/kern/vfs_mount.c#35 (text+ko) ====

@@ -58,7 +58,6 @@
 #include <sys/sysent.h>
 #include <sys/systm.h>
 #include <sys/vnode.h>
-#include <sys/cons.h>
 #include <vm/uma.h>
 
 #include <geom/geom.h>
@@ -77,7 +76,7 @@
 static int	vfs_domount(struct thread *td, const char *fstype,
 		    char *fspath, int fsflags, void *fsdata);
 static int	vfs_mountroot_ask(void);
-static int	vfs_mountroot_try(const char *mountfrom, const char *options, int asked);
+static int	vfs_mountroot_try(const char *mountfrom, const char *options);
 static void	free_mntarg(struct mntarg *ma);
 
 static int	usermount = 0;
@@ -1346,9 +1345,82 @@
  *
  */
 
+struct root_hold_token {
+	const char			*who;
+	LIST_ENTRY(root_hold_token)	list;
+};
+
+static LIST_HEAD(, root_hold_token)	root_holds =
+    LIST_HEAD_INITIALIZER(root_holds);
+
 static int root_mount_complete;
 
 /*
+ * Hold root mount.
+ */
+struct root_hold_token *
+root_mount_hold(const char *identifier)
+{
+	struct root_hold_token *h;
+
+	if (root_mounted())
+		return (NULL);
+
+	h = malloc(sizeof *h, M_DEVBUF, M_ZERO | M_WAITOK);
+	h->who = identifier;
+	mtx_lock(&mountlist_mtx);
+	LIST_INSERT_HEAD(&root_holds, h, list);
+	mtx_unlock(&mountlist_mtx);
+	return (h);
+}
+
+/*
+ * Release root mount.
+ */
+void
+root_mount_rel(struct root_hold_token *h)
+{
+
+	if (h == NULL)
+		return;
+	mtx_lock(&mountlist_mtx);
+	LIST_REMOVE(h, list);
+	wakeup(&root_holds);
+	mtx_unlock(&mountlist_mtx);
+	free(h, M_DEVBUF);
+}
+
+/*
+ * Wait for all subsystems to release root mount.
+ */
+static void
+root_mount_prepare(void)
+{
+	struct root_hold_token *h;
+	struct timeval lastfail;
+	int curfail = 0;
+
+	for (;;) {
+		DROP_GIANT();
+		g_waitidle();
+		PICKUP_GIANT();
+		mtx_lock(&mountlist_mtx);
+		if (LIST_EMPTY(&root_holds)) {
+			mtx_unlock(&mountlist_mtx);
+			break;
+		}
+		if (ppsratecheck(&lastfail, &curfail, 1)) {
+			printf("Root mount waiting for:");
+			LIST_FOREACH(h, &root_holds, list)
+				printf(" %s", h->who);
+			printf("\n");
+		}
+		msleep(&root_holds, &mountlist_mtx, PZERO | PDROP, "roothold",
+		    hz);
+	}
+}
+
+/*
  * Root was mounted, share the good news.
  */
 static void
@@ -1381,6 +1453,27 @@
 	return (root_mount_complete);
 }
 
+/*
+ * Wait until root is mounted.
+ */
+void
+root_mount_wait(void)
+{
+
+	/*
+	 * Panic on an obvious deadlock - the function can't be called from
+	 * a thread which is doing the whole SYSINIT stuff.
+	 */
+	KASSERT(curthread->td_proc->p_pid != 0,
+	    ("root_mount_wait: cannot be called from the swapper thread"));
+	mtx_lock(&mountlist_mtx);
+	while (!root_mount_complete) {
+		msleep(&root_mount_complete, &mountlist_mtx, PZERO, "rootwait",
+		    hz);
+	}
+	mtx_unlock(&mountlist_mtx);
+}
+
 static void
 set_rootvnode()
 {
@@ -1552,23 +1645,24 @@
 vfs_mountroot(void)
 {
 	char *cp, *cpt, *options, *tmpdev;
-	int error, i, t, asked = 0;
+	int error, i, asked = 0;
 
 	options = NULL;
 
+	root_mount_prepare();
+
 	mount_zone = uma_zcreate("Mountpoints", sizeof(struct mount),
 	    NULL, NULL, mount_init, mount_fini,
 	    UMA_ALIGN_PTR, UMA_ZONE_NOFREE);
 	devfs_first();
 
-repeat:
 	/*
 	 * We are booted with instructions to prompt for the root filesystem.
 	 */
 	if (boothowto & RB_ASKNAME) {
 		if (!vfs_mountroot_ask())
 			goto mounted;
-		asked++;
+		asked = 1;
 	}
 
 	options = getenv("vfs.root.mountfrom.options");
@@ -1578,7 +1672,7 @@
 	 * booted with instructions to use it.
 	 */
 	if (ctrootdevname != NULL && (boothowto & RB_DFLTROOT)) {
-		if (!vfs_mountroot_try(ctrootdevname, options, asked))
+		if (!vfs_mountroot_try(ctrootdevname, options))
 			goto mounted;
 		ctrootdevname = NULL;
 	}
@@ -1590,7 +1684,7 @@
 	 */
 	if (boothowto & RB_CDROM) {
 		for (i = 0; cdrom_rootdevnames[i] != NULL; i++) {
-			if (!vfs_mountroot_try(cdrom_rootdevnames[i], options, asked))
+			if (!vfs_mountroot_try(cdrom_rootdevnames[i], options))
 				goto mounted;
 		}
 	}
@@ -1604,7 +1698,7 @@
 	if (cp != NULL) {
 		cpt = cp;
 		while ((tmpdev = strsep(&cpt, " \t")) != NULL) {
-			error = vfs_mountroot_try(tmpdev, options, asked);
+			error = vfs_mountroot_try(tmpdev, options);
 			if (error == 0) {
 				freeenv(cp);
 				goto mounted;
@@ -1616,39 +1710,22 @@
 	/*
 	 * Try values that may have been computed by code during boot
 	 */
-	if (!vfs_mountroot_try(rootdevnames[0], options, asked))
+	if (!vfs_mountroot_try(rootdevnames[0], options))
 		goto mounted;
-	if (!vfs_mountroot_try(rootdevnames[1], options, asked))
+	if (!vfs_mountroot_try(rootdevnames[1], options))
 		goto mounted;
 
 	/*
 	 * If we (still) have a compiled-in default, try it.
 	 */
 	if (ctrootdevname != NULL)
-		if (!vfs_mountroot_try(ctrootdevname, options, asked))
+		if (!vfs_mountroot_try(ctrootdevname, options))
 			goto mounted;
-
-	asked ++;
-
-	t = 16;
-	i = -1;
-	while (t-- && (i == -1)) {
-		pause("WKEY", hz / 16);		/* give USB a chance */
-		i = cncheckc();
-	}
-
 	/*
 	 * Everything so far has failed, prompt on the console if we haven't
 	 * already tried that.
 	 */
-	if (i == 'C')		/* XXX also check for CTRL pressed */
-		if (!vfs_mountroot_ask())
-			goto mounted;
-
-	if (asked < (3 * 60))	/* Wait a maximum of 3 minutes */
-		goto repeat;
-
-	if (i != 'C')
+	if (!asked)
 		if (!vfs_mountroot_ask())
 			goto mounted;
 
@@ -1709,7 +1786,7 @@
  * Mount (mountfrom) as the root filesystem.
  */
 static int
-vfs_mountroot_try(const char *mountfrom, const char *options, int asked)
+vfs_mountroot_try(const char *mountfrom, const char *options)
 {
 	struct mount	*mp;
 	struct mntarg	*ma;
@@ -1728,7 +1805,7 @@
 
 	if (mountfrom == NULL)
 		return (error);		/* don't complain */
-	printf("Trying to mount root from %s. Press CTRL+C to abort.\n", mountfrom);
+	printf("Trying to mount root from %s\n", mountfrom);
 
 	/* parse vfs name and path */
 	vfsname = malloc(MFSNAMELEN, M_MOUNT, M_WAITOK);
@@ -1776,7 +1853,7 @@
 		devfs_fixup(curthread);
 	}
 
-	if ((error != 0) && (asked == 0)) {
+	if (error != 0 ) {
 		printf("ROOT MOUNT ERROR: %s\n", errmsg);
 		printf("If you have invalid mount options, reboot, and ");
 		printf("first try the following from\n");
@@ -1804,7 +1881,6 @@
 	char *options;
 
 	for(;;) {
-		printf("\n");
 		printf("Loader variables:\n");
 		printf("vfs.root.mountfrom=");
 		mountfrom = getenv("vfs.root.mountfrom");
@@ -1839,7 +1915,7 @@
 			g_dev_print();
 			continue;
 		}
-		if (!vfs_mountroot_try(name, NULL, 0))
+		if (!vfs_mountroot_try(name, NULL))
 			return (0);
 	}
 }

==== //depot/projects/usb/src/sys/modules/usb/run/Makefile#2 (text+ko) ====

@@ -1,5 +1,5 @@
 #
-# $FreeBSD: $
+# $FreeBSD: src/sys/modules/usb/run/Makefile,v 1.1 2010/01/28 22:24:54 thompsa Exp $
 #
 # Copyright (c) 2010 Hans Petter Selasky. All rights reserved.
 #

==== //depot/projects/usb/src/tools/tools/usb/print-usb-if-vids.sh#3 (text+ko) ====

@@ -24,7 +24,7 @@
 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 # SUCH DAMAGE.
 #
-# $FreeBSD: src/tools/tools/usb/print-usb-if-vids.sh,v 1.1 2004/04/18 05:37:34 obrien Exp $
+# $FreeBSD: src/tools/tools/usb/print-usb-if-vids.sh,v 1.3 2009/01/12 17:26:52 obrien Exp $
 
 
 fetch -o /tmp/usb.if http://www.usb.org/developers/tools/comp_dump/

==== //depot/projects/usb/src/usr.bin/usbhidaction/usbhidaction.1#2 (text+ko) ====

@@ -1,4 +1,4 @@
-.\" $FreeBSD: src/usr.bin/usbhidaction/usbhidaction.1,v 1.4 2007/06/30 03:58:01 imp Exp $
+.\" $FreeBSD: src/usr.bin/usbhidaction/usbhidaction.1,v 1.5 2010/02/16 21:43:57 imp Exp $
 .\" $NetBSD: usbhidaction.1,v 1.8 2003/02/25 10:35:59 wiz Exp $
 .\"
 .\" Copyright (c) 2000 The NetBSD Foundation, Inc.
@@ -15,13 +15,6 @@
 .\" 2. Redistributions in binary form must reproduce the above copyright
 .\"    notice, this list of conditions and the following disclaimer in the
 .\"    documentation and/or other materials provided with the distribution.
-.\" 3. All advertising materials mentioning features or use of this software
-.\"    must display the following acknowledgement:
-.\"        This product includes software developed by the NetBSD
-.\"        Foundation, Inc. and its contributors.
-.\" 4. Neither the name of The NetBSD Foundation nor the names of its
-.\"    contributors may be used to endorse or promote products derived
-.\"    from this software without specific prior written permission.
 .\"
 .\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
 .\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED

==== //depot/projects/usb/src/usr.bin/usbhidaction/usbhidaction.c#3 (text+ko) ====

@@ -1,5 +1,5 @@
 /*      $NetBSD: usbhidaction.c,v 1.8 2002/06/11 06:06:21 itojun Exp $ */
-/*	$FreeBSD: head/usr.bin/usbhidaction/usbhidaction.c 188945 2009-02-23 18:36:54Z thompsa $ */
+/*	$FreeBSD: src/usr.bin/usbhidaction/usbhidaction.c,v 1.10 2010/02/16 21:43:57 imp Exp $ */
 
 /*
  * Copyright (c) 2000, 2002 The NetBSD Foundation, Inc.
@@ -16,13 +16,6 @@
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *        This product includes software developed by the NetBSD
- *        Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- *    contributors may be used to endorse or promote products derived
- *    from this software without specific prior written permission.
  *
  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED

==== //depot/projects/usb/src/usr.bin/usbhidctl/usbhid.c#4 (text+ko) ====

@@ -1,5 +1,5 @@
 /*	$NetBSD: usbhid.c,v 1.14 2000/07/03 02:51:37 matt Exp $	*/
-/*	$FreeBSD: src/usr.bin/usbhidctl/usbhid.c,v 1.15 2009/06/23 23:16:00 delphij Exp $ */
+/*	$FreeBSD: src/usr.bin/usbhidctl/usbhid.c,v 1.16 2010/02/16 21:43:57 imp Exp $ */
 
 /*
  * Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -16,13 +16,6 @@
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *        This product includes software developed by the NetBSD
- *        Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- *    contributors may be used to endorse or promote products derived
- *    from this software without specific prior written permission.
  *
  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED

==== //depot/projects/usb/src/usr.bin/usbhidctl/usbhidctl.1#2 (text+ko) ====

@@ -1,5 +1,5 @@
 .\" $NetBSD: usbhidctl.1,v 1.8 1999/05/11 21:03:58 augustss Exp $
-.\" $FreeBSD: src/usr.bin/usbhidctl/usbhidctl.1,v 1.7 2006/11/23 05:08:06 grog Exp $
+.\" $FreeBSD: src/usr.bin/usbhidctl/usbhidctl.1,v 1.8 2010/02/16 21:43:57 imp Exp $
 .\"
 .\" Copyright (c) 1998 The NetBSD Foundation, Inc.
 .\" All rights reserved.
@@ -15,13 +15,6 @@
 .\" 2. Redistributions in binary form must reproduce the above copyright
 .\"    notice, this list of conditions and the following disclaimer in the
 .\"    documentation and/or other materials provided with the distribution.
-.\" 3. All advertising materials mentioning features or use of this software
-.\"    must display the following acknowledgement:
-.\"        This product includes software developed by the NetBSD
-.\"        Foundation, Inc. and its contributors.
-.\" 4. Neither the name of The NetBSD Foundation nor the names of its
-.\"    contributors may be used to endorse or promote products derived
-.\"    from this software without specific prior written permission.
 .\"
 .\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
 .\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED

==== //depot/projects/usb/src/usr.sbin/usbdevs/usbdevs.c#5 (text+ko) ====

@@ -1,5 +1,5 @@
 /*	$NetBSD: usbdevs.c,v 1.22 2003/11/12 13:31:08 grant Exp $	*/
-/*	$FreeBSD: src/usr.sbin/usbdevs/usbdevs.c,v 1.11 2008/12/29 14:59:22 simon Exp $	*/
+/*	$FreeBSD: src/usr.sbin/usbdevs/usbdevs.c,v 1.12 2010/02/16 21:47:05 imp Exp $	*/
 
 /*
  * Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -16,13 +16,6 @@
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in the
  *    documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- *    must display the following acknowledgement:
- *        This product includes software developed by the NetBSD
- *        Foundation, Inc. and its contributors.
- * 4. Neither the name of The NetBSD Foundation nor the names of its
- *    contributors may be used to endorse or promote products derived
- *    from this software without specific prior written permission.
  *
  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED


More information about the p4-projects mailing list