On Sat, Feb 16, 2019 at 06:13:07PM +0100, Thomas Gleixner wrote: > All information and calculations in the interrupt affinity spreading code > is strictly unsigned int. Though the code uses int all over the place. > > Convert it over to unsigned int. > > Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx> > --- > include/linux/interrupt.h | 20 +++++++++------- > kernel/irq/affinity.c | 56 ++++++++++++++++++++++------------------------ > 2 files changed, 38 insertions(+), 38 deletions(-) > > --- a/include/linux/interrupt.h > +++ b/include/linux/interrupt.h > @@ -251,10 +251,10 @@ struct irq_affinity_notify { > * @sets: Number of affinitized sets > */ > struct irq_affinity { > - int pre_vectors; > - int post_vectors; > - int nr_sets; > - int *sets; > + unsigned int pre_vectors; > + unsigned int post_vectors; > + unsigned int nr_sets; > + unsigned int *sets; > }; > > /** > @@ -314,9 +314,10 @@ extern int > irq_set_affinity_notifier(unsigned int irq, struct irq_affinity_notify *notify); > > struct irq_affinity_desc * > -irq_create_affinity_masks(int nvec, const struct irq_affinity *affd); > +irq_create_affinity_masks(unsigned int nvec, const struct irq_affinity *affd); > > -int irq_calc_affinity_vectors(int minvec, int maxvec, const struct irq_affinity *affd); > +unsigned int irq_calc_affinity_vectors(unsigned int minvec, unsigned int maxvec, > + const struct irq_affinity *affd); > > #else /* CONFIG_SMP */ > > @@ -350,13 +351,14 @@ irq_set_affinity_notifier(unsigned int i > } > > static inline struct irq_affinity_desc * > -irq_create_affinity_masks(int nvec, const struct irq_affinity *affd) > +irq_create_affinity_masks(unsigned int nvec, const struct irq_affinity *affd) > { > return NULL; > } > > -static inline int > -irq_calc_affinity_vectors(int minvec, int maxvec, const struct irq_affinity *affd) > +static inline unsigned int > +irq_calc_affinity_vectors(unsigned int minvec, unsigned int maxvec, > + const struct irq_affinity *affd) > { > return maxvec; > } > --- a/kernel/irq/affinity.c > +++ b/kernel/irq/affinity.c > @@ -9,7 +9,7 @@ > #include <linux/cpu.h> > > static void irq_spread_init_one(struct cpumask *irqmsk, struct cpumask *nmsk, > - int cpus_per_vec) > + unsigned int cpus_per_vec) > { > const struct cpumask *siblmsk; > int cpu, sibl; > @@ -95,15 +95,17 @@ static int get_nodes_in_cpumask(cpumask_ > } > > static int __irq_build_affinity_masks(const struct irq_affinity *affd, > - int startvec, int numvecs, int firstvec, > + unsigned int startvec, > + unsigned int numvecs, > + unsigned int firstvec, > cpumask_var_t *node_to_cpumask, > const struct cpumask *cpu_mask, > struct cpumask *nmsk, > struct irq_affinity_desc *masks) > { > - int n, nodes, cpus_per_vec, extra_vecs, done = 0; > - int last_affv = firstvec + numvecs; > - int curvec = startvec; > + unsigned int n, nodes, cpus_per_vec, extra_vecs, done = 0; > + unsigned int last_affv = firstvec + numvecs; > + unsigned int curvec = startvec; > nodemask_t nodemsk = NODE_MASK_NONE; > > if (!cpumask_weight(cpu_mask)) > @@ -117,18 +119,16 @@ static int __irq_build_affinity_masks(co > */ > if (numvecs <= nodes) { > for_each_node_mask(n, nodemsk) { > - cpumask_or(&masks[curvec].mask, > - &masks[curvec].mask, > - node_to_cpumask[n]); > + cpumask_or(&masks[curvec].mask, &masks[curvec].mask, > + node_to_cpumask[n]); > if (++curvec == last_affv) > curvec = firstvec; > } > - done = numvecs; > - goto out; > + return numvecs; > } > > for_each_node_mask(n, nodemsk) { > - int ncpus, v, vecs_to_assign, vecs_per_node; > + unsigned int ncpus, v, vecs_to_assign, vecs_per_node; > > /* Spread the vectors per node */ > vecs_per_node = (numvecs - (curvec - firstvec)) / nodes; > @@ -163,8 +163,6 @@ static int __irq_build_affinity_masks(co > curvec = firstvec; > --nodes; > } > - > -out: > return done; > } > > @@ -174,13 +172,14 @@ static int __irq_build_affinity_masks(co > * 2) spread other possible CPUs on these vectors > */ > static int irq_build_affinity_masks(const struct irq_affinity *affd, > - int startvec, int numvecs, int firstvec, > + unsigned int startvec, unsigned int numvecs, > + unsigned int firstvec, > struct irq_affinity_desc *masks) > { > - int curvec = startvec, nr_present, nr_others; > - int ret = -ENOMEM; > - cpumask_var_t nmsk, npresmsk; > + unsigned int curvec = startvec, nr_present, nr_others; > cpumask_var_t *node_to_cpumask; > + cpumask_var_t nmsk, npresmsk; > + int ret = -ENOMEM; > > if (!zalloc_cpumask_var(&nmsk, GFP_KERNEL)) > return ret; > @@ -239,12 +238,10 @@ static int irq_build_affinity_masks(cons > * Returns the irq_affinity_desc pointer or NULL if allocation failed. > */ > struct irq_affinity_desc * > -irq_create_affinity_masks(int nvecs, const struct irq_affinity *affd) > +irq_create_affinity_masks(unsigned int nvecs, const struct irq_affinity *affd) > { > - int affvecs = nvecs - affd->pre_vectors - affd->post_vectors; > - int curvec, usedvecs; > + unsigned int affvecs, curvec, usedvecs, nr_sets, i; > struct irq_affinity_desc *masks = NULL; > - int i, nr_sets; > > /* > * If there aren't any vectors left after applying the pre/post > @@ -264,16 +261,17 @@ irq_create_affinity_masks(int nvecs, con > * Spread on present CPUs starting from affd->pre_vectors. If we > * have multiple sets, build each sets affinity mask separately. > */ > + affvecs = nvecs - affd->pre_vectors - affd->post_vectors; > nr_sets = affd->nr_sets; > if (!nr_sets) > nr_sets = 1; > > for (i = 0, usedvecs = 0; i < nr_sets; i++) { > - int this_vecs = affd->sets ? affd->sets[i] : affvecs; > + unsigned int this_vecs = affd->sets ? affd->sets[i] : affvecs; > int ret; > > ret = irq_build_affinity_masks(affd, curvec, this_vecs, > - curvec, masks); > + curvec, masks); > if (ret) { > kfree(masks); > return NULL; > @@ -303,17 +301,17 @@ irq_create_affinity_masks(int nvecs, con > * @maxvec: The maximum number of vectors available > * @affd: Description of the affinity requirements > */ > -int irq_calc_affinity_vectors(int minvec, int maxvec, const struct irq_affinity *affd) > +unsigned int irq_calc_affinity_vectors(unsigned int minvec, unsigned int maxvec, > + const struct irq_affinity *affd) > { > - int resv = affd->pre_vectors + affd->post_vectors; > - int vecs = maxvec - resv; > - int set_vecs; > + unsigned int resv = affd->pre_vectors + affd->post_vectors; > + unsigned int set_vecs; > > if (resv > minvec) > return 0; > > if (affd->nr_sets) { > - int i; > + unsigned int i; > > for (i = 0, set_vecs = 0; i < affd->nr_sets; i++) > set_vecs += affd->sets[i]; > @@ -323,5 +321,5 @@ int irq_calc_affinity_vectors(int minvec > put_online_cpus(); > } > > - return resv + min(set_vecs, vecs); > + return resv + min(set_vecs, maxvec - resv); > } Reviewed-by: Ming Lei <ming.lei@xxxxxxxxxx> Thanks, Ming