diff options
author | Richard Chang <richardycc@google.com> | 2023-05-25 03:01:46 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2023-05-25 03:01:46 +0000 |
commit | 17fde9733f292bbf0ec69ed3a279dcf989d557e4 (patch) | |
tree | bbfd60f71a54d7ac9d57ef9629f6037d329c3580 | |
parent | 5f2d8c987b585ca62fe2d3194776461170b34e39 (diff) | |
parent | 2982e7887775e4ccddea56214f28977f41bd9fe6 (diff) | |
download | pixel-17fde9733f292bbf0ec69ed3a279dcf989d557e4.tar.gz |
Merge changes I417eadff,I9546e9dc into udc-dev
* changes:
mm: support max-ram-size experiment
misc_writer: add max_ram_size configuration
-rw-r--r-- | misc_writer/include/misc_writer/misc_writer.h | 9 | ||||
-rw-r--r-- | misc_writer/misc_writer.cpp | 7 | ||||
-rw-r--r-- | misc_writer/misc_writer_main.cpp | 25 | ||||
-rw-r--r-- | misc_writer/misc_writer_test.cpp | 13 | ||||
-rw-r--r-- | mm/pixel-mm-gki.rc | 8 |
5 files changed, 62 insertions, 0 deletions
diff --git a/misc_writer/include/misc_writer/misc_writer.h b/misc_writer/include/misc_writer/misc_writer.h index 3ae0a15b..ce3da5c8 100644 --- a/misc_writer/include/misc_writer/misc_writer.h +++ b/misc_writer/include/misc_writer/misc_writer.h @@ -38,6 +38,8 @@ enum class MiscWriterActions : int32_t { kClearWristOrientationFlag, kWriteTimeFormat, kWriteTimeOffset, + kSetMaxRamSize, + kClearMaxRamSize, kUnset = -1, }; @@ -57,6 +59,13 @@ class MiscWriter { static constexpr char kTimeFormat[] = "timeformat="; static constexpr uint32_t kTimeOffsetValOffsetInVendorSpace = 160; static constexpr char kTimeOffset[] = "timeoffset="; + static constexpr uint32_t kMaxRamSizeOffsetInVendorSpace = 192; + static constexpr char kMaxRamSize[] = "max-ram-size="; + + // Minimum and maximum valid value for max-ram-size + static constexpr int32_t kRamSizeDefault = -1; + static constexpr uint32_t kRamSizeMin = 2048; + static constexpr uint32_t kRamSizeMax = 65536; // Minimum and maximum time zone are -12 and 14 hours from GMT static constexpr int32_t kMinTimeOffset = -12 * 60 * 60 * 1000; diff --git a/misc_writer/misc_writer.cpp b/misc_writer/misc_writer.cpp index f3ef1418..8458649f 100644 --- a/misc_writer/misc_writer.cpp +++ b/misc_writer/misc_writer.cpp @@ -86,6 +86,13 @@ bool MiscWriter::PerformAction(std::optional<size_t> override_offset) { content = std::string(kTimeOffset) + stringdata_; content.resize(strlen(kTimeOffset) + std::to_string(kMinTimeOffset).size(), 0); break; + case MiscWriterActions::kSetMaxRamSize: + case MiscWriterActions::kClearMaxRamSize: + offset = override_offset.value_or(kMaxRamSizeOffsetInVendorSpace); + content = (action_ == MiscWriterActions::kSetMaxRamSize) + ? std::string(kMaxRamSize).append(stringdata_).append("\n") + : std::string(32, 0); + break; case MiscWriterActions::kUnset: LOG(ERROR) << "The misc writer action must be set"; return false; diff --git a/misc_writer/misc_writer_main.cpp b/misc_writer/misc_writer_main.cpp index 164d27e4..0af45a91 100644 --- a/misc_writer/misc_writer_main.cpp +++ b/misc_writer/misc_writer_main.cpp @@ -48,6 +48,8 @@ static int Usage(std::string_view name) { std::cerr << " --clear-wrist-orientation Clear the wrist orientation flag\n"; std::cerr << " --set-timeformat Write the time format value (1=24hr, 0=12hr)\n"; std::cerr << " --set-timeoffset Write the time offset value (tz_time - utc_time)\n"; + std::cerr << " --set-max-ram-size <2048-65536> Write the sw limit max ram size in MB\n"; + std::cerr << " --set-max-ram-size <-1> Clear the sw limit max ram size\n"; std::cerr << "Writes the given hex string to the specified offset in vendor space in /misc " "partition.\nDefault offset is used for each action unless " "--override-vendor-space-offset is specified.\n"; @@ -68,6 +70,7 @@ int main(int argc, char** argv) { { "set-disable-pkvm", no_argument, nullptr, 0 }, { "set-timeformat", required_argument, nullptr, 0}, { "set-timeoffset", required_argument, nullptr, 0}, + { "set-max-ram-size", required_argument, nullptr, 0}, { nullptr, 0, nullptr, 0 }, }; @@ -148,6 +151,28 @@ int main(int argc, char** argv) { } misc_writer = std::make_unique<MiscWriter>(MiscWriterActions::kWriteTimeOffset, std::to_string(timeoffset)); + } else if (option_name == "set-max-ram-size"s) { + int max_ram_size; + if (!android::base::ParseInt(optarg, &max_ram_size)) { + LOG(ERROR) << "Failed to parse the max_ram_size: " << optarg; + return Usage(argv[0]); + } + if (max_ram_size != MiscWriter::kRamSizeDefault && + (max_ram_size < MiscWriter::kRamSizeMin || max_ram_size > MiscWriter::kRamSizeMax)) { + LOG(ERROR) << "max_ram_size out of range: " << optarg; + return Usage(argv[0]); + } + if (misc_writer) { + LOG(ERROR) << "Misc writer action has already been set"; + return Usage(argv[0]); + } + + if (max_ram_size == MiscWriter::kRamSizeDefault) { + misc_writer = std::make_unique<MiscWriter>(MiscWriterActions::kClearMaxRamSize); + } else { + misc_writer = std::make_unique<MiscWriter>(MiscWriterActions::kSetMaxRamSize, + std::to_string(max_ram_size)); + } } else if (auto iter = action_map.find(option_name); iter != action_map.end()) { if (misc_writer) { LOG(ERROR) << "Misc writer action has already been set"; diff --git a/misc_writer/misc_writer_test.cpp b/misc_writer/misc_writer_test.cpp index e8b207af..651f6409 100644 --- a/misc_writer/misc_writer_test.cpp +++ b/misc_writer/misc_writer_test.cpp @@ -106,6 +106,19 @@ TEST_F(MiscWriterTest, SetClearSota) { CheckMiscPartitionVendorSpaceContent(32, zeros); } +TEST_F(MiscWriterTest, SetMaxRamSize) { + misc_writer_ = std::make_unique<MiscWriter>(MiscWriterActions::kSetMaxRamSize, "8192"); + size_t offset = MiscWriter::kMaxRamSizeOffsetInVendorSpace; + ASSERT_TRUE(misc_writer_->PerformAction(offset)); + std::string expected = std::string(MiscWriter::kMaxRamSize) + "8192"; + CheckMiscPartitionVendorSpaceContent(offset, expected); + + misc_writer_ = std::make_unique<MiscWriter>(MiscWriterActions::kClearMaxRamSize); + ASSERT_TRUE(misc_writer_->PerformAction(offset)); + std::string zeros(expected.size(), 0); + CheckMiscPartitionVendorSpaceContent(offset, zeros); +} + TEST_F(MiscWriterTest, WriteMiscPartitionVendorSpace) { std::string kTestMessage = "kTestMessage"; std::string err; diff --git a/mm/pixel-mm-gki.rc b/mm/pixel-mm-gki.rc index 798406ba..52603d5b 100644 --- a/mm/pixel-mm-gki.rc +++ b/mm/pixel-mm-gki.rc @@ -69,3 +69,11 @@ on property:init.svc.bugreportd=running on property:init.svc.bugreportd=stopped write /sys/kernel/tracing/instances/pixel/tracing_on 1 + +# max-ram-size experiment +service vendor.set_max_ram_size /vendor/bin/misc_writer --set-max-ram-size ${persist.device_config.vendor_system_native_boot.max_ram_size:--1} + disabled + oneshot + +on property:persist.device_config.vendor_system_native_boot.max_ram_size=* + start vendor.set_max_ram_size |