On Thu, Aug 25, 2011 at 09:02:56AM +0300, Pekka Enberg wrote: > On Thu, Aug 25, 2011 at 1:25 AM, David Evensky <evensky@xxxxxxxxxx> wrote: > > + ? ? ? if (*next == '\0') > > + ? ? ? ? ? ? ? p = next; > > + ? ? ? else > > + ? ? ? ? ? ? ? p = next + 1; > > + ? ? ? /* parse out size */ > > + ? ? ? base = 10; > > + ? ? ? if (strcasestr(p, "0x")) > > + ? ? ? ? ? ? ? base = 16; > > + ? ? ? size = strtoll(p, &next, base); > > + ? ? ? if (next == p && size == 0) { > > + ? ? ? ? ? ? ? pr_info("shmem: no size specified, using default."); > > + ? ? ? ? ? ? ? size = default_size; > > + ? ? ? } > > + ? ? ? /* look for [KMGkmg][Bb]* ?uses base 2. */ > > + ? ? ? int skip_B = 0; > > + ? ? ? if (strspn(next, "KMGkmg")) { ? /* might have a prefix */ > > + ? ? ? ? ? ? ? if (*(next + 1) == 'B' || *(next + 1) == 'b') > > + ? ? ? ? ? ? ? ? ? ? ? skip_B = 1; > > + ? ? ? ? ? ? ? switch (*next) { > > + ? ? ? ? ? ? ? case 'K': > > + ? ? ? ? ? ? ? case 'k': > > + ? ? ? ? ? ? ? ? ? ? ? size = size << KB_SHIFT; > > + ? ? ? ? ? ? ? ? ? ? ? break; > > + ? ? ? ? ? ? ? case 'M': > > + ? ? ? ? ? ? ? case 'm': > > + ? ? ? ? ? ? ? ? ? ? ? size = size << MB_SHIFT; > > + ? ? ? ? ? ? ? ? ? ? ? break; > > + ? ? ? ? ? ? ? case 'G': > > + ? ? ? ? ? ? ? case 'g': > > + ? ? ? ? ? ? ? ? ? ? ? size = size << GB_SHIFT; > > + ? ? ? ? ? ? ? ? ? ? ? break; > > + ? ? ? ? ? ? ? default: > > + ? ? ? ? ? ? ? ? ? ? ? die("shmem: bug in detecting size prefix."); > > + ? ? ? ? ? ? ? ? ? ? ? break; > > + ? ? ? ? ? ? ? } > > There's some nice code in perf to parse sizes like this. We could just > steal that. That sounds good to me. > > +inline void fill_mem(void *buf, size_t buf_size, char *fill, size_t fill_len) > > +{ > > + ? ? ? size_t i; > > + > > + ? ? ? if (fill_len == 1) { > > + ? ? ? ? ? ? ? memset(buf, fill[0], buf_size); > > + ? ? ? } else { > > + ? ? ? ? ? ? ? if (buf_size > fill_len) { > > + ? ? ? ? ? ? ? ? ? ? ? for (i = 0; i < buf_size - fill_len; i += fill_len) > > + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? memcpy(((char *)buf) + i, fill, fill_len); > > + ? ? ? ? ? ? ? ? ? ? ? memcpy(buf + i, fill, buf_size - i); > > + ? ? ? ? ? ? ? } else { > > + ? ? ? ? ? ? ? ? ? ? ? memcpy(buf, fill, buf_size); > > + ? ? ? ? ? ? ? } > > + ? ? ? } > > +} > > Can we do a memset_pattern4() type of interface instead? I think it's > mostly pointless to try to support arbitrary-length 'fill'. Yeah, I can see how the arbitrary fill thing might be too cute. It certainly isn't necessary. -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html