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()
207 lmb->aa_index = aa_index; in update_lmb_associativity_index()
211 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()
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()
349 static bool lmb_is_removable(struct drmem_lmb *lmb) in lmb_is_removable() argument
351 if (!(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(mem_block->nid, 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()
460 for_each_drmem_lmb(lmb) { in dlpar_memory_remove_by_count()
461 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_remove_by_count()
464 dlpar_release_drc(lmb->drc_index); in dlpar_memory_remove_by_count()
466 lmb->base_addr); in dlpar_memory_remove_by_count()
468 drmem_remove_lmb_reservation(lmb); in dlpar_memory_remove_by_count()
478 struct drmem_lmb *lmb; in dlpar_memory_remove_by_index() local
485 for_each_drmem_lmb(lmb) { in dlpar_memory_remove_by_index()
486 if (lmb->drc_index == drc_index) { in dlpar_memory_remove_by_index()
488 rc = dlpar_remove_lmb(lmb); in dlpar_memory_remove_by_index()
490 dlpar_release_drc(lmb->drc_index); in dlpar_memory_remove_by_index()
501 lmb->base_addr); in dlpar_memory_remove_by_index()
503 pr_info("Memory at %llx was hot-removed\n", lmb->base_addr); in dlpar_memory_remove_by_index()
510 struct drmem_lmb *lmb, *start_lmb, *end_lmb; in dlpar_memory_remove_by_ic() local
525 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_remove_by_ic()
526 if (lmb->flags & DRCONF_MEM_RESERVED) in dlpar_memory_remove_by_ic()
535 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_remove_by_ic()
536 if (!(lmb->flags & DRCONF_MEM_ASSIGNED)) in dlpar_memory_remove_by_ic()
539 rc = dlpar_remove_lmb(lmb); in dlpar_memory_remove_by_ic()
543 drmem_mark_lmb_reserved(lmb); in dlpar_memory_remove_by_ic()
550 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_remove_by_ic()
551 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_remove_by_ic()
554 rc = dlpar_add_lmb(lmb); in dlpar_memory_remove_by_ic()
557 lmb->drc_index); in dlpar_memory_remove_by_ic()
559 drmem_remove_lmb_reservation(lmb); in dlpar_memory_remove_by_ic()
563 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_remove_by_ic()
564 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_remove_by_ic()
567 dlpar_release_drc(lmb->drc_index); in dlpar_memory_remove_by_ic()
569 lmb->base_addr, lmb->drc_index); in dlpar_memory_remove_by_ic()
571 drmem_remove_lmb_reservation(lmb); in dlpar_memory_remove_by_ic()
592 static int dlpar_remove_lmb(struct drmem_lmb *lmb) in dlpar_remove_lmb() argument
611 static int dlpar_add_lmb(struct drmem_lmb *lmb) in dlpar_add_lmb() argument
616 if (lmb->flags & DRCONF_MEM_ASSIGNED) in dlpar_add_lmb()
619 rc = update_lmb_associativity_index(lmb); in dlpar_add_lmb()
621 dlpar_release_drc(lmb->drc_index); in dlpar_add_lmb()
628 nid = of_drconf_to_nid_single(lmb); in dlpar_add_lmb()
633 rc = __add_memory(nid, lmb->base_addr, block_sz, MHP_NONE); in dlpar_add_lmb()
635 invalidate_lmb_associativity_index(lmb); in dlpar_add_lmb()
639 rc = dlpar_online_lmb(lmb); in dlpar_add_lmb()
641 __remove_memory(nid, lmb->base_addr, block_sz); in dlpar_add_lmb()
642 invalidate_lmb_associativity_index(lmb); in dlpar_add_lmb()
644 lmb->flags |= DRCONF_MEM_ASSIGNED; in dlpar_add_lmb()
652 struct drmem_lmb *lmb; in dlpar_memory_add_by_count() local
663 for_each_drmem_lmb(lmb) { in dlpar_memory_add_by_count()
664 if (!(lmb->flags & DRCONF_MEM_ASSIGNED)) in dlpar_memory_add_by_count()
674 for_each_drmem_lmb(lmb) { in dlpar_memory_add_by_count()
675 if (lmb->flags & DRCONF_MEM_ASSIGNED) in dlpar_memory_add_by_count()
678 rc = dlpar_acquire_drc(lmb->drc_index); in dlpar_memory_add_by_count()
682 rc = dlpar_add_lmb(lmb); in dlpar_memory_add_by_count()
684 dlpar_release_drc(lmb->drc_index); in dlpar_memory_add_by_count()
691 drmem_mark_lmb_reserved(lmb); in dlpar_memory_add_by_count()
701 for_each_drmem_lmb(lmb) { in dlpar_memory_add_by_count()
702 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_add_by_count()
705 rc = dlpar_remove_lmb(lmb); in dlpar_memory_add_by_count()
708 lmb->drc_index); in dlpar_memory_add_by_count()
710 dlpar_release_drc(lmb->drc_index); in dlpar_memory_add_by_count()
712 drmem_remove_lmb_reservation(lmb); in dlpar_memory_add_by_count()
716 for_each_drmem_lmb(lmb) { in dlpar_memory_add_by_count()
717 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_add_by_count()
721 lmb->base_addr, lmb->drc_index); in dlpar_memory_add_by_count()
722 drmem_remove_lmb_reservation(lmb); in dlpar_memory_add_by_count()
732 struct drmem_lmb *lmb; in dlpar_memory_add_by_index() local
738 for_each_drmem_lmb(lmb) { in dlpar_memory_add_by_index()
739 if (lmb->drc_index == drc_index) { in dlpar_memory_add_by_index()
741 rc = dlpar_acquire_drc(lmb->drc_index); in dlpar_memory_add_by_index()
743 rc = dlpar_add_lmb(lmb); in dlpar_memory_add_by_index()
745 dlpar_release_drc(lmb->drc_index); in dlpar_memory_add_by_index()
759 lmb->base_addr, drc_index); in dlpar_memory_add_by_index()
766 struct drmem_lmb *lmb, *start_lmb, *end_lmb; in dlpar_memory_add_by_ic() local
781 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_add_by_ic()
782 if (lmb->flags & DRCONF_MEM_RESERVED) in dlpar_memory_add_by_ic()
791 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_add_by_ic()
792 if (lmb->flags & DRCONF_MEM_ASSIGNED) in dlpar_memory_add_by_ic()
795 rc = dlpar_acquire_drc(lmb->drc_index); in dlpar_memory_add_by_ic()
799 rc = dlpar_add_lmb(lmb); in dlpar_memory_add_by_ic()
801 dlpar_release_drc(lmb->drc_index); in dlpar_memory_add_by_ic()
805 drmem_mark_lmb_reserved(lmb); in dlpar_memory_add_by_ic()
811 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_add_by_ic()
812 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_add_by_ic()
815 rc = dlpar_remove_lmb(lmb); in dlpar_memory_add_by_ic()
818 lmb->drc_index); in dlpar_memory_add_by_ic()
820 dlpar_release_drc(lmb->drc_index); in dlpar_memory_add_by_ic()
822 drmem_remove_lmb_reservation(lmb); in dlpar_memory_add_by_ic()
826 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_add_by_ic()
827 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_add_by_ic()
831 lmb->base_addr, lmb->drc_index); in dlpar_memory_add_by_ic()
832 drmem_remove_lmb_reservation(lmb); in dlpar_memory_add_by_ic()