Lines Matching refs:cmo
156 if (viodev->cmo.entitled > viodev->cmo.allocated) in vio_cmo_alloc()
157 reserve_free = viodev->cmo.entitled - viodev->cmo.allocated; in vio_cmo_alloc()
168 viodev->cmo.allocated += size; in vio_cmo_alloc()
203 if (viodev->cmo.allocated > viodev->cmo.entitled) { in vio_cmo_dealloc()
204 excess_freed = min(reserve_freed, (viodev->cmo.allocated - in vio_cmo_dealloc()
205 viodev->cmo.entitled)); in vio_cmo_dealloc()
210 viodev->cmo.allocated -= (reserve_freed + excess_freed); in vio_cmo_dealloc()
236 tmp = min3(spare_needed, reserve_freed, (viodev->cmo.entitled - VIO_CMO_MIN_ENT)); in vio_cmo_dealloc()
239 viodev->cmo.entitled -= tmp; in vio_cmo_dealloc()
321 if ((viodev->cmo.entitled > viodev->cmo.allocated) && in vio_cmo_entitlement_update()
322 (viodev->cmo.entitled > VIO_CMO_MIN_ENT)) in vio_cmo_entitlement_update()
323 avail += viodev->cmo.entitled - in vio_cmo_entitlement_update()
324 max_t(size_t, viodev->cmo.allocated, in vio_cmo_entitlement_update()
347 if ((viodev->cmo.entitled > viodev->cmo.allocated) && in vio_cmo_entitlement_update()
348 (viodev->cmo.entitled > VIO_CMO_MIN_ENT)) in vio_cmo_entitlement_update()
349 tmp = viodev->cmo.entitled - in vio_cmo_entitlement_update()
350 max_t(size_t, viodev->cmo.allocated, in vio_cmo_entitlement_update()
352 viodev->cmo.entitled -= min(tmp, delta); in vio_cmo_entitlement_update()
389 struct vio_cmo *cmo; in vio_cmo_balance() local
396 cmo = container_of(work, struct vio_cmo, balance_q.work); in vio_cmo_balance()
401 cmo->min = vio_cmo_num_OF_devs() * VIO_CMO_MIN_ENT; in vio_cmo_balance()
402 BUG_ON(cmo->min > cmo->entitled); in vio_cmo_balance()
403 cmo->spare = min_t(size_t, VIO_CMO_MIN_ENT, (cmo->entitled - cmo->min)); in vio_cmo_balance()
404 cmo->min += cmo->spare; in vio_cmo_balance()
405 cmo->desired = cmo->min; in vio_cmo_balance()
411 avail = cmo->entitled - cmo->spare; in vio_cmo_balance()
415 viodev->cmo.entitled = VIO_CMO_MIN_ENT; in vio_cmo_balance()
416 cmo->desired += (viodev->cmo.desired - VIO_CMO_MIN_ENT); in vio_cmo_balance()
417 avail -= max_t(size_t, viodev->cmo.allocated, VIO_CMO_MIN_ENT); in vio_cmo_balance()
431 if (viodev->cmo.desired <= level) { in vio_cmo_balance()
442 chunk = min(chunk, (viodev->cmo.desired - in vio_cmo_balance()
443 viodev->cmo.entitled)); in vio_cmo_balance()
444 viodev->cmo.entitled += chunk; in vio_cmo_balance()
451 need = max(viodev->cmo.allocated, viodev->cmo.entitled)- in vio_cmo_balance()
452 max(viodev->cmo.allocated, level); in vio_cmo_balance()
462 cmo->reserve.size = cmo->min; in vio_cmo_balance()
463 cmo->excess.free = 0; in vio_cmo_balance()
464 cmo->excess.size = 0; in vio_cmo_balance()
469 if (viodev->cmo.entitled) in vio_cmo_balance()
470 cmo->reserve.size += (viodev->cmo.entitled - in vio_cmo_balance()
473 if (viodev->cmo.allocated > viodev->cmo.entitled) in vio_cmo_balance()
474 need += viodev->cmo.allocated - viodev->cmo.entitled; in vio_cmo_balance()
476 cmo->excess.size = cmo->entitled - cmo->reserve.size; in vio_cmo_balance()
477 cmo->excess.free = cmo->excess.size - need; in vio_cmo_balance()
491 atomic_inc(&viodev->cmo.allocs_failed); in vio_dma_iommu_alloc_coherent()
498 atomic_inc(&viodev->cmo.allocs_failed); in vio_dma_iommu_alloc_coherent()
526 atomic_inc(&viodev->cmo.allocs_failed); in vio_dma_iommu_map_page()
533 atomic_inc(&viodev->cmo.allocs_failed); in vio_dma_iommu_map_page()
568 atomic_inc(&viodev->cmo.allocs_failed); in vio_dma_iommu_map_sg()
576 atomic_inc(&viodev->cmo.allocs_failed); in vio_dma_iommu_map_sg()
669 if (desired >= viodev->cmo.desired) { in vio_cmo_set_dev_desired()
671 vio_cmo.desired += desired - viodev->cmo.desired; in vio_cmo_set_dev_desired()
672 viodev->cmo.desired = desired; in vio_cmo_set_dev_desired()
675 vio_cmo.desired -= viodev->cmo.desired - desired; in vio_cmo_set_dev_desired()
676 viodev->cmo.desired = desired; in vio_cmo_set_dev_desired()
681 if (viodev->cmo.entitled > desired) { in vio_cmo_set_dev_desired()
682 vio_cmo.reserve.size -= viodev->cmo.entitled - desired; in vio_cmo_set_dev_desired()
683 vio_cmo.excess.size += viodev->cmo.entitled - desired; in vio_cmo_set_dev_desired()
689 if (viodev->cmo.allocated < viodev->cmo.entitled) in vio_cmo_set_dev_desired()
690 vio_cmo.excess.free += viodev->cmo.entitled - in vio_cmo_set_dev_desired()
691 max(viodev->cmo.allocated, desired); in vio_cmo_set_dev_desired()
692 viodev->cmo.entitled = desired; in vio_cmo_set_dev_desired()
750 viodev->cmo.desired = in vio_cmo_bus_probe()
752 if (viodev->cmo.desired < VIO_CMO_MIN_ENT) in vio_cmo_bus_probe()
753 viodev->cmo.desired = VIO_CMO_MIN_ENT; in vio_cmo_bus_probe()
765 viodev->cmo.desired = 0; in vio_cmo_bus_probe()
780 vio_cmo.desired += (viodev->cmo.desired - in vio_cmo_bus_probe()
806 vio_cmo.desired += viodev->cmo.desired; in vio_cmo_bus_probe()
829 if (viodev->cmo.allocated) { in vio_cmo_bus_remove()
832 __func__, viodev->cmo.allocated); in vio_cmo_bus_remove()
852 if (viodev->cmo.entitled) { in vio_cmo_bus_remove()
858 vio_cmo.desired -= (viodev->cmo.desired - VIO_CMO_MIN_ENT); in vio_cmo_bus_remove()
865 viodev->cmo.entitled -= VIO_CMO_MIN_ENT; in vio_cmo_bus_remove()
868 if (viodev->cmo.entitled && (vio_cmo.spare < VIO_CMO_MIN_ENT)) { in vio_cmo_bus_remove()
869 tmp = min(viodev->cmo.entitled, (VIO_CMO_MIN_ENT - in vio_cmo_bus_remove()
872 viodev->cmo.entitled -= tmp; in vio_cmo_bus_remove()
876 vio_cmo.excess.size += viodev->cmo.entitled; in vio_cmo_bus_remove()
877 vio_cmo.excess.free += viodev->cmo.entitled; in vio_cmo_bus_remove()
878 vio_cmo.reserve.size -= viodev->cmo.entitled; in vio_cmo_bus_remove()
885 viodev->cmo.entitled = VIO_CMO_MIN_ENT; in vio_cmo_bus_remove()
886 viodev->cmo.desired = VIO_CMO_MIN_ENT; in vio_cmo_bus_remove()
887 atomic_set(&viodev->cmo.allocs_failed, 0); in vio_cmo_bus_remove()
955 return sprintf(buf, "%lu\n", to_vio_dev(dev)->cmo.name); \
962 return sprintf(buf, "%d\n", atomic_read(&viodev->cmo.allocs_failed)); in viodev_cmo_allocs_failed_show()
969 atomic_set(&viodev->cmo.allocs_failed, 0); in viodev_cmo_allocs_failed_reset()
1247 memset(&viodev->cmo, 0, sizeof(viodev->cmo)); in vio_bus_probe()