Some counter arrays are initialized before APs are started. For
instance, vmcounter_startup() runs at SI_SUB_KMEM, before SI_SUB_CPU.
Prior to r336020, counter_u64_alloc() initialized the counters using an
smp_rendezvous(). For early initializations, this ran before
smp_started was set, so we'd only initialize the counter for CPU 0, and
apparently we relied on the rest of the array already being zeroed(!).
With r336020 we now initialize the counters using a CPU_FOREACH() loop,
and this revealed a problem. On arm64, we do not set the bit for cpuid
0 in all_cpus until SI_SUB_CPU, so the CPU_FOREACH() loop skips CPU 0
(because CPU_ABSENT(0) is true) when initializing some counters. Thus
the trash value 0xdeadc0de is left as the counter value.
Fix the problem by using M_ZERO with UMA, and modify UMA to explicitly
iterate over all cpuids. I do not believe that we can defer
initialization of vm_cnt to after SI_SUB_CPU.