Lines Matching refs:lmb

159 static int update_lmb_associativity_index(struct drmem_lmb *lmb)  in update_lmb_associativity_index()  argument
171 lmb_node = dlpar_configure_connector(cpu_to_be32(lmb->drc_index), in update_lmb_associativity_index()
209 lmb->aa_index = aa_index; in update_lmb_associativity_index()
213 static struct memory_block *lmb_to_memblock(struct drmem_lmb *lmb) in lmb_to_memblock() argument
218 section_nr = pfn_to_section_nr(PFN_DOWN(lmb->base_addr)); in lmb_to_memblock()
228 struct drmem_lmb *lmb, *start, *end; in get_lmb_range() local
232 for_each_drmem_lmb(lmb) { in get_lmb_range()
233 if (lmb->drc_index == drc_index) { in get_lmb_range()
234 start = lmb; in get_lmb_range()
253 static int dlpar_change_lmb_state(struct drmem_lmb *lmb, bool online) in dlpar_change_lmb_state() argument
258 mem_block = lmb_to_memblock(lmb); in dlpar_change_lmb_state()
274 static int dlpar_online_lmb(struct drmem_lmb *lmb) in dlpar_online_lmb() argument
276 return dlpar_change_lmb_state(lmb, true); in dlpar_online_lmb()
280 static int dlpar_offline_lmb(struct drmem_lmb *lmb) in dlpar_offline_lmb() argument
282 return dlpar_change_lmb_state(lmb, false); in dlpar_offline_lmb()
348 static bool lmb_is_removable(struct drmem_lmb *lmb) in lmb_is_removable() argument
350 if ((lmb->flags & DRCONF_MEM_RESERVED) || in lmb_is_removable()
351 !(lmb->flags & DRCONF_MEM_ASSIGNED)) in lmb_is_removable()
359 if (is_fadump_memory_area(lmb->base_addr, memory_block_size_bytes())) in lmb_is_removable()
368 static int dlpar_remove_lmb(struct drmem_lmb *lmb) in dlpar_remove_lmb() argument
374 if (!lmb_is_removable(lmb)) in dlpar_remove_lmb()
377 mem_block = lmb_to_memblock(lmb); in dlpar_remove_lmb()
381 rc = dlpar_offline_lmb(lmb); in dlpar_remove_lmb()
389 __remove_memory(lmb->base_addr, block_sz); in dlpar_remove_lmb()
393 memblock_remove(lmb->base_addr, block_sz); in dlpar_remove_lmb()
395 invalidate_lmb_associativity_index(lmb); in dlpar_remove_lmb()
396 lmb->flags &= ~DRCONF_MEM_ASSIGNED; in dlpar_remove_lmb()
403 struct drmem_lmb *lmb; in dlpar_memory_remove_by_count() local
414 for_each_drmem_lmb(lmb) { in dlpar_memory_remove_by_count()
415 if (lmb_is_removable(lmb)) in dlpar_memory_remove_by_count()
428 for_each_drmem_lmb(lmb) { in dlpar_memory_remove_by_count()
429 rc = dlpar_remove_lmb(lmb); in dlpar_memory_remove_by_count()
436 drmem_mark_lmb_reserved(lmb); in dlpar_memory_remove_by_count()
446 for_each_drmem_lmb(lmb) { in dlpar_memory_remove_by_count()
447 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_remove_by_count()
450 rc = dlpar_add_lmb(lmb); in dlpar_memory_remove_by_count()
453 lmb->drc_index); in dlpar_memory_remove_by_count()
455 drmem_remove_lmb_reservation(lmb); in dlpar_memory_remove_by_count()
464 for_each_drmem_lmb(lmb) { in dlpar_memory_remove_by_count()
465 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_remove_by_count()
468 dlpar_release_drc(lmb->drc_index); in dlpar_memory_remove_by_count()
470 lmb->base_addr); in dlpar_memory_remove_by_count()
472 drmem_remove_lmb_reservation(lmb); in dlpar_memory_remove_by_count()
486 struct drmem_lmb *lmb; in dlpar_memory_remove_by_index() local
493 for_each_drmem_lmb(lmb) { in dlpar_memory_remove_by_index()
494 if (lmb->drc_index == drc_index) { in dlpar_memory_remove_by_index()
496 rc = dlpar_remove_lmb(lmb); in dlpar_memory_remove_by_index()
498 dlpar_release_drc(lmb->drc_index); in dlpar_memory_remove_by_index()
509 lmb->base_addr); in dlpar_memory_remove_by_index()
511 pr_debug("Memory at %llx was hot-removed\n", lmb->base_addr); in dlpar_memory_remove_by_index()
518 struct drmem_lmb *lmb, *start_lmb, *end_lmb; in dlpar_memory_remove_by_ic() local
541 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_remove_by_ic()
542 if (lmb->flags & DRCONF_MEM_RESERVED) { in dlpar_memory_remove_by_ic()
544 lmb->base_addr, lmb->drc_index); in dlpar_memory_remove_by_ic()
549 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_remove_by_ic()
554 if (!(lmb->flags & DRCONF_MEM_ASSIGNED)) in dlpar_memory_remove_by_ic()
557 rc = dlpar_remove_lmb(lmb); in dlpar_memory_remove_by_ic()
561 drmem_mark_lmb_reserved(lmb); in dlpar_memory_remove_by_ic()
568 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_remove_by_ic()
569 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_remove_by_ic()
577 dlpar_unisolate_drc(lmb->drc_index); in dlpar_memory_remove_by_ic()
579 rc = dlpar_add_lmb(lmb); in dlpar_memory_remove_by_ic()
582 lmb->drc_index); in dlpar_memory_remove_by_ic()
584 drmem_remove_lmb_reservation(lmb); in dlpar_memory_remove_by_ic()
588 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_remove_by_ic()
589 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_remove_by_ic()
592 dlpar_release_drc(lmb->drc_index); in dlpar_memory_remove_by_ic()
594 lmb->base_addr, lmb->drc_index); in dlpar_memory_remove_by_ic()
596 drmem_remove_lmb_reservation(lmb); in dlpar_memory_remove_by_ic()
613 static int dlpar_remove_lmb(struct drmem_lmb *lmb) in dlpar_remove_lmb() argument
632 static int dlpar_add_lmb(struct drmem_lmb *lmb) in dlpar_add_lmb() argument
637 if (lmb->flags & DRCONF_MEM_ASSIGNED) in dlpar_add_lmb()
640 rc = update_lmb_associativity_index(lmb); in dlpar_add_lmb()
642 dlpar_release_drc(lmb->drc_index); in dlpar_add_lmb()
649 nid = of_drconf_to_nid_single(lmb); in dlpar_add_lmb()
654 rc = __add_memory(nid, lmb->base_addr, block_sz, MHP_NONE); in dlpar_add_lmb()
656 invalidate_lmb_associativity_index(lmb); in dlpar_add_lmb()
660 rc = dlpar_online_lmb(lmb); in dlpar_add_lmb()
662 __remove_memory(lmb->base_addr, block_sz); in dlpar_add_lmb()
663 invalidate_lmb_associativity_index(lmb); in dlpar_add_lmb()
665 lmb->flags |= DRCONF_MEM_ASSIGNED; in dlpar_add_lmb()
673 struct drmem_lmb *lmb; in dlpar_memory_add_by_count() local
684 for_each_drmem_lmb(lmb) { in dlpar_memory_add_by_count()
685 if (lmb->flags & DRCONF_MEM_RESERVED) in dlpar_memory_add_by_count()
688 if (!(lmb->flags & DRCONF_MEM_ASSIGNED)) in dlpar_memory_add_by_count()
698 for_each_drmem_lmb(lmb) { in dlpar_memory_add_by_count()
699 if (lmb->flags & DRCONF_MEM_ASSIGNED) in dlpar_memory_add_by_count()
702 rc = dlpar_acquire_drc(lmb->drc_index); in dlpar_memory_add_by_count()
706 rc = dlpar_add_lmb(lmb); in dlpar_memory_add_by_count()
708 dlpar_release_drc(lmb->drc_index); in dlpar_memory_add_by_count()
715 drmem_mark_lmb_reserved(lmb); in dlpar_memory_add_by_count()
724 for_each_drmem_lmb(lmb) { in dlpar_memory_add_by_count()
725 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_add_by_count()
728 rc = dlpar_remove_lmb(lmb); in dlpar_memory_add_by_count()
731 lmb->drc_index); in dlpar_memory_add_by_count()
733 dlpar_release_drc(lmb->drc_index); in dlpar_memory_add_by_count()
735 drmem_remove_lmb_reservation(lmb); in dlpar_memory_add_by_count()
743 for_each_drmem_lmb(lmb) { in dlpar_memory_add_by_count()
744 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_add_by_count()
748 lmb->base_addr, lmb->drc_index); in dlpar_memory_add_by_count()
749 drmem_remove_lmb_reservation(lmb); in dlpar_memory_add_by_count()
763 struct drmem_lmb *lmb; in dlpar_memory_add_by_index() local
769 for_each_drmem_lmb(lmb) { in dlpar_memory_add_by_index()
770 if (lmb->drc_index == drc_index) { in dlpar_memory_add_by_index()
772 rc = dlpar_acquire_drc(lmb->drc_index); in dlpar_memory_add_by_index()
774 rc = dlpar_add_lmb(lmb); in dlpar_memory_add_by_index()
776 dlpar_release_drc(lmb->drc_index); in dlpar_memory_add_by_index()
790 lmb->base_addr, drc_index); in dlpar_memory_add_by_index()
797 struct drmem_lmb *lmb, *start_lmb, *end_lmb; in dlpar_memory_add_by_ic() local
811 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_add_by_ic()
813 if (lmb->flags & DRCONF_MEM_RESERVED) { in dlpar_memory_add_by_ic()
815 lmb->base_addr, lmb->drc_index); in dlpar_memory_add_by_ic()
820 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_add_by_ic()
821 if (lmb->flags & DRCONF_MEM_ASSIGNED) in dlpar_memory_add_by_ic()
824 rc = dlpar_acquire_drc(lmb->drc_index); in dlpar_memory_add_by_ic()
828 rc = dlpar_add_lmb(lmb); in dlpar_memory_add_by_ic()
830 dlpar_release_drc(lmb->drc_index); in dlpar_memory_add_by_ic()
834 drmem_mark_lmb_reserved(lmb); in dlpar_memory_add_by_ic()
840 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_add_by_ic()
841 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_add_by_ic()
844 rc = dlpar_remove_lmb(lmb); in dlpar_memory_add_by_ic()
847 lmb->drc_index); in dlpar_memory_add_by_ic()
849 dlpar_release_drc(lmb->drc_index); in dlpar_memory_add_by_ic()
851 drmem_remove_lmb_reservation(lmb); in dlpar_memory_add_by_ic()
855 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_add_by_ic()
856 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_add_by_ic()
860 lmb->base_addr, lmb->drc_index); in dlpar_memory_add_by_ic()
861 drmem_remove_lmb_reservation(lmb); in dlpar_memory_add_by_ic()