diff options
author | ja97890 <none@none> | 2007-04-26 03:26:34 -0700 |
---|---|---|
committer | ja97890 <none@none> | 2007-04-26 03:26:34 -0700 |
commit | 9c1751294cd1ff9c27007f40ee6aacc943076cbf (patch) | |
tree | c9ec2f4d43780599bde806cb10368a385293f0c0 /usr/src | |
parent | 6dfdd35c9692c8a1b2d999e07dbb09ac4f308774 (diff) | |
download | illumos-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.conf | 10 | ||||
-rw-r--r-- | usr/src/uts/common/io/dld/dld_drv.c | 5 | ||||
-rw-r--r-- | usr/src/uts/common/io/dld/dld_proto.c | 10 | ||||
-rw-r--r-- | usr/src/uts/common/sys/dld.h | 5 | ||||
-rw-r--r-- | usr/src/uts/common/sys/dld_impl.h | 3 |
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; |