*/
                for_each_cpu(cpu, mm_cpumask(mm)) {
                        for (i = cpu_first_thread_sibling(cpu);
-                            i <= cpu_last_thread_sibling(cpu); i++)
-                               __set_bit(id, stale_map[i]);
+                            i <= cpu_last_thread_sibling(cpu); i++) {
+                               if (stale_map[i])
+                                       __set_bit(id, stale_map[i]);
+                       }
                        cpu = i - 1;
                }
                return id;
                /* XXX This clear should ultimately be part of local_flush_tlb_mm */
                for (i = cpu_first_thread_sibling(cpu);
                     i <= cpu_last_thread_sibling(cpu); i++) {
-                       __clear_bit(id, stale_map[i]);
+                       if (stale_map[i])
+                               __clear_bit(id, stale_map[i]);
                }
        }