Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 22 Jul 2006 03:28:25 GMT
From:      "George V. Neville-Neil" <gnn@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 102102 for review
Message-ID:  <200607220328.k6M3SPPe074773@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=102102

Change 102102 by gnn@fast_ipsec_integ on 2006/07/22 03:27:42

	Integrate latest socket changes from HEAD

Affected files ...

.. //depot/projects/fast_ipsec/src/sys/amd64/amd64/pmap.c#13 integrate
.. //depot/projects/fast_ipsec/src/sys/arm/arm/in_cksum.c#4 integrate
.. //depot/projects/fast_ipsec/src/sys/arm/arm/pmap.c#10 integrate
.. //depot/projects/fast_ipsec/src/sys/arm/arm/vm_machdep.c#7 integrate
.. //depot/projects/fast_ipsec/src/sys/arm/at91/if_ate.c#6 integrate
.. //depot/projects/fast_ipsec/src/sys/arm/at91/kb920x_machdep.c#5 integrate
.. //depot/projects/fast_ipsec/src/sys/arm/at91/uart_dev_at91usart.c#6 integrate
.. //depot/projects/fast_ipsec/src/sys/arm/conf/KB920X#4 integrate
.. //depot/projects/fast_ipsec/src/sys/compat/linux/linux_misc.c#7 integrate
.. //depot/projects/fast_ipsec/src/sys/compat/linux/linux_socket.c#7 integrate
.. //depot/projects/fast_ipsec/src/sys/compat/svr4/svr4_misc.c#6 integrate
.. //depot/projects/fast_ipsec/src/sys/compat/svr4/svr4_proto.h#3 integrate
.. //depot/projects/fast_ipsec/src/sys/compat/svr4/svr4_socket.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/compat/svr4/svr4_socket.h#2 integrate
.. //depot/projects/fast_ipsec/src/sys/compat/svr4/svr4_stream.c#5 integrate
.. //depot/projects/fast_ipsec/src/sys/compat/svr4/svr4_syscall.h#3 integrate
.. //depot/projects/fast_ipsec/src/sys/compat/svr4/svr4_syscallnames.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/compat/svr4/svr4_sysent.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/compat/svr4/svr4_sysvec.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/compat/svr4/syscalls.master#3 integrate
.. //depot/projects/fast_ipsec/src/sys/conf/Makefile.arm#10 integrate
.. //depot/projects/fast_ipsec/src/sys/conf/NOTES#11 integrate
.. //depot/projects/fast_ipsec/src/sys/conf/files#16 integrate
.. //depot/projects/fast_ipsec/src/sys/conf/files.ia64#6 integrate
.. //depot/projects/fast_ipsec/src/sys/conf/kern.pre.mk#6 integrate
.. //depot/projects/fast_ipsec/src/sys/conf/options#14 integrate
.. //depot/projects/fast_ipsec/src/sys/contrib/pf/net/pf_ioctl.c#5 integrate
.. //depot/projects/fast_ipsec/src/sys/ddb/db_command.c#7 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/acpica/acpi_perf.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/amr/amr.c#7 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/ata/ata-queue.c#8 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/bce/if_bce.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/em/if_em.c#9 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/em/if_em.h#6 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/isp/isp.c#6 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/isp/isp_freebsd.c#8 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/isp/isp_library.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/isp/isp_pci.c#7 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/isp/isp_sbus.c#5 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/isp/isp_target.c#5 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/lmc/if_lmc.h#4 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/mpt/mpt.c#12 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/mpt/mpt.h#13 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/mpt/mpt_cam.c#13 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/mpt/mpt_raid.c#8 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/mpt/mpt_raid.h#4 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/mxge/if_mxge.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/sio/sio.c#9 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/sk/if_sk.c#5 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/sk/if_skreg.h#3 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/sound/driver.c#5 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/sound/pci/cmi.c#5 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/sound/pci/emu10k1.c#5 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/sound/pci/emu10kx-midi.c#1 branch
.. //depot/projects/fast_ipsec/src/sys/dev/sound/pci/emu10kx-pcm.c#1 branch
.. //depot/projects/fast_ipsec/src/sys/dev/sound/pci/emu10kx.c#1 branch
.. //depot/projects/fast_ipsec/src/sys/dev/sound/pci/emu10kx.h#1 branch
.. //depot/projects/fast_ipsec/src/sys/dev/sound/pcm/buffer.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/sound/pcm/buffer.h#2 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/sound/pcm/mixer.h#2 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/sound/pcm/sound.c#6 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/sound/pcm/sound.h#5 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/spibus/spi.h#2 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/spibus/spibusvar.h#2 integrate
.. //depot/projects/fast_ipsec/src/sys/dev/streams/streams.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/fs/devfs/devfs_devs.c#4 integrate
.. //depot/projects/fast_ipsec/src/sys/fs/devfs/devfs_rule.c#4 integrate
.. //depot/projects/fast_ipsec/src/sys/fs/devfs/devfs_vfsops.c#4 integrate
.. //depot/projects/fast_ipsec/src/sys/fs/devfs/devfs_vnops.c#8 integrate
.. //depot/projects/fast_ipsec/src/sys/fs/portalfs/portal_vnops.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/fs/smbfs/smbfs_vfsops.c#5 integrate
.. //depot/projects/fast_ipsec/src/sys/gnu/dev/sound/pci/emu10k1-ac97.h#2 delete
.. //depot/projects/fast_ipsec/src/sys/gnu/dev/sound/pci/emu10k1-alsa.h#2 integrate
.. //depot/projects/fast_ipsec/src/sys/gnu/dev/sound/pci/emu10k1.h#2 delete
.. //depot/projects/fast_ipsec/src/sys/gnu/dev/sound/pci/p16v-alsa.h#1 branch
.. //depot/projects/fast_ipsec/src/sys/gnu/dev/sound/pci/p17v-alsa.h#1 branch
.. //depot/projects/fast_ipsec/src/sys/i386/i386/pmap.c#13 integrate
.. //depot/projects/fast_ipsec/src/sys/i386/linux/linux_proto.h#6 integrate
.. //depot/projects/fast_ipsec/src/sys/i386/linux/linux_syscall.h#6 integrate
.. //depot/projects/fast_ipsec/src/sys/i386/linux/linux_sysent.c#6 integrate
.. //depot/projects/fast_ipsec/src/sys/i386/linux/syscalls.master#6 integrate
.. //depot/projects/fast_ipsec/src/sys/ia64/conf/DEFAULTS#4 integrate
.. //depot/projects/fast_ipsec/src/sys/kern/kern_descrip.c#7 integrate
.. //depot/projects/fast_ipsec/src/sys/kern/kern_mac.c#4 integrate
.. //depot/projects/fast_ipsec/src/sys/kern/kern_uuid.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/kern/subr_autoconf.c#2 integrate
.. //depot/projects/fast_ipsec/src/sys/kern/uipc_socket.c#8 integrate
.. //depot/projects/fast_ipsec/src/sys/kern/uipc_syscalls.c#9 integrate
.. //depot/projects/fast_ipsec/src/sys/kern/uipc_usrreq.c#9 integrate
.. //depot/projects/fast_ipsec/src/sys/kern/vfs_bio.c#8 integrate
.. //depot/projects/fast_ipsec/src/sys/kern/vfs_subr.c#14 integrate
.. //depot/projects/fast_ipsec/src/sys/kern/vfs_syscalls.c#8 integrate
.. //depot/projects/fast_ipsec/src/sys/modules/sound/driver/Makefile#4 integrate
.. //depot/projects/fast_ipsec/src/sys/modules/sound/driver/emu10kx/Makefile#1 branch
.. //depot/projects/fast_ipsec/src/sys/net/raw_usrreq.c#5 integrate
.. //depot/projects/fast_ipsec/src/sys/net/rtsock.c#6 integrate
.. //depot/projects/fast_ipsec/src/sys/net80211/ieee80211_input.c#6 integrate
.. //depot/projects/fast_ipsec/src/sys/net80211/ieee80211_ioctl.c#6 integrate
.. //depot/projects/fast_ipsec/src/sys/netatalk/ddp_usrreq.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/netatm/atm_aal5.c#4 integrate
.. //depot/projects/fast_ipsec/src/sys/netatm/atm_usrreq.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/netgraph/bluetooth/include/ng_btsocket_hci_raw.h#3 integrate
.. //depot/projects/fast_ipsec/src/sys/netgraph/bluetooth/include/ng_btsocket_l2cap.h#4 integrate
.. //depot/projects/fast_ipsec/src/sys/netgraph/bluetooth/include/ng_btsocket_rfcomm.h#4 integrate
.. //depot/projects/fast_ipsec/src/sys/netgraph/bluetooth/socket/ng_btsocket.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/netgraph/bluetooth/socket/ng_btsocket_hci_raw.c#4 integrate
.. //depot/projects/fast_ipsec/src/sys/netgraph/bluetooth/socket/ng_btsocket_l2cap.c#4 integrate
.. //depot/projects/fast_ipsec/src/sys/netgraph/bluetooth/socket/ng_btsocket_l2cap_raw.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/netgraph/bluetooth/socket/ng_btsocket_rfcomm.c#4 integrate
.. //depot/projects/fast_ipsec/src/sys/netgraph/ng_socket.c#8 integrate
.. //depot/projects/fast_ipsec/src/sys/netinet/in_pcb.c#8 integrate
.. //depot/projects/fast_ipsec/src/sys/netinet/in_pcb.h#6 integrate
.. //depot/projects/fast_ipsec/src/sys/netinet/ip_divert.c#6 integrate
.. //depot/projects/fast_ipsec/src/sys/netinet/raw_ip.c#7 integrate
.. //depot/projects/fast_ipsec/src/sys/netinet/tcp_subr.c#8 integrate
.. //depot/projects/fast_ipsec/src/sys/netinet/tcp_usrreq.c#9 integrate
.. //depot/projects/fast_ipsec/src/sys/netinet/udp_usrreq.c#10 integrate
.. //depot/projects/fast_ipsec/src/sys/netinet6/README#3 delete
.. //depot/projects/fast_ipsec/src/sys/netinet6/in6_pcb.c#6 integrate
.. //depot/projects/fast_ipsec/src/sys/netinet6/raw_ip6.c#7 integrate
.. //depot/projects/fast_ipsec/src/sys/netinet6/udp6_usrreq.c#7 integrate
.. //depot/projects/fast_ipsec/src/sys/netipsec/keysock.c#6 integrate
.. //depot/projects/fast_ipsec/src/sys/netipx/ipx_usrreq.c#4 integrate
.. //depot/projects/fast_ipsec/src/sys/netipx/spx_usrreq.c#5 integrate
.. //depot/projects/fast_ipsec/src/sys/netkey/keysock.c#5 integrate
.. //depot/projects/fast_ipsec/src/sys/netnatm/natm.c#5 integrate
.. //depot/projects/fast_ipsec/src/sys/netsmb/smb_conn.c#3 integrate
.. //depot/projects/fast_ipsec/src/sys/security/mac/mac_vfs.c#4 integrate
.. //depot/projects/fast_ipsec/src/sys/sparc64/include/pmap.h#4 integrate
.. //depot/projects/fast_ipsec/src/sys/sys/libkern.h#3 integrate
.. //depot/projects/fast_ipsec/src/sys/sys/mbuf.h#6 integrate
.. //depot/projects/fast_ipsec/src/sys/sys/param.h#9 integrate
.. //depot/projects/fast_ipsec/src/sys/sys/sysctl.h#5 integrate
.. //depot/projects/fast_ipsec/src/sys/ufs/ffs/ffs_alloc.c#5 integrate
.. //depot/projects/fast_ipsec/src/sys/vm/pmap.h#6 integrate
.. //depot/projects/fast_ipsec/src/sys/vm/uma_core.c#6 integrate
.. //depot/projects/fast_ipsec/src/sys/vm/vm.h#2 integrate
.. //depot/projects/fast_ipsec/src/sys/vm/vm_fault.c#7 integrate
.. //depot/projects/fast_ipsec/src/sys/vm/vm_map.c#9 integrate
.. //depot/projects/fast_ipsec/src/sys/vm/vm_meter.c#4 integrate
.. //depot/projects/fast_ipsec/src/sys/vm/vm_object.c#5 integrate
.. //depot/projects/fast_ipsec/src/sys/vm/vm_object.h#3 integrate
.. //depot/projects/fast_ipsec/src/sys/vm/vm_page.c#10 integrate

Differences ...

==== //depot/projects/fast_ipsec/src/sys/amd64/amd64/pmap.c#13 (text+ko) ====

@@ -77,7 +77,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.565 2006/07/06 06:17:08 alc Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.567 2006/07/20 17:48:40 alc Exp $");
 
 /*
  *	Manages physical address maps.
@@ -207,7 +207,6 @@
 
 static void	free_pv_entry(pmap_t pmap, pv_entry_t pv);
 static pv_entry_t get_pv_entry(pmap_t locked_pmap, int try);
-static void	pmap_clear_write(vm_page_t m);
 
 static vm_page_t pmap_enter_quick_locked(pmap_t pmap, vm_offset_t va,
     vm_page_t m, vm_prot_t prot, vm_page_t mpte);
@@ -1627,6 +1626,7 @@
 	int idx, field, bit;
 
 	mtx_assert(&vm_page_queue_mtx, MA_OWNED);
+	PMAP_LOCK_ASSERT(pmap, MA_OWNED);
 	PV_STAT(pv_entry_frees++);
 	PV_STAT(pv_entry_spare++);
 	pv_entry_count--;
@@ -2015,8 +2015,8 @@
 		TAILQ_REMOVE(&m->md.pv_list, pv, pv_list);
 		m->md.pv_list_count--;
 		pmap_unuse_pt(pmap, pv->pv_va, ptepde);
+		free_pv_entry(pmap, pv);
 		PMAP_UNLOCK(pmap);
-		free_pv_entry(pmap, pv);
 	}
 	vm_page_flag_clear(m, PG_WRITEABLE);
 }
@@ -2971,7 +2971,7 @@
 /*
  * Clear the write and modified bits in each of the given page's mappings.
  */
-static __inline void
+void
 pmap_clear_write(vm_page_t m)
 {
 	pv_entry_t pv;

==== //depot/projects/fast_ipsec/src/sys/arm/arm/in_cksum.c#4 (text+ko) ====

@@ -38,7 +38,7 @@
  */
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
-__FBSDID("$FreeBSD: src/sys/arm/arm/in_cksum.c,v 1.6 2006/03/09 23:33:59 cognet Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/in_cksum.c,v 1.7 2006/07/18 00:07:05 cognet Exp $");
 
 #include <sys/param.h>
 #include <sys/mbuf.h>
@@ -89,6 +89,17 @@
 	return (sum);
 }
 
+static
+uint64_t _do_cksum(void *addr, int len)
+{
+	uint64_t sum;
+	union q_util q_util;
+
+	sum = do_cksum(addr, len);
+	REDUCE32;
+	return (sum);
+}
+
 u_short
 in_cksum_skip(struct mbuf *m, int len, int skip)
 {
@@ -120,9 +131,9 @@
 			mlen = len;
 
 		if ((clen ^ (int) addr) & 1)
-		    sum += do_cksum(addr, mlen) << 8;
+		    sum += _do_cksum(addr, mlen) << 8;
 		else
-		    sum += do_cksum(addr, mlen);
+		    sum += _do_cksum(addr, mlen);
 
 		clen += mlen;
 		len -= mlen;

==== //depot/projects/fast_ipsec/src/sys/arm/arm/pmap.c#10 (text+ko) ====

@@ -147,7 +147,7 @@
 #include "opt_vm.h"
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/pmap.c,v 1.65 2006/07/11 11:22:06 cognet Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/pmap.c,v 1.66 2006/07/20 23:26:22 alc Exp $");
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/kernel.h>
@@ -4461,6 +4461,21 @@
 
 
 /*
+ * Clear the write and modified bits in each of the given page's mappings.
+ */
+void
+pmap_clear_write(vm_page_t m)
+{
+
+	if (m->md.pvh_attrs & PVF_WRITE)
+		pmap_clearbit(m, PVF_WRITE);
+	else
+		KASSERT((m->flags & PG_WRITEABLE) == 0,
+		    ("pmap_clear_write: page %p has PG_WRITEABLE set", m));
+}
+
+
+/*
  * perform the pmap work for mincore
  */
 int

==== //depot/projects/fast_ipsec/src/sys/arm/arm/vm_machdep.c#7 (text+ko) ====

@@ -41,7 +41,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/arm/vm_machdep.c,v 1.24 2006/06/05 23:42:47 cognet Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/arm/vm_machdep.c,v 1.26 2006/07/15 23:15:31 cognet Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -512,7 +512,7 @@
 	void *ret;
 	struct arm_small_page *sp, *tmp;
 	TAILQ_HEAD(,arm_small_page) *head;
-	static int in_alloc;
+	static struct thread *in_alloc;
 	static int in_sleep;
 	int should_wakeup = 0;
 	
@@ -532,12 +532,13 @@
 
 	if (!sp) {
 		/* No more free pages, need to alloc more. */
-		if (!(wait & M_WAITOK)) {
+		if (!(wait & M_WAITOK) ||
+		    in_alloc == curthread) {
 			mtx_unlock(&smallalloc_mtx);
 			*flags = UMA_SLAB_KMEM;
 			return ((void *)kmem_malloc(kmem_map, bytes, M_NOWAIT));
 		}
-		if (in_alloc) {
+		if (in_alloc != NULL) {
 			/* Somebody else is already doing the allocation. */
 			in_sleep++;
 			msleep(&in_alloc, &smallalloc_mtx, PWAIT, 
@@ -545,14 +546,14 @@
 			in_sleep--;
 			goto retry;
 		}
-		in_alloc = 1;
+		in_alloc = curthread;
 		mtx_unlock(&smallalloc_mtx);
 		/* Try to alloc 1MB of contiguous memory. */
 		ret = arm_uma_do_alloc(&sp, bytes, zone == l2zone ?
 		    SECTION_PT : SECTION_CACHE);
 		mtx_lock(&smallalloc_mtx);
-		in_alloc = 0;
-		if (in_sleep)
+		in_alloc = NULL;
+		if (in_sleep > 0)
 			should_wakeup = 1;
 		if (sp) {
 			for (int i = 0; i < (0x100000 / PAGE_SIZE) - 1;

==== //depot/projects/fast_ipsec/src/sys/arm/at91/if_ate.c#6 (text) ====

@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/at91/if_ate.c,v 1.8 2006/06/17 23:24:35 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/at91/if_ate.c,v 1.9 2006/07/17 21:36:08 cognet Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -764,7 +764,7 @@
 		}
 		mdefrag = m_defrag(m, M_DONTWAIT);
 		if (mdefrag == NULL) {
-			m_freem(m);
+			IFQ_DRV_PREPEND(&ifp->if_snd, m);
 			return;
 		}
 		m = mdefrag;

==== //depot/projects/fast_ipsec/src/sys/arm/at91/kb920x_machdep.c#5 (text) ====

@@ -48,7 +48,7 @@
 #include "opt_at91.h"
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/at91/kb920x_machdep.c,v 1.11 2006/07/15 00:09:53 cognet Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/at91/kb920x_machdep.c,v 1.12 2006/07/17 21:20:00 cognet Exp $");
 
 #define _ARM32_BUS_DMA_PRIVATE
 #include <sys/param.h>
@@ -234,7 +234,7 @@
 	/* PIOA's B periph: Turn USART 3's TX/RX pins */
 	at91_pio_use_periph_b(AT91RM92_PIOA_BASE, AT91C_PA6_RXD3, 0);
 	at91_pio_use_periph_b(AT91RM92_PIOA_BASE, AT91C_PA5_TXD3, 1);
-#if AT91_TSC
+#ifdef AT91_TSC
 	/* We're using TC0's A1 and A2 input */
 	at91_pio_use_periph_b(AT91RM92_PIOA_BASE,
 	    AT91C_PA19_TIOA1 | AT91C_PA21_TIOA2, 0);
@@ -244,7 +244,7 @@
 	at91_pio_use_periph_a(AT91RM92_PIOB_BASE, AT91C_PB20_TXD1, 1);
 
 	/* Pin assignment */
-#if AT91_TSC
+#ifdef AT91_TSC
 	/* Assert PA24 low -- talk to rubidium */
 	at91_pio_use_gpio(AT91RM92_PIOA_BASE, AT91C_PIO_PA24);
 	at91_pio_gpio_output(AT91RM92_PIOA_BASE, AT91C_PIO_PA24, 0);

==== //depot/projects/fast_ipsec/src/sys/arm/at91/uart_dev_at91usart.c#6 (text) ====

@@ -26,7 +26,9 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/at91/uart_dev_at91usart.c,v 1.8 2006/07/14 21:33:04 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/at91/uart_dev_at91usart.c,v 1.9 2006/07/20 21:03:43 cognet Exp $");
+
+#include "opt_comconsole.h"
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -492,6 +494,19 @@
 	return (at91_usart_param(&sc->sc_bas, baudrate, databits, stopbits,
 	    parity));
 }
+
+static __inline void
+at91_rx_put(struct uart_softc *sc, int key)
+{
+#if defined(KDB) && defined(ALT_BREAK_TO_DEBUGGER)
+	if (sc->sc_sysdev != NULL && sc->sc_sysdev->type == UART_DEV_CONSOLE) {
+		if (kdb_alt_break(key, &sc->sc_altbrk))
+			kdb_enter("Break sequence to console");
+	}
+#endif
+	uart_rx_put(sc, key);	
+}
+
 static int
 at91_usart_bus_ipend(struct uart_softc *sc)
 {
@@ -534,9 +549,9 @@
 		bus_dmamap_sync(atsc->dmatag, atsc->pong->map,
 		    BUS_DMASYNC_POSTREAD);
 		for (i = 0; i < sc->sc_rxfifosz; i++)
-			uart_rx_put(sc, atsc->ping->buffer[i]);
+			at91_rx_put(sc, atsc->ping->buffer[i]);
 		for (i = 0; i < sc->sc_rxfifosz; i++)
-			uart_rx_put(sc, atsc->pong->buffer[i]);
+			at91_rx_put(sc, atsc->pong->buffer[i]);
 		uart_rx_put(sc, UART_STAT_OVERRUN);
 		csr &= ~(USART_CSR_ENDRX | USART_CSR_TIMEOUT);
 		WR4(&sc->sc_bas, PDC_RPR, atsc->ping->pa);
@@ -554,7 +569,7 @@
 		bus_dmamap_sync(atsc->dmatag, atsc->ping->map,
 		    BUS_DMASYNC_POSTREAD);
 		for (i = 0; i < sc->sc_rxfifosz; i++)
-			uart_rx_put(sc, atsc->ping->buffer[i]);
+			at91_rx_put(sc, atsc->ping->buffer[i]);
 		p = atsc->ping;
 		atsc->ping = atsc->pong;
 		atsc->pong = p;
@@ -574,7 +589,7 @@
 		    BUS_DMASYNC_POSTREAD);
 		len = sc->sc_rxfifosz - RD4(&sc->sc_bas, PDC_RCR);
 		for (i = 0; i < len; i++)
-			uart_rx_put(sc, atsc->ping->buffer[i]);
+			at91_rx_put(sc, atsc->ping->buffer[i]);
 		WR4(&sc->sc_bas, PDC_RPR, atsc->ping->pa);
 		WR4(&sc->sc_bas, PDC_RCR, sc->sc_rxfifosz);
 		WR4(&sc->sc_bas, USART_CR, USART_CR_STTTO);
@@ -584,7 +599,7 @@
 	if (!(atsc->flags & HAS_TIMEOUT) && (csr & USART_CSR_RXRDY)) {
 		// We have another charater in a device that doesn't support
 		// timeouts, so we do it one character at a time.
-		uart_rx_put(sc, RD4(&sc->sc_bas, USART_RHR) & 0xff);
+		at91_rx_put(sc, RD4(&sc->sc_bas, USART_RHR) & 0xff);
 		ipend |= SER_INT_RXREADY;
 	}
 

==== //depot/projects/fast_ipsec/src/sys/arm/conf/KB920X#4 (text) ====

@@ -16,7 +16,7 @@
 # If you are in doubt as to the purpose or necessity of a line, check first 
 # in NOTES.
 #
-# $FreeBSD: src/sys/arm/conf/KB920X,v 1.8 2006/07/14 15:20:31 imp Exp $
+# $FreeBSD: src/sys/arm/conf/KB920X,v 1.9 2006/07/17 21:17:20 cognet Exp $
 
 machine		arm
 ident		KB920X
@@ -81,3 +81,4 @@
 device		md
 # device	at91_twi		# TWI: Two Wire Interface
 device		at91_spi		# SPI:
+device		spibus

==== //depot/projects/fast_ipsec/src/sys/compat/linux/linux_misc.c#7 (text+ko) ====

@@ -28,7 +28,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/linux/linux_misc.c,v 1.179 2006/06/23 18:49:38 netchild Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/linux/linux_misc.c,v 1.180 2006/07/21 20:22:13 jhb Exp $");
 
 #include "opt_compat.h"
 #include "opt_mac.h"
@@ -229,7 +229,7 @@
 	unsigned long bss_size;
 	char *library;
 	int error;
-	int locked;
+	int locked, vfslocked;
 
 	LCONVPATHEXIST(td, args->library, &library);
 
@@ -239,34 +239,26 @@
 #endif
 
 	a_out = NULL;
+	vfslocked = 0;
 	locked = 0;
 	vp = NULL;
 
-	/*
-	 * XXX: This code should make use of vn_open(), rather than doing
-	 * all this stuff itself.
-	 */
-	NDINIT(&ni, LOOKUP, ISOPEN|FOLLOW|LOCKLEAF, UIO_SYSSPACE, library, td);
+	NDINIT(&ni, LOOKUP, ISOPEN | FOLLOW | LOCKLEAF | MPSAFE | AUDITVNODE1,
+	    UIO_SYSSPACE, library, td);
 	error = namei(&ni);
 	LFREEPATH(library);
 	if (error)
 		goto cleanup;
 
 	vp = ni.ni_vp;
-	/*
-	 * XXX - This looks like a bogus check. A LOCKLEAF namei should not
-	 * succeed without returning a vnode.
-	 */
-	if (vp == NULL) {
-		error = ENOEXEC;	/* ?? */
-		goto cleanup;
-	}
+	vfslocked = NDHASGIANT(&ni);
 	NDFREE(&ni, NDF_ONLY_PNBUF);
 
 	/*
 	 * From here on down, we have a locked vnode that must be unlocked.
+	 * XXX: The code below largely duplicates exec_check_permissions().
 	 */
-	locked++;
+	locked = 1;
 
 	/* Writable? */
 	if (vp->v_writecount) {
@@ -281,6 +273,7 @@
 
 	if ((vp->v_mount->mnt_flag & MNT_NOEXEC) ||
 	    ((attr.va_mode & 0111) == 0) || (attr.va_type != VREG)) {
+		/* EACCESS is what exec(2) returns. */
 		error = ENOEXEC;
 		goto cleanup;
 	}
@@ -299,6 +292,8 @@
 	/*
 	 * XXX: This should use vn_open() so that it is properly authorized,
 	 * and to reduce code redundancy all over the place here.
+	 * XXX: Not really, it duplicates far more of exec_check_permissions()
+	 * than vn_open().
 	 */
 #ifdef MAC
 	error = mac_check_vnode_open(td->td_ucred, vp, FREAD);
@@ -312,12 +307,6 @@
 	/* Pull in executable header into kernel_map */
 	error = vm_mmap(kernel_map, (vm_offset_t *)&a_out, PAGE_SIZE,
 	    VM_PROT_READ, VM_PROT_READ, 0, OBJT_VNODE, vp, 0);
-	/*
-	 * Lock no longer needed
-	 */
-	locked = 0;
-	VOP_UNLOCK(vp, 0, td);
-
 	if (error)
 		goto cleanup;
 
@@ -372,11 +361,21 @@
 	}
 	PROC_UNLOCK(td->td_proc);
 
-	mp_fixme("Unlocked vflags access.");
-	/* prevent more writers */
+	/*
+	 * Prevent more writers.
+	 * XXX: Note that if any of the VM operations fail below we don't
+	 * clear this flag.
+	 */
 	vp->v_vflag |= VV_TEXT;
 
 	/*
+	 * Lock no longer needed
+	 */
+	locked = 0;
+	VOP_UNLOCK(vp, 0, td);
+	VFS_UNLOCK_GIANT(vfslocked);
+
+	/*
 	 * Check if file_offset page aligned. Currently we cannot handle
 	 * misalinged file offsets, and so we read in the entire image
 	 * (what a waste).
@@ -453,8 +452,10 @@
 
 cleanup:
 	/* Unlock vnode if needed */
-	if (locked)
+	if (locked) {
 		VOP_UNLOCK(vp, 0, td);
+		VFS_UNLOCK_GIANT(vfslocked);
+	}
 
 	/* Release the kernel mapping. */
 	if (a_out)

==== //depot/projects/fast_ipsec/src/sys/compat/linux/linux_socket.c#7 (text+ko) ====

@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/linux/linux_socket.c,v 1.69 2006/07/08 20:03:38 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/linux/linux_socket.c,v 1.70 2006/07/19 18:28:52 jhb Exp $");
 
 /* XXX we use functions that might not exist. */
 #include "opt_compat.h"
@@ -609,7 +609,9 @@
 	if (error)
 		return (error);
 
-	return (kern_bind(td, linux_args.s, sa));
+	error = kern_bind(td, linux_args.s, sa);
+	free(sa, M_SONAME);
+	return (error);
 }
 
 struct linux_connect_args {
@@ -638,6 +640,7 @@
 		return (error);
 
 	error = kern_connect(td, linux_args.s, sa);
+	free(sa, M_SONAME);
 	if (error != EISCONN)
 		return (error);
 

==== //depot/projects/fast_ipsec/src/sys/compat/svr4/svr4_misc.c#6 (text+ko) ====

@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/compat/svr4/svr4_misc.c,v 1.86 2006/07/11 20:52:07 jhb Exp $");
+__FBSDID("$FreeBSD: src/sys/compat/svr4/svr4_misc.c,v 1.89 2006/07/21 20:28:56 jhb Exp $");
 
 #include "opt_mac.h"
 
@@ -104,7 +104,7 @@
     svr4_mode_t, svr4_dev_t);
 
 static __inline clock_t timeval_to_clock_t(struct timeval *);
-static int svr4_setinfo	(struct proc *, int, svr4_siginfo_t *);
+static int svr4_setinfo	(pid_t , struct rusage *, int, svr4_siginfo_t *);
 
 struct svr4_hrtcntl_args;
 static int svr4_hrtcntl	(struct thread *, struct svr4_hrtcntl_args *,
@@ -606,34 +606,36 @@
 	struct svr4_sys_fchroot_args *uap;
 {
 	struct filedesc	*fdp = td->td_proc->p_fd;
-	struct vnode	*vp, *vpold;
+	struct vnode	*vp;
 	struct file	*fp;
-	int		 error;
+	int		 error, vfslocked;
 
 	if ((error = suser(td)) != 0)
 		return error;
 	if ((error = getvnode(fdp, uap->fd, &fp)) != 0)
 		return error;
 	vp = fp->f_vnode;
+	VREF(vp);
+	fdrop(fp, td);
+	vfslocked = VFS_LOCK_GIANT(vp->v_mount);
 	vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td);
-	if (vp->v_type != VDIR)
-		error = ENOTDIR;
-	else
-		error = VOP_ACCESS(vp, VEXEC, td->td_ucred, td);
+	error = change_dir(vp, td);
+	if (error)
+		goto fail;
+#ifdef MAC
+	error = mac_check_vnode_chroot(td->td_ucred, vp);
+	if (error)
+		goto fail;
+#endif
 	VOP_UNLOCK(vp, 0, td);
-	if (error) {
-		fdrop(fp, td);
-		return error;
-	}
-	VREF(vp);
-	FILEDESC_LOCK_FAST(fdp);
-	vpold = fdp->fd_rdir;
-	fdp->fd_rdir = vp;
-	FILEDESC_UNLOCK_FAST(fdp);
-	if (vpold != NULL)
-		vrele(vpold);
-	fdrop(fp, td);
-	return 0;
+	error = change_root(vp, td);
+	vrele(vp);
+	VFS_UNLOCK_GIANT(vfslocked);
+	return (error);
+fail:
+	vput(vp);
+	VFS_UNLOCK_GIANT(vfslocked);
+	return (error);
 }
 
 
@@ -1083,12 +1085,12 @@
 
 
 static int
-svr4_setinfo(p, st, s)
-	struct proc *p;
+svr4_setinfo(pid, ru, st, s)
+	pid_t pid;
+	struct rusage *ru;
 	int st;
 	svr4_siginfo_t *s;
 {
-	struct timeval utime, stime;
 	svr4_siginfo_t i;
 	int sig;
 
@@ -1097,13 +1099,10 @@
 	i.svr4_si_signo = SVR4_SIGCHLD;
 	i.svr4_si_errno = 0;	/* XXX? */
 
-	if (p) {
-		i.svr4_si_pid = p->p_pid;
-		PROC_LOCK(p);
-		calcru(p, &utime, &stime);
-		PROC_UNLOCK(p);
-		i.svr4_si_stime = stime.tv_sec;
-		i.svr4_si_utime = utime.tv_sec;
+	i.svr4_si_pid = pid;
+	if (ru) {
+		i.svr4_si_stime = ru->ru_stime.tv_sec;
+		i.svr4_si_utime = ru->ru_utime.tv_sec;
 	}
 
 	if (WIFEXITED(st)) {
@@ -1142,188 +1141,185 @@
 	struct thread *td;
 	struct svr4_sys_waitsys_args *uap;
 {
-	int nfound;
+	struct rusage ru;
+	pid_t pid;
+	int nfound, status;
 	int error, *retval = td->td_retval;
-	struct proc *p, *q, *t;
+	struct proc *p, *q;
+
+	DPRINTF(("waitsys(%d, %d, %p, %x)\n", 
+	         uap->grp, uap->id,
+		 uap->info, uap->options));
 
-	p = td->td_proc;
+	q = td->td_proc;
 	switch (uap->grp) {
-	case SVR4_P_PID:	
+	case SVR4_P_PID:
+		pid = uap->id;
 		break;
 
 	case SVR4_P_PGID:
-		PROC_LOCK(p);
-		uap->id = -p->p_pgid;
-		PROC_UNLOCK(p);
+		PROC_LOCK(q);
+		pid = -q->p_pgid;
+		PROC_UNLOCK(q);
 		break;
 
 	case SVR4_P_ALL:
-		uap->id = WAIT_ANY;
+		pid = WAIT_ANY;
 		break;
 
 	default:
 		return EINVAL;
 	}
 
-	DPRINTF(("waitsys(%d, %d, %p, %x)\n", 
-	         uap->grp, uap->id,
-		 uap->info, uap->options));
+	/* Hand off the easy cases to kern_wait(). */
+	if (!(uap->options & (SVR4_WNOWAIT)) &&
+	    (uap->options & (SVR4_WEXITED | SVR4_WTRAPPED))) {
+		int options;
+
+		options = 0;
+		if (uap->options & SVR4_WSTOPPED)
+			options |= WUNTRACED;
+		if (uap->options & SVR4_WCONTINUED)
+			options |= WCONTINUED;
+		if (uap->options & SVR4_WNOHANG)
+			options |= WNOHANG;
+
+		error = kern_wait(td, pid, &status, options, &ru);
+		if (error)
+			return (error);
+		if (uap->options & SVR4_WNOHANG && *retval == 0)
+			error = svr4_setinfo(*retval, NULL, 0, uap->info);
+		else
+			error = svr4_setinfo(*retval, &ru, status, uap->info);
+		*retval = 0;
+		return (error);
+	}
 
+	/*
+	 * Ok, handle the weird cases.  Either WNOWAIT is set (meaning we
+	 * just want to see if there is a process to harvest, we dont'
+	 * want to actually harvest it), or WEXIT and WTRAPPED are clear
+	 * meaning we want to ignore zombies.  Either way, we don't have
+	 * to handle harvesting zombies here.  We do have to duplicate the
+	 * other portions of kern_wait() though, especially for the
+	 * WCONTINUED and WSTOPPED.
+	 */
 loop:
 	nfound = 0;
 	sx_slock(&proctree_lock);
-	LIST_FOREACH(q, &p->p_children, p_sibling) {
-		PROC_LOCK(q);
-		if (uap->id != WAIT_ANY &&
-		    q->p_pid != uap->id &&
-		    q->p_pgid != -uap->id) {
-			PROC_UNLOCK(q);
-			DPRINTF(("pid %d pgid %d != %d\n", q->p_pid,
-				 q->p_pgid, uap->id));
+	LIST_FOREACH(p, &q->p_children, p_sibling) {
+		PROC_LOCK(p);
+		if (pid != WAIT_ANY &&
+		    p->p_pid != pid && p->p_pgid != -pid) {
+			PROC_UNLOCK(p);
+			DPRINTF(("pid %d pgid %d != %d\n", p->p_pid,
+				 p->p_pgid, pid));
+			continue;
+		}
+		if (p_canwait(td, p)) {
+			PROC_UNLOCK(p);
 			continue;
 		}
+
 		nfound++;
-		if ((q->p_state == PRS_ZOMBIE) && 
+
+		/*
+		 * See if we have a zombie.  If so, WNOWAIT should be set,
+		 * as otherwise we should have called kern_wait() up above.
+		 */
+		if ((p->p_state == PRS_ZOMBIE) && 
 		    ((uap->options & (SVR4_WEXITED|SVR4_WTRAPPED)))) {
-			PROC_UNLOCK(q);
+			KASSERT(uap->options & SVR4_WNOWAIT,
+			    ("WNOWAIT is clear"));
+
+			/* Found a zombie, so cache info in local variables. */
+			pid = p->p_pid;
+			status = p->p_xstat;
+			ru = *p->p_ru;
+			calcru(p, &ru.ru_utime, &ru.ru_stime);
+			PROC_UNLOCK(p);
 			sx_sunlock(&proctree_lock);
+
+			/* Copy the info out to userland. */
 			*retval = 0;
-			DPRINTF(("found %d\n", q->p_pid));
-			error = svr4_setinfo(q, q->p_xstat, uap->info);
-			if (error != 0)
-				return error;
+			DPRINTF(("found %d\n", pid));
+			return (svr4_setinfo(pid, &ru, status, uap->info));
+		}
 
+		/*
+		 * See if we have a stopped or continued process.
+		 * XXX: This duplicates the same code in kern_wait().
+		 */
+		mtx_lock_spin(&sched_lock);
+		if ((p->p_flag & P_STOPPED_SIG) &&
+		    (p->p_suspcount == p->p_numthreads) &&
+		    (p->p_flag & P_WAITED) == 0 &&
+		    (p->p_flag & P_TRACED || uap->options & SVR4_WSTOPPED)) {
+			mtx_unlock_spin(&sched_lock);
+		        if (((uap->options & SVR4_WNOWAIT)) == 0)
+				p->p_flag |= P_WAITED;
+			sx_sunlock(&proctree_lock);
+			pid = p->p_pid;
+			status = W_STOPCODE(p->p_xstat);
+			ru = *p->p_ru;
+			calcru(p, &ru.ru_utime, &ru.ru_stime);
+			PROC_UNLOCK(p);
 
-		        if ((uap->options & SVR4_WNOWAIT)) {
-				DPRINTF(("Don't wait\n"));
-				return 0;
+		        if (((uap->options & SVR4_WNOWAIT)) == 0) {
+				PROC_LOCK(q);
+				sigqueue_take(p->p_ksi);
+				PROC_UNLOCK(q);
 			}
 
-			/*
-			 * If we got the child via ptrace(2) or procfs, and
-			 * the parent is different (meaning the process was
-			 * attached, rather than run as a child), then we need
-			 * to give it back to the old parent, and send the
-			 * parent a SIGCHLD.  The rest of the cleanup will be
-			 * done when the old parent waits on the child.
-			 */
-			sx_xlock(&proctree_lock);
-			PROC_LOCK(q);
-			if (q->p_flag & P_TRACED) {
-				if (q->p_oppid != q->p_pptr->p_pid) {
-					PROC_UNLOCK(q);
-					t = pfind(q->p_oppid);
-					if (t == NULL) {
-						t = initproc;
-						PROC_LOCK(initproc);
-					}
-					PROC_LOCK(q);
-					proc_reparent(q, t);
- 					q->p_oppid = 0;
-					q->p_flag &= ~(P_TRACED | P_WAITED);
-					PROC_UNLOCK(q);
-					psignal(t, SIGCHLD);
-					wakeup(t);
-					PROC_UNLOCK(t);
-					sx_xunlock(&proctree_lock);
-					return 0;
-				}
+			*retval = 0;
+			DPRINTF(("jobcontrol %d\n", pid));
+			return (svr4_setinfo(pid, &ru, status, uap->info));
+		}
+		mtx_unlock_spin(&sched_lock);
+		if (uap->options & SVR4_WCONTINUED &&
+		    (p->p_flag & P_CONTINUED)) {
+			sx_sunlock(&proctree_lock);
+		        if (((uap->options & SVR4_WNOWAIT)) == 0)
+				p->p_flag &= ~P_CONTINUED;
+			pid = p->p_pid;
+			ru = *p->p_ru;
+			status = SIGCONT;
+			calcru(p, &ru.ru_utime, &ru.ru_stime);
+			PROC_UNLOCK(p);
+
+		        if (((uap->options & SVR4_WNOWAIT)) == 0) {
+				PROC_LOCK(q);
+				sigqueue_take(p->p_ksi);
+				PROC_UNLOCK(q);
 			}
-			PROC_UNLOCK(q);
-			sx_xunlock(&proctree_lock);
-			q->p_xstat = 0;
-			ruadd(&p->p_stats->p_cru, &p->p_crux, q->p_ru,
-			    &q->p_rux);
-			FREE(q->p_ru, M_ZOMBIE);
-			q->p_ru = NULL;
-
-			/*
-			 * Decrement the count of procs running with this uid.
-			 */
-			(void)chgproccnt(q->p_ucred->cr_ruidinfo, -1, 0);
 
-			/*
-			 * Release reference to text vnode.
-			 */
-			if (q->p_textvp)
-				vrele(q->p_textvp);
-
-			/*
-			 * Free up credentials.
-			 */
-			crfree(q->p_ucred);
-			q->p_ucred = NULL;
-
-			/*
-			 * Remove unused arguments
-			 */
-			pargs_drop(q->p_args);
-			PROC_UNLOCK(q);
-
-			/*
-			 * Finally finished with old proc entry.
-			 * Unlink it from its process group and free it.
-			 */
-			sx_xlock(&proctree_lock);
-			leavepgrp(q);
-
-			sx_xlock(&allproc_lock);
-			LIST_REMOVE(q, p_list); /* off zombproc */
-			sx_xunlock(&allproc_lock);
-
-			LIST_REMOVE(q, p_sibling);
-			sx_xunlock(&proctree_lock);
-
-			PROC_LOCK(q);
-			sigacts_free(q->p_sigacts);
-			q->p_sigacts = NULL;

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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200607220328.k6M3SPPe074773>