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