treewide: make "nr_cpu_ids" unsigned
First, number of CPUs can't be negative number. Second, different signnnedness leads to suboptimal code in the following cases: 1) kmalloc(nr_cpu_ids * sizeof(X)); "int" has to be sign extended to size_t. 2) while (loff_t *pos < nr_cpu_ids) MOVSXD is 1 byte longed than the same MOV. Other cases exist as well. Basically compiler is told that nr_cpu_ids can't be negative which can't be deduced if it is "int". Code savings on allyesconfig kernel: -3KB add/remove: 0/0 grow/shrink: 25/264 up/down: 261/-3631 (-3370) function old new delta coretemp_cpu_online 450 512 +62 rcu_init_one 1234 1272 +38 pci_device_probe 374 399 +25 ... pgdat_reclaimable_pages 628 556 -72 select_fallback_rq 446 369 -77 task_numa_find_cpu 1923 1807 -116 Link: http://lkml.kernel.org/r/20170819114959.GA30580@avx2 Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
ac036f9570
commit
9b130ad5bb
|
@ -690,7 +690,7 @@ void __init smp_init_cpus(void)
|
||||||
acpi_parse_gic_cpu_interface, 0);
|
acpi_parse_gic_cpu_interface, 0);
|
||||||
|
|
||||||
if (cpu_count > nr_cpu_ids)
|
if (cpu_count > nr_cpu_ids)
|
||||||
pr_warn("Number of cores (%d) exceeds configured maximum of %d - clipping\n",
|
pr_warn("Number of cores (%d) exceeds configured maximum of %u - clipping\n",
|
||||||
cpu_count, nr_cpu_ids);
|
cpu_count, nr_cpu_ids);
|
||||||
|
|
||||||
if (!bootcpu_valid) {
|
if (!bootcpu_valid) {
|
||||||
|
|
|
@ -224,7 +224,7 @@ void __init allocate_pacas(void)
|
||||||
paca = __va(memblock_alloc_base(paca_size, PAGE_SIZE, limit));
|
paca = __va(memblock_alloc_base(paca_size, PAGE_SIZE, limit));
|
||||||
memset(paca, 0, paca_size);
|
memset(paca, 0, paca_size);
|
||||||
|
|
||||||
printk(KERN_DEBUG "Allocated %u bytes for %d pacas at %p\n",
|
printk(KERN_DEBUG "Allocated %u bytes for %u pacas at %p\n",
|
||||||
paca_size, nr_cpu_ids, paca);
|
paca_size, nr_cpu_ids, paca);
|
||||||
|
|
||||||
allocate_lppacas(nr_cpu_ids, limit);
|
allocate_lppacas(nr_cpu_ids, limit);
|
||||||
|
|
|
@ -551,7 +551,7 @@ void __init smp_setup_cpu_maps(void)
|
||||||
if (maxcpus > nr_cpu_ids) {
|
if (maxcpus > nr_cpu_ids) {
|
||||||
printk(KERN_WARNING
|
printk(KERN_WARNING
|
||||||
"Partition configured for %d cpus, "
|
"Partition configured for %d cpus, "
|
||||||
"operating system maximum is %d.\n",
|
"operating system maximum is %u.\n",
|
||||||
maxcpus, nr_cpu_ids);
|
maxcpus, nr_cpu_ids);
|
||||||
maxcpus = nr_cpu_ids;
|
maxcpus = nr_cpu_ids;
|
||||||
} else
|
} else
|
||||||
|
|
|
@ -511,13 +511,13 @@ static bool xive_parse_provisioning(struct device_node *np)
|
||||||
static void xive_native_setup_pools(void)
|
static void xive_native_setup_pools(void)
|
||||||
{
|
{
|
||||||
/* Allocate a pool big enough */
|
/* Allocate a pool big enough */
|
||||||
pr_debug("XIVE: Allocating VP block for pool size %d\n", nr_cpu_ids);
|
pr_debug("XIVE: Allocating VP block for pool size %u\n", nr_cpu_ids);
|
||||||
|
|
||||||
xive_pool_vps = xive_native_alloc_vp_block(nr_cpu_ids);
|
xive_pool_vps = xive_native_alloc_vp_block(nr_cpu_ids);
|
||||||
if (WARN_ON(xive_pool_vps == XIVE_INVALID_VP))
|
if (WARN_ON(xive_pool_vps == XIVE_INVALID_VP))
|
||||||
pr_err("XIVE: Failed to allocate pool VP, KVM might not function\n");
|
pr_err("XIVE: Failed to allocate pool VP, KVM might not function\n");
|
||||||
|
|
||||||
pr_debug("XIVE: Pool VPs allocated at 0x%x for %d max CPUs\n",
|
pr_debug("XIVE: Pool VPs allocated at 0x%x for %u max CPUs\n",
|
||||||
xive_pool_vps, nr_cpu_ids);
|
xive_pool_vps, nr_cpu_ids);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1200,7 +1200,7 @@ static void __init validate_hv(void)
|
||||||
* We use a struct cpumask for this, so it must be big enough.
|
* We use a struct cpumask for this, so it must be big enough.
|
||||||
*/
|
*/
|
||||||
if ((smp_height * smp_width) > nr_cpu_ids)
|
if ((smp_height * smp_width) > nr_cpu_ids)
|
||||||
early_panic("Hypervisor %d x %d grid too big for Linux NR_CPUS %d\n",
|
early_panic("Hypervisor %d x %d grid too big for Linux NR_CPUS %u\n",
|
||||||
smp_height, smp_width, nr_cpu_ids);
|
smp_height, smp_width, nr_cpu_ids);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2097,7 +2097,7 @@ static int allocate_logical_cpuid(int apicid)
|
||||||
|
|
||||||
/* Allocate a new cpuid. */
|
/* Allocate a new cpuid. */
|
||||||
if (nr_logical_cpuids >= nr_cpu_ids) {
|
if (nr_logical_cpuids >= nr_cpu_ids) {
|
||||||
WARN_ONCE(1, "APIC: NR_CPUS/possible_cpus limit of %i reached. "
|
WARN_ONCE(1, "APIC: NR_CPUS/possible_cpus limit of %u reached. "
|
||||||
"Processor %d/0x%x and the rest are ignored.\n",
|
"Processor %d/0x%x and the rest are ignored.\n",
|
||||||
nr_cpu_ids, nr_logical_cpuids, apicid);
|
nr_cpu_ids, nr_logical_cpuids, apicid);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
|
@ -168,7 +168,7 @@ void __init setup_per_cpu_areas(void)
|
||||||
unsigned long delta;
|
unsigned long delta;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
pr_info("NR_CPUS:%d nr_cpumask_bits:%d nr_cpu_ids:%d nr_node_ids:%d\n",
|
pr_info("NR_CPUS:%d nr_cpumask_bits:%d nr_cpu_ids:%u nr_node_ids:%d\n",
|
||||||
NR_CPUS, nr_cpumask_bits, nr_cpu_ids, nr_node_ids);
|
NR_CPUS, nr_cpumask_bits, nr_cpu_ids, nr_node_ids);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -1461,7 +1461,7 @@ __init void prefill_possible_map(void)
|
||||||
|
|
||||||
/* nr_cpu_ids could be reduced via nr_cpus= */
|
/* nr_cpu_ids could be reduced via nr_cpus= */
|
||||||
if (possible > nr_cpu_ids) {
|
if (possible > nr_cpu_ids) {
|
||||||
pr_warn("%d Processors exceeds NR_CPUS limit of %d\n",
|
pr_warn("%d Processors exceeds NR_CPUS limit of %u\n",
|
||||||
possible, nr_cpu_ids);
|
possible, nr_cpu_ids);
|
||||||
possible = nr_cpu_ids;
|
possible = nr_cpu_ids;
|
||||||
}
|
}
|
||||||
|
|
|
@ -256,9 +256,9 @@ static ssize_t print_cpus_offline(struct device *dev,
|
||||||
buf[n++] = ',';
|
buf[n++] = ',';
|
||||||
|
|
||||||
if (nr_cpu_ids == total_cpus-1)
|
if (nr_cpu_ids == total_cpus-1)
|
||||||
n += snprintf(&buf[n], len - n, "%d", nr_cpu_ids);
|
n += snprintf(&buf[n], len - n, "%u", nr_cpu_ids);
|
||||||
else
|
else
|
||||||
n += snprintf(&buf[n], len - n, "%d-%d",
|
n += snprintf(&buf[n], len - n, "%u-%d",
|
||||||
nr_cpu_ids, total_cpus-1);
|
nr_cpu_ids, total_cpus-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5465,7 +5465,7 @@ static int sdebug_driver_probe(struct device * dev)
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
if (submit_queues > nr_cpu_ids) {
|
if (submit_queues > nr_cpu_ids) {
|
||||||
pr_warn("%s: trim submit_queues (was %d) to nr_cpu_ids=%d\n",
|
pr_warn("%s: trim submit_queues (was %d) to nr_cpu_ids=%u\n",
|
||||||
my_name, submit_queues, nr_cpu_ids);
|
my_name, submit_queues, nr_cpu_ids);
|
||||||
submit_queues = nr_cpu_ids;
|
submit_queues = nr_cpu_ids;
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,15 +32,15 @@ typedef struct cpumask { DECLARE_BITMAP(bits, NR_CPUS); } cpumask_t;
|
||||||
#define cpumask_pr_args(maskp) nr_cpu_ids, cpumask_bits(maskp)
|
#define cpumask_pr_args(maskp) nr_cpu_ids, cpumask_bits(maskp)
|
||||||
|
|
||||||
#if NR_CPUS == 1
|
#if NR_CPUS == 1
|
||||||
#define nr_cpu_ids 1
|
#define nr_cpu_ids 1U
|
||||||
#else
|
#else
|
||||||
extern int nr_cpu_ids;
|
extern unsigned int nr_cpu_ids;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_CPUMASK_OFFSTACK
|
#ifdef CONFIG_CPUMASK_OFFSTACK
|
||||||
/* Assuming NR_CPUS is huge, a runtime limit is more efficient. Also,
|
/* Assuming NR_CPUS is huge, a runtime limit is more efficient. Also,
|
||||||
* not all bits may be allocated. */
|
* not all bits may be allocated. */
|
||||||
#define nr_cpumask_bits ((unsigned int)nr_cpu_ids)
|
#define nr_cpumask_bits nr_cpu_ids
|
||||||
#else
|
#else
|
||||||
#define nr_cpumask_bits ((unsigned int)NR_CPUS)
|
#define nr_cpumask_bits ((unsigned int)NR_CPUS)
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -4091,7 +4091,7 @@ static void __init rcu_init_geometry(void)
|
||||||
if (rcu_fanout_leaf == RCU_FANOUT_LEAF &&
|
if (rcu_fanout_leaf == RCU_FANOUT_LEAF &&
|
||||||
nr_cpu_ids == NR_CPUS)
|
nr_cpu_ids == NR_CPUS)
|
||||||
return;
|
return;
|
||||||
pr_info("RCU: Adjusting geometry for rcu_fanout_leaf=%d, nr_cpu_ids=%d\n",
|
pr_info("RCU: Adjusting geometry for rcu_fanout_leaf=%d, nr_cpu_ids=%u\n",
|
||||||
rcu_fanout_leaf, nr_cpu_ids);
|
rcu_fanout_leaf, nr_cpu_ids);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -89,7 +89,7 @@ static void __init rcu_bootup_announce_oddness(void)
|
||||||
if (rcu_fanout_leaf != RCU_FANOUT_LEAF)
|
if (rcu_fanout_leaf != RCU_FANOUT_LEAF)
|
||||||
pr_info("\tBoot-time adjustment of leaf fanout to %d.\n", rcu_fanout_leaf);
|
pr_info("\tBoot-time adjustment of leaf fanout to %d.\n", rcu_fanout_leaf);
|
||||||
if (nr_cpu_ids != NR_CPUS)
|
if (nr_cpu_ids != NR_CPUS)
|
||||||
pr_info("\tRCU restricting CPUs from NR_CPUS=%d to nr_cpu_ids=%d.\n", NR_CPUS, nr_cpu_ids);
|
pr_info("\tRCU restricting CPUs from NR_CPUS=%d to nr_cpu_ids=%u.\n", NR_CPUS, nr_cpu_ids);
|
||||||
#ifdef CONFIG_RCU_BOOST
|
#ifdef CONFIG_RCU_BOOST
|
||||||
pr_info("\tRCU priority boosting: priority %d delay %d ms.\n", kthread_prio, CONFIG_RCU_BOOST_DELAY);
|
pr_info("\tRCU priority boosting: priority %d delay %d ms.\n", kthread_prio, CONFIG_RCU_BOOST_DELAY);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -473,7 +473,7 @@ static int __init isolated_cpu_setup(char *str)
|
||||||
alloc_bootmem_cpumask_var(&cpu_isolated_map);
|
alloc_bootmem_cpumask_var(&cpu_isolated_map);
|
||||||
ret = cpulist_parse(str, cpu_isolated_map);
|
ret = cpulist_parse(str, cpu_isolated_map);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
pr_err("sched: Error, all isolcpus= values must be between 0 and %d\n", nr_cpu_ids);
|
pr_err("sched: Error, all isolcpus= values must be between 0 and %u\n", nr_cpu_ids);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -550,7 +550,7 @@ static int __init maxcpus(char *str)
|
||||||
early_param("maxcpus", maxcpus);
|
early_param("maxcpus", maxcpus);
|
||||||
|
|
||||||
/* Setup number of possible processor ids */
|
/* Setup number of possible processor ids */
|
||||||
int nr_cpu_ids __read_mostly = NR_CPUS;
|
unsigned int nr_cpu_ids __read_mostly = NR_CPUS;
|
||||||
EXPORT_SYMBOL(nr_cpu_ids);
|
EXPORT_SYMBOL(nr_cpu_ids);
|
||||||
|
|
||||||
/* An arch may set nr_cpu_ids earlier if needed, so this would be redundant */
|
/* An arch may set nr_cpu_ids earlier if needed, so this would be redundant */
|
||||||
|
|
|
@ -1543,7 +1543,7 @@ fs_initcall(init_graph_tracefs);
|
||||||
|
|
||||||
static __init int init_graph_trace(void)
|
static __init int init_graph_trace(void)
|
||||||
{
|
{
|
||||||
max_bytes_for_cpu = snprintf(NULL, 0, "%d", nr_cpu_ids - 1);
|
max_bytes_for_cpu = snprintf(NULL, 0, "%u", nr_cpu_ids - 1);
|
||||||
|
|
||||||
if (!register_trace_event(&graph_trace_entry_event)) {
|
if (!register_trace_event(&graph_trace_entry_event)) {
|
||||||
pr_warn("Warning: could not register graph trace events\n");
|
pr_warn("Warning: could not register graph trace events\n");
|
||||||
|
|
|
@ -4232,7 +4232,7 @@ void __init kmem_cache_init(void)
|
||||||
cpuhp_setup_state_nocalls(CPUHP_SLUB_DEAD, "slub:dead", NULL,
|
cpuhp_setup_state_nocalls(CPUHP_SLUB_DEAD, "slub:dead", NULL,
|
||||||
slub_cpu_dead);
|
slub_cpu_dead);
|
||||||
|
|
||||||
pr_info("SLUB: HWalign=%d, Order=%d-%d, MinObjects=%d, CPUs=%d, Nodes=%d\n",
|
pr_info("SLUB: HWalign=%d, Order=%d-%d, MinObjects=%d, CPUs=%u, Nodes=%d\n",
|
||||||
cache_line_size(),
|
cache_line_size(),
|
||||||
slub_min_order, slub_max_order, slub_min_objects,
|
slub_min_order, slub_max_order, slub_min_objects,
|
||||||
nr_cpu_ids, nr_node_ids);
|
nr_cpu_ids, nr_node_ids);
|
||||||
|
|
Loading…
Reference in New Issue