Changeset 88759 in vbox for trunk/src/VBox/Devices/Network/slirp
- Timestamp:
- Apr 28, 2021 11:35:04 PM (4 years ago)
- svn:sync-xref-src-repo-rev:
- 144089
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/Network/slirp/misc.c
r88543 r88759 84 84 85 85 #ifndef VBOX_NAT_TST_QUEUE 86 86 87 /* 87 88 * Set fd blocking and non-blocking … … 106 107 } 107 108 108 # if !defined(VBOX_NAT_MEM_DEBUG) 109 # if defined (LOG_ENABLED) 110 # undef LogFlowFunc 111 # define LogFlowFunc(x) 112 113 # undef LogFlowFuncEnter 114 # define LogFlowFuncEnter() 115 116 # undef LogFlowFuncLeave 117 # define LogFlowFuncLeave() 118 119 # undef Log2 120 # define Log2(x) 121 # endif /* !LOG_ENABLED */ 122 # else /* VBOX_NAT_MEM_DEBUG */ 123 # define NAT_MEM_LOG_ENABLED 109 110 # if defined(VBOX_NAT_MEM_DEBUG) 111 # define NATMEM_LOG_FLOW_FUNC(a) LogFlowFunc(a) 112 # define NATMEM_LOG_FLOW_FUNC_ENTER() LogFlowFuncEnter() 113 # define NATMEM_LOG_FLOW_FUNC_LEAVE() LogFlowFuncLeave() 114 # define NATMEM_LOG_2(a) Log2(a) 115 # else 116 # define NATMEM_LOG_FLOW_FUNC(a) do { } while (0) 117 # define NATMEM_LOG_FLOW_FUNC_ENTER() do { } while (0) 118 # define NATMEM_LOG_FLOW_FUNC_LEAVE() do { } while (0) 119 # define NATMEM_LOG_2(a) do { } while (0) 124 120 # endif 125 121 … … 136 132 DECLINLINE(void) slirp_zone_check_and_send_pending(uma_zone_t zone) 137 133 { 138 LogFlowFunc(("ENTER: zone:%R[mzone]\n", zone));134 NATMEM_LOG_FLOW_FUNC(("ENTER: zone:%R[mzone]\n", zone)); 139 135 if ( zone->fDoXmitPending 140 136 && zone->master_zone == NULL) … … 148 144 rc2 = RTCritSectEnter(&zone->csZone); AssertRC(rc2); 149 145 } 150 LogFlowFuncLeave();146 NATMEM_LOG_FLOW_FUNC_LEAVE(); 151 147 } 152 148 … … 159 155 int rc; 160 156 161 LogFlowFunc(("ENTER: %R[mzone], size:%d, pflags:%p, %RTbool\n", zone, size, pflags, fWait)); 162 # ifndef NAT_MEM_LOG_ENABLED 163 NOREF(size); 164 NOREF(pflags); 165 NOREF(fWait); 166 # endif 157 NATMEM_LOG_FLOW_FUNC(("ENTER: %R[mzone], size:%d, pflags:%p, %RTbool\n", zone, size, pflags, fWait)); RT_NOREF(size, pflags, fWait); 167 158 RTCritSectEnter(&zone->csZone); 168 159 for (;;) … … 194 185 { 195 186 /* We're on the master zone and we can't allocate more. */ 196 Log2(("NAT: no room on %s zone\n", zone->name));187 NATMEM_LOG_2(("NAT: no room on %s zone\n", zone->name)); 197 188 /* AssertMsgFailed(("NAT: OOM!")); */ 198 189 zone->fDoXmitPending = true; … … 207 198 { 208 199 /* No room on master */ 209 Log2(("NAT: no room on %s zone for %s zone\n", zone->master_zone->name, zone->name));200 NATMEM_LOG_2(("NAT: no room on %s zone for %s zone\n", zone->master_zone->name, zone->name)); 210 201 break; 211 202 } … … 230 221 } 231 222 RTCritSectLeave(&zone->csZone); 232 LogFlowFunc(("LEAVE: %p\n", ret));223 NATMEM_LOG_FLOW_FUNC(("LEAVE: %p\n", ret)); 233 224 return ret; 234 225 } … … 238 229 struct item *it; 239 230 uma_zone_t zone; 240 # ifndef NAT_MEM_LOG_ENABLED241 NOREF(size);242 NOREF(flags);243 # endif244 231 245 232 Assert(item); 246 233 it = &((struct item *)item)[-1]; 247 LogFlowFunc(("ENTER: item:%p(%R[mzoneitem]), size:%d, flags:%RX8\n", item, it, size, flags));234 NATMEM_LOG_FLOW_FUNC(("ENTER: item:%p(%R[mzoneitem]), size:%d, flags:%RX8\n", item, it, size, flags)); RT_NOREF(size, flags); 248 235 Assert(it->magic == ITEM_MAGIC); 249 236 zone = it->zone; … … 266 253 slirp_zone_check_and_send_pending(zone); /* may exit+enter the cs! */ 267 254 RTCritSectLeave(&zone->csZone); 268 LogFlowFuncLeave();255 NATMEM_LOG_FLOW_FUNC_LEAVE(); 269 256 } 270 257 … … 273 260 { 274 261 uma_zone_t zone = NULL; 275 # ifndef NAT_MEM_LOG_ENABLED 276 NOREF(flags1); 277 NOREF(flags2); 278 # endif 279 LogFlowFunc(("ENTER: name:%s size:%d, ctor:%p, dtor:%p, init:%p, fini:%p, flags1:%RX32, flags2:%RX32\n", 280 name, ctor, dtor, init, fini, flags1, flags2)); 262 NATMEM_LOG_FLOW_FUNC(("ENTER: name:%s size:%d, ctor:%p, dtor:%p, init:%p, fini:%p, flags1:%RX32, flags2:%RX32\n", 263 name, ctor, dtor, init, fini, flags1, flags2)); RT_NOREF(flags1, flags2); 281 264 zone = RTMemAllocZ(sizeof(struct uma_zone)); 282 265 Assert((pData)); … … 292 275 zone->pfFree = slirp_uma_free; 293 276 RTCritSectInit(&zone->csZone); 294 LogFlowFunc(("LEAVE: %R[mzone]\n", zone));277 NATMEM_LOG_FLOW_FUNC(("LEAVE: %R[mzone]\n", zone)); 295 278 return zone; 296 279 … … 301 284 uma_zone_t zone; 302 285 Assert(master); 303 LogFlowFunc(("ENTER: name:%s ctor:%p, dtor:%p, init:%p, fini:%p, master:%R[mzone]\n",286 NATMEM_LOG_FLOW_FUNC(("ENTER: name:%s ctor:%p, dtor:%p, init:%p, fini:%p, master:%R[mzone]\n", 304 287 name, ctor, dtor, init, fini, master)); 305 288 zone = RTMemAllocZ(sizeof(struct uma_zone)); 306 289 if (zone == NULL) 307 290 { 308 LogFlowFunc(("LEAVE: %R[mzone]\n", NULL));291 NATMEM_LOG_FLOW_FUNC(("LEAVE: %R[mzone]\n", NULL)); 309 292 return NULL; 310 293 } … … 323 306 zone->master_zone = master; 324 307 RTCritSectInit(&zone->csZone); 325 LogFlowFunc(("LEAVE: %R[mzone]\n", zone));308 NATMEM_LOG_FLOW_FUNC(("LEAVE: %R[mzone]\n", zone)); 326 309 return zone; 327 310 } … … 331 314 int i = 0; 332 315 struct item *it; 333 LogFlowFunc(("ENTER: zone:%R[mzone], max:%d\n", zone, max));316 NATMEM_LOG_FLOW_FUNC(("ENTER: zone:%R[mzone], max:%d\n", zone, max)); 334 317 zone->max_items = max; 335 318 zone->area = RTMemAllocZ(max * (sizeof(struct item) + zone->size + sizeof(uint32_t))); … … 342 325 LIST_INSERT_HEAD(&zone->free_items, it, list); 343 326 } 344 LogFlowFuncLeave();327 NATMEM_LOG_FLOW_FUNC_LEAVE(); 345 328 } 346 329 347 330 void uma_zone_set_allocf(uma_zone_t zone, uma_alloc_t pfAlloc) 348 331 { 349 LogFlowFunc(("ENTER: zone:%R[mzone], pfAlloc:%Rfn\n", zone, pfAlloc));332 NATMEM_LOG_FLOW_FUNC(("ENTER: zone:%R[mzone], pfAlloc:%Rfn\n", zone, pfAlloc)); 350 333 zone->pfAlloc = pfAlloc; 351 LogFlowFuncLeave();334 NATMEM_LOG_FLOW_FUNC_LEAVE(); 352 335 } 353 336 354 337 void uma_zone_set_freef(uma_zone_t zone, uma_free_t pfFree) 355 338 { 356 LogFlowFunc(("ENTER: zone:%R[mzone], pfAlloc:%Rfn\n", zone, pfFree));339 NATMEM_LOG_FLOW_FUNC(("ENTER: zone:%R[mzone], pfAlloc:%Rfn\n", zone, pfFree)); 357 340 zone->pfFree = pfFree; 358 LogFlowFuncLeave();341 NATMEM_LOG_FLOW_FUNC_LEAVE(); 359 342 } 360 343 … … 364 347 reference counters */ 365 348 struct item *it = NULL; 366 # ifndef NAT_MEM_LOG_ENABLED 367 NOREF(zone); 368 # endif 369 LogFlowFunc(("ENTER: zone:%R[mzone], mem:%p\n", zone, mem)); 349 NATMEM_LOG_FLOW_FUNC(("ENTER: zone:%R[mzone], mem:%p\n", zone, mem)); RT_NOREF(zone); 370 350 it = (struct item *)mem; /* 1st element */ 371 351 Assert(mem != NULL); … … 373 353 /* for returning pointer to counter we need get 0 elemnt */ 374 354 Assert(it[-1].magic == ITEM_MAGIC); 375 LogFlowFunc(("LEAVE: %p\n", &it[-1].ref_count));355 NATMEM_LOG_FLOW_FUNC(("LEAVE: %p\n", &it[-1].ref_count)); 376 356 return &it[-1].ref_count; 377 357 } … … 380 360 { 381 361 void *mem; 382 # ifndef NAT_MEM_LOG_ENABLED383 NOREF(how);384 # endif385 362 Assert(zone->magic == ZONE_MAGIC); 386 LogFlowFunc(("ENTER: zone:%R[mzone], args:%p, how:%RX32\n", zone, args, how));363 NATMEM_LOG_FLOW_FUNC(("ENTER: zone:%R[mzone], args:%p, how:%RX32\n", zone, args, how)); RT_NOREF(how); 387 364 if (zone->pfAlloc == NULL) 388 365 { 389 LogFlowFunc(("LEAVE: NULL\n"));366 NATMEM_LOG_FLOW_FUNC(("LEAVE: NULL\n")); 390 367 return NULL; 391 368 } … … 398 375 } 399 376 RTCritSectLeave(&zone->csZone); 400 LogFlowFunc(("LEAVE: %p\n", mem));377 NATMEM_LOG_FLOW_FUNC(("LEAVE: %p\n", mem)); 401 378 return mem; 402 379 } … … 404 381 void uma_zfree(uma_zone_t zone, void *item) 405 382 { 406 LogFlowFunc(("ENTER: zone:%R[mzone], item:%p\n", zone, item));383 NATMEM_LOG_FLOW_FUNC(("ENTER: zone:%R[mzone], item:%p\n", zone, item)); 407 384 uma_zfree_arg(zone, item, NULL); 408 LogFlowFuncLeave();385 NATMEM_LOG_FLOW_FUNC_LEAVE(); 409 386 } 410 387 … … 415 392 Assert((zone->pfFree)); 416 393 Assert((mem)); 417 LogFlowFunc(("ENTER: zone:%R[mzone], mem:%p, flags:%p\n", zone, mem, flags)); 418 # ifndef NAT_MEM_LOG_ENABLED 419 NOREF(flags); 420 # endif 394 NATMEM_LOG_FLOW_FUNC(("ENTER: zone:%R[mzone], mem:%p, flags:%p\n", zone, mem, flags)); RT_NOREF(flags); 421 395 422 396 RTCritSectEnter(&zone->csZone); … … 425 399 Assert((zone->magic == ZONE_MAGIC && zone == it->zone)); 426 400 427 zone->pfFree(mem, 401 zone->pfFree(mem, 0, 0); 428 402 RTCritSectLeave(&zone->csZone); 429 LogFlowFuncLeave(); 403 404 NATMEM_LOG_FLOW_FUNC_LEAVE(); 430 405 } 431 406 … … 433 408 { 434 409 int fExhausted; 435 LogFlowFunc(("ENTER: zone:%R[mzone]\n", zone));410 NATMEM_LOG_FLOW_FUNC(("ENTER: zone:%R[mzone]\n", zone)); 436 411 RTCritSectEnter(&zone->csZone); 437 412 fExhausted = (zone->cur_items == zone->max_items); 438 413 RTCritSectLeave(&zone->csZone); 439 LogFlowFunc(("LEAVE: %RTbool\n", fExhausted));414 NATMEM_LOG_FLOW_FUNC(("LEAVE: %RTbool\n", fExhausted)); 440 415 return fExhausted; 441 416 } … … 448 423 /* vvl: Huh? What to do with zone which hasn't got backstore ? */ 449 424 Assert((zone->master_zone)); 450 LogFlowFunc(("ENTER: zone:%R[mzone]\n", zone));425 NATMEM_LOG_FLOW_FUNC(("ENTER: zone:%R[mzone]\n", zone)); 451 426 master_zone = zone->master_zone; 452 427 while (!LIST_EMPTY(&zone->free_items)) … … 468 443 RTCritSectLeave(&master_zone->csZone); 469 444 } 470 LogFlowFuncLeave();445 NATMEM_LOG_FLOW_FUNC_LEAVE(); 471 446 } 472 447 … … 474 449 { 475 450 /** @todo (vvl) make it wiser */ 476 LogFlowFunc(("ENTER: mem:%p, arg:%p\n", mem, arg)); 451 NATMEM_LOG_FLOW_FUNC(("ENTER: mem:%p, arg:%p\n", mem, arg)); 452 RT_NOREF(arg); 477 453 Assert(mem); 478 # ifndef NAT_MEM_LOG_ENABLED479 NOREF(arg);480 # endif481 454 RTMemFree(mem); 482 LogFlowFuncLeave();455 NATMEM_LOG_FLOW_FUNC_LEAVE(); 483 456 } 484 457 485 458 void *uma_zalloc(uma_zone_t zone, int len) 486 459 { 487 # ifndef NAT_MEM_LOG_ENABLED 488 NOREF(zone); 489 NOREF(len); 490 # endif 491 LogFlowFunc(("ENTER: zone:%R[mzone], len:%d\n", zone, len)); 492 LogFlowFunc(("LEAVE: NULL")); 460 NATMEM_LOG_FLOW_FUNC(("ENTER: zone:%R[mzone], len:%d\n", zone, len)); 461 RT_NOREF(zone, len); 462 NATMEM_LOG_FLOW_FUNC(("LEAVE: NULL")); 493 463 return NULL; 494 464 } … … 498 468 struct mbuf *m; 499 469 int size = MCLBYTES; 500 LogFlowFunc(("ENTER: cbMin:%d, ppvBuf:%p, pcbBuf:%p\n", cbMin, ppvBuf, pcbBuf));470 NATMEM_LOG_FLOW_FUNC(("ENTER: cbMin:%d, ppvBuf:%p, pcbBuf:%p\n", cbMin, ppvBuf, pcbBuf)); 501 471 502 472 *ppvBuf = NULL; … … 512 482 { 513 483 AssertMsgFailed(("Unsupported size %zu", cbMin)); 514 LogFlowFunc(("LEAVE: NULL (bad size %zu)\n", cbMin));484 NATMEM_LOG_FLOW_FUNC(("LEAVE: NULL (bad size %zu)\n", cbMin)); 515 485 return NULL; 516 486 } … … 519 489 if (m == NULL) 520 490 { 521 LogFlowFunc(("LEAVE: NULL\n"));491 NATMEM_LOG_FLOW_FUNC(("LEAVE: NULL\n")); 522 492 return NULL; 523 493 } … … 525 495 *ppvBuf = mtod(m, void *); 526 496 *pcbBuf = size; 527 LogFlowFunc(("LEAVE: %p\n", m));497 NATMEM_LOG_FLOW_FUNC(("LEAVE: %p\n", m)); 528 498 return m; 529 499 } … … 532 502 { 533 503 534 LogFlowFunc(("ENTER: m:%p, pu8Buf:%p\n", m, pu8Buf));504 NATMEM_LOG_FLOW_FUNC(("ENTER: m:%p, pu8Buf:%p\n", m, pu8Buf)); 535 505 if ( !pu8Buf 536 506 && pu8Buf != mtod(m, uint8_t *)) 537 507 RTMemFree(pu8Buf); /* This buffer was allocated on heap */ 538 508 m_freem(pData, m); 539 LogFlowFuncLeave();509 NATMEM_LOG_FLOW_FUNC_LEAVE(); 540 510 } 541 511 … … 543 513 { 544 514 RTCritSectEnter(&zone->csZone); 545 LogFlowFunc(("ENTER: zone:%R[mzone]\n", zone));515 NATMEM_LOG_FLOW_FUNC(("ENTER: zone:%R[mzone]\n", zone)); 546 516 LogRel(("NAT: Zone(nm:%s, used:%d)\n", zone->name, zone->cur_items)); 547 517 RTMemFree(zone->area); … … 549 519 RTCritSectDelete(&zone->csZone); 550 520 RTMemFree(zone); 551 LogFlowFuncLeave();521 NATMEM_LOG_FLOW_FUNC_LEAVE(); 552 522 } 553 523 554 524 void m_fini(PNATState pData) 555 525 { 556 LogFlowFuncEnter();526 NATMEM_LOG_FLOW_FUNC_ENTER(); 557 527 # define ZONE_DESTROY(zone) do { zone_destroy((zone)); (zone) = NULL;} while (0) 558 528 ZONE_DESTROY(pData->zone_clust); … … 565 535 # undef ZONE_DESTROY 566 536 /** @todo do finalize here.*/ 567 LogFlowFuncLeave();537 NATMEM_LOG_FLOW_FUNC_LEAVE(); 568 538 } 569 539 … … 577 547 if_mru = 1500; 578 548 } 549 579 550 #endif /* VBOX_NAT_TST_QUEUE */
Note:
See TracChangeset
for help on using the changeset viewer.