# HG changeset patch # User Max Bruning # Date 1349091158 0 # Node ID ecae50d1b4e7e7477d3493e0e1d7bc90a1344962 # Parent 0323baf2c0bb71c0ae794e13b53acb25ee3a3df8 2064 vnic sets up protection before upper mac leading to panic Reviewed by: Robert Mustacchi Reviewed by: Dan McDonald Approved by: Garrett D'Amore diff -r 0323baf2c0bb -r ecae50d1b4e7 usr/src/uts/common/io/vnic/vnic_dev.c --- a/usr/src/uts/common/io/vnic/vnic_dev.c Fri Sep 28 11:42:56 2012 +0000 +++ b/usr/src/uts/common/io/vnic/vnic_dev.c Mon Oct 01 11:32:38 2012 +0000 @@ -405,15 +405,6 @@ if (err != 0) goto bail; - if (mrp != NULL) { - if ((mrp->mrp_mask & MRP_RX_RINGS) != 0 || - (mrp->mrp_mask & MRP_TX_RINGS) != 0) { - req_hwgrp_flag = B_TRUE; - } - err = mac_client_set_resources(vnic->vn_mch, mrp); - if (err != 0) - goto bail; - } /* assign a MAC address to the VNIC */ err = vnic_unicast_add(vnic, *vnic_addr_type, mac_slot, @@ -517,9 +508,22 @@ } /* Set the VNIC's MAC in the client */ - if (!is_anchor) + if (!is_anchor) { mac_set_upper_mac(vnic->vn_mch, vnic->vn_mh, mrp); + if (mrp != NULL) { + if ((mrp->mrp_mask & MRP_RX_RINGS) != 0 || + (mrp->mrp_mask & MRP_TX_RINGS) != 0) { + req_hwgrp_flag = B_TRUE; + } + err = mac_client_set_resources(vnic->vn_mch, mrp); + if (err != 0) { + (void) mac_unregister(vnic->vn_mh); + goto bail; + } + } + } + err = dls_devnet_create(vnic->vn_mh, vnic->vn_id, crgetzoneid(credp)); if (err != 0) { VERIFY(is_anchor || mac_margin_remove(vnic->vn_lower_mh,