diff --git a/checkin_notes b/checkin_notes index 98dcdc4b4b..832228f9bf 100644 --- a/checkin_notes +++ b/checkin_notes @@ -9582,3 +9582,20 @@ David 26 Dec 2011 sched/ sched_result.cpp + +Rom 26 Dec 2011 + - VBOX: For hosts who do not have processors with VM extensions try + and disable the use of them at VM creation time. Certain actions + within VirtualBox will force enabling them at runtime and cause + an error (like SMP support) but it should reduce confusion between + volunteers and projects when a VM configuration change now causes + a class of machine that used to work suddenly stop working. + - VBOX: Add some more helpful text notes for error conditions that + the volunteer might be able to address. For instance other + hypervisors locking the VM CPU features for exclusive use. + - VBOX: If we have to dump out the VM execution log on Windows, remove + excess carriage returns from the spew. + + samples/vboxwrapper/ + vbox.cpp + vboxwrapper.cpp diff --git a/samples/vboxwrapper/vbox.cpp b/samples/vboxwrapper/vbox.cpp index 4937f9b5ea..6a0311b57a 100644 --- a/samples/vboxwrapper/vbox.cpp +++ b/samples/vboxwrapper/vbox.cpp @@ -1257,6 +1257,15 @@ int VBOX_VM::get_vm_log(string& log) { retval = vbm_popen(command, output, "get vm log"); if (retval) return retval; +#ifdef _WIN32 + // Remove \r from the log spew + for (string::iterator iter = output.begin(); iter != output.end(); ++iter) { + if (*iter == '\r') { + output.erase(iter); + } + } +#endif + log = output; return 0; diff --git a/samples/vboxwrapper/vboxwrapper.cpp b/samples/vboxwrapper/vboxwrapper.cpp index 75a595d600..a0f187dc96 100644 --- a/samples/vboxwrapper/vboxwrapper.cpp +++ b/samples/vboxwrapper/vboxwrapper.cpp @@ -390,13 +390,17 @@ int main(int argc, char** argv) { write_checkpoint(checkpoint_cpu_time); if (vm.crashed || (elapsed_time < vm.job_duration)) { - if (vm_log.find("VERR_VMX_MSR_LOCKED_OR_DISABLED") != std::string::npos) { + fprintf( + stderr, + "%s VM Premature Shutdown Detected!!!\n", + boinc_msg_prefix(buf, sizeof(buf)) + ); + if ((vm_log.find("VERR_VMX_MSR_LOCKED_OR_DISABLED") != std::string::npos) || (vm_log.find("VERR_SVM_DISABLED") != std::string::npos)) { fprintf( stderr, - "%s VM Premature Shutdown Detected!!!\n" "%s NOTE: BOINC has detected that your processor supports hardware acceleration for virtual machines\n" - "%s but the hypervisor failed to successfully launch with this feature enabled. This means that the\n" - "%s hardware acceleration feature has been disabled in the computers BIOS. Please enable this\n" + "%s but the hypervisor failed to successfully launch with this feature enabled. This means that the\n" + "%s hardware acceleration feature has been disabled in the computers BIOS. Please enable this\n" "%s feature in your BIOS.\n" "%s Intel Processors call it 'VT-x'\n" "%s AMD Processors call it 'AMD-V'\n" @@ -407,13 +411,31 @@ int main(int argc, char** argv) { boinc_msg_prefix(buf, sizeof(buf)), boinc_msg_prefix(buf, sizeof(buf)), boinc_msg_prefix(buf, sizeof(buf)), + boinc_msg_prefix(buf, sizeof(buf)) + ); + } else if ((vm_log.find("VERR_VMX_IN_VMX_ROOT_MODE") != std::string::npos) || (vm_log.find("VERR_SVM_IN_USE") != std::string::npos)) { + fprintf( + stderr, + "%s NOTE: VirtualBox hypervisor reports that another hypervisor has locked the hardware acceleration\n" + "%s for virtual machines feature in exclusive mode. You'll either need to reconfigure the other hypervisor\n" + "%s to not use the feature exclusively or just shut it down while running BOINC with this project.\n", + boinc_msg_prefix(buf, sizeof(buf)), + boinc_msg_prefix(buf, sizeof(buf)), + boinc_msg_prefix(buf, sizeof(buf)) + ); + } else if ((vm_log.find("VERR_VMX_NO_VMX") != std::string::npos) || (vm_log.find("VERR_SVM_NO_SVM") != std::string::npos)) { + fprintf( + stderr, + "%s NOTE: VirtualBox has reported an improperly configured virtual machine. It was configured to require\n" + "%s hardware acceleration for virtual machines, but your processor does not support the required feature.\n" + "%s Please report this issue to the project so that it can be addresssed.", + boinc_msg_prefix(buf, sizeof(buf)), boinc_msg_prefix(buf, sizeof(buf)), boinc_msg_prefix(buf, sizeof(buf)) ); } else { fprintf( stderr, - "%s VM Premature Shutdown Detected!!!\n" "%s NOTE: This could be like a blue-screen event in Windows, the rest of the information in this file\n" "%s is diagnostic information generated by the hypervisor.\n" "%s VM Execution Log:\n\n" @@ -421,7 +443,6 @@ int main(int argc, char** argv) { boinc_msg_prefix(buf, sizeof(buf)), boinc_msg_prefix(buf, sizeof(buf)), boinc_msg_prefix(buf, sizeof(buf)), - boinc_msg_prefix(buf, sizeof(buf)), vm_log.c_str() ); }