Lines Matching refs:lmb
110 static int update_lmb_associativity_index(struct drmem_lmb *lmb) in update_lmb_associativity_index() argument
122 lmb_node = dlpar_configure_connector(cpu_to_be32(lmb->drc_index), in update_lmb_associativity_index()
160 lmb->aa_index = aa_index; in update_lmb_associativity_index()
164 static struct memory_block *lmb_to_memblock(struct drmem_lmb *lmb) in lmb_to_memblock() argument
169 section_nr = pfn_to_section_nr(PFN_DOWN(lmb->base_addr)); in lmb_to_memblock()
179 struct drmem_lmb *lmb, *start, *end; in get_lmb_range() local
183 for_each_drmem_lmb(lmb) { in get_lmb_range()
184 if (lmb->drc_index == drc_index) { in get_lmb_range()
185 start = lmb; in get_lmb_range()
204 static int dlpar_change_lmb_state(struct drmem_lmb *lmb, bool online) in dlpar_change_lmb_state() argument
209 mem_block = lmb_to_memblock(lmb); in dlpar_change_lmb_state()
225 static int dlpar_online_lmb(struct drmem_lmb *lmb) in dlpar_online_lmb() argument
227 return dlpar_change_lmb_state(lmb, true); in dlpar_online_lmb()
231 static int dlpar_offline_lmb(struct drmem_lmb *lmb) in dlpar_offline_lmb() argument
233 return dlpar_change_lmb_state(lmb, false); in dlpar_offline_lmb()
285 static bool lmb_is_removable(struct drmem_lmb *lmb) in lmb_is_removable() argument
287 if ((lmb->flags & DRCONF_MEM_RESERVED) || in lmb_is_removable()
288 !(lmb->flags & DRCONF_MEM_ASSIGNED)) in lmb_is_removable()
296 if (is_fadump_memory_area(lmb->base_addr, memory_block_size_bytes())) in lmb_is_removable()
305 static int dlpar_remove_lmb(struct drmem_lmb *lmb) in dlpar_remove_lmb() argument
310 if (!lmb_is_removable(lmb)) in dlpar_remove_lmb()
313 mem_block = lmb_to_memblock(lmb); in dlpar_remove_lmb()
317 rc = dlpar_offline_lmb(lmb); in dlpar_remove_lmb()
323 __remove_memory(lmb->base_addr, memory_block_size); in dlpar_remove_lmb()
327 memblock_remove(lmb->base_addr, memory_block_size); in dlpar_remove_lmb()
329 invalidate_lmb_associativity_index(lmb); in dlpar_remove_lmb()
330 lmb->flags &= ~DRCONF_MEM_ASSIGNED; in dlpar_remove_lmb()
337 struct drmem_lmb *lmb; in dlpar_memory_remove_by_count() local
348 for_each_drmem_lmb(lmb) { in dlpar_memory_remove_by_count()
349 if (lmb_is_removable(lmb)) in dlpar_memory_remove_by_count()
362 for_each_drmem_lmb(lmb) { in dlpar_memory_remove_by_count()
363 rc = dlpar_remove_lmb(lmb); in dlpar_memory_remove_by_count()
370 drmem_mark_lmb_reserved(lmb); in dlpar_memory_remove_by_count()
380 for_each_drmem_lmb(lmb) { in dlpar_memory_remove_by_count()
381 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_remove_by_count()
384 rc = dlpar_add_lmb(lmb); in dlpar_memory_remove_by_count()
387 lmb->drc_index); in dlpar_memory_remove_by_count()
389 drmem_remove_lmb_reservation(lmb); in dlpar_memory_remove_by_count()
398 for_each_drmem_lmb(lmb) { in dlpar_memory_remove_by_count()
399 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_remove_by_count()
402 dlpar_release_drc(lmb->drc_index); in dlpar_memory_remove_by_count()
404 lmb->base_addr); in dlpar_memory_remove_by_count()
406 drmem_remove_lmb_reservation(lmb); in dlpar_memory_remove_by_count()
420 struct drmem_lmb *lmb; in dlpar_memory_remove_by_index() local
427 for_each_drmem_lmb(lmb) { in dlpar_memory_remove_by_index()
428 if (lmb->drc_index == drc_index) { in dlpar_memory_remove_by_index()
430 rc = dlpar_remove_lmb(lmb); in dlpar_memory_remove_by_index()
432 dlpar_release_drc(lmb->drc_index); in dlpar_memory_remove_by_index()
443 lmb->base_addr); in dlpar_memory_remove_by_index()
445 pr_debug("Memory at %llx was hot-removed\n", lmb->base_addr); in dlpar_memory_remove_by_index()
452 struct drmem_lmb *lmb, *start_lmb, *end_lmb; in dlpar_memory_remove_by_ic() local
475 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_remove_by_ic()
476 if (lmb->flags & DRCONF_MEM_RESERVED) { in dlpar_memory_remove_by_ic()
478 lmb->base_addr, lmb->drc_index); in dlpar_memory_remove_by_ic()
483 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_remove_by_ic()
488 if (!(lmb->flags & DRCONF_MEM_ASSIGNED)) in dlpar_memory_remove_by_ic()
491 rc = dlpar_remove_lmb(lmb); in dlpar_memory_remove_by_ic()
495 drmem_mark_lmb_reserved(lmb); in dlpar_memory_remove_by_ic()
502 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_remove_by_ic()
503 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_remove_by_ic()
511 dlpar_unisolate_drc(lmb->drc_index); in dlpar_memory_remove_by_ic()
513 rc = dlpar_add_lmb(lmb); in dlpar_memory_remove_by_ic()
516 lmb->drc_index); in dlpar_memory_remove_by_ic()
518 drmem_remove_lmb_reservation(lmb); in dlpar_memory_remove_by_ic()
522 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_remove_by_ic()
523 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_remove_by_ic()
526 dlpar_release_drc(lmb->drc_index); in dlpar_memory_remove_by_ic()
528 lmb->base_addr, lmb->drc_index); in dlpar_memory_remove_by_ic()
530 drmem_remove_lmb_reservation(lmb); in dlpar_memory_remove_by_ic()
547 static int dlpar_remove_lmb(struct drmem_lmb *lmb) in dlpar_remove_lmb() argument
566 static int dlpar_add_lmb(struct drmem_lmb *lmb) in dlpar_add_lmb() argument
571 if (lmb->flags & DRCONF_MEM_ASSIGNED) in dlpar_add_lmb()
574 rc = update_lmb_associativity_index(lmb); in dlpar_add_lmb()
576 dlpar_release_drc(lmb->drc_index); in dlpar_add_lmb()
583 nid = of_drconf_to_nid_single(lmb); in dlpar_add_lmb()
588 rc = __add_memory(nid, lmb->base_addr, block_sz, MHP_MEMMAP_ON_MEMORY); in dlpar_add_lmb()
590 invalidate_lmb_associativity_index(lmb); in dlpar_add_lmb()
594 rc = dlpar_online_lmb(lmb); in dlpar_add_lmb()
596 __remove_memory(lmb->base_addr, block_sz); in dlpar_add_lmb()
597 invalidate_lmb_associativity_index(lmb); in dlpar_add_lmb()
599 lmb->flags |= DRCONF_MEM_ASSIGNED; in dlpar_add_lmb()
607 struct drmem_lmb *lmb; in dlpar_memory_add_by_count() local
618 for_each_drmem_lmb(lmb) { in dlpar_memory_add_by_count()
619 if (lmb->flags & DRCONF_MEM_RESERVED) in dlpar_memory_add_by_count()
622 if (!(lmb->flags & DRCONF_MEM_ASSIGNED)) in dlpar_memory_add_by_count()
632 for_each_drmem_lmb(lmb) { in dlpar_memory_add_by_count()
633 if (lmb->flags & DRCONF_MEM_ASSIGNED) in dlpar_memory_add_by_count()
636 rc = dlpar_acquire_drc(lmb->drc_index); in dlpar_memory_add_by_count()
640 rc = dlpar_add_lmb(lmb); in dlpar_memory_add_by_count()
642 dlpar_release_drc(lmb->drc_index); in dlpar_memory_add_by_count()
649 drmem_mark_lmb_reserved(lmb); in dlpar_memory_add_by_count()
658 for_each_drmem_lmb(lmb) { in dlpar_memory_add_by_count()
659 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_add_by_count()
662 rc = dlpar_remove_lmb(lmb); in dlpar_memory_add_by_count()
665 lmb->drc_index); in dlpar_memory_add_by_count()
667 dlpar_release_drc(lmb->drc_index); in dlpar_memory_add_by_count()
669 drmem_remove_lmb_reservation(lmb); in dlpar_memory_add_by_count()
677 for_each_drmem_lmb(lmb) { in dlpar_memory_add_by_count()
678 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_add_by_count()
682 lmb->base_addr, lmb->drc_index); in dlpar_memory_add_by_count()
683 drmem_remove_lmb_reservation(lmb); in dlpar_memory_add_by_count()
697 struct drmem_lmb *lmb; in dlpar_memory_add_by_index() local
703 for_each_drmem_lmb(lmb) { in dlpar_memory_add_by_index()
704 if (lmb->drc_index == drc_index) { in dlpar_memory_add_by_index()
706 rc = dlpar_acquire_drc(lmb->drc_index); in dlpar_memory_add_by_index()
708 rc = dlpar_add_lmb(lmb); in dlpar_memory_add_by_index()
710 dlpar_release_drc(lmb->drc_index); in dlpar_memory_add_by_index()
724 lmb->base_addr, drc_index); in dlpar_memory_add_by_index()
731 struct drmem_lmb *lmb, *start_lmb, *end_lmb; in dlpar_memory_add_by_ic() local
745 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_add_by_ic()
747 if (lmb->flags & DRCONF_MEM_RESERVED) { in dlpar_memory_add_by_ic()
749 lmb->base_addr, lmb->drc_index); in dlpar_memory_add_by_ic()
754 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_add_by_ic()
755 if (lmb->flags & DRCONF_MEM_ASSIGNED) in dlpar_memory_add_by_ic()
758 rc = dlpar_acquire_drc(lmb->drc_index); in dlpar_memory_add_by_ic()
762 rc = dlpar_add_lmb(lmb); in dlpar_memory_add_by_ic()
764 dlpar_release_drc(lmb->drc_index); in dlpar_memory_add_by_ic()
768 drmem_mark_lmb_reserved(lmb); in dlpar_memory_add_by_ic()
774 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_add_by_ic()
775 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_add_by_ic()
778 rc = dlpar_remove_lmb(lmb); in dlpar_memory_add_by_ic()
781 lmb->drc_index); in dlpar_memory_add_by_ic()
783 dlpar_release_drc(lmb->drc_index); in dlpar_memory_add_by_ic()
785 drmem_remove_lmb_reservation(lmb); in dlpar_memory_add_by_ic()
789 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_add_by_ic()
790 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_add_by_ic()
794 lmb->base_addr, lmb->drc_index); in dlpar_memory_add_by_ic()
795 drmem_remove_lmb_reservation(lmb); in dlpar_memory_add_by_ic()