Lines Matching refs:lmb
158 static int update_lmb_associativity_index(struct drmem_lmb *lmb) in update_lmb_associativity_index() argument
170 lmb_node = dlpar_configure_connector(cpu_to_be32(lmb->drc_index), in update_lmb_associativity_index()
208 lmb->aa_index = aa_index; in update_lmb_associativity_index()
212 static struct memory_block *lmb_to_memblock(struct drmem_lmb *lmb) in lmb_to_memblock() argument
217 section_nr = pfn_to_section_nr(PFN_DOWN(lmb->base_addr)); in lmb_to_memblock()
227 struct drmem_lmb *lmb, *start, *end; in get_lmb_range() local
231 for_each_drmem_lmb(lmb) { in get_lmb_range()
232 if (lmb->drc_index == drc_index) { in get_lmb_range()
233 start = lmb; in get_lmb_range()
252 static int dlpar_change_lmb_state(struct drmem_lmb *lmb, bool online) in dlpar_change_lmb_state() argument
257 mem_block = lmb_to_memblock(lmb); in dlpar_change_lmb_state()
273 static int dlpar_online_lmb(struct drmem_lmb *lmb) in dlpar_online_lmb() argument
275 return dlpar_change_lmb_state(lmb, true); in dlpar_online_lmb()
279 static int dlpar_offline_lmb(struct drmem_lmb *lmb) in dlpar_offline_lmb() argument
281 return dlpar_change_lmb_state(lmb, false); in dlpar_offline_lmb()
347 static bool lmb_is_removable(struct drmem_lmb *lmb) in lmb_is_removable() argument
349 if ((lmb->flags & DRCONF_MEM_RESERVED) || in lmb_is_removable()
350 !(lmb->flags & DRCONF_MEM_ASSIGNED)) in lmb_is_removable()
358 if (is_fadump_memory_area(lmb->base_addr, memory_block_size_bytes())) in lmb_is_removable()
367 static int dlpar_remove_lmb(struct drmem_lmb *lmb) in dlpar_remove_lmb() argument
373 if (!lmb_is_removable(lmb)) in dlpar_remove_lmb()
376 mem_block = lmb_to_memblock(lmb); in dlpar_remove_lmb()
380 rc = dlpar_offline_lmb(lmb); in dlpar_remove_lmb()
388 __remove_memory(lmb->base_addr, block_sz); in dlpar_remove_lmb()
392 memblock_remove(lmb->base_addr, block_sz); in dlpar_remove_lmb()
394 invalidate_lmb_associativity_index(lmb); in dlpar_remove_lmb()
395 lmb->flags &= ~DRCONF_MEM_ASSIGNED; in dlpar_remove_lmb()
402 struct drmem_lmb *lmb; in dlpar_memory_remove_by_count() local
413 for_each_drmem_lmb(lmb) { in dlpar_memory_remove_by_count()
414 if (lmb_is_removable(lmb)) in dlpar_memory_remove_by_count()
427 for_each_drmem_lmb(lmb) { in dlpar_memory_remove_by_count()
428 rc = dlpar_remove_lmb(lmb); in dlpar_memory_remove_by_count()
435 drmem_mark_lmb_reserved(lmb); in dlpar_memory_remove_by_count()
445 for_each_drmem_lmb(lmb) { in dlpar_memory_remove_by_count()
446 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_remove_by_count()
449 rc = dlpar_add_lmb(lmb); in dlpar_memory_remove_by_count()
452 lmb->drc_index); in dlpar_memory_remove_by_count()
454 drmem_remove_lmb_reservation(lmb); in dlpar_memory_remove_by_count()
463 for_each_drmem_lmb(lmb) { in dlpar_memory_remove_by_count()
464 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_remove_by_count()
467 dlpar_release_drc(lmb->drc_index); in dlpar_memory_remove_by_count()
469 lmb->base_addr); in dlpar_memory_remove_by_count()
471 drmem_remove_lmb_reservation(lmb); in dlpar_memory_remove_by_count()
485 struct drmem_lmb *lmb; in dlpar_memory_remove_by_index() local
492 for_each_drmem_lmb(lmb) { in dlpar_memory_remove_by_index()
493 if (lmb->drc_index == drc_index) { in dlpar_memory_remove_by_index()
495 rc = dlpar_remove_lmb(lmb); in dlpar_memory_remove_by_index()
497 dlpar_release_drc(lmb->drc_index); in dlpar_memory_remove_by_index()
508 lmb->base_addr); in dlpar_memory_remove_by_index()
510 pr_debug("Memory at %llx was hot-removed\n", lmb->base_addr); in dlpar_memory_remove_by_index()
517 struct drmem_lmb *lmb, *start_lmb, *end_lmb; in dlpar_memory_remove_by_ic() local
540 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_remove_by_ic()
541 if (lmb->flags & DRCONF_MEM_RESERVED) { in dlpar_memory_remove_by_ic()
543 lmb->base_addr, lmb->drc_index); in dlpar_memory_remove_by_ic()
548 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_remove_by_ic()
553 if (!(lmb->flags & DRCONF_MEM_ASSIGNED)) in dlpar_memory_remove_by_ic()
556 rc = dlpar_remove_lmb(lmb); in dlpar_memory_remove_by_ic()
560 drmem_mark_lmb_reserved(lmb); in dlpar_memory_remove_by_ic()
567 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_remove_by_ic()
568 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_remove_by_ic()
576 dlpar_unisolate_drc(lmb->drc_index); in dlpar_memory_remove_by_ic()
578 rc = dlpar_add_lmb(lmb); in dlpar_memory_remove_by_ic()
581 lmb->drc_index); in dlpar_memory_remove_by_ic()
583 drmem_remove_lmb_reservation(lmb); in dlpar_memory_remove_by_ic()
587 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_remove_by_ic()
588 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_remove_by_ic()
591 dlpar_release_drc(lmb->drc_index); in dlpar_memory_remove_by_ic()
593 lmb->base_addr, lmb->drc_index); in dlpar_memory_remove_by_ic()
595 drmem_remove_lmb_reservation(lmb); in dlpar_memory_remove_by_ic()
612 static int dlpar_remove_lmb(struct drmem_lmb *lmb) in dlpar_remove_lmb() argument
631 static int dlpar_add_lmb(struct drmem_lmb *lmb) in dlpar_add_lmb() argument
636 if (lmb->flags & DRCONF_MEM_ASSIGNED) in dlpar_add_lmb()
639 rc = update_lmb_associativity_index(lmb); in dlpar_add_lmb()
641 dlpar_release_drc(lmb->drc_index); in dlpar_add_lmb()
648 nid = of_drconf_to_nid_single(lmb); in dlpar_add_lmb()
653 rc = __add_memory(nid, lmb->base_addr, block_sz, MHP_NONE); in dlpar_add_lmb()
655 invalidate_lmb_associativity_index(lmb); in dlpar_add_lmb()
659 rc = dlpar_online_lmb(lmb); in dlpar_add_lmb()
661 __remove_memory(lmb->base_addr, block_sz); in dlpar_add_lmb()
662 invalidate_lmb_associativity_index(lmb); in dlpar_add_lmb()
664 lmb->flags |= DRCONF_MEM_ASSIGNED; in dlpar_add_lmb()
672 struct drmem_lmb *lmb; in dlpar_memory_add_by_count() local
683 for_each_drmem_lmb(lmb) { in dlpar_memory_add_by_count()
684 if (lmb->flags & DRCONF_MEM_RESERVED) in dlpar_memory_add_by_count()
687 if (!(lmb->flags & DRCONF_MEM_ASSIGNED)) in dlpar_memory_add_by_count()
697 for_each_drmem_lmb(lmb) { in dlpar_memory_add_by_count()
698 if (lmb->flags & DRCONF_MEM_ASSIGNED) in dlpar_memory_add_by_count()
701 rc = dlpar_acquire_drc(lmb->drc_index); in dlpar_memory_add_by_count()
705 rc = dlpar_add_lmb(lmb); in dlpar_memory_add_by_count()
707 dlpar_release_drc(lmb->drc_index); in dlpar_memory_add_by_count()
714 drmem_mark_lmb_reserved(lmb); in dlpar_memory_add_by_count()
723 for_each_drmem_lmb(lmb) { in dlpar_memory_add_by_count()
724 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_add_by_count()
727 rc = dlpar_remove_lmb(lmb); in dlpar_memory_add_by_count()
730 lmb->drc_index); in dlpar_memory_add_by_count()
732 dlpar_release_drc(lmb->drc_index); in dlpar_memory_add_by_count()
734 drmem_remove_lmb_reservation(lmb); in dlpar_memory_add_by_count()
742 for_each_drmem_lmb(lmb) { in dlpar_memory_add_by_count()
743 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_add_by_count()
747 lmb->base_addr, lmb->drc_index); in dlpar_memory_add_by_count()
748 drmem_remove_lmb_reservation(lmb); in dlpar_memory_add_by_count()
762 struct drmem_lmb *lmb; in dlpar_memory_add_by_index() local
768 for_each_drmem_lmb(lmb) { in dlpar_memory_add_by_index()
769 if (lmb->drc_index == drc_index) { in dlpar_memory_add_by_index()
771 rc = dlpar_acquire_drc(lmb->drc_index); in dlpar_memory_add_by_index()
773 rc = dlpar_add_lmb(lmb); in dlpar_memory_add_by_index()
775 dlpar_release_drc(lmb->drc_index); in dlpar_memory_add_by_index()
789 lmb->base_addr, drc_index); in dlpar_memory_add_by_index()
796 struct drmem_lmb *lmb, *start_lmb, *end_lmb; in dlpar_memory_add_by_ic() local
810 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_add_by_ic()
812 if (lmb->flags & DRCONF_MEM_RESERVED) { in dlpar_memory_add_by_ic()
814 lmb->base_addr, lmb->drc_index); in dlpar_memory_add_by_ic()
819 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_add_by_ic()
820 if (lmb->flags & DRCONF_MEM_ASSIGNED) in dlpar_memory_add_by_ic()
823 rc = dlpar_acquire_drc(lmb->drc_index); in dlpar_memory_add_by_ic()
827 rc = dlpar_add_lmb(lmb); in dlpar_memory_add_by_ic()
829 dlpar_release_drc(lmb->drc_index); in dlpar_memory_add_by_ic()
833 drmem_mark_lmb_reserved(lmb); in dlpar_memory_add_by_ic()
839 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_add_by_ic()
840 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_add_by_ic()
843 rc = dlpar_remove_lmb(lmb); in dlpar_memory_add_by_ic()
846 lmb->drc_index); in dlpar_memory_add_by_ic()
848 dlpar_release_drc(lmb->drc_index); in dlpar_memory_add_by_ic()
850 drmem_remove_lmb_reservation(lmb); in dlpar_memory_add_by_ic()
854 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_add_by_ic()
855 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_add_by_ic()
859 lmb->base_addr, lmb->drc_index); in dlpar_memory_add_by_ic()
860 drmem_remove_lmb_reservation(lmb); in dlpar_memory_add_by_ic()