Print this page
5045 use atomic_{inc,dec}_* instead of atomic_add_*


 356                     grp);
 357 
 358                 grp->mbg_addr = kmem_zalloc(addr_len, KM_SLEEP);
 359                 bcopy(addr, grp->mbg_addr, addr_len);
 360                 grp->mbg_addrtype = addrtype;
 361                 grp->mbg_vid = vid;
 362 
 363                 /*
 364                  * Add a new flow to the underlying MAC.
 365                  */
 366                 bzero(&flow_desc, sizeof (flow_desc));
 367                 bcopy(addr, &flow_desc.fd_dst_mac, addr_len);
 368                 flow_desc.fd_mac_len = (uint32_t)addr_len;
 369 
 370                 flow_desc.fd_mask = FLOW_LINK_DST;
 371                 if (vid != 0) {
 372                         flow_desc.fd_vid = vid;
 373                         flow_desc.fd_mask |= FLOW_LINK_VID;
 374                 }
 375 
 376                 grp->mbg_id = atomic_add_32_nv(&mac_bcast_id, 1);
 377                 (void) sprintf(flow_name,
 378                     "mac/%s/mcast%d", mip->mi_name, grp->mbg_id);
 379 
 380                 rc = mac_flow_create(&flow_desc, NULL, flow_name,
 381                     grp, FLOW_MCAST, &grp->mbg_flow_ent);
 382                 if (rc != 0) {
 383                         kmem_free(grp->mbg_addr, addr_len);
 384                         kmem_cache_free(mac_bcast_grp_cache, grp);
 385                         goto fail;
 386                 }
 387                 grp->mbg_flow_ent->fe_mbg = grp;
 388                 mip->mi_bcast_ngrps++;
 389 
 390                 /*
 391                  * Initial creation reference on the flow. This is released
 392                  * in the corresponding delete action i_mac_bcast_delete()
 393                  */
 394                 FLOW_REFHOLD(grp->mbg_flow_ent);
 395 
 396                 /*




 356                     grp);
 357 
 358                 grp->mbg_addr = kmem_zalloc(addr_len, KM_SLEEP);
 359                 bcopy(addr, grp->mbg_addr, addr_len);
 360                 grp->mbg_addrtype = addrtype;
 361                 grp->mbg_vid = vid;
 362 
 363                 /*
 364                  * Add a new flow to the underlying MAC.
 365                  */
 366                 bzero(&flow_desc, sizeof (flow_desc));
 367                 bcopy(addr, &flow_desc.fd_dst_mac, addr_len);
 368                 flow_desc.fd_mac_len = (uint32_t)addr_len;
 369 
 370                 flow_desc.fd_mask = FLOW_LINK_DST;
 371                 if (vid != 0) {
 372                         flow_desc.fd_vid = vid;
 373                         flow_desc.fd_mask |= FLOW_LINK_VID;
 374                 }
 375 
 376                 grp->mbg_id = atomic_inc_32_nv(&mac_bcast_id);
 377                 (void) sprintf(flow_name,
 378                     "mac/%s/mcast%d", mip->mi_name, grp->mbg_id);
 379 
 380                 rc = mac_flow_create(&flow_desc, NULL, flow_name,
 381                     grp, FLOW_MCAST, &grp->mbg_flow_ent);
 382                 if (rc != 0) {
 383                         kmem_free(grp->mbg_addr, addr_len);
 384                         kmem_cache_free(mac_bcast_grp_cache, grp);
 385                         goto fail;
 386                 }
 387                 grp->mbg_flow_ent->fe_mbg = grp;
 388                 mip->mi_bcast_ngrps++;
 389 
 390                 /*
 391                  * Initial creation reference on the flow. This is released
 392                  * in the corresponding delete action i_mac_bcast_delete()
 393                  */
 394                 FLOW_REFHOLD(grp->mbg_flow_ent);
 395 
 396                 /*