• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /macosx-10.10/xnu-2782.1.97/osfmk/kern/

Lines Matching defs:le

305 	struct ledger_entry *le;
310 le = &ledger->l_entries[entry];
311 if ((le->le_flags & LF_ENTRY_ACTIVE) == 0) {
312 flag_set(&le->le_flags, LF_ENTRY_ACTIVE);
374 struct ledger_entry *le = &ledger->l_entries[i];
377 le->le_flags = et->et_flags;
380 flag_clear(&le->le_flags, LF_ENTRY_ACTIVE);
386 flag_set(&le->le_flags, LEDGER_ACTION_CALLBACK);
387 le->le_credit = 0;
388 le->le_debit = 0;
389 le->le_limit = LEDGER_LIMIT_INFINITY;
390 le->le_warn_level = LEDGER_LIMIT_INFINITY;
391 le->_le.le_refill.le_refill_period = 0;
392 le->_le.le_refill.le_last_refill = 0;
461 warn_level_exceeded(struct ledger_entry *le)
465 assert((le->le_credit >= 0) && (le->le_debit >= 0));
471 balance = le->le_credit - le->le_debit;
472 if ((le->le_warn_level != LEDGER_LIMIT_INFINITY) && (balance > le->le_warn_level))
481 limit_exceeded(struct ledger_entry *le)
485 assert((le->le_credit >= 0) && (le->le_debit >= 0));
487 balance = le->le_credit - le->le_debit;
488 if ((le->le_limit <= 0) && (balance < le->le_limit))
491 if ((le->le_limit > 0) && (balance > le->le_limit))
513 ledger_limit_entry_wakeup(struct ledger_entry *le)
517 if (!limit_exceeded(le)) {
518 flags = flag_clear(&le->le_flags, LF_CALLED_BACK);
520 while (le->le_flags & LF_WAKE_NEEDED) {
521 flag_clear(&le->le_flags, LF_WAKE_NEEDED);
522 thread_wakeup((event_t)le);
534 struct ledger_entry *le;
537 le = &ledger->l_entries[entry];
539 assert(le->le_limit != LEDGER_LIMIT_INFINITY);
545 if (flag_set(&le->le_flags, LF_REFILL_INPROGRESS) & LF_REFILL_INPROGRESS) {
554 if (now <= le->_le.le_refill.le_last_refill) {
555 flag_clear(&le->le_flags, LF_REFILL_INPROGRESS);
563 period = le->_le.le_refill.le_refill_period;
564 elapsed = now - le->_le.le_refill.le_last_refill;
566 flag_clear(&le->le_flags, LF_REFILL_INPROGRESS);
585 periods = (now - le->_le.le_refill.le_last_refill) / period;
587 balance = le->le_credit - le->le_debit;
588 due = periods * le->le_limit;
594 OSAddAtomic64(due, &le->le_debit);
596 assert(le->le_debit >= 0);
604 le->_le.le_refill.le_last_refill = now;
606 le->_le.le_refill.le_last_refill += (le->_le.le_refill.le_refill_period * periods);
608 flag_clear(&le->le_flags, LF_REFILL_INPROGRESS);
611 if (!limit_exceeded(le))
612 ledger_limit_entry_wakeup(le);
657 struct ledger_entry *le;
659 le = &ledger->l_entries[entry];
661 if (le->le_flags & LF_TRACKING_MAX) {
662 ledger_amount_t balance = le->le_credit - le->le_debit;
664 struct _le_peak *p = &le->_le.le_peaks[now % NTOCKS];
682 if (le->le_flags & LF_REFILL_SCHEDULED) {
684 if ((now - le->_le.le_refill.le_last_refill) > le->_le.le_refill.le_refill_period)
688 if (limit_exceeded(le)) {
699 if ((le->le_flags & LEDGER_ACTION_BLOCK) ||
700 (!(le->le_flags & LF_CALLED_BACK) &&
711 if (le->le_flags & LF_WAKE_NEEDED)
712 ledger_limit_entry_wakeup(le);
714 if (le->le_flags & LEDGER_ACTION_CALLBACK) {
720 if (warn_level_exceeded(le)) {
724 if ((le->le_flags & LF_WARNED) == 0) {
737 if (le->le_flags & LF_WARNED) {
751 if ((le->le_flags & LF_PANIC_ON_NEGATIVE) &&
752 (le->le_credit < le->le_debit)) {
754 ledger, entry, le, le->le_credit - le->le_debit);
765 struct ledger_entry *le;
773 le = &ledger->l_entries[entry];
775 old = OSAddAtomic64(amount, &le->le_credit);
819 struct ledger_entry *le;
824 le = &ledger->l_entries[entry];
827 if (le->le_credit > le->le_debit) {
828 if (!OSCompareAndSwap64(le->le_debit, le->le_credit, &le->le_debit))
830 lprintf(("%p zeroed %lld->%lld\n", current_thread(), le->le_debit, le->le_credit));
831 } else if (le->le_credit < le->le_debit) {
832 if (!OSCompareAndSwap64(le->le_credit, le->le_debit, &le->le_credit))
834 lprintf(("%p zeroed %lld->%lld\n", current_thread(), le->le_credit, le->le_debit));
843 struct ledger_entry *le;
848 le = &ledger->l_entries[entry];
849 *limit = le->le_limit;
868 struct ledger_entry *le;
874 le = &ledger->l_entries[entry];
885 le->le_limit = limit;
886 le->_le.le_refill.le_last_refill = 0;
887 flag_clear(&le->le_flags, LF_CALLED_BACK);
888 flag_clear(&le->le_flags, LF_WARNED);
889 ledger_limit_entry_wakeup(le);
895 le->le_warn_level = (le->le_limit * warn_level_percentage) / 100;
897 le->le_warn_level = LEDGER_LIMIT_INFINITY;
907 struct ledger_entry *le;
911 le = &ledger->l_entries[entry];
913 if (!ENTRY_VALID(ledger, entry) || !(le->le_flags & LF_TRACKING_MAX)) {
921 *max_observed_balance = le->le_credit - le->le_debit;
924 if (!TOCKSTAMP_IS_STALE(now, le->_le.le_peaks[i].le_time) &&
925 (le->_le.le_peaks[i].le_max > *max_observed_balance)) {
930 *max_observed_balance = le->_le.le_peaks[i].le_max;
1059 struct ledger_entry *le;
1064 le = &ledger->l_entries[entry];
1065 *period = abstime_to_nsecs(le->_le.le_refill.le_refill_period);
1076 struct ledger_entry *le;
1082 le = &ledger->l_entries[entry];
1088 assert(le->le_limit != LEDGER_LIMIT_INFINITY);
1090 if (le->le_flags & LF_TRACKING_MAX) {
1097 le->_le.le_refill.le_refill_period = nsecs_to_abstime(period);
1105 le->_le.le_refill.le_last_refill = mach_absolute_time();
1108 flag_set(&le->le_flags, LF_REFILL_SCHEDULED);
1119 struct ledger_entry *le;
1124 le = &ledger->l_entries[entry];
1126 flag_clear(&le->le_flags, LF_REFILL_SCHEDULED);
1179 struct ledger_entry *le;
1188 le = &ledger->l_entries[entry];
1190 old = OSAddAtomic64(amount, &le->le_debit);
1309 struct ledger_entry *le;
1314 le = &l->l_entries[i];
1318 if (limit_exceeded(le) == FALSE) {
1319 if (le->le_flags & LEDGER_ACTION_CALLBACK) {
1329 if (warn_level_exceeded(le)) {
1330 flags = flag_set(&le->le_flags, LF_WARNED);
1335 flags = flag_clear(&le->le_flags, LF_WARNED);
1346 if (le->le_flags & LF_REFILL_SCHEDULED) {
1347 if ((le->_le.le_refill.le_last_refill + le->_le.le_refill.le_refill_period) > now) {
1349 if (limit_exceeded(le) == FALSE)
1354 if (le->le_flags & LEDGER_ACTION_BLOCK)
1356 if ((le->le_flags & LEDGER_ACTION_CALLBACK) == 0)
1364 flags = flag_set(&le->le_flags, LF_CALLED_BACK);
1380 struct ledger_entry *le;
1383 le = &l->l_entries[i];
1384 if ((!limit_exceeded(le)) ||
1385 ((le->le_flags & LEDGER_ACTION_BLOCK) == 0))
1389 ret = assert_wait_deadline(le, TRUE,
1390 le->_le.le_refill.le_last_refill + le->_le.le_refill.le_refill_period);
1395 flag_set(&le->le_flags, LF_WAKE_NEEDED);
1418 struct ledger_entry *le;
1423 le = &ledger->l_entries[entry];
1425 *credit = le->le_credit;
1426 *debit = le->le_debit;
1434 struct ledger_entry *le;
1439 le = &ledger->l_entries[entry];
1441 flag_clear(&le->le_flags, LF_CALLED_BACK);
1449 struct ledger_entry *le;
1454 le = &ledger->l_entries[entry];
1456 flag_clear(&le->le_flags, LF_PANIC_ON_NEGATIVE);
1464 struct ledger_entry *le;
1469 le = &ledger->l_entries[entry];
1471 assert((le->le_credit >= 0) && (le->le_debit >= 0));
1473 *balance = le->le_credit - le->le_debit;
1518 ledger_fill_entry_info(struct ledger_entry *le,
1522 assert(le != NULL);
1527 lei->lei_limit = le->le_limit;
1528 lei->lei_credit = le->le_credit;
1529 lei->lei_debit = le->le_debit;
1531 lei->lei_refill_period = (le->le_flags & LF_REFILL_SCHEDULED) ?
1532 abstime_to_nsecs(le->_le.le_refill.le_refill_period) : 0;
1533 lei->lei_last_refill = abstime_to_nsecs(now - le->_le.le_refill.le_last_refill);
1540 struct ledger_entry *le;
1555 le = l->l_entries;
1558 ledger_fill_entry_info(le, lei, now);
1559 le++;
1577 struct ledger_entry *le = &ledger->l_entries[entry];
1579 ledger_fill_entry_info(le, lei, now);