Lines Matching refs:lmb
166 static u32 lookup_lmb_associativity_index(struct drmem_lmb *lmb) in lookup_lmb_associativity_index() argument
177 lmb_node = dlpar_configure_connector(cpu_to_be32(lmb->drc_index), in lookup_lmb_associativity_index()
209 static int dlpar_add_device_tree_lmb(struct drmem_lmb *lmb) in dlpar_add_device_tree_lmb() argument
213 lmb->flags |= DRCONF_MEM_ASSIGNED; in dlpar_add_device_tree_lmb()
215 aa_index = lookup_lmb_associativity_index(lmb); in dlpar_add_device_tree_lmb()
218 lmb->drc_index); in dlpar_add_device_tree_lmb()
222 lmb->aa_index = aa_index; in dlpar_add_device_tree_lmb()
231 static int dlpar_remove_device_tree_lmb(struct drmem_lmb *lmb) in dlpar_remove_device_tree_lmb() argument
235 lmb->flags &= ~DRCONF_MEM_ASSIGNED; in dlpar_remove_device_tree_lmb()
236 lmb->aa_index = 0xffffffff; in dlpar_remove_device_tree_lmb()
245 static struct memory_block *lmb_to_memblock(struct drmem_lmb *lmb) in lmb_to_memblock() argument
251 section_nr = pfn_to_section_nr(PFN_DOWN(lmb->base_addr)); in lmb_to_memblock()
262 struct drmem_lmb *lmb, *start, *end; in get_lmb_range() local
266 for_each_drmem_lmb(lmb) { in get_lmb_range()
267 if (lmb->drc_index == drc_index) { in get_lmb_range()
268 start = lmb; in get_lmb_range()
287 static int dlpar_change_lmb_state(struct drmem_lmb *lmb, bool online) in dlpar_change_lmb_state() argument
292 mem_block = lmb_to_memblock(lmb); in dlpar_change_lmb_state()
308 static int dlpar_online_lmb(struct drmem_lmb *lmb) in dlpar_online_lmb() argument
310 return dlpar_change_lmb_state(lmb, true); in dlpar_online_lmb()
314 static int dlpar_offline_lmb(struct drmem_lmb *lmb) in dlpar_offline_lmb() argument
316 return dlpar_change_lmb_state(lmb, false); in dlpar_offline_lmb()
377 static bool lmb_is_removable(struct drmem_lmb *lmb) in lmb_is_removable() argument
384 if (!(lmb->flags & DRCONF_MEM_ASSIGNED)) in lmb_is_removable()
389 phys_addr = lmb->base_addr; in lmb_is_removable()
411 static int dlpar_remove_lmb(struct drmem_lmb *lmb) in dlpar_remove_lmb() argument
416 if (!lmb_is_removable(lmb)) in dlpar_remove_lmb()
419 rc = dlpar_offline_lmb(lmb); in dlpar_remove_lmb()
424 nid = memory_add_physaddr_to_nid(lmb->base_addr); in dlpar_remove_lmb()
426 remove_memory(nid, lmb->base_addr, block_sz); in dlpar_remove_lmb()
429 memblock_remove(lmb->base_addr, block_sz); in dlpar_remove_lmb()
431 dlpar_remove_device_tree_lmb(lmb); in dlpar_remove_lmb()
437 struct drmem_lmb *lmb; in dlpar_memory_remove_by_count() local
448 for_each_drmem_lmb(lmb) { in dlpar_memory_remove_by_count()
449 if (lmb_is_removable(lmb)) in dlpar_memory_remove_by_count()
462 for_each_drmem_lmb(lmb) { in dlpar_memory_remove_by_count()
463 rc = dlpar_remove_lmb(lmb); in dlpar_memory_remove_by_count()
470 drmem_mark_lmb_reserved(lmb); in dlpar_memory_remove_by_count()
480 for_each_drmem_lmb(lmb) { in dlpar_memory_remove_by_count()
481 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_remove_by_count()
484 rc = dlpar_add_lmb(lmb); in dlpar_memory_remove_by_count()
487 lmb->drc_index); in dlpar_memory_remove_by_count()
489 drmem_remove_lmb_reservation(lmb); in dlpar_memory_remove_by_count()
494 for_each_drmem_lmb(lmb) { in dlpar_memory_remove_by_count()
495 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_remove_by_count()
498 dlpar_release_drc(lmb->drc_index); in dlpar_memory_remove_by_count()
500 lmb->base_addr); in dlpar_memory_remove_by_count()
502 drmem_remove_lmb_reservation(lmb); in dlpar_memory_remove_by_count()
512 struct drmem_lmb *lmb; in dlpar_memory_remove_by_index() local
519 for_each_drmem_lmb(lmb) { in dlpar_memory_remove_by_index()
520 if (lmb->drc_index == drc_index) { in dlpar_memory_remove_by_index()
522 rc = dlpar_remove_lmb(lmb); in dlpar_memory_remove_by_index()
524 dlpar_release_drc(lmb->drc_index); in dlpar_memory_remove_by_index()
535 lmb->base_addr); in dlpar_memory_remove_by_index()
537 pr_info("Memory at %llx was hot-removed\n", lmb->base_addr); in dlpar_memory_remove_by_index()
544 struct drmem_lmb *lmb; in dlpar_memory_readd_by_index() local
551 for_each_drmem_lmb(lmb) { in dlpar_memory_readd_by_index()
552 if (lmb->drc_index == drc_index) { in dlpar_memory_readd_by_index()
554 rc = dlpar_remove_lmb(lmb); in dlpar_memory_readd_by_index()
556 rc = dlpar_add_lmb(lmb); in dlpar_memory_readd_by_index()
558 dlpar_release_drc(lmb->drc_index); in dlpar_memory_readd_by_index()
569 lmb->base_addr); in dlpar_memory_readd_by_index()
571 pr_info("Memory at %llx was updated\n", lmb->base_addr); in dlpar_memory_readd_by_index()
578 struct drmem_lmb *lmb, *start_lmb, *end_lmb; in dlpar_memory_remove_by_ic() local
593 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_remove_by_ic()
594 if (lmb->flags & DRCONF_MEM_RESERVED) in dlpar_memory_remove_by_ic()
603 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_remove_by_ic()
604 if (!(lmb->flags & DRCONF_MEM_ASSIGNED)) in dlpar_memory_remove_by_ic()
607 rc = dlpar_remove_lmb(lmb); in dlpar_memory_remove_by_ic()
611 drmem_mark_lmb_reserved(lmb); in dlpar_memory_remove_by_ic()
618 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_remove_by_ic()
619 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_remove_by_ic()
622 rc = dlpar_add_lmb(lmb); in dlpar_memory_remove_by_ic()
625 lmb->drc_index); in dlpar_memory_remove_by_ic()
627 drmem_remove_lmb_reservation(lmb); in dlpar_memory_remove_by_ic()
631 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_remove_by_ic()
632 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_remove_by_ic()
635 dlpar_release_drc(lmb->drc_index); in dlpar_memory_remove_by_ic()
637 lmb->base_addr, lmb->drc_index); in dlpar_memory_remove_by_ic()
639 drmem_remove_lmb_reservation(lmb); in dlpar_memory_remove_by_ic()
660 static int dlpar_remove_lmb(struct drmem_lmb *lmb) in dlpar_remove_lmb() argument
683 static int dlpar_add_lmb(struct drmem_lmb *lmb) in dlpar_add_lmb() argument
688 if (lmb->flags & DRCONF_MEM_ASSIGNED) in dlpar_add_lmb()
691 rc = dlpar_add_device_tree_lmb(lmb); in dlpar_add_lmb()
694 lmb->drc_index); in dlpar_add_lmb()
695 dlpar_release_drc(lmb->drc_index); in dlpar_add_lmb()
702 nid = memory_add_physaddr_to_nid(lmb->base_addr); in dlpar_add_lmb()
705 rc = add_memory(nid, lmb->base_addr, block_sz); in dlpar_add_lmb()
707 dlpar_remove_device_tree_lmb(lmb); in dlpar_add_lmb()
711 rc = dlpar_online_lmb(lmb); in dlpar_add_lmb()
713 remove_memory(nid, lmb->base_addr, block_sz); in dlpar_add_lmb()
714 dlpar_remove_device_tree_lmb(lmb); in dlpar_add_lmb()
716 lmb->flags |= DRCONF_MEM_ASSIGNED; in dlpar_add_lmb()
724 struct drmem_lmb *lmb; in dlpar_memory_add_by_count() local
735 for_each_drmem_lmb(lmb) { in dlpar_memory_add_by_count()
736 if (!(lmb->flags & DRCONF_MEM_ASSIGNED)) in dlpar_memory_add_by_count()
746 for_each_drmem_lmb(lmb) { in dlpar_memory_add_by_count()
747 if (lmb->flags & DRCONF_MEM_ASSIGNED) in dlpar_memory_add_by_count()
750 rc = dlpar_acquire_drc(lmb->drc_index); in dlpar_memory_add_by_count()
754 rc = dlpar_add_lmb(lmb); in dlpar_memory_add_by_count()
756 dlpar_release_drc(lmb->drc_index); in dlpar_memory_add_by_count()
763 drmem_mark_lmb_reserved(lmb); in dlpar_memory_add_by_count()
773 for_each_drmem_lmb(lmb) { in dlpar_memory_add_by_count()
774 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_add_by_count()
777 rc = dlpar_remove_lmb(lmb); in dlpar_memory_add_by_count()
780 lmb->drc_index); in dlpar_memory_add_by_count()
782 dlpar_release_drc(lmb->drc_index); in dlpar_memory_add_by_count()
784 drmem_remove_lmb_reservation(lmb); in dlpar_memory_add_by_count()
788 for_each_drmem_lmb(lmb) { in dlpar_memory_add_by_count()
789 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_add_by_count()
793 lmb->base_addr, lmb->drc_index); in dlpar_memory_add_by_count()
794 drmem_remove_lmb_reservation(lmb); in dlpar_memory_add_by_count()
804 struct drmem_lmb *lmb; in dlpar_memory_add_by_index() local
810 for_each_drmem_lmb(lmb) { in dlpar_memory_add_by_index()
811 if (lmb->drc_index == drc_index) { in dlpar_memory_add_by_index()
813 rc = dlpar_acquire_drc(lmb->drc_index); in dlpar_memory_add_by_index()
815 rc = dlpar_add_lmb(lmb); in dlpar_memory_add_by_index()
817 dlpar_release_drc(lmb->drc_index); in dlpar_memory_add_by_index()
831 lmb->base_addr, drc_index); in dlpar_memory_add_by_index()
838 struct drmem_lmb *lmb, *start_lmb, *end_lmb; in dlpar_memory_add_by_ic() local
853 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_add_by_ic()
854 if (lmb->flags & DRCONF_MEM_RESERVED) in dlpar_memory_add_by_ic()
863 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_add_by_ic()
864 if (lmb->flags & DRCONF_MEM_ASSIGNED) in dlpar_memory_add_by_ic()
867 rc = dlpar_acquire_drc(lmb->drc_index); in dlpar_memory_add_by_ic()
871 rc = dlpar_add_lmb(lmb); in dlpar_memory_add_by_ic()
873 dlpar_release_drc(lmb->drc_index); in dlpar_memory_add_by_ic()
877 drmem_mark_lmb_reserved(lmb); in dlpar_memory_add_by_ic()
883 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_add_by_ic()
884 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_add_by_ic()
887 rc = dlpar_remove_lmb(lmb); in dlpar_memory_add_by_ic()
890 lmb->drc_index); in dlpar_memory_add_by_ic()
892 dlpar_release_drc(lmb->drc_index); in dlpar_memory_add_by_ic()
894 drmem_remove_lmb_reservation(lmb); in dlpar_memory_add_by_ic()
898 for_each_drmem_lmb_in_range(lmb, start_lmb, end_lmb) { in dlpar_memory_add_by_ic()
899 if (!drmem_lmb_reserved(lmb)) in dlpar_memory_add_by_ic()
903 lmb->base_addr, lmb->drc_index); in dlpar_memory_add_by_ic()
904 drmem_remove_lmb_reservation(lmb); in dlpar_memory_add_by_ic()