PERFORCE change 165585 for review

Alexander Motin mav at FreeBSD.org
Sat Jul 4 05:02:07 UTC 2009


http://perforce.freebsd.org/chv.cgi?CH=165585

Change 165585 by mav at mav_mavbook on 2009/07/04 05:01:36

	IFC

Affected files ...

.. //depot/projects/scottl-camlock/src/ObsoleteFiles.inc#8 integrate
.. //depot/projects/scottl-camlock/src/UPDATING#9 integrate
.. //depot/projects/scottl-camlock/src/bin/chmod/chmod.c#3 integrate
.. //depot/projects/scottl-camlock/src/lib/libc/gen/msgctl.3#3 integrate
.. //depot/projects/scottl-camlock/src/lib/libc/sys/getsockopt.2#3 integrate
.. //depot/projects/scottl-camlock/src/lib/libc/sys/semctl.2#2 integrate
.. //depot/projects/scottl-camlock/src/lib/libc/sys/shmctl.2#3 integrate
.. //depot/projects/scottl-camlock/src/release/amd64/boot_crunch.conf#3 integrate
.. //depot/projects/scottl-camlock/src/release/i386/boot_crunch.conf#3 integrate
.. //depot/projects/scottl-camlock/src/release/ia64/boot_crunch.conf#3 integrate
.. //depot/projects/scottl-camlock/src/release/pc98/boot_crunch.conf#3 integrate
.. //depot/projects/scottl-camlock/src/release/powerpc/boot_crunch.conf#3 integrate
.. //depot/projects/scottl-camlock/src/release/sparc64/boot_crunch.conf#3 integrate
.. //depot/projects/scottl-camlock/src/release/sun4v/boot_crunch.conf#3 integrate
.. //depot/projects/scottl-camlock/src/share/man/man4/acpi_hp.4#2 integrate
.. //depot/projects/scottl-camlock/src/share/man/man4/acpi_wmi.4#2 integrate
.. //depot/projects/scottl-camlock/src/share/man/man4/cpuctl.4#2 integrate
.. //depot/projects/scottl-camlock/src/sys/amd64/amd64/genassym.c#12 integrate
.. //depot/projects/scottl-camlock/src/sys/amd64/amd64/identcpu.c#15 integrate
.. //depot/projects/scottl-camlock/src/sys/amd64/amd64/intr_machdep.c#18 integrate
.. //depot/projects/scottl-camlock/src/sys/amd64/amd64/io_apic.c#15 integrate
.. //depot/projects/scottl-camlock/src/sys/amd64/amd64/local_apic.c#20 integrate
.. //depot/projects/scottl-camlock/src/sys/amd64/amd64/msi.c#10 integrate
.. //depot/projects/scottl-camlock/src/sys/amd64/conf/GENERIC#24 integrate
.. //depot/projects/scottl-camlock/src/sys/amd64/include/intr_machdep.h#17 integrate
.. //depot/projects/scottl-camlock/src/sys/amd64/isa/atpic.c#10 integrate
.. //depot/projects/scottl-camlock/src/sys/arm/at91/at91_machdep.c#4 integrate
.. //depot/projects/scottl-camlock/src/sys/arm/mv/mv_machdep.c#3 integrate
.. //depot/projects/scottl-camlock/src/sys/arm/sa11x0/assabet_machdep.c#14 integrate
.. //depot/projects/scottl-camlock/src/sys/conf/files#37 integrate
.. //depot/projects/scottl-camlock/src/sys/conf/options#27 integrate
.. //depot/projects/scottl-camlock/src/sys/contrib/dev/mwl/mw88W8363.fw.uu#2 integrate
.. //depot/projects/scottl-camlock/src/sys/dev/acpi_support/acpi_hp.c#2 integrate
.. //depot/projects/scottl-camlock/src/sys/dev/acpi_support/acpi_wmi.c#2 integrate
.. //depot/projects/scottl-camlock/src/sys/dev/acpi_support/acpi_wmi_if.m#2 integrate
.. //depot/projects/scottl-camlock/src/sys/dev/cpuctl/cpuctl.c#3 integrate
.. //depot/projects/scottl-camlock/src/sys/dev/e1000/if_em.c#7 integrate
.. //depot/projects/scottl-camlock/src/sys/dev/ixgbe/ixgbe.c#8 integrate
.. //depot/projects/scottl-camlock/src/sys/dev/mpt/mpt_cam.c#30 integrate
.. //depot/projects/scottl-camlock/src/sys/dev/mwl/if_mwl.c#2 integrate
.. //depot/projects/scottl-camlock/src/sys/dev/mwl/if_mwlvar.h#2 integrate
.. //depot/projects/scottl-camlock/src/sys/dev/mwl/mwlhal.c#2 integrate
.. //depot/projects/scottl-camlock/src/sys/dev/mwl/mwlhal.h#2 integrate
.. //depot/projects/scottl-camlock/src/sys/dev/mwl/mwlreg.h#2 integrate
.. //depot/projects/scottl-camlock/src/sys/fs/cd9660/cd9660_lookup.c#5 integrate
.. //depot/projects/scottl-camlock/src/sys/geom/geom.h#15 integrate
.. //depot/projects/scottl-camlock/src/sys/geom/geom_io.c#16 integrate
.. //depot/projects/scottl-camlock/src/sys/geom/geom_subr.c#14 integrate
.. //depot/projects/scottl-camlock/src/sys/geom/geom_vfs.c#6 integrate
.. //depot/projects/scottl-camlock/src/sys/geom/journal/g_journal.c#10 integrate
.. //depot/projects/scottl-camlock/src/sys/i386/conf/GENERIC#23 integrate
.. //depot/projects/scottl-camlock/src/sys/i386/i386/genassym.c#11 integrate
.. //depot/projects/scottl-camlock/src/sys/i386/i386/intr_machdep.c#18 integrate
.. //depot/projects/scottl-camlock/src/sys/i386/i386/io_apic.c#14 integrate
.. //depot/projects/scottl-camlock/src/sys/i386/i386/local_apic.c#21 integrate
.. //depot/projects/scottl-camlock/src/sys/i386/i386/msi.c#10 integrate
.. //depot/projects/scottl-camlock/src/sys/i386/include/intr_machdep.h#17 integrate
.. //depot/projects/scottl-camlock/src/sys/i386/isa/atpic.c#11 integrate
.. //depot/projects/scottl-camlock/src/sys/ia64/conf/GENERIC#17 integrate
.. //depot/projects/scottl-camlock/src/sys/kern/kern_exit.c#20 integrate
.. //depot/projects/scottl-camlock/src/sys/kern/kern_intr.c#19 integrate
.. //depot/projects/scottl-camlock/src/sys/kern/kern_linker.c#22 integrate
.. //depot/projects/scottl-camlock/src/sys/kern/sys_generic.c#17 integrate
.. //depot/projects/scottl-camlock/src/sys/kern/sys_process.c#16 integrate
.. //depot/projects/scottl-camlock/src/sys/kern/sys_socket.c#13 integrate
.. //depot/projects/scottl-camlock/src/sys/kern/uipc_syscalls.c#27 integrate
.. //depot/projects/scottl-camlock/src/sys/kern/vfs_cluster.c#13 integrate
.. //depot/projects/scottl-camlock/src/sys/kern/vfs_export.c#14 integrate
.. //depot/projects/scottl-camlock/src/sys/kern/vfs_mount.c#29 integrate
.. //depot/projects/scottl-camlock/src/sys/kern/vfs_subr.c#24 integrate
.. //depot/projects/scottl-camlock/src/sys/kern/vfs_syscalls.c#25 integrate
.. //depot/projects/scottl-camlock/src/sys/kern/vfs_vnops.c#20 integrate
.. //depot/projects/scottl-camlock/src/sys/mips/malta/yamon.c#2 integrate
.. //depot/projects/scottl-camlock/src/sys/mips/mips/busdma_machdep.c#2 integrate
.. //depot/projects/scottl-camlock/src/sys/mips/mips/dump_machdep.c#2 integrate
.. //depot/projects/scottl-camlock/src/sys/mips/mips/intr_machdep.c#2 integrate
.. //depot/projects/scottl-camlock/src/sys/modules/nfsclient/Makefile#9 integrate
.. //depot/projects/scottl-camlock/src/sys/modules/nfsserver/Makefile#5 integrate
.. //depot/projects/scottl-camlock/src/sys/net/if.c#29 integrate
.. //depot/projects/scottl-camlock/src/sys/net/if_var.h#21 integrate
.. //depot/projects/scottl-camlock/src/sys/net/netisr.c#12 integrate
.. //depot/projects/scottl-camlock/src/sys/net/vnet.h#6 integrate
.. //depot/projects/scottl-camlock/src/sys/netgraph/ng_iface.c#13 integrate
.. //depot/projects/scottl-camlock/src/sys/netinet6/in6_var.h#15 integrate
.. //depot/projects/scottl-camlock/src/sys/nfs/nfs_common.c#7 integrate
.. //depot/projects/scottl-camlock/src/sys/nfs/rpcv2.h#4 delete
.. //depot/projects/scottl-camlock/src/sys/nfsclient/bootp_subr.c#15 integrate
.. //depot/projects/scottl-camlock/src/sys/nfsclient/krpc_subr.c#8 integrate
.. //depot/projects/scottl-camlock/src/sys/nfsclient/nfs.h#14 integrate
.. //depot/projects/scottl-camlock/src/sys/nfsclient/nfs_bio.c#17 integrate
.. //depot/projects/scottl-camlock/src/sys/nfsclient/nfs_diskless.c#14 integrate
.. //depot/projects/scottl-camlock/src/sys/nfsclient/nfs_krpc.c#4 integrate
.. //depot/projects/scottl-camlock/src/sys/nfsclient/nfs_lock.c#9 integrate
.. //depot/projects/scottl-camlock/src/sys/nfsclient/nfs_nfsiod.c#9 integrate
.. //depot/projects/scottl-camlock/src/sys/nfsclient/nfs_node.c#13 integrate
.. //depot/projects/scottl-camlock/src/sys/nfsclient/nfs_socket.c#20 delete
.. //depot/projects/scottl-camlock/src/sys/nfsclient/nfs_subs.c#14 integrate
.. //depot/projects/scottl-camlock/src/sys/nfsclient/nfs_vfsops.c#20 integrate
.. //depot/projects/scottl-camlock/src/sys/nfsclient/nfs_vnops.c#22 integrate
.. //depot/projects/scottl-camlock/src/sys/nfsclient/nfsm_subs.h#7 integrate
.. //depot/projects/scottl-camlock/src/sys/nfsclient/nfsmount.h#10 integrate
.. //depot/projects/scottl-camlock/src/sys/nfsserver/nfs.h#13 integrate
.. //depot/projects/scottl-camlock/src/sys/nfsserver/nfs_fha.c#2 integrate
.. //depot/projects/scottl-camlock/src/sys/nfsserver/nfs_serv.c#15 integrate
.. //depot/projects/scottl-camlock/src/sys/nfsserver/nfs_srvcache.c#10 delete
.. //depot/projects/scottl-camlock/src/sys/nfsserver/nfs_srvkrpc.c#6 integrate
.. //depot/projects/scottl-camlock/src/sys/nfsserver/nfs_srvsock.c#16 delete
.. //depot/projects/scottl-camlock/src/sys/nfsserver/nfs_srvsubs.c#19 integrate
.. //depot/projects/scottl-camlock/src/sys/nfsserver/nfs_syscalls.c#16 delete
.. //depot/projects/scottl-camlock/src/sys/nfsserver/nfsrvcache.h#7 integrate
.. //depot/projects/scottl-camlock/src/sys/pc98/conf/GENERIC#18 integrate
.. //depot/projects/scottl-camlock/src/sys/powerpc/conf/GENERIC#21 integrate
.. //depot/projects/scottl-camlock/src/sys/rpc/clnt_dg.c#4 integrate
.. //depot/projects/scottl-camlock/src/sys/rpc/rpcsec_gss/rpcsec_gss.c#3 integrate
.. //depot/projects/scottl-camlock/src/sys/security/audit/audit.c#16 integrate
.. //depot/projects/scottl-camlock/src/sys/security/audit/audit.h#10 integrate
.. //depot/projects/scottl-camlock/src/sys/security/audit/audit_arg.c#13 integrate
.. //depot/projects/scottl-camlock/src/sys/security/audit/audit_bsm.c#12 integrate
.. //depot/projects/scottl-camlock/src/sys/security/audit/audit_private.h#13 integrate
.. //depot/projects/scottl-camlock/src/sys/sparc64/conf/GENERIC#22 integrate
.. //depot/projects/scottl-camlock/src/sys/sun4v/conf/GENERIC#12 integrate
.. //depot/projects/scottl-camlock/src/sys/sys/cpuctl.h#2 integrate
.. //depot/projects/scottl-camlock/src/sys/sys/filio.h#6 integrate
.. //depot/projects/scottl-camlock/src/sys/sys/param.h#26 integrate
.. //depot/projects/scottl-camlock/src/sys/sys/priv.h#15 integrate
.. //depot/projects/scottl-camlock/src/sys/tools/sound/feeder_rate_mkfilter.awk#3 integrate
.. //depot/projects/scottl-camlock/src/sys/ufs/ffs/ffs_softdep.c#20 integrate
.. //depot/projects/scottl-camlock/src/sys/ufs/ffs/ffs_vnops.c#14 integrate
.. //depot/projects/scottl-camlock/src/sys/ufs/ufs/ufs_vnops.c#19 integrate
.. //depot/projects/scottl-camlock/src/sys/vm/vm_extern.h#12 integrate
.. //depot/projects/scottl-camlock/src/sys/vm/vm_fault.c#21 integrate
.. //depot/projects/scottl-camlock/src/sys/vm/vm_map.c#20 integrate
.. //depot/projects/scottl-camlock/src/tools/regression/acltools/tools-posix.test#2 integrate
.. //depot/projects/scottl-camlock/src/usr.bin/cpio/cmdline.c#2 integrate
.. //depot/projects/scottl-camlock/src/usr.bin/cpio/cpio.c#2 integrate
.. //depot/projects/scottl-camlock/src/usr.sbin/Makefile#4 integrate
.. //depot/projects/scottl-camlock/src/usr.sbin/cpucontrol/cpucontrol.8#2 integrate
.. //depot/projects/scottl-camlock/src/usr.sbin/cpucontrol/cpucontrol.c#2 integrate
.. //depot/projects/scottl-camlock/src/usr.sbin/pkg_install/lib/url.c#5 integrate
.. //depot/projects/scottl-camlock/src/usr.sbin/wake/Makefile#1 branch
.. //depot/projects/scottl-camlock/src/usr.sbin/wake/wake.8#1 branch
.. //depot/projects/scottl-camlock/src/usr.sbin/wake/wake.c#1 branch

Differences ...

==== //depot/projects/scottl-camlock/src/ObsoleteFiles.inc#8 (text+ko) ====

@@ -1,5 +1,5 @@
 #
-# $FreeBSD: src/ObsoleteFiles.inc,v 1.198 2009/06/27 10:11:15 antoine Exp $
+# $FreeBSD: src/ObsoleteFiles.inc,v 1.199 2009/07/01 07:37:21 dfr Exp $
 #
 # This file lists old files (OLD_FILES), libraries (OLD_LIBS) and
 # directories (OLD_DIRS) which should get removed at an update. Recently
@@ -14,6 +14,8 @@
 # The file is partitioned: OLD_FILES first, then OLD_LIBS and OLD_DIRS last.
 #
 
+# 20090630: old kernel RPC implementation removal
+OLD_FILES+=usr/include/nfs/rpcv2.h
 # 20090624: update usbdi(9)
 OLD_FILES+=usr/share/man/man9/usbd_abort_default_pipe.9.gz
 OLD_FILES+=usr/share/man/man9/usbd_abort_pipe.9.gz

==== //depot/projects/scottl-camlock/src/UPDATING#9 (text+ko) ====

@@ -22,6 +22,17 @@
 	to maximize performance.  (To disable malloc debugging, run
 	ln -s aj /etc/malloc.conf.)
 
+20090630:
+	The NFS_LEGACYRPC option has been removed along with the old
+	kernel RPC implementation that this option selected. Kernel
+	configurations may need to be adjusted.
+
+20090629:
+	The network interface device nodes at /dev/net/<interface> have
+	been removed.  All ioctl operations can be performed the normal
+	way using routing sockets.  The kqueue functionality can
+	generally be replaced with routing sockets.
+
 20090628:
 	The documentation from the FreeBSD Documentation Project
 	(Handbook, FAQ, etc.) is now installed via packages by
@@ -1630,4 +1641,4 @@
 Contact Warner Losh if you have any questions about your use of
 this document.
 
-$FreeBSD: src/UPDATING,v 1.624 2009/06/28 08:59:46 blackend Exp $
+$FreeBSD: src/UPDATING,v 1.627 2009/07/01 18:12:50 dfr Exp $

==== //depot/projects/scottl-camlock/src/bin/chmod/chmod.c#3 (text+ko) ====

@@ -39,7 +39,7 @@
 #endif /* not lint */
 #endif
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/bin/chmod/chmod.c,v 1.34 2009/06/23 23:30:56 delphij Exp $");
+__FBSDID("$FreeBSD: src/bin/chmod/chmod.c,v 1.35 2009/07/01 15:52:19 trasz Exp $");
 
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -54,6 +54,7 @@
 #include <unistd.h>
 
 static void usage(void);
+static int may_have_nfs4acl(const FTSENT *ent);
 
 int
 main(int argc, char *argv[])
@@ -180,8 +181,14 @@
 			break;
 		}
 		newmode = getmode(set, p->fts_statp->st_mode);
-		if ((newmode & ALLPERMS) == (p->fts_statp->st_mode & ALLPERMS))
-			continue;
+		/*
+		 * With NFSv4 ACLs, it is possible that applying a mode
+		 * identical to the one computed from an ACL will change
+		 * that ACL.
+		 */
+		if (may_have_nfs4acl(p) == 0 &&
+		    (newmode & ALLPERMS) == (p->fts_statp->st_mode & ALLPERMS))
+				continue;
 		if ((*change_mode)(p->fts_accpath, newmode) && !fflag) {
 			warn("%s", p->fts_path);
 			rval = 1;
@@ -219,3 +226,24 @@
 	    "usage: chmod [-fhv] [-R [-H | -L | -P]] mode file ...\n");
 	exit(1);
 }
+
+static int
+may_have_nfs4acl(const FTSENT *ent)
+{
+	int ret;
+	static dev_t previous_dev = (dev_t)-1;
+	static int supports_acls = -1;
+
+	if (previous_dev != ent->fts_statp->st_dev) {
+		previous_dev = ent->fts_statp->st_dev;
+		supports_acls = 0;
+
+		ret = pathconf(ent->fts_accpath, _PC_ACL_NFS4);
+		if (ret > 0)
+			supports_acls = 1;
+		else if (ret < 0 && errno != EINVAL)
+			warn("%s", ent->fts_path);
+	}
+
+	return (supports_acls);
+}

==== //depot/projects/scottl-camlock/src/lib/libc/gen/msgctl.3#3 (text+ko) ====

@@ -29,7 +29,7 @@
 .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 .\"
-.\" $FreeBSD: src/lib/libc/gen/msgctl.3,v 1.21 2008/04/03 16:21:43 ru Exp $
+.\" $FreeBSD: src/lib/libc/gen/msgctl.3,v 1.22 2009/06/29 18:54:17 kib Exp $
 .\"/
 .Dd April 3, 2008
 .Dt MSGCTL 3
@@ -71,12 +71,8 @@
 	pid_t	msg_lspid;	/* pid of last msgsnd() */
 	pid_t	msg_lrpid;	/* pid of last msgrcv() */
 	time_t	msg_stime;	/* time of last msgsnd() */
-	long	msg_pad1;
 	time_t	msg_rtime;	/* time of last msgrcv() */
-	long	msg_pad2;
 	time_t	msg_ctime;	/* time of last msgctl() */
-	long	msg_pad3;
-	long	msg_pad4[4];
 };
 .Ed
 .Pp
@@ -89,11 +85,11 @@
 and looks like this:
 .Bd -literal
 struct ipc_perm {
-	unsigned short	cuid;	/* creator user id */
-	unsigned short	cgid;	/* creator group id */
-	unsigned short	uid;	/* user id */
-	unsigned short	gid;	/* group id */
-	unsigned short	mode;	/* r/w permission */
+	uid_t		cuid;	/* creator user id */
+	gid_t		cgid;	/* creator group id */
+	uid_t		uid;	/* user id */
+	gid_t		gid;	/* group id */
+	mode_t		mode;	/* r/w permission */
 	unsigned short	seq;	/* sequence # (to generate unique ipcid) */
 	key_t		key;	/* user specified msg/sem/shm key */
 };

==== //depot/projects/scottl-camlock/src/lib/libc/sys/getsockopt.2#3 (text+ko) ====

@@ -26,7 +26,7 @@
 .\" SUCH DAMAGE.
 .\"
 .\"     @(#)getsockopt.2	8.4 (Berkeley) 5/2/95
-.\" $FreeBSD: src/lib/libc/sys/getsockopt.2,v 1.40 2008/06/12 22:58:35 wkoszek Exp $
+.\" $FreeBSD: src/lib/libc/sys/getsockopt.2,v 1.41 2009/06/30 20:53:56 trasz Exp $
 .\"
 .Dd June 13, 2008
 .Dt GETSOCKOPT 2
@@ -139,6 +139,11 @@
 .In sys/time.h .
 .Pp
 The following options are recognized at the socket level.
+For protocol-specific options, see protocol manual pages,
+e.g.
+.Xr ip 4
+or
+.Xr tcp 4 .
 Except as noted, each may be examined with
 .Fn getsockopt
 and set with
@@ -499,6 +504,10 @@
 .Xr getprotoent 3 ,
 .Xr mac 3 ,
 .Xr sysctl 3 ,
+.Xr ip 4 ,
+.Xr ip6 4 ,
+.Xr sctp 4 ,
+.Xr tcp 4 ,
 .Xr protocols 5 ,
 .Xr sysctl 8 ,
 .Xr accept_filter 9 ,

==== //depot/projects/scottl-camlock/src/lib/libc/sys/semctl.2#2 (text+ko) ====

@@ -23,7 +23,7 @@
 .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 .\"
-.\" $FreeBSD: src/lib/libc/sys/semctl.2,v 1.20 2005/01/15 12:28:00 ru Exp $
+.\" $FreeBSD: src/lib/libc/sys/semctl.2,v 1.21 2009/06/29 18:54:17 kib Exp $
 .\"
 .Dd September 12, 1995
 .Dt SEMCTL 2
@@ -148,12 +148,9 @@
         struct  sem *sem_base;  /* pointer to first semaphore in set */
         u_short sem_nsems;      /* number of sems in set */
         time_t  sem_otime;      /* last operation time */
-        long    sem_pad1;       /* SVABI/386 says I need this here */
         time_t  sem_ctime;      /* last change time */
                                 /* Times measured in secs since */
                                 /* 00:00:00 GMT, Jan. 1, 1970 */
-        long    sem_pad2;       /* SVABI/386 says I need this here */
-        long    sem_pad3[4];    /* SVABI/386 says I need this here */
 };
 .Ed
 .Sh RETURN VALUES

==== //depot/projects/scottl-camlock/src/lib/libc/sys/shmctl.2#3 (text+ko) ====

@@ -23,7 +23,7 @@
 .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 .\"
-.\" $FreeBSD: src/lib/libc/sys/shmctl.2,v 1.20 2009/03/05 12:04:42 kib Exp $
+.\" $FreeBSD: src/lib/libc/sys/shmctl.2,v 1.21 2009/06/29 18:54:17 kib Exp $
 .\"
 .Dd July 17, 1995
 .Dt SHMCTL 2
@@ -100,14 +100,13 @@
 .Bd -literal
 struct shmid_ds {
     struct ipc_perm shm_perm;   /* operation permission structure */
-    int             shm_segsz;  /* size of segment in bytes */
+    size_t          shm_segsz;  /* size of segment in bytes */
     pid_t           shm_lpid;   /* process ID of last shared memory op */
     pid_t           shm_cpid;   /* process ID of creator */
-    short           shm_nattch; /* number of current attaches */
+    int             shm_nattch; /* number of current attaches */
     time_t          shm_atime;  /* time of last shmat() */
     time_t          shm_dtime;  /* time of last shmdt() */
     time_t          shm_ctime;  /* time of last change by shmctl() */
-    void           *shm_internal; /* sysv stupidity */
 };
 .Ed
 .Sh RETURN VALUES
@@ -133,16 +132,6 @@
 Permission denied due to mismatch between operation and mode of
 shared memory segment.
 .El
-.Sh "BUGS"
-The segment size has size_t type.
-The shm_segsz member of the
-.Vt shmid_ds
-structure has type int, which is too short to represent the full range
-of values for a segment size.
-If shared memory limits are raised to allow segments with size > 2 GB
-to be created, be aware that IPC_STAT call may return a truncated value
-for shm_segsz.
-.El
 .Sh "SEE ALSO"
 .Xr shmat 2 ,
 .Xr shmdt 2 ,

==== //depot/projects/scottl-camlock/src/release/amd64/boot_crunch.conf#3 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/release/amd64/boot_crunch.conf,v 1.66 2009/03/09 17:05:31 thompsa Exp $
+# $FreeBSD: src/release/amd64/boot_crunch.conf,v 1.67 2009/06/29 13:59:30 jamie Exp $
 
 buildopts -DRELEASE_CRUNCH -Dlint
 
@@ -42,4 +42,4 @@
 
 libs -ll -ledit -lutil -lmd -lcrypt -lftpio -lz -lnetgraph
 libs -ldialog -lncurses -ldisk -lcam -lsbuf -lufs -ldevinfo
-libs -lbsdxml -larchive -lbz2 -lusb
+libs -lbsdxml -larchive -lbz2 -lusb -ljail

==== //depot/projects/scottl-camlock/src/release/i386/boot_crunch.conf#3 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/release/i386/boot_crunch.conf,v 1.66 2009/03/09 17:05:31 thompsa Exp $
+# $FreeBSD: src/release/i386/boot_crunch.conf,v 1.67 2009/06/29 13:59:30 jamie Exp $
 
 buildopts -DRELEASE_CRUNCH -Dlint
 
@@ -42,4 +42,4 @@
 
 libs -ll -ledit -lutil -lmd -lcrypt -lftpio -lz -lnetgraph
 libs -ldialog -lncurses -ldisk -lcam -lsbuf -lufs -ldevinfo
-libs -lbsdxml -larchive -lbz2 -lusb
+libs -lbsdxml -larchive -lbz2 -lusb -ljail

==== //depot/projects/scottl-camlock/src/release/ia64/boot_crunch.conf#3 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/release/ia64/boot_crunch.conf,v 1.17 2009/03/09 17:05:31 thompsa Exp $
+# $FreeBSD: src/release/ia64/boot_crunch.conf,v 1.18 2009/06/29 13:59:30 jamie Exp $
 
 buildopts -DRELEASE_CRUNCH -Dlint
 
@@ -46,4 +46,4 @@
 
 libs -ll -ledit -lutil -lmd -lcrypt -lftpio -lz -lnetgraph
 libs -ldialog -lncurses -ldisk -lcam -lkiconv -lsbuf -lufs -ldevinfo
-libs -lgeom -lbsdxml -larchive -lbz2 -lusb
+libs -lgeom -lbsdxml -larchive -lbz2 -lusb -ljail

==== //depot/projects/scottl-camlock/src/release/pc98/boot_crunch.conf#3 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/release/pc98/boot_crunch.conf,v 1.65 2008/08/20 13:35:39 kensmith Exp $
+# $FreeBSD: src/release/pc98/boot_crunch.conf,v 1.66 2009/06/29 13:59:30 jamie Exp $
 
 buildopts -DRELEASE_CRUNCH -Dlint
 
@@ -41,4 +41,4 @@
 
 libs -ll -ledit -lutil -lmd -lcrypt -lftpio -lz -lnetgraph
 libs -ldialog -lncurses -ldisk -lcam -lsbuf -lufs -lbsdxml
-libs -larchive -lbz2
+libs -larchive -lbz2 -ljail

==== //depot/projects/scottl-camlock/src/release/powerpc/boot_crunch.conf#3 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/release/powerpc/boot_crunch.conf,v 1.9 2009/03/09 17:05:31 thompsa Exp $
+# $FreeBSD: src/release/powerpc/boot_crunch.conf,v 1.10 2009/06/29 13:59:30 jamie Exp $
 
 buildopts -DRELEASE_CRUNCH -Dlint
 
@@ -44,4 +44,4 @@
 
 libs -ll -ledit -lutil -lmd -lcrypt -lftpio -lz -lnetgraph
 libs -ldialog -lncurses -ldisk -lcam -lkiconv -lsbuf -lufs
-libs -lbsdxml -larchive -lbz2 -lusb
+libs -lbsdxml -larchive -lbz2 -lusb -ljail

==== //depot/projects/scottl-camlock/src/release/sparc64/boot_crunch.conf#3 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/release/sparc64/boot_crunch.conf,v 1.13 2009/03/09 17:05:31 thompsa Exp $
+# $FreeBSD: src/release/sparc64/boot_crunch.conf,v 1.14 2009/06/29 13:59:30 jamie Exp $
 
 buildopts -DRELEASE_CRUNCH -Dlint
 
@@ -42,4 +42,4 @@
 
 libs -ll -ledit -lutil -lmd -lcrypt -lftpio -lz -lnetgraph
 libs -ldialog -lncurses -ldisk -lcam -lsbuf -lufs -lbsdxml
-libs -larchive -lbz2 -lusb
+libs -larchive -lbz2 -lusb -ljail

==== //depot/projects/scottl-camlock/src/release/sun4v/boot_crunch.conf#3 (text+ko) ====

@@ -1,4 +1,4 @@
-# $FreeBSD: src/release/sun4v/boot_crunch.conf,v 1.6 2009/03/09 17:05:31 thompsa Exp $
+# $FreeBSD: src/release/sun4v/boot_crunch.conf,v 1.7 2009/06/29 13:59:30 jamie Exp $
 
 buildopts -DRELEASE_CRUNCH -Dlint
 
@@ -42,4 +42,4 @@
 
 libs -ll -ledit -lutil -lmd -lcrypt -lftpio -lz -lnetgraph
 libs -ldialog -lncurses -ldisk -lcam -lsbuf -lufs -lbsdxml
-libs -larchive -lbz2 -lusb
+libs -larchive -lbz2 -lusb -ljail

==== //depot/projects/scottl-camlock/src/share/man/man4/acpi_hp.4#2 (text+ko) ====

@@ -22,9 +22,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: src/share/man/man4/acpi_hp.4,v 1.2 2009/06/23 14:57:06 rpaulo Exp $
+.\" $FreeBSD: src/share/man/man4/acpi_hp.4,v 1.4 2009/07/03 21:12:37 rpaulo Exp $
 .\"
-.Dd June 21, 2009
+.Dd June 30, 2009
 .Dt ACPI_HP 4 i386
 .Os
 .Sh NAME
@@ -92,8 +92,8 @@
 WWAN on air status changed to 1 (on air)
 .El
 .Ss Xr devfs 8 Ss Device
-You can read /dev/hpcmi to see your current BIOS settings. The detail level
-can be adjusted by setting the sysctl 
+You can read /dev/hpcmi to see your current BIOS settings.
+The detail level can be adjusted by setting the sysctl 
 .Va cmi_detail
 as described below.
 .Sh SYSCTL VARIABLES
@@ -165,11 +165,30 @@
 Show a list of valid options for the BIOS setting
 .It Li 0x04
 Show additional flags of BIOS setting (ReadOnly etc.)
+.It Li 0x08
+Query highest BIOS entry instance.
+This is broken on many HP models and therefore disabled by default.
 .El
+.It Va dev.acpi_hp.0.verbose
+(read-only)
+Set verbosity level
 .El
 .Pp
 Defaults for these sysctls can be set in
 .Xr sysctl.conf 5 .
+.Sh HARDWARE
+The
+.Nm
+driver has been reported to support the following hardware:
+.Pp
+.Bl -bullet -compact
+.It
+HP Compaq 8510p
+.It
+HP Compaq nx7300
+.El
+.Pp
+It should work on most HP laptops that feature a WMI enabled BIOS.
 .Sh FILES
 .Bl -tag -width ".Pa /dev/hpcmi"
 .It Pa /dev/hpcmi
@@ -245,7 +264,7 @@
 driver was written by
 .An Michael Gmelin Aq freebsd at grem.de
 .Pp
-It has been inspired by hp-wmi driver, which implements a subset of these   
+It has been inspired by hp-wmi driver, which implements a subset of these
 features (hotkeys) on Linux.
 .Pp
 .Bl -tag -width indent

==== //depot/projects/scottl-camlock/src/share/man/man4/acpi_wmi.4#2 (text+ko) ====

@@ -22,9 +22,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: src/share/man/man4/acpi_wmi.4,v 1.2 2009/06/23 14:57:06 rpaulo Exp $
+.\" $FreeBSD: src/share/man/man4/acpi_wmi.4,v 1.3 2009/07/03 21:12:37 rpaulo Exp $
 .\"
-.Dd June 21, 2009
+.Dd June 30, 2009
 .Dt ACPI_WMI 4 i386
 .Os
 .Sh NAME
@@ -48,7 +48,8 @@
 The
 .Nm
 driver provides an interface for vendor specific WMI implementations 
-(e.g. HP and Acer laptops). It creates /dev/wmistat, which can be read to get
+(e.g. HP and Acer laptops).
+It creates /dev/wmistat, which can be read to get
 information about GUIDs found in the system.
 .Sh FILES
 .Bl -tag -width /dev/wmistat -compact

==== //depot/projects/scottl-camlock/src/share/man/man4/cpuctl.4#2 (text+ko) ====

@@ -22,9 +22,9 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.\" $FreeBSD: src/share/man/man4/cpuctl.4,v 1.6 2009/04/23 08:37:56 brueffer Exp $
+.\" $FreeBSD: src/share/man/man4/cpuctl.4,v 1.7 2009/06/30 12:35:47 stas Exp $
 .\"
-.Dd May 31, 2008
+.Dd June 30, 2009
 .Dt CPUCTL 4
 .Os
 .Sh NAME
@@ -81,6 +81,11 @@
 	uint64_t	data;
 } cpuctl_msr_args_t;
 .Ed
+.It Dv CPUCTL_MSRSBIT Fa cpuctl_msr_args_t *args
+.It Dv CPUCTL_MSRCBIT Fa cpuctl_msr_args_t *args
+Set/clear MSR bits according to the mask given in the
+.Va data
+field.
 .It Dv CPUCTL_CPUID Fa cpuctl_cpuid_args_t *args
 Retrieve CPUID information.
 Arguments are supplied in

==== //depot/projects/scottl-camlock/src/sys/amd64/amd64/genassym.c#12 (text+ko) ====

@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/genassym.c,v 1.175 2009/04/01 18:36:34 jkim Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/genassym.c,v 1.176 2009/07/01 07:34:28 dfr Exp $");
 
 #include "opt_compat.h"
 #include "opt_hwpmc_hooks.h"
@@ -64,7 +64,6 @@
 #include <net/if.h>
 #include <netinet/in.h>
 #include <nfs/nfsproto.h>
-#include <nfs/rpcv2.h>
 #include <nfsclient/nfs.h>
 #include <nfsclient/nfsdiskless.h>
 #include <machine/apicreg.h>

==== //depot/projects/scottl-camlock/src/sys/amd64/amd64/identcpu.c#15 (text+ko) ====

@@ -39,7 +39,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/identcpu.c,v 1.173 2009/05/04 18:05:27 jkim Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/identcpu.c,v 1.174 2009/06/30 11:16:32 avg Exp $");
 
 #include "opt_cpu.h"
 
@@ -107,9 +107,6 @@
 };
 
 
-extern int pq_l2size;
-extern int pq_l2nways;
-
 void
 printcpuinfo(void)
 {

==== //depot/projects/scottl-camlock/src/sys/amd64/amd64/intr_machdep.c#18 (text+ko) ====

@@ -26,7 +26,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/amd64/amd64/intr_machdep.c,v 1.44 2009/06/25 20:35:46 jhb Exp $
+ * $FreeBSD: src/sys/amd64/amd64/intr_machdep.c,v 1.45 2009/07/01 17:20:07 jhb Exp $
  */
 
 /*
@@ -163,8 +163,8 @@
 }
 
 int
-intr_add_handler(const char *name, int vector, driver_filter_t filter, 
-    driver_intr_t handler, void *arg, enum intr_type flags, void **cookiep)    
+intr_add_handler(const char *name, int vector, driver_filter_t filter,
+    driver_intr_t handler, void *arg, enum intr_type flags, void **cookiep)
 {
 	struct intsrc *isrc;
 	int error;
@@ -302,7 +302,8 @@
 intr_assign_cpu(void *arg, u_char cpu)
 {
 #ifdef SMP
-	struct intsrc *isrc;	
+	struct intsrc *isrc;
+	int error;
 
 	/*
 	 * Don't do anything during early boot.  We will pick up the
@@ -311,10 +312,11 @@
 	if (assign_cpu && cpu != NOCPU) {
 		isrc = arg;
 		mtx_lock(&intr_table_lock);
-		isrc->is_pic->pic_assign_cpu(isrc, cpu_apic_ids[cpu]);
+		error = isrc->is_pic->pic_assign_cpu(isrc, cpu_apic_ids[cpu]);
 		mtx_unlock(&intr_table_lock);
-	}
-	return (0);
+	} else
+		error = 0;
+	return (error);
 #else
 	return (EOPNOTSUPP);
 #endif
@@ -371,7 +373,7 @@
 	intrcnt_setname("???", 0);
 	intrcnt_index = 1;
 	STAILQ_INIT(&pics);
-	mtx_init(&intr_table_lock, "intr sources", NULL, MTX_DEF | MTX_RECURSE);
+	mtx_init(&intr_table_lock, "intr sources", NULL, MTX_DEF);
 	mtx_init(&intrcnt_lock, "intrcnt", NULL, MTX_SPIN);
 }
 SYSINIT(intr_init, SI_SUB_INTR, SI_ORDER_FIRST, intr_init, NULL);
@@ -441,14 +443,14 @@
 	if (!assign_cpu)
 		return (cpu_apic_ids[0]);
 
-	mtx_lock(&intr_table_lock);
+	mtx_lock_spin(&icu_lock);
 	apic_id = cpu_apic_ids[current_cpu];
 	do {
 		current_cpu++;
 		if (current_cpu > mp_maxid)
 			current_cpu = 0;
 	} while (!(intr_cpus & (1 << current_cpu)));
-	mtx_unlock(&intr_table_lock);
+	mtx_unlock_spin(&icu_lock);
 	return (apic_id);
 }
 
@@ -489,7 +491,6 @@
 intr_shuffle_irqs(void *arg __unused)
 {
 	struct intsrc *isrc;
-	u_int apic_id;
 	int i;
 
 	/* Don't bother on UP. */
@@ -505,13 +506,17 @@
 			/*
 			 * If this event is already bound to a CPU,
 			 * then assign the source to that CPU instead
-			 * of picking one via round-robin.
+			 * of picking one via round-robin.  Note that
+			 * this is careful to only advance the
+			 * round-robin if the CPU assignment succeeds.
 			 */
 			if (isrc->is_event->ie_cpu != NOCPU)
-				apic_id = isrc->is_event->ie_cpu;
-			else
-				apic_id = intr_next_cpu();
-			isrc->is_pic->pic_assign_cpu(isrc, apic_id);
+				(void)isrc->is_pic->pic_assign_cpu(isrc,
+				    isrc->is_event->ie_cpu);
+			else if (isrc->is_pic->pic_assign_cpu(isrc,
+				cpu_apic_ids[current_cpu]) == 0)
+				(void)intr_next_cpu();
+
 		}
 	}
 	mtx_unlock(&intr_table_lock);

==== //depot/projects/scottl-camlock/src/sys/amd64/amd64/io_apic.c#15 (text+ko) ====

@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/io_apic.c,v 1.33 2009/06/25 18:13:46 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/io_apic.c,v 1.34 2009/07/01 17:20:07 jhb Exp $");
 
 #include "opt_isa.h"
 
@@ -120,7 +120,7 @@
 static int	ioapic_config_intr(struct intsrc *isrc, enum intr_trigger trig,
 		    enum intr_polarity pol);
 static void	ioapic_resume(struct pic *pic);
-static void	ioapic_assign_cpu(struct intsrc *isrc, u_int apic_id);
+static int	ioapic_assign_cpu(struct intsrc *isrc, u_int apic_id);
 static void	ioapic_program_intpin(struct ioapic_intsrc *intpin);
 
 static STAILQ_HEAD(,ioapic) ioapic_list = STAILQ_HEAD_INITIALIZER(ioapic_list);
@@ -322,7 +322,7 @@
 	mtx_unlock_spin(&icu_lock);
 }
 
-static void
+static int
 ioapic_assign_cpu(struct intsrc *isrc, u_int apic_id)
 {
 	struct ioapic_intsrc *intpin = (struct ioapic_intsrc *)isrc;
@@ -342,7 +342,7 @@
 	old_vector = intpin->io_vector;
 	old_id = intpin->io_cpu;
 	if (old_vector && apic_id == old_id)
-		return;
+		return (0);
 
 	/*
 	 * Allocate an APIC vector for this interrupt pin.  Once
@@ -350,6 +350,9 @@
 	 */
 	intpin->io_cpu = apic_id;
 	intpin->io_vector = apic_alloc_vector(apic_id, intpin->io_irq);
+	if (intpin->io_vector == 0)
+		return (ENOSPC);
+
 	if (bootverbose) {
 		printf("ioapic%u: routing intpin %u (", io->io_id,
 		    intpin->io_intpin);
@@ -364,6 +367,7 @@
 	 */
 	if (old_vector)
 		apic_free_vector(old_id, old_vector, intpin->io_irq);
+	return (0);
 }
 
 static void
@@ -372,7 +376,9 @@
 	struct ioapic_intsrc *intpin = (struct ioapic_intsrc *)isrc;
 
 	if (intpin->io_vector == 0)
-		ioapic_assign_cpu(isrc, intr_next_cpu());
+		if (ioapic_assign_cpu(isrc, intr_next_cpu()) != 0)
+			panic("Couldn't find an APIC vector for IRQ %d",
+			    intpin->io_irq);
 	apic_enable_vector(intpin->io_cpu, intpin->io_vector);
 }
 
@@ -496,7 +502,7 @@
 	io->io_pic = ioapic_template;
 	mtx_lock_spin(&icu_lock);
 	io->io_id = next_id++;
-	io->io_apic_id = ioapic_read(apic, IOAPIC_ID) >> APIC_ID_SHIFT;	
+	io->io_apic_id = ioapic_read(apic, IOAPIC_ID) >> APIC_ID_SHIFT;
 	if (apic_id != -1 && io->io_apic_id != apic_id) {
 		ioapic_write(apic, IOAPIC_ID, apic_id << APIC_ID_SHIFT);
 		mtx_unlock_spin(&icu_lock);
@@ -730,7 +736,7 @@
 	if (pin >= io->io_numintr || trigger == INTR_TRIGGER_CONFORM)
 		return (EINVAL);
 	if (io->io_pins[pin].io_irq >= NUM_IO_INTS)
-		return (EINVAL);	
+		return (EINVAL);
 	edgetrigger = (trigger == INTR_TRIGGER_EDGE);
 	if (io->io_pins[pin].io_edgetrigger == edgetrigger)
 		return (0);

==== //depot/projects/scottl-camlock/src/sys/amd64/amd64/local_apic.c#20 (text+ko) ====

@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/local_apic.c,v 1.57 2009/06/24 19:16:48 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/local_apic.c,v 1.58 2009/07/01 17:20:07 jhb Exp $");
 
 #include "opt_hwpmc_hooks.h"
 #include "opt_kdtrace.h"
@@ -139,7 +139,7 @@
 };
 
 
-static u_int32_t lapic_timer_divisors[] = { 
+static u_int32_t lapic_timer_divisors[] = {
 	APIC_TDCR_1, APIC_TDCR_2, APIC_TDCR_4, APIC_TDCR_8, APIC_TDCR_16,
 	APIC_TDCR_32, APIC_TDCR_64, APIC_TDCR_128
 };
@@ -797,7 +797,7 @@
 		return (vector + APIC_IO_INTS);
 	}
 	mtx_unlock_spin(&icu_lock);
-	panic("Couldn't find an APIC vector for IRQ %u", irq);
+	return (0);
 }
 
 /*
@@ -1058,7 +1058,7 @@
 static SLIST_HEAD(, apic_enumerator) enumerators =
 	SLIST_HEAD_INITIALIZER(enumerators);
 static struct apic_enumerator *best_enum;
-	
+
 void
 apic_register_enumerator(struct apic_enumerator *enumerator)
 {

==== //depot/projects/scottl-camlock/src/sys/amd64/amd64/msi.c#10 (text+ko) ====

@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/msi.c,v 1.12 2009/06/25 18:13:46 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/msi.c,v 1.13 2009/07/01 17:20:07 jhb Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -113,6 +113,8 @@
 	u_int msi_vector:8;		/* IDT vector. */
 	u_int msi_cpu:8;		/* Local APIC ID. (g) */
 	u_int msi_count:8;		/* Messages in this group. (g) */
+	u_int msi_maxcount:8;		/* Alignment for this group. (g) */
+	int *msi_irqs;			/* Group's IRQ list. (g) */
 };
 
 static void	msi_create_source(void);
@@ -125,7 +127,7 @@
 static int	msi_source_pending(struct intsrc *isrc);
 static int	msi_config_intr(struct intsrc *isrc, enum intr_trigger trig,
 		    enum intr_polarity pol);
-static void	msi_assign_cpu(struct intsrc *isrc, u_int apic_id);
+static int	msi_assign_cpu(struct intsrc *isrc, u_int apic_id);
 
 struct pic msi_pic = { msi_enable_source, msi_disable_source, msi_eoi_source,
 		       msi_enable_intr, msi_disable_intr, msi_vector,
@@ -195,32 +197,52 @@
 	return (ENODEV);
 }
 
-static void
+static int
 msi_assign_cpu(struct intsrc *isrc, u_int apic_id)
 {
-	struct msi_intsrc *msi = (struct msi_intsrc *)isrc;
+	struct msi_intsrc *sib, *msi = (struct msi_intsrc *)isrc;
 	int old_vector;
 	u_int old_id;
-	int vector;
+	int i, vector;
+
+	/*
+	 * Only allow CPUs to be assigned to the first message for an
+	 * MSI group.
+	 */
+	if (msi->msi_first != msi)
+		return (EINVAL);
 
 	/* Store information to free existing irq. */
 	old_vector = msi->msi_vector;
 	old_id = msi->msi_cpu;
 	if (old_id == apic_id)
-		return;
-	if (!msi->msi_msix && msi->msi_first->msi_count > 1)
-		return;
+		return (0);
 
-	/* Allocate IDT vector on this cpu. */
-	vector = apic_alloc_vector(apic_id, msi->msi_irq);
+	/* Allocate IDT vectors on this cpu. */
+	if (msi->msi_count > 1) {
+		KASSERT(msi->msi_msix == 0, ("MSI-X message group"));
+		vector = apic_alloc_vectors(apic_id, msi->msi_irqs,
+		    msi->msi_count, msi->msi_maxcount);
+	} else
+		vector = apic_alloc_vector(apic_id, msi->msi_irq);
 	if (vector == 0)
-		return; /* XXX alloc_vector panics on failure. */
+		return (ENOSPC);
+
 	msi->msi_cpu = apic_id;
 	msi->msi_vector = vector;
 	if (bootverbose)
 		printf("msi: Assigning %s IRQ %d to local APIC %u vector %u\n",
 		    msi->msi_msix ? "MSI-X" : "MSI", msi->msi_irq,
 		    msi->msi_cpu, msi->msi_vector);
+	for (i = 1; i < msi->msi_count; i++) {
+		sib = (struct msi_intsrc *)intr_lookup_source(msi->msi_irqs[i]);
+		sib->msi_cpu = apic_id;
+		sib->msi_vector = vector + i;
+		if (bootverbose)
+			printf(
+		    "msi: Assigning MSI IRQ %d to local APIC %u vector %u\n",
+			    sib->msi_irq, sib->msi_cpu, sib->msi_vector);
+	}
 	pci_remap_msi_irq(msi->msi_dev, msi->msi_irq);
 
 	/*
@@ -228,6 +250,9 @@
 	 * to prevent races where we could miss an interrupt.
 	 */
 	apic_free_vector(old_id, old_vector, msi->msi_irq);
+	for (i = 1; i < msi->msi_count; i++)
+		apic_free_vector(old_id, old_vector + i, msi->msi_irqs[i]);
+	return (0);

>>> TRUNCATED FOR MAIL (1000 lines) <<<


More information about the p4-projects mailing list