|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v6 2/6] xen/x86: move generically usable NUMA code from x86 to common
On 11.10.2022 13:17, Wei Chen wrote:
> v5 -> v6:
> 1. Replace numa_scan_node to numa_process_nodes in commit log.
> 2. Limit the scope of page_num_node, vnuma and page of numa_setup
> function.
> 3. Use memset to init page_num_node instead of for_each_online_node.
> 4. Use %u instead of %d for nodeid_t and j in numa_setup print
> messages.
The only instances of nodeid_t typed variable uses that I was able to
find are in dump_numa(). I guess you can leave them that way, but
strictly speaking %u isn't correct to use for nodeid_t (as it promotes
to int, not to unsigned int).
> 5. Use min(PADDR_BITS, BITS_PER_LONG - 1) to calculate the shift
> when only one node is in the system.
This change needs mentioning / justifying in the description.
> +static void cf_check dump_numa(unsigned char key)
> +{
> + s_time_t now = NOW();
> + unsigned int i, j, n;
> + struct domain *d;
> +
> + printk("'%c' pressed -> dumping numa info (now = %"PRI_stime")\n", key,
> + now);
> +
> + for_each_online_node ( i )
> + {
> + paddr_t pa = pfn_to_paddr(node_start_pfn(i) + 1);
> +
> + printk("NODE%u start->%lu size->%lu free->%lu\n",
> + i, node_start_pfn(i), node_spanned_pages(i),
> + avail_node_heap_pages(i));
> + /* Sanity check phys_to_nid() */
> + if ( phys_to_nid(pa) != i )
> + printk("phys_to_nid(%"PRIpaddr") -> %u should be %u\n",
> + pa, phys_to_nid(pa), i);
> + }
> +
> + j = cpumask_first(&cpu_online_map);
> + n = 0;
> + for_each_online_cpu ( i )
> + {
> + if ( i != j + n || cpu_to_node[j] != cpu_to_node[i] )
> + {
> + if ( n > 1 )
> + printk("CPU%u...%u -> NODE%u\n", j, j + n - 1,
> cpu_to_node[j]);
> + else
> + printk("CPU%u -> NODE%u\n", j, cpu_to_node[j]);
> + j = i;
> + n = 1;
> + }
> + else
> + ++n;
> + }
> + if ( n > 1 )
> + printk("CPU%u...%u -> NODE%u\n", j, j + n - 1, cpu_to_node[j]);
> + else
> + printk("CPU%u -> NODE%u\n", j, cpu_to_node[j]);
> +
> + rcu_read_lock(&domlist_read_lock);
> +
> + printk("Memory location of each domain:\n");
> + for_each_domain ( d )
> + {
> + const struct page_info *page;
> + unsigned int page_num_node[MAX_NUMNODES];
> + const struct vnuma_info *vnuma;
> +
> + process_pending_softirqs();
> +
> + printk("Domain %u (total: %u):\n", d->domain_id,
> domain_tot_pages(d));
Perhaps switch to using %pd here?
> + memset(page_num_node, 0, sizeof(unsigned int) * MAX_NUMNODES);
Simply (and less fragile) sizeof(page_num_node)?
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |