Lines Matching defs:cmo
155 if (viodev->cmo.entitled > viodev->cmo.allocated)
156 reserve_free = viodev->cmo.entitled - viodev->cmo.allocated;
167 viodev->cmo.allocated += size;
202 if (viodev->cmo.allocated > viodev->cmo.entitled) {
203 excess_freed = min(reserve_freed, (viodev->cmo.allocated -
204 viodev->cmo.entitled));
209 viodev->cmo.allocated -= (reserve_freed + excess_freed);
235 tmp = min3(spare_needed, reserve_freed, (viodev->cmo.entitled - VIO_CMO_MIN_ENT));
238 viodev->cmo.entitled -= tmp;
320 if ((viodev->cmo.entitled > viodev->cmo.allocated) &&
321 (viodev->cmo.entitled > VIO_CMO_MIN_ENT))
322 avail += viodev->cmo.entitled -
323 max_t(size_t, viodev->cmo.allocated,
346 if ((viodev->cmo.entitled > viodev->cmo.allocated) &&
347 (viodev->cmo.entitled > VIO_CMO_MIN_ENT))
348 tmp = viodev->cmo.entitled -
349 max_t(size_t, viodev->cmo.allocated,
351 viodev->cmo.entitled -= min(tmp, delta);
388 struct vio_cmo *cmo;
395 cmo = container_of(work, struct vio_cmo, balance_q.work);
400 cmo->min = vio_cmo_num_OF_devs() * VIO_CMO_MIN_ENT;
401 BUG_ON(cmo->min > cmo->entitled);
402 cmo->spare = min_t(size_t, VIO_CMO_MIN_ENT, (cmo->entitled - cmo->min));
403 cmo->min += cmo->spare;
404 cmo->desired = cmo->min;
410 avail = cmo->entitled - cmo->spare;
414 viodev->cmo.entitled = VIO_CMO_MIN_ENT;
415 cmo->desired += (viodev->cmo.desired - VIO_CMO_MIN_ENT);
416 avail -= max_t(size_t, viodev->cmo.allocated, VIO_CMO_MIN_ENT);
430 if (viodev->cmo.desired <= level) {
441 chunk = min(chunk, (viodev->cmo.desired -
442 viodev->cmo.entitled));
443 viodev->cmo.entitled += chunk;
450 need = max(viodev->cmo.allocated, viodev->cmo.entitled)-
451 max(viodev->cmo.allocated, level);
461 cmo->reserve.size = cmo->min;
462 cmo->excess.free = 0;
463 cmo->excess.size = 0;
468 if (viodev->cmo.entitled)
469 cmo->reserve.size += (viodev->cmo.entitled -
472 if (viodev->cmo.allocated > viodev->cmo.entitled)
473 need += viodev->cmo.allocated - viodev->cmo.entitled;
475 cmo->excess.size = cmo->entitled - cmo->reserve.size;
476 cmo->excess.free = cmo->excess.size - need;
490 atomic_inc(&viodev->cmo.allocs_failed);
499 atomic_inc(&viodev->cmo.allocs_failed);
535 atomic_inc(&viodev->cmo.allocs_failed);
581 atomic_inc(&viodev->cmo.allocs_failed);
657 if (desired >= viodev->cmo.desired) {
659 vio_cmo.desired += desired - viodev->cmo.desired;
660 viodev->cmo.desired = desired;
663 vio_cmo.desired -= viodev->cmo.desired - desired;
664 viodev->cmo.desired = desired;
669 if (viodev->cmo.entitled > desired) {
670 vio_cmo.reserve.size -= viodev->cmo.entitled - desired;
671 vio_cmo.excess.size += viodev->cmo.entitled - desired;
677 if (viodev->cmo.allocated < viodev->cmo.entitled)
678 vio_cmo.excess.free += viodev->cmo.entitled -
679 max(viodev->cmo.allocated, desired);
680 viodev->cmo.entitled = desired;
738 viodev->cmo.desired =
740 if (viodev->cmo.desired < VIO_CMO_MIN_ENT)
741 viodev->cmo.desired = VIO_CMO_MIN_ENT;
753 viodev->cmo.desired = 0;
768 vio_cmo.desired += (viodev->cmo.desired -
794 vio_cmo.desired += viodev->cmo.desired;
805 * Remove the device from the cmo device list. The minimum entitlement
817 if (viodev->cmo.allocated) {
820 __func__, viodev->cmo.allocated);
840 if (viodev->cmo.entitled) {
846 vio_cmo.desired -= (viodev->cmo.desired - VIO_CMO_MIN_ENT);
853 viodev->cmo.entitled -= VIO_CMO_MIN_ENT;
856 if (viodev->cmo.entitled && (vio_cmo.spare < VIO_CMO_MIN_ENT)) {
857 tmp = min(viodev->cmo.entitled, (VIO_CMO_MIN_ENT -
860 viodev->cmo.entitled -= tmp;
864 vio_cmo.excess.size += viodev->cmo.entitled;
865 vio_cmo.excess.free += viodev->cmo.entitled;
866 vio_cmo.reserve.size -= viodev->cmo.entitled;
873 viodev->cmo.entitled = VIO_CMO_MIN_ENT;
874 viodev->cmo.desired = VIO_CMO_MIN_ENT;
875 atomic_set(&viodev->cmo.allocs_failed, 0);
943 return sprintf(buf, "%lu\n", to_vio_dev(dev)->cmo.name); \
950 return sprintf(buf, "%d\n", atomic_read(&viodev->cmo.allocs_failed));
957 atomic_set(&viodev->cmo.allocs_failed, 0);
1247 memset(&viodev->cmo, 0, sizeof(viodev->cmo));