Lines Matching refs:mi

127 				     struct numa_meminfo *mi)
140 if (mi->nr_blks >= NR_NODE_MEMBLKS) {
145 mi->blk[mi->nr_blks].start = start;
146 mi->blk[mi->nr_blks].end = end;
147 mi->blk[mi->nr_blks].nid = nid;
148 mi->nr_blks++;
155 * @mi: numa_meminfo to remove memblk from
157 * Remove @idx'th numa_memblk from @mi by shifting @mi->blk[] and
158 * decrementing @mi->nr_blks.
160 void __init numa_remove_memblk_from(int idx, struct numa_meminfo *mi)
162 mi->nr_blks--;
163 memmove(&mi->blk[idx], &mi->blk[idx + 1],
164 (mi->nr_blks - idx) * sizeof(mi->blk[0]));
231 * @mi: numa_meminfo to clean up
233 * Sanitize @mi by merging and removing unnecessary memblks. Also check for
239 int __init numa_cleanup_meminfo(struct numa_meminfo *mi)
246 for (i = 0; i < mi->nr_blks; i++) {
247 struct numa_memblk *bi = &mi->blk[i];
252 numa_move_tail_memblk(&numa_reserved_meminfo, i--, mi);
268 numa_remove_memblk_from(i--, mi);
272 for (i = 0; i < mi->nr_blks; i++) {
273 struct numa_memblk *bi = &mi->blk[i];
275 for (j = i + 1; j < mi->nr_blks; j++) {
276 struct numa_memblk *bj = &mi->blk[j];
305 for (k = 0; k < mi->nr_blks; k++) {
306 struct numa_memblk *bk = &mi->blk[k];
313 if (k < mi->nr_blks)
320 numa_remove_memblk_from(j--, mi);
325 for (i = mi->nr_blks; i < ARRAY_SIZE(mi->blk); i++) {
326 mi->blk[i].start = mi->blk[i].end = 0;
327 mi->blk[i].nid = NUMA_NO_NODE;
334 * Set nodes, which have memory in @mi, in *@nodemask.
337 const struct numa_meminfo *mi)
341 for (i = 0; i < ARRAY_SIZE(mi->blk); i++)
342 if (mi->blk[i].start != mi->blk[i].end &&
343 mi->blk[i].nid != NUMA_NO_NODE)
344 node_set(mi->blk[i].nid, *nodemask);
455 static bool __init numa_meminfo_cover_memory(const struct numa_meminfo *mi)
461 for (i = 0; i < mi->nr_blks; i++) {
462 u64 s = mi->blk[i].start >> PAGE_SHIFT;
463 u64 e = mi->blk[i].end >> PAGE_SHIFT;
465 numaram -= __absent_pages_in_range(mi->blk[i].nid, s, e);
548 static int __init numa_register_memblks(struct numa_meminfo *mi)
554 numa_nodemask_from_meminfo(&node_possible_map, mi);
558 for (i = 0; i < mi->nr_blks; i++) {
559 struct numa_memblk *mb = &mi->blk[i];
587 if (!numa_meminfo_cover_memory(mi))
595 for (i = 0; i < mi->nr_blks; i++) {
596 if (nid != mi->blk[i].nid)
598 start = min(mi->blk[i].start, start);
599 end = max(mi->blk[i].end, end);
924 static int meminfo_to_nid(struct numa_meminfo *mi, u64 start)
928 for (i = 0; i < mi->nr_blks; i++)
929 if (mi->blk[i].start <= start && mi->blk[i].end > start)
930 return mi->blk[i].nid;
985 struct numa_meminfo *mi = &numa_meminfo;
994 for (int i = 0; i < mi->nr_blks; i++) {
995 struct numa_memblk *bi = &mi->blk[i];
999 blk[count] = &mi->blk[i];