svn commit: r247139 - in user/attilio/vmobj-rwlock: contrib/binutils/opcodes sbin/devd share/man/man4 sys/conf sys/dev/ath sys/dev/cxgbe sys/dev/cxgbe/common sys/dev/firewire sys/dev/mxge sys/fs/nf...

Attilio Rao attilio at FreeBSD.org
Thu Feb 21 21:59:39 UTC 2013


Author: attilio
Date: Thu Feb 21 21:59:35 2013
New Revision: 247139
URL: http://svnweb.freebsd.org/changeset/base/247139

Log:
  MFC

Deleted:
  user/attilio/vmobj-rwlock/sys/dev/mxge/mxge_lro.c
Modified:
  user/attilio/vmobj-rwlock/contrib/binutils/opcodes/i386-opc.h
  user/attilio/vmobj-rwlock/sbin/devd/devd.conf.5
  user/attilio/vmobj-rwlock/share/man/man4/carp.4
  user/attilio/vmobj-rwlock/sys/conf/files
  user/attilio/vmobj-rwlock/sys/dev/ath/if_ath.c
  user/attilio/vmobj-rwlock/sys/dev/ath/if_ath_tx.c
  user/attilio/vmobj-rwlock/sys/dev/cxgbe/common/t4_hw.h
  user/attilio/vmobj-rwlock/sys/dev/cxgbe/t4_main.c
  user/attilio/vmobj-rwlock/sys/dev/firewire/sbp.c
  user/attilio/vmobj-rwlock/sys/dev/mxge/if_mxge.c
  user/attilio/vmobj-rwlock/sys/dev/mxge/if_mxge_var.h
  user/attilio/vmobj-rwlock/sys/fs/nfs/nfs_commonkrpc.c
  user/attilio/vmobj-rwlock/sys/fs/nfsclient/nfs_clvfsops.c
  user/attilio/vmobj-rwlock/sys/kern/kern_sig.c
  user/attilio/vmobj-rwlock/sys/kern/subr_trap.c
  user/attilio/vmobj-rwlock/sys/kern/vfs_export.c
  user/attilio/vmobj-rwlock/sys/kern/vfs_lookup.c
  user/attilio/vmobj-rwlock/sys/modules/mxge/mxge/Makefile
  user/attilio/vmobj-rwlock/sys/netinet/tcp_lro.c
  user/attilio/vmobj-rwlock/sys/nfsclient/nfs_krpc.c
  user/attilio/vmobj-rwlock/sys/nfsclient/nfs_vfsops.c
  user/attilio/vmobj-rwlock/sys/sys/mount.h
  user/attilio/vmobj-rwlock/sys/sys/signalvar.h
  user/attilio/vmobj-rwlock/sys/sys/systm.h
  user/attilio/vmobj-rwlock/sys/tools/vnode_if.awk
  user/attilio/vmobj-rwlock/sys/x86/isa/atrtc.c
Directory Properties:
  user/attilio/vmobj-rwlock/   (props changed)
  user/attilio/vmobj-rwlock/contrib/binutils/   (props changed)
  user/attilio/vmobj-rwlock/sbin/   (props changed)
  user/attilio/vmobj-rwlock/share/man/man4/   (props changed)
  user/attilio/vmobj-rwlock/sys/   (props changed)
  user/attilio/vmobj-rwlock/sys/conf/   (props changed)

Modified: user/attilio/vmobj-rwlock/contrib/binutils/opcodes/i386-opc.h
==============================================================================
--- user/attilio/vmobj-rwlock/contrib/binutils/opcodes/i386-opc.h	Thu Feb 21 21:56:51 2013	(r247138)
+++ user/attilio/vmobj-rwlock/contrib/binutils/opcodes/i386-opc.h	Thu Feb 21 21:59:35 2013	(r247139)
@@ -73,15 +73,16 @@ typedef struct template
 #define CpuSSE4_2    0x800000	/* SSE4.2 Instructions required */
 #define CpuXSAVE    0x1000000	/* XSAVE Instructions required */
 #define CpuAES      0x2000000	/* AES Instructions required */
-#define CpuPCLMUL   0x4000000	/* Carry-less Multiplication extensions */
-
-/* SSE4.1/4.2 Instructions required */
-#define CpuSSE4	     (CpuSSE4_1|CpuSSE4_2)
 
   /* These flags are set by gas depending on the flag_code.  */
 #define Cpu64	     0x4000000   /* 64bit support required  */
 #define CpuNo64      0x8000000   /* Not supported in the 64bit mode  */
 
+#define CpuPCLMUL   0x10000000	/* Carry-less Multiplication extensions */
+
+/* SSE4.1/4.2 Instructions required */
+#define CpuSSE4	     (CpuSSE4_1|CpuSSE4_2)
+
   /* The default value for unknown CPUs - enable all features to avoid problems.  */
 #define CpuUnknownFlags (Cpu186|Cpu286|Cpu386|Cpu486|Cpu586|Cpu686 \
 	|CpuP4|CpuSledgehammer|CpuMMX|CpuMMX2|CpuSSE|CpuSSE2|CpuSSE3|CpuVMX \

Modified: user/attilio/vmobj-rwlock/sbin/devd/devd.conf.5
==============================================================================
--- user/attilio/vmobj-rwlock/sbin/devd/devd.conf.5	Thu Feb 21 21:56:51 2013	(r247138)
+++ user/attilio/vmobj-rwlock/sbin/devd/devd.conf.5	Thu Feb 21 21:59:35 2013	(r247139)
@@ -41,7 +41,7 @@
 .\" ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
 .\" SOFTWARE.
 .\"
-.Dd December 16, 2011
+.Dd February 22, 2013
 .Dt DEVD.CONF 5
 .Os
 .Sh NAME
@@ -181,9 +181,8 @@ Valid media types are:
 .Dq Li Tokenring ,
 .Dq Li FDDI ,
 .Dq Li 802.11 ,
-.Dq Li ATM ,
 and
-.Dq Li CARP .
+.Dq Li ATM .
 .It Ic subdevice Qq Ar string ;
 This is shorthand for
 .Dq Ic match Qo Li subdevice Qc Qq Ar string .
@@ -350,6 +349,7 @@ The network interface is attached to the
 The network interface is detached from the system.
 .El
 .El
+.Pp
 .It Li DEVFS
 Events related to the
 .Xr devfs 5
@@ -369,6 +369,7 @@ The
 node is destroyed.
 .El
 .El
+.Pp
 .It Li USB
 Events related to the USB subsystem.
 .Bl -tag -width ".Sy Subsystem" -compact
@@ -390,6 +391,7 @@ USB interface is attached to a device.
 USB interface is detached from a device.
 .El
 .El
+.Pp
 .It Li coretemp
 Events related to the
 .Xr coretemp 4
@@ -404,6 +406,7 @@ Notification that the CPU core has reach
 String containing the temperature of the core that has become too hot.
 .El
 .El
+.Pp
 .It Li kern
 Events related to the kernel.
 .Bl -tag -width ".Sy Subsystem" -compact

Modified: user/attilio/vmobj-rwlock/share/man/man4/carp.4
==============================================================================
--- user/attilio/vmobj-rwlock/share/man/man4/carp.4	Thu Feb 21 21:56:51 2013	(r247138)
+++ user/attilio/vmobj-rwlock/share/man/man4/carp.4	Thu Feb 21 21:59:35 2013	(r247139)
@@ -26,7 +26,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd December 25, 2012
+.Dd February 21, 2013
 .Dt CARP 4
 .Os
 .Sh NAME
@@ -281,7 +281,7 @@ status change events can be set up by us
 .Bd -literal -offset indent
 notify 0 {
 	match "system"          "CARP";
-	match "subsystem"       "[0-9]+@";
+	match "subsystem"       "[0-9]+@[0-9a-z]+";
 	match "type"            "(MASTER|BACKUP)";
 	action "/root/carpcontrol.sh $subsystem $type";
 };

Modified: user/attilio/vmobj-rwlock/sys/conf/files
==============================================================================
--- user/attilio/vmobj-rwlock/sys/conf/files	Thu Feb 21 21:56:51 2013	(r247138)
+++ user/attilio/vmobj-rwlock/sys/conf/files	Thu Feb 21 21:59:35 2013	(r247139)
@@ -1743,7 +1743,6 @@ mwlboot.fw		optional mwlfw					\
 	no-obj no-implicit-rule						\
 	clean		"mwlboot.fw"
 dev/mxge/if_mxge.c		optional mxge pci
-dev/mxge/mxge_lro.c		optional mxge pci
 dev/mxge/mxge_eth_z8e.c		optional mxge pci
 dev/mxge/mxge_ethp_z8e.c	optional mxge pci
 dev/mxge/mxge_rss_eth_z8e.c	optional mxge pci

Modified: user/attilio/vmobj-rwlock/sys/dev/ath/if_ath.c
==============================================================================
--- user/attilio/vmobj-rwlock/sys/dev/ath/if_ath.c	Thu Feb 21 21:56:51 2013	(r247138)
+++ user/attilio/vmobj-rwlock/sys/dev/ath/if_ath.c	Thu Feb 21 21:59:35 2013	(r247139)
@@ -3631,12 +3631,14 @@ ath_tx_default_comp(struct ath_softc *sc
 		st = ((bf->bf_state.bfs_txflags & HAL_TXDESC_NOACK) == 0) ?
 		    ts->ts_status : HAL_TXERR_XRETRY;
 
+#if 0
 	if (bf->bf_state.bfs_dobaw)
 		device_printf(sc->sc_dev,
 		    "%s: bf %p: seqno %d: dobaw should've been cleared!\n",
 		    __func__,
 		    bf,
 		    SEQNO(bf->bf_state.bfs_seqno));
+#endif
 	if (bf->bf_next != NULL)
 		device_printf(sc->sc_dev,
 		    "%s: bf %p: seqno %d: bf_next not NULL!\n",

Modified: user/attilio/vmobj-rwlock/sys/dev/ath/if_ath_tx.c
==============================================================================
--- user/attilio/vmobj-rwlock/sys/dev/ath/if_ath_tx.c	Thu Feb 21 21:56:51 2013	(r247138)
+++ user/attilio/vmobj-rwlock/sys/dev/ath/if_ath_tx.c	Thu Feb 21 21:59:35 2013	(r247139)
@@ -3373,6 +3373,7 @@ ath_tx_tid_drain_pkt(struct ath_softc *s
 			ath_tx_update_baw(sc, an, tid, bf);
 			bf->bf_state.bfs_dobaw = 0;
 		}
+#if 0
 		/*
 		 * This has become a non-fatal error now
 		 */
@@ -3380,6 +3381,7 @@ ath_tx_tid_drain_pkt(struct ath_softc *s
 			device_printf(sc->sc_dev,
 			    "%s: wasn't added: seqno %d\n",
 			    __func__, SEQNO(bf->bf_state.bfs_seqno));
+#endif
 	}
 	TAILQ_INSERT_TAIL(bf_cq, bf, bf_list);
 }

Modified: user/attilio/vmobj-rwlock/sys/dev/cxgbe/common/t4_hw.h
==============================================================================
--- user/attilio/vmobj-rwlock/sys/dev/cxgbe/common/t4_hw.h	Thu Feb 21 21:56:51 2013	(r247138)
+++ user/attilio/vmobj-rwlock/sys/dev/cxgbe/common/t4_hw.h	Thu Feb 21 21:59:35 2013	(r247139)
@@ -58,6 +58,7 @@ enum {
 	CIM_PIFLA_SIZE = 64,    /* # of 192-bit words in CIM PIF LA */
 	CIM_MALA_SIZE  = 64,    /* # of 160-bit words in CIM MA LA */
 	CIM_IBQ_SIZE   = 128,   /* # of 128-bit words in a CIM IBQ */
+	CIM_OBQ_SIZE   = 128,   /* # of 128-bit words in a CIM OBQ */
 	TPLA_SIZE      = 128,   /* # of 64-bit words in TP LA */
 	ULPRX_LA_SIZE  = 512,   /* # of 256-bit words in ULP_RX LA */
 };

Modified: user/attilio/vmobj-rwlock/sys/dev/cxgbe/t4_main.c
==============================================================================
--- user/attilio/vmobj-rwlock/sys/dev/cxgbe/t4_main.c	Thu Feb 21 21:56:51 2013	(r247138)
+++ user/attilio/vmobj-rwlock/sys/dev/cxgbe/t4_main.c	Thu Feb 21 21:59:35 2013	(r247139)
@@ -317,6 +317,9 @@ static int sysctl_qsize_txq(SYSCTL_HANDL
 static int sysctl_handle_t4_reg64(SYSCTL_HANDLER_ARGS);
 #ifdef SBUF_DRAIN
 static int sysctl_cctrl(SYSCTL_HANDLER_ARGS);
+static int sysctl_cim_ibq_obq(SYSCTL_HANDLER_ARGS);
+static int sysctl_cim_la(SYSCTL_HANDLER_ARGS);
+static int sysctl_cim_qcfg(SYSCTL_HANDLER_ARGS);
 static int sysctl_cpl_stats(SYSCTL_HANDLER_ARGS);
 static int sysctl_ddp_stats(SYSCTL_HANDLER_ARGS);
 static int sysctl_devlog(SYSCTL_HANDLER_ARGS);
@@ -3171,6 +3174,62 @@ t4_sysctls(struct adapter *sc)
 	    CTLTYPE_STRING | CTLFLAG_RD, sc, 0,
 	    sysctl_cctrl, "A", "congestion control");
 
+	SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "cim_ibq_tp0",
+	    CTLTYPE_STRING | CTLFLAG_RD, sc, 0,
+	    sysctl_cim_ibq_obq, "A", "CIM IBQ 0 (TP0)");
+
+	SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "cim_ibq_tp1",
+	    CTLTYPE_STRING | CTLFLAG_RD, sc, 1,
+	    sysctl_cim_ibq_obq, "A", "CIM IBQ 1 (TP1)");
+
+	SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "cim_ibq_ulp",
+	    CTLTYPE_STRING | CTLFLAG_RD, sc, 2,
+	    sysctl_cim_ibq_obq, "A", "CIM IBQ 2 (ULP)");
+
+	SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "cim_ibq_sge0",
+	    CTLTYPE_STRING | CTLFLAG_RD, sc, 3,
+	    sysctl_cim_ibq_obq, "A", "CIM IBQ 3 (SGE0)");
+
+	SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "cim_ibq_sge1",
+	    CTLTYPE_STRING | CTLFLAG_RD, sc, 4,
+	    sysctl_cim_ibq_obq, "A", "CIM IBQ 4 (SGE1)");
+
+	SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "cim_ibq_ncsi",
+	    CTLTYPE_STRING | CTLFLAG_RD, sc, 5,
+	    sysctl_cim_ibq_obq, "A", "CIM IBQ 5 (NCSI)");
+
+	SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "cim_la",
+	    CTLTYPE_STRING | CTLFLAG_RD, sc, 0,
+	    sysctl_cim_la, "A", "CIM logic analyzer");
+
+	SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "cim_obq_ulp0",
+	    CTLTYPE_STRING | CTLFLAG_RD, sc, 0 + CIM_NUM_IBQ,
+	    sysctl_cim_ibq_obq, "A", "CIM OBQ 0 (ULP0)");
+
+	SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "cim_obq_ulp1",
+	    CTLTYPE_STRING | CTLFLAG_RD, sc, 1 + CIM_NUM_IBQ,
+	    sysctl_cim_ibq_obq, "A", "CIM OBQ 1 (ULP1)");
+
+	SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "cim_obq_ulp2",
+	    CTLTYPE_STRING | CTLFLAG_RD, sc, 2 + CIM_NUM_IBQ,
+	    sysctl_cim_ibq_obq, "A", "CIM OBQ 2 (ULP2)");
+
+	SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "cim_obq_ulp3",
+	    CTLTYPE_STRING | CTLFLAG_RD, sc, 3 + CIM_NUM_IBQ,
+	    sysctl_cim_ibq_obq, "A", "CIM OBQ 3 (ULP3)");
+
+	SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "cim_obq_sge",
+	    CTLTYPE_STRING | CTLFLAG_RD, sc, 4 + CIM_NUM_IBQ,
+	    sysctl_cim_ibq_obq, "A", "CIM OBQ 4 (SGE)");
+
+	SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "cim_obq_ncsi",
+	    CTLTYPE_STRING | CTLFLAG_RD, sc, 5 + CIM_NUM_IBQ,
+	    sysctl_cim_ibq_obq, "A", "CIM OBQ 5 (NCSI)");
+
+	SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "cim_qcfg",
+	    CTLTYPE_STRING | CTLFLAG_RD, sc, 0,
+	    sysctl_cim_qcfg, "A", "CIM queue configuration");
+
 	SYSCTL_ADD_PROC(ctx, children, OID_AUTO, "cpl_stats",
 	    CTLTYPE_STRING | CTLFLAG_RD, sc, 0,
 	    sysctl_cpl_stats, "A", "CPL statistics");
@@ -3694,6 +3753,176 @@ sysctl_cctrl(SYSCTL_HANDLER_ARGS)
 	return (rc);
 }
 
+static const char *qname[CIM_NUM_IBQ + CIM_NUM_OBQ] = {
+	"TP0", "TP1", "ULP", "SGE0", "SGE1", "NC-SI",	/* ibq's */
+	"ULP0", "ULP1", "ULP2", "ULP3", "SGE", "NC-SI"	/* obq's */
+};
+
+static int
+sysctl_cim_ibq_obq(SYSCTL_HANDLER_ARGS)
+{
+	struct adapter *sc = arg1;
+	struct sbuf *sb;
+	int rc, i, n, qid = arg2;
+	uint32_t *buf, *p;
+	char *qtype;
+
+	KASSERT(qid >= 0 && qid < nitems(qname),
+	    ("%s: bad qid %d\n", __func__, qid));
+
+	if (qid < CIM_NUM_IBQ) {
+		/* inbound queue */
+		qtype = "IBQ";
+		n = 4 * CIM_IBQ_SIZE;
+		buf = malloc(n * sizeof(uint32_t), M_CXGBE, M_ZERO | M_WAITOK);
+		rc = t4_read_cim_ibq(sc, qid, buf, n);
+	} else {
+		/* outbound queue */
+		qtype = "OBQ";
+		qid -= CIM_NUM_IBQ;
+		n = 4 * 6 * CIM_OBQ_SIZE;
+		buf = malloc(n * sizeof(uint32_t), M_CXGBE, M_ZERO | M_WAITOK);
+		rc = t4_read_cim_obq(sc, qid, buf, n);
+	}
+
+	if (rc < 0) {
+		rc = -rc;
+		goto done;
+	}
+	n = rc * sizeof(uint32_t);	/* rc has # of words actually read */
+
+	rc = sysctl_wire_old_buffer(req, 0);
+	if (rc != 0)
+		goto done;
+
+	sb = sbuf_new_for_sysctl(NULL, NULL, 4096, req);
+	if (sb == NULL) {
+		rc = ENOMEM;
+		goto done;
+	}
+
+	sbuf_printf(sb, "%s%d %s", qtype , qid, qname[arg2]);
+	for (i = 0, p = buf; i < n; i += 16, p += 4)
+		sbuf_printf(sb, "\n%#06x: %08x %08x %08x %08x", i, p[0], p[1],
+		    p[2], p[3]);
+
+	rc = sbuf_finish(sb);
+	sbuf_delete(sb);
+done:
+	free(buf, M_CXGBE);
+	return (rc);
+}
+
+static int
+sysctl_cim_la(SYSCTL_HANDLER_ARGS)
+{
+	struct adapter *sc = arg1;
+	u_int cfg;
+	struct sbuf *sb;
+	uint32_t *buf, *p;
+	int rc;
+
+	rc = -t4_cim_read(sc, A_UP_UP_DBG_LA_CFG, 1, &cfg);
+	if (rc != 0)
+		return (rc);
+
+	rc = sysctl_wire_old_buffer(req, 0);
+	if (rc != 0)
+		return (rc);
+
+	sb = sbuf_new_for_sysctl(NULL, NULL, 4096, req);
+	if (sb == NULL)
+		return (ENOMEM);
+
+	buf = malloc(sc->params.cim_la_size * sizeof(uint32_t), M_CXGBE,
+	    M_ZERO | M_WAITOK);
+
+	rc = -t4_cim_read_la(sc, buf, NULL);
+	if (rc != 0)
+		goto done;
+
+	sbuf_printf(sb, "Status   Data      PC%s",
+	    cfg & F_UPDBGLACAPTPCONLY ? "" :
+	    "     LS0Stat  LS0Addr             LS0Data");
+
+	KASSERT((sc->params.cim_la_size & 7) == 0,
+	    ("%s: p will walk off the end of buf", __func__));
+
+	for (p = buf; p < &buf[sc->params.cim_la_size]; p += 8) {
+		if (cfg & F_UPDBGLACAPTPCONLY) {
+			sbuf_printf(sb, "\n  %02x   %08x %08x", p[5] & 0xff,
+			    p[6], p[7]);
+			sbuf_printf(sb, "\n  %02x   %02x%06x %02x%06x",
+			    (p[3] >> 8) & 0xff, p[3] & 0xff, p[4] >> 8,
+			    p[4] & 0xff, p[5] >> 8);
+			sbuf_printf(sb, "\n  %02x   %x%07x %x%07x",
+			    (p[0] >> 4) & 0xff, p[0] & 0xf, p[1] >> 4,
+			    p[1] & 0xf, p[2] >> 4);
+		} else {
+			sbuf_printf(sb,
+			    "\n  %02x   %x%07x %x%07x %08x %08x "
+			    "%08x%08x%08x%08x",
+			    (p[0] >> 4) & 0xff, p[0] & 0xf, p[1] >> 4,
+			    p[1] & 0xf, p[2] >> 4, p[2] & 0xf, p[3], p[4], p[5],
+			    p[6], p[7]);
+		}
+	}
+
+	rc = sbuf_finish(sb);
+	sbuf_delete(sb);
+done:
+	free(buf, M_CXGBE);
+	return (rc);
+}
+
+static int
+sysctl_cim_qcfg(SYSCTL_HANDLER_ARGS)
+{
+	struct adapter *sc = arg1;
+	struct sbuf *sb;
+	int rc, i;
+	uint16_t base[CIM_NUM_IBQ + CIM_NUM_OBQ];
+	uint16_t size[CIM_NUM_IBQ + CIM_NUM_OBQ];
+	uint16_t thres[CIM_NUM_IBQ];
+	uint32_t obq_wr[2 * CIM_NUM_OBQ], *wr = obq_wr;
+	uint32_t stat[4 * (CIM_NUM_IBQ + CIM_NUM_OBQ)], *p = stat;
+
+	rc = -t4_cim_read(sc, A_UP_IBQ_0_RDADDR, nitems(stat), stat);
+	if (rc == 0)
+		rc = -t4_cim_read(sc, A_UP_OBQ_0_REALADDR, nitems(obq_wr),
+		    obq_wr);
+	if (rc != 0)
+		return (rc);
+
+	t4_read_cimq_cfg(sc, base, size, thres);
+
+	rc = sysctl_wire_old_buffer(req, 0);
+	if (rc != 0)
+		return (rc);
+
+	sb = sbuf_new_for_sysctl(NULL, NULL, 4096, req);
+	if (sb == NULL)
+		return (ENOMEM);
+
+	sbuf_printf(sb, "Queue  Base  Size Thres RdPtr WrPtr  SOP  EOP Avail");
+
+	for (i = 0; i < CIM_NUM_IBQ; i++, p += 4)
+		sbuf_printf(sb, "\n%5s %5x %5u %4u %6x  %4x %4u %4u %5u",
+		    qname[i], base[i], size[i], thres[i], G_IBQRDADDR(p[0]),
+		    G_IBQWRADDR(p[1]), G_QUESOPCNT(p[3]), G_QUEEOPCNT(p[3]),
+		    G_QUEREMFLITS(p[2]) * 16);
+	for ( ; i < CIM_NUM_IBQ + CIM_NUM_OBQ; i++, p += 4, wr += 2)
+		sbuf_printf(sb, "\n%5s %5x %5u %11x  %4x %4u %4u %5u", qname[i],
+		    base[i], size[i], G_QUERDADDR(p[0]) & 0x3fff,
+		    wr[0] - base[i], G_QUESOPCNT(p[3]), G_QUEEOPCNT(p[3]),
+		    G_QUEREMFLITS(p[2]) * 16);
+
+	rc = sbuf_finish(sb);
+	sbuf_delete(sb);
+
+	return (rc);
+}
+
 static int
 sysctl_cpl_stats(SYSCTL_HANDLER_ARGS)
 {

Modified: user/attilio/vmobj-rwlock/sys/dev/firewire/sbp.c
==============================================================================
--- user/attilio/vmobj-rwlock/sys/dev/firewire/sbp.c	Thu Feb 21 21:56:51 2013	(r247138)
+++ user/attilio/vmobj-rwlock/sys/dev/firewire/sbp.c	Thu Feb 21 21:59:35 2013	(r247139)
@@ -2488,16 +2488,14 @@ printf("ORB %08x %08x %08x %08x\n", ntoh
 printf("ORB %08x %08x %08x %08x\n", ntohl(ocb->orb[4]), ntohl(ocb->orb[5]), ntohl(ocb->orb[6]), ntohl(ocb->orb[7]));
 */
 		if (ccb->csio.dxfer_len > 0) {
-			int s, error;
+			int error;
 
-			s = splsoftvm();
 			error = bus_dmamap_load_ccb(/*dma tag*/sbp->dmat,
 					/*dma map*/ocb->dmamap,
 					ccb,
 					sbp_execute_ocb,
 					ocb,
 					/*flags*/0);
-			splx(s);
 			if (error)
 				printf("sbp: bus_dmamap_load error %d\n", error);
 		} else

Modified: user/attilio/vmobj-rwlock/sys/dev/mxge/if_mxge.c
==============================================================================
--- user/attilio/vmobj-rwlock/sys/dev/mxge/if_mxge.c	Thu Feb 21 21:56:51 2013	(r247138)
+++ user/attilio/vmobj-rwlock/sys/dev/mxge/if_mxge.c	Thu Feb 21 21:59:35 2013	(r247139)
@@ -64,6 +64,7 @@ __FBSDID("$FreeBSD$");
 #include <netinet/ip.h>
 #include <netinet/ip6.h>
 #include <netinet/tcp.h>
+#include <netinet/tcp_lro.h>
 #include <netinet6/ip6_var.h>
 
 #include <machine/bus.h>
@@ -102,7 +103,6 @@ static int mxge_intr_coal_delay = 30;
 static int mxge_deassert_wait = 1;
 static int mxge_flow_control = 1;
 static int mxge_verbose = 0;
-static int mxge_lro_cnt = 8;
 static int mxge_ticks;
 static int mxge_max_slices = 1;
 static int mxge_rss_hash_type = MXGEFW_RSS_HASH_TYPE_SRC_DST_PORT;
@@ -1311,9 +1311,9 @@ mxge_reset(mxge_softc_t *sc, int interru
 		ss->tx.stall = 0;
 		ss->rx_big.cnt = 0;
 		ss->rx_small.cnt = 0;
-		ss->lro_bad_csum = 0;
-		ss->lro_queued = 0;
-		ss->lro_flushed = 0;
+		ss->lc.lro_bad_csum = 0;
+		ss->lc.lro_queued = 0;
+		ss->lc.lro_flushed = 0;
 		if (ss->fw_stats != NULL) {
 			bzero(ss->fw_stats, sizeof *ss->fw_stats);
 		}
@@ -1414,50 +1414,6 @@ mxge_change_flow_control(SYSCTL_HANDLER_
 }
 
 static int
-mxge_change_lro_locked(mxge_softc_t *sc, int lro_cnt)
-{
-	struct ifnet *ifp;
-	int err = 0;
-
-	ifp = sc->ifp;
-	if (lro_cnt == 0) 
-		ifp->if_capenable &= ~IFCAP_LRO;
-	else
-		ifp->if_capenable |= IFCAP_LRO;
-	sc->lro_cnt = lro_cnt;
-	if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
-		mxge_close(sc, 0);
-		err = mxge_open(sc);
-	}
-	return err;
-}
-
-static int
-mxge_change_lro(SYSCTL_HANDLER_ARGS)
-{
-	mxge_softc_t *sc;
-	unsigned int lro_cnt;
-	int err;
-
-	sc = arg1;
-	lro_cnt = sc->lro_cnt;
-	err = sysctl_handle_int(oidp, &lro_cnt, arg2, req);
-	if (err != 0)
-		return err;
-
-	if (lro_cnt == sc->lro_cnt)
-		return 0;
-
-	if (lro_cnt > 128)
-		return EINVAL;
-
-	mtx_lock(&sc->driver_mtx);
-	err = mxge_change_lro_locked(sc, lro_cnt);
-	mtx_unlock(&sc->driver_mtx);
-	return err;
-}
-
-static int
 mxge_handle_be32(SYSCTL_HANDLER_ARGS)
 {
         int err;
@@ -1653,14 +1609,6 @@ mxge_add_sysctls(mxge_softc_t *sc)
 		       CTLFLAG_RW, &mxge_verbose,
 		       0, "verbose printing");
 
-	/* lro */
-	SYSCTL_ADD_PROC(ctx, children, OID_AUTO, 
-			"lro_cnt",
-			CTLTYPE_INT|CTLFLAG_RW, sc,
-			0, mxge_change_lro,
-			"I", "number of lro merge queues");
-
-
 	/* add counters exported for debugging from all slices */
 	sysctl_ctx_init(&sc->slice_sysctl_ctx);
 	sc->slice_sysctl_tree = 
@@ -1686,11 +1634,15 @@ mxge_add_sysctls(mxge_softc_t *sc)
 			       CTLFLAG_RD, &ss->rx_big.cnt,
 			       0, "rx_small_cnt");
 		SYSCTL_ADD_INT(ctx, children, OID_AUTO,
-			       "lro_flushed", CTLFLAG_RD, &ss->lro_flushed,
+			       "lro_flushed", CTLFLAG_RD, &ss->lc.lro_flushed,
 			       0, "number of lro merge queues flushed");
 
 		SYSCTL_ADD_INT(ctx, children, OID_AUTO,
-			       "lro_queued", CTLFLAG_RD, &ss->lro_queued,
+			       "lro_bad_csum", CTLFLAG_RD, &ss->lc.lro_bad_csum,
+			       0, "number of bad csums preventing LRO");
+
+		SYSCTL_ADD_INT(ctx, children, OID_AUTO,
+			       "lro_queued", CTLFLAG_RD, &ss->lc.lro_queued,
 			       0, "number of frames appended to lro merge"
 			       "queues");
 
@@ -2534,6 +2486,64 @@ done:
 	return err;
 }
 
+#ifdef INET6
+
+static uint16_t
+mxge_csum_generic(uint16_t *raw, int len)
+{
+	uint32_t csum;
+
+
+	csum = 0;
+	while (len > 0) {
+		csum += *raw;
+		raw++;
+		len -= 2;
+	}
+	csum = (csum >> 16) + (csum & 0xffff);
+	csum = (csum >> 16) + (csum & 0xffff);
+	return (uint16_t)csum;
+}
+
+static inline uint16_t
+mxge_rx_csum6(void *p, struct mbuf *m, uint32_t csum)
+{
+	uint32_t partial;
+	int nxt, cksum_offset;
+	struct ip6_hdr *ip6 = p;
+	uint16_t c;
+
+	nxt = ip6->ip6_nxt;
+	cksum_offset = sizeof (*ip6) + ETHER_HDR_LEN;
+	if (nxt != IPPROTO_TCP && nxt != IPPROTO_UDP) {
+		cksum_offset = ip6_lasthdr(m, ETHER_HDR_LEN,
+					   IPPROTO_IPV6, &nxt);
+		if (nxt != IPPROTO_TCP && nxt != IPPROTO_UDP)
+			return (1);
+	}
+
+	/*
+	 * IPv6 headers do not contain a checksum, and hence
+	 * do not checksum to zero, so they don't "fall out"
+	 * of the partial checksum calculation like IPv4
+	 * headers do.  We need to fix the partial checksum by
+	 * subtracting the checksum of the IPv6 header.
+	 */
+
+	partial = mxge_csum_generic((uint16_t *)ip6, cksum_offset -
+				    ETHER_HDR_LEN);
+	csum += ~partial;
+	csum +=	 (csum < ~partial);
+	csum = (csum >> 16) + (csum & 0xFFFF);
+	csum = (csum >> 16) + (csum & 0xFFFF);
+	c = in6_cksum_pseudo(ip6, m->m_pkthdr.len - cksum_offset, nxt,
+			     csum);
+
+//	printf("%d %d %x %x %x %x %x\n", m->m_pkthdr.len, cksum_offset, c, csum, ocsum, partial, d);
+	c ^= 0xffff;
+	return (c);
+}
+#endif /* INET6 */
 /* 
  *  Myri10GE hardware checksums are not valid if the sender
  *  padded the frame with non-zero padding.  This is because
@@ -2547,26 +2557,39 @@ static inline uint16_t
 mxge_rx_csum(struct mbuf *m, int csum)
 {
 	struct ether_header *eh;
+#ifdef INET
 	struct ip *ip;
-	uint16_t c;
+#endif
+	int cap = m->m_pkthdr.rcvif->if_capenable;
+	uint16_t c, etype;
 
-	eh = mtod(m, struct ether_header *);
 
-	/* only deal with IPv4 TCP & UDP for now */
-	if (__predict_false(eh->ether_type != htons(ETHERTYPE_IP)))
-		return 1;
-	ip = (struct ip *)(eh + 1);
-	if (__predict_false(ip->ip_p != IPPROTO_TCP &&
-			    ip->ip_p != IPPROTO_UDP))
-		return 1;
+	eh = mtod(m, struct ether_header *);
+	etype = ntohs(eh->ether_type);
+	switch (etype) {
 #ifdef INET
-	c = in_pseudo(ip->ip_src.s_addr, ip->ip_dst.s_addr,
-		      htonl(ntohs(csum) + ntohs(ip->ip_len) +
-			    - (ip->ip_hl << 2) + ip->ip_p));
-#else
-	c = 1;
+	case ETHERTYPE_IP:
+		if ((cap & IFCAP_RXCSUM) == 0)
+			return (1);
+		ip = (struct ip *)(eh + 1);
+		if (ip->ip_p != IPPROTO_TCP && ip->ip_p != IPPROTO_UDP)
+			return (1);
+		c = in_pseudo(ip->ip_src.s_addr, ip->ip_dst.s_addr,
+			      htonl(ntohs(csum) + ntohs(ip->ip_len) -
+				    (ip->ip_hl << 2) + ip->ip_p));
+		c ^= 0xffff;
+		break;
 #endif
-	c ^= 0xffff;
+#ifdef INET6
+	case ETHERTYPE_IPV6:
+		if ((cap & IFCAP_RXCSUM_IPV6) == 0)
+			return (1);
+		c = mxge_rx_csum6((eh + 1), m, csum);
+		break;
+#endif
+	default:
+		c = 1;
+	}
 	return (c);
 }
 
@@ -2628,7 +2651,8 @@ mxge_vlan_tag_remove(struct mbuf *m, uin
 
 
 static inline void
-mxge_rx_done_big(struct mxge_slice_state *ss, uint32_t len, uint32_t csum)
+mxge_rx_done_big(struct mxge_slice_state *ss, uint32_t len,
+		 uint32_t csum, int lro)
 {
 	mxge_softc_t *sc;
 	struct ifnet *ifp;
@@ -2637,7 +2661,6 @@ mxge_rx_done_big(struct mxge_slice_state
 	mxge_rx_ring_t *rx;
 	bus_dmamap_t old_map;
 	int idx;
-	uint16_t tcpudp_csum;
 
 	sc = ss->sc;
 	ifp = sc->ifp;
@@ -2674,14 +2697,18 @@ mxge_rx_done_big(struct mxge_slice_state
 		mxge_vlan_tag_remove(m, &csum);
 	}
 	/* if the checksum is valid, mark it in the mbuf header */
-	if (sc->csum_flag && (0 == (tcpudp_csum = mxge_rx_csum(m, csum)))) {
-		if (sc->lro_cnt && (0 == mxge_lro_rx(ss, m, csum)))
-			return;
-		/* otherwise, it was a UDP frame, or a TCP frame which
-		   we could not do LRO on.  Tell the stack that the
-		   checksum is good */
+	
+	if ((ifp->if_capenable & (IFCAP_RXCSUM_IPV6 | IFCAP_RXCSUM)) &&
+	    (0 == mxge_rx_csum(m, csum))) {
+		/* Tell the stack that the  checksum is good */
 		m->m_pkthdr.csum_data = 0xffff;
-		m->m_pkthdr.csum_flags = CSUM_PSEUDO_HDR | CSUM_DATA_VALID;
+		m->m_pkthdr.csum_flags = CSUM_PSEUDO_HDR |
+			CSUM_DATA_VALID;
+
+#if defined(INET) || defined (INET6)
+		if (lro && (0 == tcp_lro_rx(&ss->lc, m, 0)))
+			return;
+#endif
 	}
 	/* flowid only valid if RSS hashing is enabled */
 	if (sc->num_slices > 1) {
@@ -2693,7 +2720,8 @@ mxge_rx_done_big(struct mxge_slice_state
 }
 
 static inline void
-mxge_rx_done_small(struct mxge_slice_state *ss, uint32_t len, uint32_t csum)
+mxge_rx_done_small(struct mxge_slice_state *ss, uint32_t len,
+		   uint32_t csum, int lro)
 {
 	mxge_softc_t *sc;
 	struct ifnet *ifp;
@@ -2702,7 +2730,6 @@ mxge_rx_done_small(struct mxge_slice_sta
 	mxge_rx_ring_t *rx;
 	bus_dmamap_t old_map;
 	int idx;
-	uint16_t tcpudp_csum;
 
 	sc = ss->sc;
 	ifp = sc->ifp;
@@ -2739,14 +2766,17 @@ mxge_rx_done_small(struct mxge_slice_sta
 		mxge_vlan_tag_remove(m, &csum);
 	}
 	/* if the checksum is valid, mark it in the mbuf header */
-	if (sc->csum_flag && (0 == (tcpudp_csum = mxge_rx_csum(m, csum)))) {
-		if (sc->lro_cnt && (0 == mxge_lro_rx(ss, m, csum)))
-			return;
-		/* otherwise, it was a UDP frame, or a TCP frame which
-		   we could not do LRO on.  Tell the stack that the
-		   checksum is good */
+	if ((ifp->if_capenable & (IFCAP_RXCSUM_IPV6 | IFCAP_RXCSUM)) &&
+	    (0 == mxge_rx_csum(m, csum))) {
+		/* Tell the stack that the  checksum is good */
 		m->m_pkthdr.csum_data = 0xffff;
-		m->m_pkthdr.csum_flags = CSUM_PSEUDO_HDR | CSUM_DATA_VALID;
+		m->m_pkthdr.csum_flags = CSUM_PSEUDO_HDR |
+			CSUM_DATA_VALID;
+
+#if defined(INET) || defined (INET6)
+		if (lro && (0 == tcp_lro_rx(&ss->lc, m, csum)))
+			return;
+#endif
 	}
 	/* flowid only valid if RSS hashing is enabled */
 	if (sc->num_slices > 1) {
@@ -2764,16 +2794,17 @@ mxge_clean_rx_done(struct mxge_slice_sta
 	int limit = 0;
 	uint16_t length;
 	uint16_t checksum;
+	int lro;
 
-
+	lro = ss->sc->ifp->if_capenable & IFCAP_LRO;
 	while (rx_done->entry[rx_done->idx].length != 0) {
 		length = ntohs(rx_done->entry[rx_done->idx].length);
 		rx_done->entry[rx_done->idx].length = 0;
 		checksum = rx_done->entry[rx_done->idx].checksum;
 		if (length <= (MHLEN - MXGEFW_PAD))
-			mxge_rx_done_small(ss, length, checksum);
+			mxge_rx_done_small(ss, length, checksum, lro);
 		else
-			mxge_rx_done_big(ss, length, checksum);
+			mxge_rx_done_big(ss, length, checksum, lro);
 		rx_done->cnt++;
 		rx_done->idx = rx_done->cnt & rx_done->mask;
 
@@ -2781,11 +2812,11 @@ mxge_clean_rx_done(struct mxge_slice_sta
 		if (__predict_false(++limit > rx_done->mask / 2))
 			break;
 	}
-#ifdef INET
-	while (!SLIST_EMPTY(&ss->lro_active)) {
-		struct lro_entry *lro = SLIST_FIRST(&ss->lro_active);
-		SLIST_REMOVE_HEAD(&ss->lro_active, next);
-		mxge_lro_flush(ss, lro);
+#if defined(INET)  || defined (INET6)
+	while (!SLIST_EMPTY(&ss->lc.lro_active)) {
+		struct lro_entry *lro = SLIST_FIRST(&ss->lc.lro_active);
+		SLIST_REMOVE_HEAD(&ss->lc.lro_active, next);
+		tcp_lro_flush(&ss->lc, lro);
 	}
 #endif
 }
@@ -3153,15 +3184,11 @@ mxge_init(void *arg)
 static void
 mxge_free_slice_mbufs(struct mxge_slice_state *ss)
 {
-	struct lro_entry *lro_entry;
 	int i;
 
-	while (!SLIST_EMPTY(&ss->lro_free)) {
-		lro_entry = SLIST_FIRST(&ss->lro_free);
-		SLIST_REMOVE_HEAD(&ss->lro_free, next);
-		free(lro_entry, M_DEVBUF);
-	}
-
+#if defined(INET) || defined(INET6)
+	tcp_lro_free(&ss->lc);
+#endif
 	for (i = 0; i <= ss->rx_big.mask; i++) {
 		if (ss->rx_big.info[i].m == NULL)
 			continue;
@@ -3545,26 +3572,17 @@ mxge_slice_open(struct mxge_slice_state 
 	mxge_softc_t *sc;
 	mxge_cmd_t cmd;
 	bus_dmamap_t map;
-	struct lro_entry *lro_entry;	
 	int err, i, slice;
 
 
 	sc = ss->sc;
 	slice = ss - sc->ss;
 
-	SLIST_INIT(&ss->lro_free);
-	SLIST_INIT(&ss->lro_active);
-
-	for (i = 0; i < sc->lro_cnt; i++) {
-		lro_entry = (struct lro_entry *)
-			malloc(sizeof (*lro_entry), M_DEVBUF,
-			       M_NOWAIT | M_ZERO);
-		if (lro_entry == NULL) {
-			sc->lro_cnt = i;
-			break;
-		}
-		SLIST_INSERT_HEAD(&ss->lro_free, lro_entry, next);
-	}
+#if defined(INET) || defined(INET6)
+	(void)tcp_lro_init(&ss->lc);
+#endif
+	ss->lc.ifp = sc->ifp;
+	
 	/* get the lanai pointers to the send and receive rings */
 
 	err = 0;
@@ -4219,10 +4237,8 @@ mxge_ioctl(struct ifnet *ifp, u_long com
 		} else if (mask & IFCAP_RXCSUM) {
 			if (IFCAP_RXCSUM & ifp->if_capenable) {
 				ifp->if_capenable &= ~IFCAP_RXCSUM;
-				sc->csum_flag = 0;
 			} else {
 				ifp->if_capenable |= IFCAP_RXCSUM;
-				sc->csum_flag = 1;
 			}
 		}
 		if (mask & IFCAP_TSO4) {
@@ -4249,16 +4265,12 @@ mxge_ioctl(struct ifnet *ifp, u_long com
 				ifp->if_hwassist |= (CSUM_TCP_IPV6
 						     | CSUM_UDP_IPV6);
 			}
-#ifdef NOTYET
-		} else if (mask & IFCAP_RXCSUM6) {
-			if (IFCAP_RXCSUM6 & ifp->if_capenable) {
-				ifp->if_capenable &= ~IFCAP_RXCSUM6;
-				sc->csum_flag = 0;
+		} else if (mask & IFCAP_RXCSUM_IPV6) {
+			if (IFCAP_RXCSUM_IPV6 & ifp->if_capenable) {
+				ifp->if_capenable &= ~IFCAP_RXCSUM_IPV6;
 			} else {
-				ifp->if_capenable |= IFCAP_RXCSUM6;
-				sc->csum_flag = 1;
+				ifp->if_capenable |= IFCAP_RXCSUM_IPV6;
 			}
-#endif
 		}
 		if (mask & IFCAP_TSO6) {
 			if (IFCAP_TSO6 & ifp->if_capenable) {
@@ -4274,12 +4286,8 @@ mxge_ioctl(struct ifnet *ifp, u_long com
 		}
 #endif /*IFCAP_TSO6 */
 
-		if (mask & IFCAP_LRO) {
-			if (IFCAP_LRO & ifp->if_capenable) 
-				err = mxge_change_lro_locked(sc, 0);
-			else
-				err = mxge_change_lro_locked(sc, mxge_lro_cnt);
-		}
+		if (mask & IFCAP_LRO)
+			ifp->if_capenable ^= IFCAP_LRO;
 		if (mask & IFCAP_VLAN_HWTAGGING)
 			ifp->if_capenable ^= IFCAP_VLAN_HWTAGGING;
 		if (mask & IFCAP_VLAN_HWTSO)
@@ -4326,14 +4334,11 @@ mxge_fetch_tunables(mxge_softc_t *sc)
 	TUNABLE_INT_FETCH("hw.mxge.verbose", 
 			  &mxge_verbose);	
 	TUNABLE_INT_FETCH("hw.mxge.ticks", &mxge_ticks);
-	TUNABLE_INT_FETCH("hw.mxge.lro_cnt", &sc->lro_cnt);
 	TUNABLE_INT_FETCH("hw.mxge.always_promisc", &mxge_always_promisc);
 	TUNABLE_INT_FETCH("hw.mxge.rss_hash_type", &mxge_rss_hash_type);
 	TUNABLE_INT_FETCH("hw.mxge.rss_hashtype", &mxge_rss_hash_type);
 	TUNABLE_INT_FETCH("hw.mxge.initial_mtu", &mxge_initial_mtu);
 	TUNABLE_INT_FETCH("hw.mxge.throttle", &mxge_throttle);
-	if (sc->lro_cnt != 0)
-		mxge_lro_cnt = sc->lro_cnt;
 
 	if (bootverbose)
 		mxge_verbose = 1;
@@ -4897,8 +4902,9 @@ mxge_attach(device_t dev)
 
 	if_initbaudrate(ifp, IF_Gbps(10));
 	ifp->if_capabilities = IFCAP_RXCSUM | IFCAP_TXCSUM | IFCAP_TSO4 |
-		IFCAP_VLAN_MTU | IFCAP_LINKSTATE | IFCAP_TXCSUM_IPV6;
-#ifdef INET
+		IFCAP_VLAN_MTU | IFCAP_LINKSTATE | IFCAP_TXCSUM_IPV6 |
+		IFCAP_RXCSUM_IPV6;
+#if defined(INET) || defined(INET6)
 	ifp->if_capabilities |= IFCAP_LRO;
 #endif
 
@@ -4929,7 +4935,6 @@ mxge_attach(device_t dev)
 	ifp->if_capenable = ifp->if_capabilities;
 	if (sc->lro_cnt == 0)
 		ifp->if_capenable &= ~IFCAP_LRO;
-	sc->csum_flag = 1;
         ifp->if_init = mxge_init;
         ifp->if_softc = sc;
         ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;

Modified: user/attilio/vmobj-rwlock/sys/dev/mxge/if_mxge_var.h
==============================================================================
--- user/attilio/vmobj-rwlock/sys/dev/mxge/if_mxge_var.h	Thu Feb 21 21:56:51 2013	(r247138)
+++ user/attilio/vmobj-rwlock/sys/dev/mxge/if_mxge_var.h	Thu Feb 21 21:59:35 2013	(r247139)
@@ -194,31 +194,6 @@ typedef struct
 	char mtx_name[16];
 } mxge_tx_ring_t;
 
-struct lro_entry;
-struct lro_entry
-{
-	SLIST_ENTRY(lro_entry) next;
-	struct mbuf  	*m_head;
-	struct mbuf	*m_tail;
-	int		timestamp;
-	struct ip	*ip;
-	uint32_t	tsval;
-	uint32_t	tsecr;
-	uint32_t	source_ip;
-	uint32_t	dest_ip;
-	uint32_t	next_seq;
-	uint32_t	ack_seq;
-	uint32_t	len;
-	uint32_t	data_csum;
-	uint16_t	window;
-	uint16_t	source_port;
-	uint16_t	dest_port;
-	uint16_t	append_cnt;
-	uint16_t	mss;
-	
-};
-SLIST_HEAD(lro_head, lro_entry);
-
 struct mxge_softc;
 typedef struct mxge_softc mxge_softc_t;
 
@@ -236,11 +211,7 @@ struct mxge_slice_state {
 	u_long omcasts;
 	u_long oerrors;
 	int if_drv_flags;
-	struct lro_head lro_active;
-	struct lro_head lro_free;
-	int lro_queued;
-	int lro_flushed;
-	int lro_bad_csum;
+	struct lro_ctrl lc;
 	mxge_dma_t fw_stats_dma;
 	struct sysctl_oid *sysctl_tree;
 	struct sysctl_ctx_list sysctl_ctx;
@@ -250,7 +221,6 @@ struct mxge_slice_state {
 struct mxge_softc {
 	struct ifnet* ifp;
 	struct mxge_slice_state *ss;
-	int csum_flag;			/* rx_csums? 		*/
 	int tx_boundary;		/* boundary transmits cannot cross*/
 	int lro_cnt;
 	bus_dma_tag_t	parent_dmat;

Modified: user/attilio/vmobj-rwlock/sys/fs/nfs/nfs_commonkrpc.c
==============================================================================
--- user/attilio/vmobj-rwlock/sys/fs/nfs/nfs_commonkrpc.c	Thu Feb 21 21:56:51 2013	(r247138)
+++ user/attilio/vmobj-rwlock/sys/fs/nfs/nfs_commonkrpc.c	Thu Feb 21 21:59:35 2013	(r247139)
@@ -1080,7 +1080,6 @@ newnfs_set_sigmask(struct thread *td, si
 			SIGDELSET(newset, newnfs_sig_set[i]);
 	}
 	mtx_unlock(&p->p_sigacts->ps_mtx);
-	sigdeferstop(td);
 	kern_sigprocmask(td, SIG_SETMASK, &newset, oldset,
 	    SIGPROCMASK_PROC_LOCKED);
 	PROC_UNLOCK(p);
@@ -1092,7 +1091,6 @@ newnfs_restore_sigmask(struct thread *td
 	if (td == NULL)
 		td = curthread; /* XXX */
 	kern_sigprocmask(td, SIG_SETMASK, set, NULL, 0);
-	sigallowstop(td);
 }
 
 /*

Modified: user/attilio/vmobj-rwlock/sys/fs/nfsclient/nfs_clvfsops.c
==============================================================================
--- user/attilio/vmobj-rwlock/sys/fs/nfsclient/nfs_clvfsops.c	Thu Feb 21 21:56:51 2013	(r247138)
+++ user/attilio/vmobj-rwlock/sys/fs/nfsclient/nfs_clvfsops.c	Thu Feb 21 21:59:35 2013	(r247139)
@@ -132,7 +132,7 @@ static struct vfsops nfs_vfsops = {
 	.vfs_unmount =		nfs_unmount,
 	.vfs_sysctl =		nfs_sysctl,
 };
-VFS_SET(nfs_vfsops, nfs, VFCF_NETWORK);
+VFS_SET(nfs_vfsops, nfs, VFCF_NETWORK | VFCF_SBDRY);
 
 /* So that loader and kldload(2) can find us, wherever we are.. */

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


More information about the svn-src-user mailing list