genirq/affinity: Code consolidation
[linux-2.6-microblaze.git] / kernel / irq / affinity.c
index 118b66d..82e8799 100644 (file)
@@ -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_var_t *node_to_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(const struct irq_affinity *affd,
         */
        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(const struct irq_affinity *affd,
                        curvec = firstvec;
                --nodes;
        }
-
-out:
        return done;
 }
 
@@ -174,13 +172,14 @@ out:
  *     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(const struct irq_affinity *affd,
  * 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, const struct irq_affinity *affd)
         * 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, const struct irq_affinity *affd)
  * @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, int maxvec, const struct irq_affinity
                put_online_cpus();
        }
 
-       return resv + min(set_vecs, vecs);
+       return resv + min(set_vecs, maxvec - resv);
 }