Hi Will,
On 1/22/19 5:45 AM, Will Deacon wrote:
On Thu, Dec 20, 2018 at 03:21:24PM +0000, Julien Grall wrote:
+ /* parse out guest addr */
+ base = 10;
+ if (strcasestr(p, "0x"))
+ base = 16;
+ addr = strtoll(p, &next, base);
I thought strtoll() already handled '0x' prefixes if you pass base = 0?
It does. Base = 0 will also deal with octal number. Do we want to
support that here?
+ if (next == p && addr == 0) {
+ /*
+ * To keep backward compatibility, the <addr> is not
+ * mandatory for the first bank.
+ */
+ if (cfg->nr_ram > 0)
+ die("mem: <addr> must be specified\n");
+ addr = INVALID_RAM_ADDR;
+ }
+
+ if ( cfg->nr_ram == MAX_RAM_BANKS )
+ die("mem: Too many banks\n");
+
+ /*
+ * Allow the architecture to tell whether it is possible to configure
+ * the RAM base address.
+ */
+#ifndef ARCH_SUPPORT_CFG_RAM_BASE
+ if (addr == INVALID_RAM_ADDR)
+ die("mem: specifying <addr> is not allowed\n");
+#endif
+
+ cfg->ram[cfg->nr_ram].base = addr;
+ cfg->ram[cfg->nr_ram].size = size;
How do you avoid adding overlapping regions?
Overlapping regions check is added by the next patch. See the function
kvm__arch_sanitize_cfg. I can look at moving the overlapping check in
common code.
Cheers,
--
Julien Grall