svn commit: r185627 - user/kmacy/HEAD_fast_multi_xmit/sys/sys

Kip Macy kmacy at FreeBSD.org
Thu Dec 4 23:40:54 PST 2008


Author: kmacy
Date: Fri Dec  5 07:40:52 2008
New Revision: 185627
URL: http://svn.freebsd.org/changeset/base/185627

Log:
  IFC 184756:185625 part 2

Added:
  user/kmacy/HEAD_fast_multi_xmit/sys/sys/osd.h
Modified:
  user/kmacy/HEAD_fast_multi_xmit/sys/sys/buf_ring.h
  user/kmacy/HEAD_fast_multi_xmit/sys/sys/conf.h
  user/kmacy/HEAD_fast_multi_xmit/sys/sys/cpuset.h
  user/kmacy/HEAD_fast_multi_xmit/sys/sys/disklabel.h
  user/kmacy/HEAD_fast_multi_xmit/sys/sys/jail.h
  user/kmacy/HEAD_fast_multi_xmit/sys/sys/mbuf.h
  user/kmacy/HEAD_fast_multi_xmit/sys/sys/mount.h
  user/kmacy/HEAD_fast_multi_xmit/sys/sys/namei.h
  user/kmacy/HEAD_fast_multi_xmit/sys/sys/param.h
  user/kmacy/HEAD_fast_multi_xmit/sys/sys/pmc.h
  user/kmacy/HEAD_fast_multi_xmit/sys/sys/pmclog.h
  user/kmacy/HEAD_fast_multi_xmit/sys/sys/priv.h
  user/kmacy/HEAD_fast_multi_xmit/sys/sys/proc.h
  user/kmacy/HEAD_fast_multi_xmit/sys/sys/syscall.h
  user/kmacy/HEAD_fast_multi_xmit/sys/sys/syscall.mk
  user/kmacy/HEAD_fast_multi_xmit/sys/sys/syscallsubr.h
  user/kmacy/HEAD_fast_multi_xmit/sys/sys/sysctl.h
  user/kmacy/HEAD_fast_multi_xmit/sys/sys/sysent.h
  user/kmacy/HEAD_fast_multi_xmit/sys/sys/sysproto.h
  user/kmacy/HEAD_fast_multi_xmit/sys/sys/termios.h
  user/kmacy/HEAD_fast_multi_xmit/sys/sys/ttydefaults.h
  user/kmacy/HEAD_fast_multi_xmit/sys/sys/user.h
  user/kmacy/HEAD_fast_multi_xmit/sys/sys/vimage.h
  user/kmacy/HEAD_fast_multi_xmit/sys/sys/vnode.h

Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/buf_ring.h
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/sys/buf_ring.h	Fri Dec  5 07:40:36 2008	(r185626)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/buf_ring.h	Fri Dec  5 07:40:52 2008	(r185627)
@@ -34,28 +34,6 @@
 
 #include <machine/cpu.h>
 
-#if defined (__GNUC__)
-  #if #cpu(i386) || defined __i386 || defined i386 || defined __i386__ || #cpu(x86_64) || defined __x86_64__
-    #define mb()  __asm__ __volatile__ ("mfence;": : :"memory")
-    #define wmb()  __asm__ __volatile__ ("sfence;": : :"memory")
-    #define rmb()  __asm__ __volatile__ ("lfence;": : :"memory")
-  #elif #cpu(sparc64) || defined sparc64 || defined __sparcv9 
-    #define mb()  __asm__ __volatile__ ("membar #MemIssue": : :"memory")
-    #define wmb() mb()
-    #define rmb() mb()
-  #elif #cpu(sparc) || defined sparc || defined __sparc__
-    #define mb()  __asm__ __volatile__ ("stbar;": : :"memory")
-    #define wmb() mb()
-    #define rmb() mb()
-#else
-    #define wmb() mb()
-    #define rmb() mb()
-    #define mb() 	/* XXX just to make this compile */
-  #endif
-#else
-  #error "unknown compiler"
-#endif
-
 #if defined(INVARIANTS) && !defined(DEBUG_BUFRING)
 #define DEBUG_BUFRING 1
 #endif
@@ -86,7 +64,6 @@ struct buf_ring {
 	uint64_t	  	_pad1[14];
 #ifdef DEBUG_BUFRING
 	struct mtx		*br_lock;
-	uint32_t		br_count;
 #endif	
 	void			*br_ring[0];
 };
@@ -124,9 +101,7 @@ buf_ring_enqueue(struct buf_ring *br, vo
 #ifdef DEBUG_BUFRING
 	if (br->br_ring[prod_head] != NULL)
 		panic("dangling value in enqueue");
-
-	atomic_add_int(&br->br_count, 1);
-#endif
+#endif	
 	br->br_ring[prod_head] = buf;
 	wmb();
 
@@ -174,7 +149,6 @@ buf_ring_dequeue_mc(struct buf_ring *br)
 	buf = br->br_ring[cons_head];
 #ifdef DEBUG_BUFRING
 	br->br_ring[cons_head] = NULL;
-	atomic_subtract_int(&br->br_count, 1);
 #endif
 	mb();
 	
@@ -220,7 +194,6 @@ buf_ring_dequeue_sc(struct buf_ring *br)
 	mb();
 	
 #ifdef DEBUG_BUFRING
-	atomic_subtract_int(&br->br_count, 1);
 	br->br_ring[cons_head] = NULL;
 	if (!mtx_owned(br->br_lock))
 		panic("lock not held on single consumer dequeue");
@@ -275,6 +248,4 @@ struct buf_ring *buf_ring_alloc(int coun
     struct mtx *);
 void buf_ring_free(struct buf_ring *br, struct malloc_type *type);
 
-
-
 #endif

Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/conf.h
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/sys/conf.h	Fri Dec  5 07:40:36 2008	(r185626)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/conf.h	Fri Dec  5 07:40:52 2008	(r185627)
@@ -288,6 +288,7 @@ void	devfs_fpdrop(struct file *fp);	/* X
 #define		UID_ROOT	0
 #define		UID_BIN		3
 #define		UID_UUCP	66
+#define		UID_NOBODY	65534
 
 #define		GID_WHEEL	0
 #define		GID_KMEM	2
@@ -296,6 +297,7 @@ void	devfs_fpdrop(struct file *fp);	/* X
 #define		GID_BIN		7
 #define		GID_GAMES	13
 #define		GID_DIALER	68
+#define		GID_NOBODY	65534
 
 typedef void (*dev_clone_fn)(void *arg, struct ucred *cred, char *name,
 	    int namelen, struct cdev **result);

Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/cpuset.h
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/sys/cpuset.h	Fri Dec  5 07:40:36 2008	(r185626)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/cpuset.h	Fri Dec  5 07:40:52 2008	(r185627)
@@ -132,6 +132,7 @@ typedef	struct _cpuset {
 #define	CPU_WHICH_PID		2	/* Specifies a process id. */
 #define	CPU_WHICH_CPUSET	3	/* Specifies a set id. */
 #define	CPU_WHICH_IRQ		4	/* Specifies an irq #. */
+#define	CPU_WHICH_JAIL		5	/* Specifies a jail id. */
 
 /*
  * Reserved cpuset identifiers.
@@ -168,11 +169,15 @@ struct cpuset {
 #define CPU_SET_RDONLY  0x0002  /* No modification allowed. */
 
 extern cpuset_t *cpuset_root;
+struct proc;
+struct thread;
 
 struct cpuset *cpuset_thread0(void);
 struct cpuset *cpuset_ref(struct cpuset *);
 void	cpuset_rel(struct cpuset *);
 int	cpuset_setthread(lwpid_t id, cpuset_t *);
+int	cpuset_create_root(struct thread *, struct cpuset **);
+int	cpuset_setproc_update_set(struct proc *, struct cpuset *);
 
 #else
 __BEGIN_DECLS

Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/disklabel.h
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/sys/disklabel.h	Fri Dec  5 07:40:36 2008	(r185626)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/disklabel.h	Fri Dec  5 07:40:52 2008	(r185627)
@@ -52,7 +52,7 @@
 
 /* XXX these should be defined per controller (or drive) elsewhere, not here! */
 #if defined(__i386__) || defined(__amd64__) || defined(__arm__) || \
-    defined(__ia64__)
+    defined(__ia64__) || defined(__powerpc__)
 #define LABELSECTOR	1			/* sector containing label */
 #define LABELOFFSET	0			/* offset of label in sector */
 #endif

Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/jail.h
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/sys/jail.h	Fri Dec  5 07:40:36 2008	(r185626)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/jail.h	Fri Dec  5 07:40:52 2008	(r185627)
@@ -13,21 +13,74 @@
 #ifndef _SYS_JAIL_H_
 #define _SYS_JAIL_H_
 
-struct jail {
+#ifdef _KERNEL
+struct jail_v0 {
 	u_int32_t	version;
 	char		*path;
 	char		*hostname;
 	u_int32_t	ip_number;
 };
+#endif
+
+struct jail {
+	uint32_t	version;
+	char		*path;
+	char		*hostname;
+	char		*jailname;
+	uint32_t	ip4s;
+	uint32_t	ip6s;
+	struct in_addr	*ip4;
+	struct in6_addr	*ip6;
+};
+#define	JAIL_API_VERSION 2
+
+/*
+ * For all xprison structs, always keep the pr_version an int and
+ * the first variable so userspace can easily distinguish them.
+ */
+#ifndef _KERNEL
+struct xprison_v1 {
+	int		 pr_version;
+	int		 pr_id;
+	char		 pr_path[MAXPATHLEN];
+	char		 pr_host[MAXHOSTNAMELEN];
+	u_int32_t	 pr_ip;
+};
+#endif
 
 struct xprison {
 	int		 pr_version;
 	int		 pr_id;
+	int		 pr_state;
+	cpusetid_t	 pr_cpusetid;
 	char		 pr_path[MAXPATHLEN];
 	char 		 pr_host[MAXHOSTNAMELEN];
-	u_int32_t	 pr_ip;
+	char 		 pr_name[MAXHOSTNAMELEN];
+	uint32_t	 pr_ip4s;
+	uint32_t	 pr_ip6s;
+#if 0
+	/*
+	 * sizeof(xprison) will be malloced + size needed for all
+	 * IPv4 and IPv6 addesses. Offsets are based numbers of addresses.
+	 */
+	struct in_addr	 pr_ip4[];
+	struct in6_addr	 pr_ip6[];
+#endif
+};
+#define	XPRISON_VERSION	3
+
+static const struct prison_state {
+	int		pr_state;
+	const char *	state_name;
+} prison_states[] = {
+#define	PRISON_STATE_INVALID		0
+	{ PRISON_STATE_INVALID,		"INVALID" },
+#define	PRISON_STATE_ALIVE		1
+	{ PRISON_STATE_ALIVE,		"ALIVE" },
+#define	PRISON_STATE_DYING		2
+	{ PRISON_STATE_DYING,		"DYING" },
 };
-#define	XPRISON_VERSION	1
+
 
 #ifndef _KERNEL
 
@@ -48,6 +101,12 @@ MALLOC_DECLARE(M_PRISON);
 #endif
 #endif /* _KERNEL */
 
+#if defined(_KERNEL) || defined(_WANT_PRISON)
+
+#include <sys/osd.h>
+
+struct cpuset;
+
 /*
  * This structure describes a prison.  It is pointed to by all struct
  * ucreds's of the inmates.  pr_ref keeps track of them and is used to
@@ -60,20 +119,26 @@ MALLOC_DECLARE(M_PRISON);
  *       required to read
  *   (d) set only during destruction of jail, no mutex needed
  */
-#if defined(_KERNEL) || defined(_WANT_PRISON)
 struct prison {
 	LIST_ENTRY(prison) pr_list;			/* (a) all prisons */
 	int		 pr_id;				/* (c) prison id */
 	int		 pr_ref;			/* (p) refcount */
+	int		 pr_state;			/* (p) prison state */
+	int		 pr_nprocs;			/* (p) process count */
 	char		 pr_path[MAXPATHLEN];		/* (c) chroot path */
+	struct cpuset	*pr_cpuset;			/* (p) cpuset */
 	struct vnode	*pr_root;			/* (c) vnode to rdir */
 	char 		 pr_host[MAXHOSTNAMELEN];	/* (p) jail hostname */
-	u_int32_t	 pr_ip;				/* (c) ip addr host */
+	char 		 pr_name[MAXHOSTNAMELEN];	/* (c) admin jail name */
 	void		*pr_linux;			/* (p) linux abi */
 	int		 pr_securelevel;		/* (p) securelevel */
 	struct task	 pr_task;			/* (d) destroy task */
 	struct mtx	 pr_mtx;
-	void		**pr_slots;			/* (p) additional data */
+	struct osd	 pr_osd;			/* (p) additional data */
+	int		 pr_ip4s;			/* (c) number of v4 IPs */
+	struct in_addr	*pr_ip4;			/* (c) v4 IPs of jail */
+	int		 pr_ip6s;			/* (c) number of v6 IPs */
+	struct in6_addr	*pr_ip6;			/* (c) v6 IPs of jail */
 };
 #endif /* _KERNEL || _WANT_PRISON */
 
@@ -101,6 +166,8 @@ struct ucred;
 struct mount;
 struct sockaddr;
 struct statfs;
+struct thread;
+int kern_jail(struct thread *, struct jail *);
 int jailed(struct ucred *cred);
 void getcredhostname(struct ucred *cred, char *, size_t);
 int prison_check(struct ucred *cred1, struct ucred *cred2);
@@ -109,12 +176,23 @@ void prison_enforce_statfs(struct ucred 
     struct statfs *sp);
 struct prison *prison_find(int prid);
 void prison_free(struct prison *pr);
-u_int32_t prison_getip(struct ucred *cred);
+void prison_free_locked(struct prison *pr);
 void prison_hold(struct prison *pr);
+void prison_hold_locked(struct prison *pr);
+void prison_proc_hold(struct prison *);
+void prison_proc_free(struct prison *);
+int prison_getip4(struct ucred *cred, struct in_addr *ia);
+int prison_local_ip4(struct ucred *cred, struct in_addr *ia);
+int prison_remote_ip4(struct ucred *cred, struct in_addr *ia);
+int prison_check_ip4(struct ucred *cred, struct in_addr *ia);
+#ifdef INET6
+int prison_getip6(struct ucred *, struct in6_addr *);
+int prison_local_ip6(struct ucred *, struct in6_addr *, int);
+int prison_remote_ip6(struct ucred *, struct in6_addr *);
+int prison_check_ip6(struct ucred *, struct in6_addr *);
+#endif
 int prison_if(struct ucred *cred, struct sockaddr *sa);
-int prison_ip(struct ucred *cred, int flag, u_int32_t *ip);
 int prison_priv_check(struct ucred *cred, int priv);
-void prison_remote_ip(struct ucred *cred, int flags, u_int32_t *ip);
 
 /*
  * Kernel jail services.

Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/mbuf.h
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/sys/mbuf.h	Fri Dec  5 07:40:36 2008	(r185626)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/mbuf.h	Fri Dec  5 07:40:52 2008	(r185627)
@@ -44,6 +44,8 @@
 #endif
 #endif
 
+#define	M_DPAD_LEN	64
+
 /*
  * Mbufs are of a single size, MSIZE (sys/param.h), which includes overhead.
  * An mbuf may add a single "mbuf cluster" of size MCLBYTES (also in
@@ -57,6 +59,9 @@
 #define	MHLEN		(MLEN - sizeof(struct pkthdr))	/* data len w/pkthdr */
 #define	MINCLSIZE	(MHLEN + 1)	/* smallest amount to put in cluster */
 #define	M_MAXCOMPRESS	(MHLEN / 2)	/* max amount to copy for compression */
+#define	MICLHLEN	(sizeof(struct m_hdr) + sizeof(struct pkthdr) + M_DPAD_LEN + sizeof(((struct mbuf *)0)->m_ext) + sizeof(int))
+#define	MICLDOFF	(roundup2(MICLHLEN, 64))
+#define	MICLBYTES	(MCLBYTES + MICLDOFF)
 
 #ifdef _KERNEL
 /*-
@@ -115,10 +120,12 @@ struct pkthdr {
 	/* variables for ip and tcp reassembly */
 	void		*header;	/* pointer to packet header */
 	int		 len;		/* total packet length */
+	uint32_t	 flowid;	/* packet's 4-tuple system 
+					 * flow identifier
+					 */
 	/* variables for hardware checksum */
 	int		 csum_flags;	/* flags regarding checksum */
 	int		 csum_data;	/* data field used by csum routines */
-	uint32_t	 flowid;	/*  flow identifier (not IPv6) */
 	u_int16_t	 tso_segsz;	/* TSO segment size */
 	u_int16_t	 ether_vtag;	/* Ethernet 802.1p+q vlan tag */
 	SLIST_HEAD(packet_tags, m_tag) tags; /* list of packet tags */
@@ -350,10 +357,12 @@ extern uma_zone_t	zone_jumbop;
 extern uma_zone_t	zone_jumbo9;
 extern uma_zone_t	zone_jumbo16;
 extern uma_zone_t	zone_ext_refcnt;
+extern uma_zone_t	zone_iclust;
 
 static __inline struct mbuf	*m_getcl(int how, short type, int flags);
 static __inline struct mbuf	*m_get(int how, short type);
 static __inline struct mbuf	*m_gethdr(int how, short type);
+static __inline struct mbuf	*m_geticl(int how, short type, int flags);
 static __inline struct mbuf	*m_getjcl(int how, short type, int flags,
 				    int size);
 static __inline struct mbuf	*m_getclr(int how, short type);	/* XXX */
@@ -363,6 +372,12 @@ static __inline void		*m_cljget(struct m
 static __inline void		 m_chtype(struct mbuf *m, short new_type);
 void				 mb_free_ext(struct mbuf *);
 static __inline struct mbuf	*m_last(struct mbuf *m);
+void				 m_tag_delete_chain(struct mbuf *,
+                                    struct m_tag *);
+
+
+int mb_iclust_init(struct mbuf *m, short type, int flags);
+void mb_iclust_free(void *mem, void *arg);
 
 static __inline int
 m_gettype(int size)
@@ -465,7 +480,18 @@ static __inline struct mbuf *
 m_getcl(int how, short type, int flags)
 {
 	struct mb_args args;
-
+	struct mbuf *m;
+	
+	/* First try an iclust. */
+	m = uma_zalloc(zone_iclust, how);
+	if (m) {
+		if (type != MT_NOINIT)
+			mb_iclust_init(m, type, flags);
+		return (m);
+	}
+	/*
+	 * Then fallback to the packetzone.
+	 */
 	args.flags = flags;
 	args.type = type;
 	return ((struct mbuf *)(uma_zalloc_arg(zone_pack, &args, how)));
@@ -616,6 +642,50 @@ m_last(struct mbuf *m)
 		m = m->m_next;
 	return (m);
 }
+static __inline void *
+m_icldata(struct mbuf *m)
+{
+
+	return ((void *)((uintptr_t)m + MICLDOFF));
+}
+
+static __inline
+struct mbuf *
+m_geticl(int how, short type, int flags)
+{
+	struct mbuf *m;
+
+	m = uma_zalloc(zone_iclust, how);
+	if (m && type != MT_NOINIT)
+		mb_iclust_init(m, type, flags);
+
+	return (m);
+}
+
+/*
+ * Determine whether an mbuf can be torn down prior to xmit or not.  This
+ * allows the driver to avoid touching the mbuf header when cleaning
+ * transmit interrupts.
+ */
+static inline int
+m_fasttest(struct mbuf *m)
+{
+	if (m->m_next == NULL && (m->m_flags & M_EXT) != 0 &&
+	    m->m_ext.ext_free == mb_iclust_free && *m->m_ext.ref_cnt == 1) {
+		if (SLIST_FIRST(&m->m_pkthdr.tags) != NULL)
+			m_tag_delete_chain(m, NULL);
+		return (1);
+	}
+	return (0);
+}
+
+static inline void
+m_fastfree(struct mbuf *m)
+{
+
+	uma_zfree(zone_iclust, m);
+}
+
 
 /*
  * mbuf, cluster, and external object allocation macros (for compatibility
@@ -865,7 +935,6 @@ struct mbuf	*m_unshare(struct mbuf *, in
 /* Packet tag routines. */
 struct m_tag	*m_tag_alloc(u_int32_t, int, int, int);
 void		 m_tag_delete(struct mbuf *, struct m_tag *);
-void		 m_tag_delete_chain(struct mbuf *, struct m_tag *);
 void		 m_tag_free_default(struct m_tag *);
 struct m_tag	*m_tag_locate(struct mbuf *, u_int32_t, int, struct m_tag *);
 struct m_tag	*m_tag_copy(struct m_tag *, int);

Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/mount.h
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/sys/mount.h	Fri Dec  5 07:40:36 2008	(r185626)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/mount.h	Fri Dec  5 07:40:52 2008	(r185627)
@@ -453,6 +453,7 @@ struct ovfsconf {
 #define	VFCF_LOOPBACK	0x00100000	/* aliases some other mounted FS */
 #define	VFCF_UNICODE	0x00200000	/* stores file names as Unicode */
 #define	VFCF_JAIL	0x00400000	/* can be mounted from within a jail */
+#define	VFCF_DELEGADMIN	0x00800000	/* supports delegated administration */
 
 typedef uint32_t fsctlop_t;
 
@@ -716,6 +717,7 @@ int	vfs_donmount(struct thread *td, int 
 void	vfs_getnewfsid(struct mount *);
 struct cdev *vfs_getrootfsid(struct mount *);
 struct	mount *vfs_getvfs(fsid_t *);      /* return vfs given fsid */
+struct	mount *vfs_busyfs(fsid_t *);
 int	vfs_modevent(module_t, int, void *);
 void	vfs_mount_error(struct mount *, const char *, ...);
 void	vfs_mountroot(void);			/* mount our root filesystem */

Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/namei.h
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/sys/namei.h	Fri Dec  5 07:40:36 2008	(r185626)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/namei.h	Fri Dec  5 07:40:52 2008	(r185627)
@@ -66,7 +66,7 @@ struct nameidata {
 	/*
 	 * Arguments to lookup.
 	 */
-	struct	vnode *ni_startdir;	/* starting directory */
+	struct  vnode *ni_startdir;	/* starting directory */
 	struct	vnode *ni_rootdir;	/* logical root directory */
 	struct	vnode *ni_topdir;	/* logical top directory */
 	int	ni_dirfd;		/* starting directory for *at functions */
@@ -149,15 +149,20 @@ struct nameidata {
 /*
  * Initialization of a nameidata structure.
  */
-#define	NDINIT(ndp, op, flags, segflg, namep, td)	\
-	NDINIT_AT(ndp, op, flags, segflg, namep, AT_FDCWD, td)
+#define	NDINIT(ndp, op, flags, segflg, namep, td)			\
+	NDINIT_ALL(ndp, op, flags, segflg, namep, AT_FDCWD, NULL, td)
+#define	NDINIT_AT(ndp, op, flags, segflg, namep, dirfd, td)		\
+	NDINIT_ALL(ndp, op, flags, segflg, namep, dirfd, NULL, td)
+#define	NDINIT_ATVP(ndp, op, flags, segflg, namep, vp, td)		\
+	NDINIT_ALL(ndp, op, flags, segflg, namep, AT_FDCWD, vp, td)
 
 static __inline void
-NDINIT_AT(struct nameidata *ndp,
+NDINIT_ALL(struct nameidata *ndp,
 	u_long op, u_long flags,
 	enum uio_seg segflg,
 	const char *namep,
 	int dirfd,
+	struct vnode *startdir,
 	struct thread *td)
 {
 	ndp->ni_cnd.cn_nameiop = op;
@@ -165,6 +170,7 @@ NDINIT_AT(struct nameidata *ndp,
 	ndp->ni_segflg = segflg;
 	ndp->ni_dirp = namep;
 	ndp->ni_dirfd = dirfd;
+	ndp->ni_startdir = startdir;
 	ndp->ni_cnd.cn_thread = td;
 }
 

Added: user/kmacy/HEAD_fast_multi_xmit/sys/sys/osd.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/osd.h	Fri Dec  5 07:40:52 2008	(r185627)
@@ -0,0 +1,89 @@
+/*-
+ * Copyright (c) 2007 Pawel Jakub Dawidek <pjd at FreeBSD.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (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$
+ */
+
+#ifndef _SYS_OSD_H_
+#define _SYS_OSD_H_
+
+#include <sys/queue.h>
+
+struct osd {
+	u_int		  osd_nslots;
+	void		**osd_slots;
+	LIST_ENTRY(osd)	  osd_next;
+};
+
+#ifdef _KERNEL
+
+#define	OSD_THREAD	0
+#define	OSD_JAIL	1
+
+#define	OSD_FIRST	OSD_THREAD
+#define	OSD_LAST	OSD_JAIL
+
+typedef void (*osd_destructor_t)(void *value);
+
+int osd_register(u_int type, osd_destructor_t destructor);
+void osd_deregister(u_int type, u_int slot);
+
+int osd_set(u_int type, struct osd *osd, u_int slot, void *value);
+void *osd_get(u_int type, struct osd *osd, u_int slot);
+void osd_del(u_int type, struct osd *osd, u_int slot);
+
+void osd_exit(u_int type, struct osd *osd);
+
+#define	osd_thread_register(destructor)					\
+	osd_register(OSD_THREAD, (destructor))
+#define	osd_thread_deregister(slot)					\
+	osd_deregister(OSD_THREAD, (slot))
+#define	osd_thread_set(td, slot, value)					\
+	osd_set(OSD_THREAD, &(td)->td_osd, (slot), (value))
+#define	osd_thread_get(td, slot)					\
+	osd_get(OSD_THREAD, &(td)->td_osd, (slot))
+#define	osd_thread_del(td, slot)	do {				\
+	KASSERT((td) == curthread, ("Not curthread."));			\
+	osd_del(OSD_THREAD, &(td)->td_osd, (slot));			\
+} while (0)
+#define	osd_thread_exit(td)						\
+	osd_exit(OSD_THREAD, &(td)->td_osd)
+
+#define	osd_jail_register(destructor)					\
+	osd_register(OSD_JAIL, (destructor))
+#define	osd_jail_deregister(slot)					\
+	osd_deregister(OSD_JAIL, (slot))
+#define	osd_jail_set(pr, slot, value)					\
+	osd_set(OSD_JAIL, &(pr)->pr_osd, (slot), (value))
+#define	osd_jail_get(pr, slot)						\
+	osd_get(OSD_JAIL, &(pr)->pr_osd, (slot))
+#define	osd_jail_del(pr, slot)						\
+	osd_del(OSD_JAIL, &(pr)->pr_osd, (slot))
+#define	osd_jail_exit(pr)						\
+	osd_exit(OSD_JAIL, &(pr)->pr_osd)
+
+#endif	/* _KERNEL */
+
+#endif	/* !_SYS_OSD_H_ */

Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/param.h
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/sys/param.h	Fri Dec  5 07:40:36 2008	(r185626)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/param.h	Fri Dec  5 07:40:52 2008	(r185627)
@@ -57,7 +57,7 @@
  *		is created, otherwise 1.
  */
 #undef __FreeBSD_version
-#define __FreeBSD_version 800053	/* Master, propagated to newvers */
+#define __FreeBSD_version 800057	/* Master, propagated to newvers */
 
 #ifndef LOCORE
 #include <sys/types.h>
@@ -92,9 +92,13 @@
 #include <sys/priority.h>
 #endif
 
+#ifndef FALSE
 #define	FALSE	0
+#endif
+#ifndef TRUE
 #define	TRUE	1
 #endif
+#endif
 
 #ifndef _KERNEL
 /* Signals. */

Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/pmc.h
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/sys/pmc.h	Fri Dec  5 07:40:36 2008	(r185626)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/pmc.h	Fri Dec  5 07:40:52 2008	(r185627)
@@ -40,7 +40,7 @@
 
 #define	PMC_MODULE_NAME		"hwpmc"
 #define	PMC_NAME_MAX		16 /* HW counter name size */
-#define	PMC_CLASS_MAX		4  /* #classes of PMCs in a system */
+#define	PMC_CLASS_MAX		4  /* max #classes of PMCs per-system */
 
 /*
  * Kernel<->userland API version number [MMmmpppp]
@@ -55,7 +55,7 @@
  * The patch version is incremented for every bug fix.
  */
 #define	PMC_VERSION_MAJOR	0x03
-#define	PMC_VERSION_MINOR	0x00
+#define	PMC_VERSION_MINOR	0x01
 #define	PMC_VERSION_PATCH	0x0000
 
 #define	PMC_VERSION		(PMC_VERSION_MAJOR << 24 |		\
@@ -82,6 +82,7 @@
 	__PMC_CPU(INTEL_PIV,	0x86,	"Intel Pentium IV")	\
 	__PMC_CPU(INTEL_CORE,	0x87,	"Intel Core Solo/Duo")	\
 	__PMC_CPU(INTEL_CORE2,	0x88,	"Intel Core2")		\
+	__PMC_CPU(INTEL_CORE2EXTREME,	0x89,	"Intel Core2 Extreme")	\
 	__PMC_CPU(INTEL_ATOM,	0x8A,	"Intel Atom")
 
 enum pmc_cputype {
@@ -105,8 +106,7 @@ enum pmc_cputype {
 	__PMC_CLASS(P6)		/* Intel Pentium Pro counters */	\
 	__PMC_CLASS(P4)		/* Intel Pentium-IV counters */		\
 	__PMC_CLASS(IAF)	/* Intel Core2/Atom, fixed function */	\
-	__PMC_CLASS(IAP1)	/* Intel Core...Atom, programmable */	\
-	__PMC_CLASS(IAP2)	/* Intel Core...Atom, programmable */
+	__PMC_CLASS(IAP)	/* Intel Core...Atom, programmable */
 
 enum pmc_class {
 #undef  __PMC_CLASS
@@ -115,7 +115,7 @@ enum pmc_class {
 };
 
 #define	PMC_CLASS_FIRST	PMC_CLASS_TSC
-#define	PMC_CLASS_LAST	PMC_CLASS_IAP2
+#define	PMC_CLASS_LAST	PMC_CLASS_IAP
 
 /*
  * A PMC can be in the following states:
@@ -473,9 +473,10 @@ struct pmc_op_getpmcinfo {
  */
 
 struct pmc_classinfo {
-	enum pmc_class	pm_class; 	/* class id */
+	enum pmc_class	pm_class;	/* class id */
 	uint32_t	pm_caps;	/* counter capabilities */
 	uint32_t	pm_width;	/* width of the PMC */
+	uint32_t	pm_num;		/* number of PMCs in class */
 };
 
 struct pmc_op_getcpuinfo {
@@ -635,7 +636,7 @@ struct pmc_target {
 
 struct pmc {
 	LIST_HEAD(,pmc_target)	pm_targets;	/* list of target processes */
-	LIST_ENTRY(pmc)       	pm_next;	/* owner's list */
+	LIST_ENTRY(pmc)		pm_next;	/* owner's list */
 
 	/*
 	 * System-wide PMCs are allocated on a CPU and are not moved
@@ -679,7 +680,7 @@ struct pmc {
 	 * mode, class and the CPU# associated with the PMC.
 	 */
 
-	pmc_id_t	pm_id; 		/* allocated PMC id */
+	pmc_id_t	pm_id;		/* allocated PMC id */
 
 	/* md extensions */
 	union pmc_md_pmc	pm_md;
@@ -722,7 +723,7 @@ struct pmc_targetstate {
 struct pmc_process {
 	LIST_ENTRY(pmc_process) pp_next;	/* hash chain */
 	int		pp_refcnt;		/* reference count */
-	uint32_t	pp_flags; 		/* flags PMC_PP_* */
+	uint32_t	pp_flags;		/* flags PMC_PP_* */
 	struct proc	*pp_proc;		/* target thread */
 	struct pmc_targetstate pp_pmcs[];       /* NHWPMCs */
 };
@@ -840,7 +841,6 @@ struct pmc_cpu {
 	uint32_t	pc_state;	/* physical cpu number + flags */
 	struct pmc_samplebuffer *pc_sb; /* space for samples */
 	struct pmc_hw	*pc_hwpmcs[];	/* 'npmc' pointers */
-	/* other machine dependent fields come here */
 };
 
 #define	PMC_PCPU_CPU_MASK		0x000000FF
@@ -863,6 +863,48 @@ struct pmc_binding {
 	int	pb_cpu;		/* if so, to which CPU */
 };
 
+
+struct pmc_mdep;
+
+/*
+ * struct pmc_classdep
+ *
+ * PMC class-dependent operations.
+ */
+struct pmc_classdep {
+	uint32_t	pcd_caps;	/* class capabilities */
+	enum pmc_class	pcd_class;	/* class id */
+	int		pcd_num;	/* number of PMCs */
+	int		pcd_ri;		/* row index of the first PMC in class */
+	int		pcd_width;	/* width of the PMC */
+
+	/* configuring/reading/writing the hardware PMCs */
+	int (*pcd_config_pmc)(int _cpu, int _ri, struct pmc *_pm);
+	int (*pcd_get_config)(int _cpu, int _ri, struct pmc **_ppm);
+	int (*pcd_read_pmc)(int _cpu, int _ri, pmc_value_t *_value);
+	int (*pcd_write_pmc)(int _cpu, int _ri, pmc_value_t _value);
+
+	/* pmc allocation/release */
+	int (*pcd_allocate_pmc)(int _cpu, int _ri, struct pmc *_t,
+		const struct pmc_op_pmcallocate *_a);
+	int (*pcd_release_pmc)(int _cpu, int _ri, struct pmc *_pm);
+
+	/* starting and stopping PMCs */
+	int (*pcd_start_pmc)(int _cpu, int _ri);
+	int (*pcd_stop_pmc)(int _cpu, int _ri);
+
+	/* description */
+	int (*pcd_describe)(int _cpu, int _ri, struct pmc_info *_pi,
+		struct pmc **_ppmc);
+
+	/* class-dependent initialization & finalization */
+	int (*pcd_pcpu_init)(struct pmc_mdep *_md, int _cpu);
+	int (*pcd_pcpu_fini)(struct pmc_mdep *_md, int _cpu);
+
+	/* machine-specific interface */
+	int (*pcd_get_msr)(int _ri, uint32_t *_msr);
+};
+
 /*
  * struct pmc_mdep
  *
@@ -871,45 +913,28 @@ struct pmc_binding {
 
 struct pmc_mdep  {
 	uint32_t	pmd_cputype;    /* from enum pmc_cputype */
-	uint32_t	pmd_npmc;	/* max PMCs per CPU */
-	uint32_t	pmd_nclass;	/* # PMC classes supported */
-	struct pmc_classinfo  pmd_classes[PMC_CLASS_MAX];
-	int		pmd_nclasspmcs[PMC_CLASS_MAX];
+	uint32_t	pmd_npmc;	/* number of PMCs per CPU */
+	uint32_t	pmd_nclass;	/* number of PMC classes present */
 
 	/*
-	 * Methods
+	 * Machine dependent methods.
 	 */
 
-	int (*pmd_init)(int _cpu);    /* machine dependent initialization */
-	int (*pmd_cleanup)(int _cpu); /* machine dependent cleanup  */
+	/* per-cpu initialization and finalization */
+	int (*pmd_pcpu_init)(struct pmc_mdep *_md, int _cpu);
+	int (*pmd_pcpu_fini)(struct pmc_mdep *_md, int _cpu);
 
 	/* thread context switch in/out */
 	int (*pmd_switch_in)(struct pmc_cpu *_p, struct pmc_process *_pp);
 	int (*pmd_switch_out)(struct pmc_cpu *_p, struct pmc_process *_pp);
 
-	/* configuring/reading/writing the hardware PMCs */
-	int (*pmd_config_pmc)(int _cpu, int _ri, struct pmc *_pm);
-	int (*pmd_get_config)(int _cpu, int _ri, struct pmc **_ppm);
-	int (*pmd_read_pmc)(int _cpu, int _ri, pmc_value_t *_value);
-	int (*pmd_write_pmc)(int _cpu, int _ri, pmc_value_t _value);
-
-	/* pmc allocation/release */
-	int (*pmd_allocate_pmc)(int _cpu, int _ri, struct pmc *_t,
-		const struct pmc_op_pmcallocate *_a);
-	int (*pmd_release_pmc)(int _cpu, int _ri, struct pmc *_pm);
-
-	/* starting and stopping PMCs */
-	int (*pmd_start_pmc)(int _cpu, int _ri);
-	int (*pmd_stop_pmc)(int _cpu, int _ri);
-
 	/* handle a PMC interrupt */
 	int (*pmd_intr)(int _cpu, struct trapframe *_tf);
 
-	int (*pmd_describe)(int _cpu, int _ri, struct pmc_info *_pi,
-		struct pmc **_ppmc);
-
-	int (*pmd_get_msr)(int _ri, uint32_t *_msr);
-
+	/*
+	 * PMC class dependent information.
+	 */
+	struct pmc_classdep pmd_classdep[];
 };
 
 /*
@@ -918,7 +943,6 @@ struct pmc_mdep  {
  */
 
 extern struct pmc_cpu **pmc_pcpu;
-extern struct pmc_mdep *md;
 
 /* driver statistics */
 extern struct pmc_op_getdriverstats pmc_stats;
@@ -969,7 +993,7 @@ extern struct pmc_debugflags pmc_debugfl
 #define	PMC_DEBUG_MIN_FND		4 /* find */
 
 /* MODULE */
-#define	PMC_DEBUG_MIN_PMH 	       14 /* pmc_hook */
+#define	PMC_DEBUG_MIN_PMH	       14 /* pmc_hook */
 #define	PMC_DEBUG_MIN_PMS	       15 /* pmc_syscall */
 
 /* OWN */
@@ -1002,7 +1026,7 @@ extern struct pmc_debugflags pmc_debugfl
 #define	PMC_DEBUG_MIN_INT	       13 /* interrupts */
 
 /* CPU */
-#define	PMC_DEBUG_MIN_BND	       	8 /* bind */
+#define	PMC_DEBUG_MIN_BND		8 /* bind */
 #define	PMC_DEBUG_MIN_SEL		9 /* select */
 
 /* LOG */
@@ -1023,6 +1047,7 @@ MALLOC_DECLARE(M_PMC);
  */
 
 struct pmc_mdep *pmc_md_initialize(void);	/* MD init function */
+void	pmc_md_finalize(struct pmc_mdep *_md);	/* MD fini function */
 int	pmc_getrowdisp(int _ri);
 int	pmc_process_interrupt(int _cpu, struct pmc *_pm,
     struct trapframe *_tf, int _inuserspace);

Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/pmclog.h
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/sys/pmclog.h	Fri Dec  5 07:40:36 2008	(r185626)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/pmclog.h	Fri Dec  5 07:40:52 2008	(r185627)
@@ -239,7 +239,8 @@ union pmclog_entry {		/* only used to si
 /*
  * Prototypes
  */
-int	pmclog_configure_log(struct pmc_owner *_po, int _logfd);
+int	pmclog_configure_log(struct pmc_mdep *_md, struct pmc_owner *_po,
+    int _logfd);
 int	pmclog_deconfigure_log(struct pmc_owner *_po);
 int	pmclog_flush(struct pmc_owner *_po);
 void	pmclog_initialize(void);

Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/priv.h
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/sys/priv.h	Fri Dec  5 07:40:36 2008	(r185626)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/priv.h	Fri Dec  5 07:40:52 2008	(r185627)
@@ -84,7 +84,7 @@
 #define	PRIV_CLOCK_SETTIME	17	/* Can call clock_settime. */
 #define	PRIV_SETTIMEOFDAY	18	/* Can call settimeofday. */
 #define	PRIV_SETHOSTID		19	/* Can call sethostid. */
-#define	PRIV_SETDOMAINNAME	20	/* Can call setdomainname. */
+#define	_PRIV_SETDOMAINNAME	20	/* Removed. */
 
 /*
  * Audit subsystem privileges.
@@ -268,7 +268,7 @@
 #define	PRIV_VFS_MKNOD_DEV	331	/* Can mknod() to create dev nodes. */
 #define	PRIV_VFS_MKNOD_WHT	332	/* Can mknod() to create whiteout. */
 #define	PRIV_VFS_MOUNT		333	/* Can mount(). */
-#define	PRIV_VFS_MOUNT_OWNER	334	/* Override owner on user mounts. */
+#define	PRIV_VFS_MOUNT_OWNER	334	/* Can manage other users' file systems. */
 #define	PRIV_VFS_MOUNT_EXPORTED	335	/* Can set MNT_EXPORTED on mount. */
 #define	PRIV_VFS_MOUNT_PERM	336	/* Override dev node perms at mount. */
 #define	PRIV_VFS_MOUNT_SUIDDIR	337	/* Can set MNT_SUIDDIR on mount. */

Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/proc.h
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/sys/proc.h	Fri Dec  5 07:40:36 2008	(r185626)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/proc.h	Fri Dec  5 07:40:52 2008	(r185627)
@@ -47,6 +47,7 @@
 #include <sys/_lock.h>
 #include <sys/lock_profile.h>
 #include <sys/_mutex.h>
+#include <sys/osd.h>
 #include <sys/priority.h>
 #include <sys/rtprio.h>			/* XXX. */
 #include <sys/runq.h>
@@ -233,6 +234,7 @@ struct thread {
 	char		td_name[MAXCOMLEN + 1];	/* (*) Thread name. */
 	struct file	*td_fpop;	/* (k) file referencing cdev under op */
 	int		td_dbgflags;	/* (c) Userland debugger flags */
+	struct osd	td_osd;		/* (k) Object specific data. */
 #define	td_endzero td_base_pri
 
 /* Copied during fork1() or thread_sched_upcall(). */

Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/syscall.h
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/sys/syscall.h	Fri Dec  5 07:40:36 2008	(r185626)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/syscall.h	Fri Dec  5 07:40:52 2008	(r185627)
@@ -3,7 +3,7 @@
  *
  * DO NOT EDIT-- this file is automatically generated.
  * $FreeBSD$
- * created from FreeBSD: head/sys/kern/syscalls.master 184588 2008-11-03 10:38:00Z dfr 
+ * created from FreeBSD: head/sys/kern/syscalls.master 184789 2008-11-09 10:45:13Z ed 
  */
 
 #define	SYS_syscall	0
@@ -161,9 +161,9 @@
 #define	SYS_freebsd4_fstatfs	158
 #define	SYS_lgetfh	160
 #define	SYS_getfh	161
-#define	SYS_getdomainname	162
-#define	SYS_setdomainname	163
-#define	SYS_uname	164
+#define	SYS_freebsd4_getdomainname	162
+#define	SYS_freebsd4_setdomainname	163
+#define	SYS_freebsd4_uname	164
 #define	SYS_sysarch	165
 #define	SYS_rtprio	166
 #define	SYS_semsys	169

Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/syscall.mk
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/sys/syscall.mk	Fri Dec  5 07:40:36 2008	(r185626)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/syscall.mk	Fri Dec  5 07:40:52 2008	(r185627)
@@ -1,7 +1,7 @@
 # FreeBSD system call names.
 # DO NOT EDIT-- this file is automatically generated.
 # $FreeBSD$
-# created from FreeBSD: head/sys/kern/syscalls.master 184588 2008-11-03 10:38:00Z dfr 
+# created from FreeBSD: head/sys/kern/syscalls.master 184789 2008-11-09 10:45:13Z ed 
 MIASM =  \
 	syscall.o \
 	exit.o \
@@ -113,9 +113,9 @@ MIASM =  \
 	freebsd4_fstatfs.o \
 	lgetfh.o \
 	getfh.o \
-	getdomainname.o \
-	setdomainname.o \
-	uname.o \
+	freebsd4_getdomainname.o \
+	freebsd4_setdomainname.o \
+	freebsd4_uname.o \
 	sysarch.o \
 	rtprio.o \
 	semsys.o \

Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/syscallsubr.h
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/sys/syscallsubr.h	Fri Dec  5 07:40:36 2008	(r185626)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/syscallsubr.h	Fri Dec  5 07:40:52 2008	(r185627)
@@ -142,6 +142,7 @@ int	kern_openat(struct thread *td, int f
 	    enum uio_seg pathseg, int flags, int mode);
 int	kern_pathconf(struct thread *td, char *path, enum uio_seg pathseg,
 	    int name);
+int	kern_pipe(struct thread *td, int fildes[2]);
 int	kern_preadv(struct thread *td, int fd, struct uio *auio, off_t offset);
 int	kern_ptrace(struct thread *td, int req, pid_t pid, void *addr,
 	    int data);

Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/sysctl.h
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/sys/sysctl.h	Fri Dec  5 07:40:36 2008	(r185626)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/sysctl.h	Fri Dec  5 07:40:52 2008	(r185627)
@@ -540,13 +540,16 @@ TAILQ_HEAD(sysctl_ctx_list, sysctl_ctx_e
 #define	KERN_PROC_RGID		10	/* by real group id */
 #define	KERN_PROC_GID		11	/* by effective group id */
 #define	KERN_PROC_PATHNAME	12	/* path to executable */
-#define	KERN_PROC_VMMAP		13	/* VM map entries for process */
-#define	KERN_PROC_FILEDESC	14	/* File descriptors for process */
+#define	KERN_PROC_OVMMAP	13	/* Old VM map entries for process */
+#define	KERN_PROC_OFILEDESC	14	/* Old file descriptors for process */
 #define	KERN_PROC_KSTACK	15	/* Kernel stacks for process */
 #define	KERN_PROC_INC_THREAD	0x10	/*
 					 * modifier for pid, pgrp, tty,
 					 * uid, ruid, gid, rgid and proc
+					 * This effectively uses 16-31
 					 */
+#define	KERN_PROC_VMMAP		32	/* VM map entries for process */
+#define	KERN_PROC_FILEDESC	33	/* File descriptors for process */
 
 /*
  * KERN_IPC identifiers

Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/sysent.h
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/sys/sysent.h	Fri Dec  5 07:40:36 2008	(r185626)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/sysent.h	Fri Dec  5 07:40:52 2008	(r185627)
@@ -100,8 +100,22 @@ struct sysentvec {
 	void		(*sv_setregs)(struct thread *, u_long, u_long, u_long);
 	void		(*sv_fixlimit)(struct rlimit *, int);
 	u_long		*sv_maxssiz;
+	u_int		sv_flags;
 };
 
+#define	SV_ILP32	0x000100
+#define	SV_LP64		0x000200
+#define	SV_IA32		0x004000
+#define	SV_AOUT		0x008000
+
+#define	SV_ABI_MASK	0xff
+#define	SV_CURPROC_FLAG(x) (curproc->p_sysent->sv_flags & (x))
+#define	SV_CURPROC_ABI() (curproc->p_sysent->sv_flags & SV_ABI_MASK)
+/* same as ELFOSABI_XXX, to prevent header pollution */
+#define	SV_ABI_LINUX	3
+#define	SV_ABI_FREEBSD 	9
+#define	SV_ABI_UNDEF	255
+
 #ifdef _KERNEL
 extern struct sysentvec aout_sysvec;
 extern struct sysentvec elf_freebsd_sysvec;

Modified: user/kmacy/HEAD_fast_multi_xmit/sys/sys/sysproto.h
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/sys/sysproto.h	Fri Dec  5 07:40:36 2008	(r185626)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/sys/sysproto.h	Fri Dec  5 07:40:52 2008	(r185627)
@@ -3,7 +3,7 @@
  *
  * DO NOT EDIT-- this file is automatically generated.
  * $FreeBSD$
- * created from FreeBSD: head/sys/kern/syscalls.master 184588 2008-11-03 10:38:00Z dfr 
+ * created from FreeBSD: head/sys/kern/syscalls.master 184789 2008-11-09 10:45:13Z ed 

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***


More information about the svn-src-user mailing list