[guest][vmm] Allow smaller regions of memory
Allow smaller regions of memory to be mapped, and only call SetDefaults
once after all parsing has been completed.
MAC-180
Test: Ran "linux_guest" on a VIM2 with a modified bootloader.
Change-Id: I51987786bdd7031b1a0a7e39d215368372c34f24
diff --git a/bin/guest/vmm/guest_config.cc b/bin/guest/vmm/guest_config.cc
index c2664d7..289a9e0 100644
--- a/bin/guest/vmm/guest_config.cc
+++ b/bin/guest/vmm/guest_config.cc
@@ -214,8 +214,6 @@
return parse_number(tokens[1], &out->options, fxl::Base::k10);
}
-constexpr size_t kMinMemorySize = 1 << 20;
-
static zx_status_t parse_memory(const std::string& value, size_t* out) {
char modifier = 'b';
size_t size;
@@ -224,6 +222,7 @@
FXL_LOG(ERROR) << "Value is not a size string: " << value;
return ZX_ERR_INVALID_ARGS;
}
+
switch (modifier) {
case 'b':
break;
@@ -241,12 +240,6 @@
return ZX_ERR_INVALID_ARGS;
}
- if (size < kMinMemorySize) {
- FXL_LOG(ERROR) << "Requested memory " << size
- << " is less than the minimum supported size "
- << kMinMemorySize;
- return ZX_ERR_INVALID_ARGS;
- }
*out = size;
return ZX_OK;
}
@@ -349,7 +342,6 @@
}
}
- SetDefaults();
return ZX_OK;
}
@@ -399,6 +391,5 @@
return ZX_ERR_INVALID_ARGS;
}
- SetDefaults();
return ZX_OK;
}
diff --git a/bin/guest/vmm/guest_config.h b/bin/guest/vmm/guest_config.h
index b5ee709..213e6ad 100644
--- a/bin/guest/vmm/guest_config.h
+++ b/bin/guest/vmm/guest_config.h
@@ -75,12 +75,11 @@
zx_status_t ParseArgcArgv(int argc, char** argv);
zx_status_t ParseConfig(const std::string& data);
+ void SetDefaults();
private:
GuestConfig* cfg_;
std::unordered_map<std::string, OptionHandler> opts_;
-
- void SetDefaults();
};
#endif // GARNET_BIN_GUEST_VMM_GUEST_CONFIG_H_
diff --git a/bin/guest/vmm/guest_config_unittest.cc b/bin/guest/vmm/guest_config_unittest.cc
index 1336810..631b736 100644
--- a/bin/guest/vmm/guest_config_unittest.cc
+++ b/bin/guest/vmm/guest_config_unittest.cc
@@ -231,10 +231,6 @@
EXPECT_EQ(MemoryPolicy::GUEST_CACHED, memory[1].policy);
}
-TEST_F(GuestConfigParserTest, Memory_TooSmall) {
- ASSERT_EQ(ZX_ERR_INVALID_ARGS, ParseArg("--memory=1k"));
-}
-
TEST_F(GuestConfigParserTest, Memory_IllegalModifier) {
ASSERT_EQ(ZX_ERR_INVALID_ARGS, ParseArg("--memory=5l"));
}
diff --git a/bin/guest/vmm/main.cc b/bin/guest/vmm/main.cc
index 33d6c86..3c55df9 100644
--- a/bin/guest/vmm/main.cc
+++ b/bin/guest/vmm/main.cc
@@ -77,7 +77,12 @@
return status;
}
}
- return parser.ParseArgcArgv(argc, argv);
+ zx_status_t status = parser.ParseArgcArgv(argc, argv);
+ if (status != ZX_OK) {
+ return status;
+ }
+ parser.SetDefaults();
+ return ZX_OK;
}
static zx_gpaddr_t alloc_device_addr(size_t device_size) {