Lines Matching refs:lmb
156 static int update_lmb_associativity_index(struct drmem_lmb *lmb) in update_lmb_associativity_index() argument
168 lmb_node = dlpar_configure_connector(cpu_to_be32(lmb->drc_index), in update_lmb_associativity_index()
204 lmb->aa_index = aa_index; in update_lmb_associativity_index()
208 static struct memory_block *lmb_to_memblock(struct drmem_lmb *lmb) in lmb_to_memblock() argument
214 section_nr = pfn_to_section_nr(PFN_DOWN(lmb->base_addr)); in lmb_to_memblock()
225 struct drmem_lmb *lmb, *start, *end; in get_lmb_range() local
229 for_each_drmem_lmb(lmb) { in get_lmb_range()
230 if (lmb->drc_index == drc_index) { in get_lmb_range()
231 start = lmb; in get_lmb_range()
250 static int dlpar_change_lmb_state(struct drmem_lmb *lmb, bool online) in dlpar_change_lmb_state() argument
255 mem_block = lmb_to_memblock(lmb); in dlpar_change_lmb_state()
271 static int dlpar_online_lmb(struct drmem_lmb *lmb) in dlpar_online_lmb() argument
273 return dlpar_change_lmb_state(lmb, true); in dlpar_online_lmb()
277 static int dlpar_offline_lmb(struct drmem_lmb *lmb) in dlpar_offline_lmb() argument
279 return dlpar_change_lmb_state(lmb, false); in dlpar_offline_lmb()
338 static bool lmb_is_removable(struct drmem_lmb *lmb) in lmb_is_removable() argument
345 if (!(lmb->flags & DRCONF_MEM_ASSIGNED)) in lmb_is_removable()
350 phys_addr = lmb->base_addr; in lmb_is_removable()
375 static int dlpar_remove_lmb(struct drmem_lmb *lmb) in dlpar_remove_lmb() argument
380 if (!lmb_is_removable(lmb)) in dlpar_remove_lmb()
383 rc = dlpar_offline_lmb(lmb); in dlpar_remove_lmb()
389 __remove_memory(lmb->nid, 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_clear_nid(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; in dlpar_memory_readd_by_index() local
517 for_each_drmem_lmb(lmb) { in dlpar_memory_readd_by_index()
518 if (lmb->drc_index == drc_index) { in dlpar_memory_readd_by_index()
520 rc = dlpar_remove_lmb(lmb); in dlpar_memory_readd_by_index()
522 rc = dlpar_add_lmb(lmb); in dlpar_memory_readd_by_index()
524 dlpar_release_drc(lmb->drc_index); in dlpar_memory_readd_by_index()
535 lmb->base_addr); in dlpar_memory_readd_by_index()
537 pr_info("Memory at %llx was updated\n", lmb->base_addr); in dlpar_memory_readd_by_index()
544 struct drmem_lmb *lmb, *start_lmb, *end_lmb; in dlpar_memory_remove_by_ic() local
559 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_remove_by_ic()
560 if (lmb->flags & DRCONF_MEM_RESERVED) in dlpar_memory_remove_by_ic()
569 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_remove_by_ic()
570 if (!(lmb->flags & DRCONF_MEM_ASSIGNED)) in dlpar_memory_remove_by_ic()
573 rc = dlpar_remove_lmb(lmb); in dlpar_memory_remove_by_ic()
577 drmem_mark_lmb_reserved(lmb); in dlpar_memory_remove_by_ic()
584 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_remove_by_ic()
585 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_remove_by_ic()
588 rc = dlpar_add_lmb(lmb); in dlpar_memory_remove_by_ic()
591 lmb->drc_index); in dlpar_memory_remove_by_ic()
593 drmem_remove_lmb_reservation(lmb); in dlpar_memory_remove_by_ic()
597 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_remove_by_ic()
598 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_remove_by_ic()
601 dlpar_release_drc(lmb->drc_index); in dlpar_memory_remove_by_ic()
603 lmb->base_addr, lmb->drc_index); in dlpar_memory_remove_by_ic()
605 drmem_remove_lmb_reservation(lmb); in dlpar_memory_remove_by_ic()
626 static int dlpar_remove_lmb(struct drmem_lmb *lmb) in dlpar_remove_lmb() argument
649 static int dlpar_add_lmb(struct drmem_lmb *lmb) in dlpar_add_lmb() argument
654 if (lmb->flags & DRCONF_MEM_ASSIGNED) in dlpar_add_lmb()
657 rc = update_lmb_associativity_index(lmb); in dlpar_add_lmb()
659 dlpar_release_drc(lmb->drc_index); in dlpar_add_lmb()
663 lmb_set_nid(lmb); in dlpar_add_lmb()
667 rc = __add_memory(lmb->nid, lmb->base_addr, block_sz); in dlpar_add_lmb()
669 invalidate_lmb_associativity_index(lmb); in dlpar_add_lmb()
673 rc = dlpar_online_lmb(lmb); in dlpar_add_lmb()
675 __remove_memory(lmb->nid, lmb->base_addr, block_sz); in dlpar_add_lmb()
676 invalidate_lmb_associativity_index(lmb); in dlpar_add_lmb()
677 lmb_clear_nid(lmb); in dlpar_add_lmb()
679 lmb->flags |= DRCONF_MEM_ASSIGNED; in dlpar_add_lmb()
687 struct drmem_lmb *lmb; in dlpar_memory_add_by_count() local
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()
709 for_each_drmem_lmb(lmb) { in dlpar_memory_add_by_count()
710 if (lmb->flags & DRCONF_MEM_ASSIGNED) in dlpar_memory_add_by_count()
713 rc = dlpar_acquire_drc(lmb->drc_index); in dlpar_memory_add_by_count()
717 rc = dlpar_add_lmb(lmb); in dlpar_memory_add_by_count()
719 dlpar_release_drc(lmb->drc_index); in dlpar_memory_add_by_count()
726 drmem_mark_lmb_reserved(lmb); in dlpar_memory_add_by_count()
736 for_each_drmem_lmb(lmb) { in dlpar_memory_add_by_count()
737 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_add_by_count()
740 rc = dlpar_remove_lmb(lmb); in dlpar_memory_add_by_count()
743 lmb->drc_index); in dlpar_memory_add_by_count()
745 dlpar_release_drc(lmb->drc_index); in dlpar_memory_add_by_count()
747 drmem_remove_lmb_reservation(lmb); in dlpar_memory_add_by_count()
751 for_each_drmem_lmb(lmb) { in dlpar_memory_add_by_count()
752 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_add_by_count()
756 lmb->base_addr, lmb->drc_index); in dlpar_memory_add_by_count()
757 drmem_remove_lmb_reservation(lmb); in dlpar_memory_add_by_count()
767 struct drmem_lmb *lmb; in dlpar_memory_add_by_index() local
773 for_each_drmem_lmb(lmb) { in dlpar_memory_add_by_index()
774 if (lmb->drc_index == drc_index) { in dlpar_memory_add_by_index()
776 rc = dlpar_acquire_drc(lmb->drc_index); in dlpar_memory_add_by_index()
778 rc = dlpar_add_lmb(lmb); in dlpar_memory_add_by_index()
780 dlpar_release_drc(lmb->drc_index); in dlpar_memory_add_by_index()
794 lmb->base_addr, drc_index); in dlpar_memory_add_by_index()
801 struct drmem_lmb *lmb, *start_lmb, *end_lmb; in dlpar_memory_add_by_ic() local
816 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_add_by_ic()
817 if (lmb->flags & DRCONF_MEM_RESERVED) 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 (lmb->flags & DRCONF_MEM_ASSIGNED) in dlpar_memory_add_by_ic()
830 rc = dlpar_acquire_drc(lmb->drc_index); in dlpar_memory_add_by_ic()
834 rc = dlpar_add_lmb(lmb); in dlpar_memory_add_by_ic()
836 dlpar_release_drc(lmb->drc_index); in dlpar_memory_add_by_ic()
840 drmem_mark_lmb_reserved(lmb); in dlpar_memory_add_by_ic()
846 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_add_by_ic()
847 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_add_by_ic()
850 rc = dlpar_remove_lmb(lmb); in dlpar_memory_add_by_ic()
853 lmb->drc_index); in dlpar_memory_add_by_ic()
855 dlpar_release_drc(lmb->drc_index); in dlpar_memory_add_by_ic()
857 drmem_remove_lmb_reservation(lmb); in dlpar_memory_add_by_ic()
861 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_add_by_ic()
862 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_add_by_ic()
866 lmb->base_addr, lmb->drc_index); in dlpar_memory_add_by_ic()
867 drmem_remove_lmb_reservation(lmb); in dlpar_memory_add_by_ic()