Lines Matching defs:rstruct

1409 	xpvtap_rs_t *rstruct;
1418 rstruct = kmem_alloc(sizeof (xpvtap_rs_t), KM_SLEEP);
1426 rstruct->rs_free_size = (max_val >> 6) * 8;
1428 rstruct->rs_free_size = ((max_val >> 6) + 1) * 8;
1430 rstruct->rs_free = kmem_alloc(rstruct->rs_free_size, KM_SLEEP);
1433 rstruct->rs_min = min_val;
1434 rstruct->rs_last = min_val;
1435 rstruct->rs_max = max_val;
1436 mutex_init(&rstruct->rs_mutex, NULL, MUTEX_DRIVER, NULL);
1437 rstruct->rs_flushing = B_FALSE;
1440 array_size = rstruct->rs_free_size >> 3;
1442 rstruct->rs_free[index] = (uint64_t)0xFFFFFFFFFFFFFFFF;
1446 *handle = rstruct;
1459 xpvtap_rs_t *rstruct;
1464 rstruct = (xpvtap_rs_t *)*handle;
1466 mutex_destroy(&rstruct->rs_mutex);
1467 kmem_free(rstruct->rs_free, rstruct->rs_free_size);
1468 kmem_free(rstruct, sizeof (xpvtap_rs_t));
1482 xpvtap_rs_t *rstruct;
1494 rstruct = (xpvtap_rs_t *)handle;
1496 mutex_enter(&rstruct->rs_mutex);
1497 min = rstruct->rs_min;
1498 max = rstruct->rs_max;
1507 array_idx = rstruct->rs_last >> 6;
1508 free = rstruct->rs_free[array_idx];
1509 last = rstruct->rs_last & 0x3F;
1514 *resource = rstruct->rs_last;
1517 rstruct->rs_free[array_idx] &= ~((uint64_t)1 << last);
1524 rstruct->rs_last++;
1525 if (rstruct->rs_last > max) {
1526 rstruct->rs_last = rstruct->rs_min;
1530 mutex_exit(&rstruct->rs_mutex);
1539 rstruct->rs_last++;
1540 if (rstruct->rs_last > max) {
1541 rstruct->rs_last = rstruct->rs_min;
1545 mutex_exit(&rstruct->rs_mutex);
1559 xpvtap_rs_t *rstruct;
1566 rstruct = (xpvtap_rs_t *)handle;
1567 ASSERT(resource >= rstruct->rs_min);
1568 ASSERT(resource <= rstruct->rs_max);
1570 if (!rstruct->rs_flushing) {
1571 mutex_enter(&rstruct->rs_mutex);
1577 rstruct->rs_free[array_idx] |= ((uint64_t)1 << offset);
1579 if (!rstruct->rs_flushing) {
1580 mutex_exit(&rstruct->rs_mutex);
1592 xpvtap_rs_t *rstruct;
1603 rstruct = (xpvtap_rs_t *)handle;
1605 mutex_enter(&rstruct->rs_mutex);
1606 min = rstruct->rs_min;
1607 max = rstruct->rs_max;
1609 rstruct->rs_flushing = B_TRUE;
1617 array_idx = rstruct->rs_last >> 6;
1618 free = rstruct->rs_free[array_idx];
1619 last = rstruct->rs_last & 0x3F;
1624 (*callback)(arg, rstruct->rs_last);
1627 rstruct->rs_free[array_idx] |= ((uint64_t)1 << last);
1631 rstruct->rs_last++;
1632 if (rstruct->rs_last > max) {
1633 rstruct->rs_last = rstruct->rs_min;
1637 mutex_exit(&rstruct->rs_mutex);