Date: Mon, 8 Mar 2010 17:21:14 GMT From: Hans Petter Selasky <hselasky@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 175478 for review Message-ID: <201003081721.o28HLE6P003809@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/chv.cgi?CH=175478 Change 175478 by hselasky@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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201003081721.o28HLE6P003809>