summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorja97890 <none@none>2007-04-26 03:26:34 -0700
committerja97890 <none@none>2007-04-26 03:26:34 -0700
commit9c1751294cd1ff9c27007f40ee6aacc943076cbf (patch)
treec9ec2f4d43780599bde806cb10368a385293f0c0 /usr/src
parent6dfdd35c9692c8a1b2d999e07dbb09ac4f308774 (diff)
downloadillumos-gate-9c1751294cd1ff9c27007f40ee6aacc943076cbf.tar.gz
6508808 T2000 GLDv3 network interface suffers performance regression when VLANs configured
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/uts/common/io/dld/dld.conf10
-rw-r--r--usr/src/uts/common/io/dld/dld_drv.c5
-rw-r--r--usr/src/uts/common/io/dld/dld_proto.c10
-rw-r--r--usr/src/uts/common/sys/dld.h5
-rw-r--r--usr/src/uts/common/sys/dld_impl.h3
5 files changed, 24 insertions, 9 deletions
diff --git a/usr/src/uts/common/io/dld/dld.conf b/usr/src/uts/common/io/dld/dld.conf
index a197538582..9553121280 100644
--- a/usr/src/uts/common/io/dld/dld.conf
+++ b/usr/src/uts/common/io/dld/dld.conf
@@ -2,9 +2,8 @@
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
-# Common Development and Distribution License, Version 1.0 only
-# (the "License"). You may not use this file except in compliance
-# with the License.
+# Common Development and Distribution License (the "License").
+# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
@@ -20,7 +19,7 @@
# CDDL HEADER END
#
#
-# Copyright 2005 Sun Microsystems, Inc. All rights reserved.
+# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
#ident "%Z%%M% %I% %E% SMI"
@@ -35,3 +34,6 @@ name="dld" parent="pseudo";
# Prevent use of the IP polling interface
#no-poll=1;
+
+# Prevent use of soft rings
+#no-softring=1;
diff --git a/usr/src/uts/common/io/dld/dld_drv.c b/usr/src/uts/common/io/dld/dld_drv.c
index f1fb5a0700..f556944956 100644
--- a/usr/src/uts/common/io/dld/dld_drv.c
+++ b/usr/src/uts/common/io/dld/dld_drv.c
@@ -244,6 +244,11 @@ drv_set_opt(dev_info_t *dip)
DLD_PROP_NO_ZEROCOPY, 0) != 0) {
dld_opt |= DLD_OPT_NO_ZEROCOPY;
}
+
+ if (ddi_prop_get_int(DDI_DEV_T_ANY, dip, DDI_PROP_DONTPASS,
+ DLD_PROP_NO_SOFTRING, 0) != 0) {
+ dld_opt |= DLD_OPT_NO_SOFTRING;
+ }
}
/*
diff --git a/usr/src/uts/common/io/dld/dld_proto.c b/usr/src/uts/common/io/dld/dld_proto.c
index 30fa985951..445a057b68 100644
--- a/usr/src/uts/common/io/dld/dld_proto.c
+++ b/usr/src/uts/common/io/dld/dld_proto.c
@@ -1324,6 +1324,7 @@ proto_capability_req(dld_str_t *dsp, union DL_primitives *udlp, mblk_t *mp)
break;
case SOFT_RING_ENABLE:
+ ASSERT(!(dld_opt & DLD_OPT_NO_SOFTRING));
/*
* Make sure soft_ring is disabled.
*/
@@ -1728,12 +1729,13 @@ proto_capability_advertise(dld_str_t *dsp, mblk_t *mp)
subsize = 0;
/*
- * Advertize soft ring capability if
- * VLAN_ID_NONE for GLDv3 drivers
+ * Advertize soft ring capability unless it has been explicitly
+ * disabled.
*/
- if (dsp->ds_vid == VLAN_ID_NONE)
+ if (!(dld_opt & DLD_OPT_NO_SOFTRING)) {
subsize += sizeof (dl_capability_sub_t) +
sizeof (dl_capab_dls_t);
+ }
/*
* Check if polling can be enabled on this interface.
@@ -1852,7 +1854,7 @@ proto_capability_advertise(dld_str_t *dsp, mblk_t *mp)
ASSERT(RW_READ_HELD(&dsp->ds_lock));
- if (dsp->ds_vid == VLAN_ID_NONE) {
+ if (!(dld_opt & DLD_OPT_NO_SOFTRING)) {
dlsp = (dl_capability_sub_t *)ptr;
dlsp->dl_cap = DL_CAPAB_SOFT_RING;
diff --git a/usr/src/uts/common/sys/dld.h b/usr/src/uts/common/sys/dld.h
index 8f02bafc0f..14363ff219 100644
--- a/usr/src/uts/common/sys/dld.h
+++ b/usr/src/uts/common/sys/dld.h
@@ -71,6 +71,11 @@ extern "C" {
#define DLD_PROP_NO_ZEROCOPY "no-zerocopy"
/*
+ * Prevent advertising of the DL_CAPAB_SOFTRING capability.
+ */
+#define DLD_PROP_NO_SOFTRING "no-softring"
+
+/*
* The name of the driver.
*/
#define DLD_DRIVER_NAME "dld"
diff --git a/usr/src/uts/common/sys/dld_impl.h b/usr/src/uts/common/sys/dld_impl.h
index 356bd4dd1b..bb9a6bbe67 100644
--- a/usr/src/uts/common/sys/dld_impl.h
+++ b/usr/src/uts/common/sys/dld_impl.h
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -251,6 +251,7 @@ extern void dld_finish_pending_ops(dld_str_t *);
#define DLD_OPT_NO_FASTPATH 0x00000001
#define DLD_OPT_NO_POLL 0x00000002
#define DLD_OPT_NO_ZEROCOPY 0x00000004
+#define DLD_OPT_NO_SOFTRING 0x00000008
extern uint32_t dld_opt;