Fix corner case in cpumap parsing

parse_cpumap() in cache.c parses the shared_cpu_map fields with comma separators, such as (from https://www.ibm.com/developerworks/community/forums/html/topic?id=77777777-0000-0000-0000-000014556104):

   # cat /sys/devices/system/cpu/cpu0/cache/index2/shared_cpu_map
   00000000,00000003

In this case, the numbers are full sized (32-bit) fixed-width.  On my Atom D525 (HT disabled), there is only one number, and it does not have leading zeros:

   # cat /sys/devices/system/cpu/cpu0/cache/index2/shared_cpu_map
   1

When parse_cpumap() is done parsing the shared_cpu_map, it validates the total length of the array of values against the expected len:

   assert(len == c * sizeof(unsigned));

The expected len is calculated by cpumap_len(), also in cache.c.  It parses shared_cpu_map to determine len by counting the total number of hex digits, regardless of the comma separators, rounds the total number of bits (4 per hex digit) up to the BITS_PER_INT, then divides by 8 to return the len in bytes.

This calculation will be correct for examples like the first, where both numbers are full sized (32-bit) fixed-width (8 hex characters) numbers.  If, however, there are multiple numbers formatted like the second example -- "0,1" for example -- then the calculation of len in cpumap_len() will not match the value expected by parse_cpumap().

The fix is for cpumap_len() to calculate the len of each number and return the sum of all the len's.  (There are no sanity checks for the number of separator characters; the code assumes a single comma separator.  This is a problem if round_up(0, BITS_PER_INT) returns 1 instead of 0.)
Fix cache map parsing

mcelog aborts (assertion failure at cache.c:92) when processing CPU cache MCEs and there are offline CPU cores, for example, when the CPU hyper-threading feature is disabled.  mcelog assumes there are cache descriptor entries in /sys/devices/system/cpu/cpuN/cache for every CPU core, N.  When a CPU core is offline, its cache directory does not exist.

Patch (conditionalize processing on the stat("/sys/devices/system/cpu/cpuN/cache") return status):