diff options
Diffstat (limited to 'usr/src/uts/sun4v/io/vnet.c')
-rw-r--r-- | usr/src/uts/sun4v/io/vnet.c | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/usr/src/uts/sun4v/io/vnet.c b/usr/src/uts/sun4v/io/vnet.c index 64f3c278f5..1d7b9cd706 100644 --- a/usr/src/uts/sun4v/io/vnet.c +++ b/usr/src/uts/sun4v/io/vnet.c @@ -1168,8 +1168,20 @@ int vio_net_resource_reg(mac_register_t *macp, vio_net_res_type_t type, vnetp = vnet_headp; while (vnetp != NULL) { if (VNET_MATCH_RES(vresp, vnetp)) { - WRITE_ENTER(&vnetp->vrwlock); vresp->vnetp = vnetp; + + /* Setup kstats for hio resource */ + if (vresp->type == VIO_NET_RES_HYBRID) { + vresp->ksp = vnet_hio_setup_kstats(DRV_NAME, + "hio", vresp); + if (vresp->ksp == NULL) { + cmn_err(CE_NOTE, "!vnet%d: Cannot " + "create kstats for hio resource", + vnetp->instance); + } + } + + WRITE_ENTER(&vnetp->vrwlock); vresp->nextp = vnetp->vres_list; vnetp->vres_list = vresp; RW_EXIT(&vnetp->vrwlock); @@ -1184,16 +1196,6 @@ int vio_net_resource_reg(mac_register_t *macp, vio_net_res_type_t type, return (ENXIO); } - /* Setup kstats for hio resource */ - if (vresp->type == VIO_NET_RES_HYBRID) { - vresp->ksp = vnet_hio_setup_kstats(DRV_NAME, "hio", vresp); - if (vresp->ksp == NULL) { - DWARN(NULL, "Cannot create kstats for hio resource"); - kmem_free(vresp, sizeof (vnet_res_t)); - return (ENXIO); - } - } - *vhp = vresp; vcb->vio_net_rx_cb = vnet_rx; vcb->vio_net_tx_update = vnet_tx_update; |