Teleportation: Shouldn't this be propagated to mProgresses? If powerUp creates passes a combined progress object to the client, I won't get called back since I'm only getting the powerupProgress ... Or what?
Live Migration: I don't quite like this, we risk screwing up when we're resuming the VM if some 3rd dude have any of the VDIs open with write sharing denied. However, if the two VMs are sharing a image it really is necessary....
Use the On-Screen Display feature to report the fact. The user should be told to install additions that are provided with the current VBox build: VBOX_VERSION_MAJOR.VBOX_VERSION_MINOR.VBOX_VERSION_BUILD
add extendedFlags to Property when we reach the 32 bit limit (or make the argument ULONG64 after checking that COM is capable of defining enums (used to represent bit flags) that contain 64-bit values)
Implement dirty MMIO2 page reporting that can be enabled during live save but normally is disabled. Since we can write monitore guest accesses on our own, we only need this for host accesses. Shouldn't be too difficult for DevVGA, VMMDev might be doable, the planned networking fun will be fun since it involves ring-0.
We have to take the signals on a dedicated timer thread as we (might) have code assuming that signals doesn't screw around on existing threads. (It would be sufficient to have one thread per signal of course since the signal will be masked while it's running, however, it may just cause more compilcations than its worth - sigwait/sigwaitinfo work atomically anyway...) Also, must block the signal in the thread main procedure too.
is this reasonable? If the thread is in the event loop then the cancelEvent() will cause it to exit. If it enters or exits the event loop it will also notice that we wish it to exit. And if it is somewhere in-between, the yield() should give it time to get to one of places mentioned above.
This code isn't entirely correct and quite a bit of a hack, but it will have to do for now as the right thing (tm) is very complex. Part of the fun is verifying that the request is something we can and should handle.
This is a VirtualBoxBaseWithChildren equivalent that uses the VirtualBoxBaseNEXT implementation. Will completely supersede VirtualBoxBaseWithChildren after the old VirtualBoxBase implementation has gone.
Rename IVirtualBoxErrorInfo/VirtualBoxErrorInfo to something like IExtendedErrorInfo since it's not actually VirtualBox-dependent any more. This will also require to create IExtendedErrorInfo.idl/h etc to let adding this class to custom type libraries.
Just keep quiet about failures now - we'll fail here because we're not allowed to raise our own priority. This is a problem when starting the threads with higher priority from EMT (i.e. most threads it starts). This is apparently inherited from the parent in some cases and not in other cases. I guess this would come down to which kind of pthread implementation is actually in use, and how many sensible patches which are installed. I need to find a system where this problem shows up in order to come up with a proper fix. There's an pthread_create attribute for not inherting scheduler stuff I think...
the below rough method of changing the aparment type doesn't work on some systems for unknown reason (CoUninitialize() simply does nothing there, or at least all 10 000 of subsequent CoInitializeEx() continue to return RPC_E_CHANGED_MODE there). The problem on those systems is related to the "Extend support for advanced text services to all programs" checkbox in the advanced language settings dialog, i.e. the problem appears when this checkbox is checked and disappears if you clear it. For this reason, we disable the code below and instead initialize COM in MTA as early as possible, before 3rd party libraries we use have done so (i.e. Qt).
r=bird: In the long run we should just do the interrupt handling in EM/CPUM/TRPM/somewhere and if we cannot execute the interrupt handler in raw-mode just reschedule to REM. Once that is done we remove this kludge.
r=bird: This must merge with SUPDrv-freebsd.c before long. The two source files should only differ on prefixes and the extra bits wrt to the pci device. I.e. it should be diffable so that fixes to one can easily be applied to the other.
This is a O(n) lookup, maybe improve this later to O(1) using a map. r=bird: Use a string space (RTstrSpace*). That is O(log n) in its current implementation (AVL tree). However, this is not important at the moment.
during my tests on Debian Lenny 64 bit I ran into trouble using mutex semaphores (crash deep down in the pthreads lib). Using the write case of rw semaphores also gives mutual exclusion, and didn't show those crashes. Should be investigated, because this "fix" might be just covering the symptoms of a bug elsewhere.
The allocations should be done by the device, at least as an option, since the devices frequently wish to associate their own stuff with the in-flight URB or need special buffering (isochronous on Darwin for instance).
move the location stuff to Main, which can use pfnComposeName from the disk backends to construct the location properly. Also do not use slashes to separate the parts, as otherwise only the last element comtaining information will be shown.
remove this hack! First try opening the image as is (using the regular API semantics for images with relative path or without path), and if that fails with a file related error then try it again with what the client thinks the relative path would mean. Requires doing the command twice in certain cases. This is an ugly hack and needs to be removed whevever we have a chance to clean up the API semantics.
Disabled this as we didn't used to do it before and causes unnecessary stress on laptops. It only applies to Windows and should probably revisited later, if possible made part of the timer code (return min granularity in RTTimerGetSystemGranularity and set it in RTTimerStart).
add COMGETTER(ExtendedCapabilities) when we reach the 32 bit limit (or make the argument ULONG64 after checking that COM is capable of defining enums (used to represent bit flags) that contain 64-bit values)
NEWMEDIA for file names, add the default extension if no extension is present (using the information from the VD backend which also implies that one more parameter should be passed to setLocation() requesting that functionality since it is only allwed when called from this method
NEWMEDIA rename the file and set m->location on success, then save the global registry (and local registries of portable VMs referring to this medium), this will also require to add the mRegistered flag to data
Later #1: When entering in interrupt context and we're not able to wake up threads from it, we could try switch the lock into pure spinlock mode. This would require that there are no other threads currently waiting on it and that the RTSEMSPINMUTEX_FLAGS_IRQ_SAFE flag is set.
implement uAlignment properly... We'll probably need to make some dummy mappings to fill up alignment gaps. This is of course complicated by fragmentation (which we might have cause ourselves) and further by there begin two mmap strategies (top / bottom).
While RTStrPrintfV prevents overflows, it doesn't make it easy to check for truncations. RTPath should provide some formatters and joiners which can take over this rather common task that is performed here.
Have trouble allowing the owner FILE_CREATE_PIPE_INSTANCE access, so for now I'm hacking it just to get progress - the service runs as local system. The CREATOR OWNER and PERSONAL SELF works (the former is only involved in inheriting it seems, which is why it won't work. The latter I've no idea about. Perhaps the solution is to go the annoying route of OpenProcessToken, QueryTokenInformation, ConvertSidToStringSid and then use the result... Suggestions are very welcome
Check if the A20 enable/disable method implemented here in any way should cooperate with the one implemented in the PS/2 keyboard device. This probably belongs together in the PS/2 keyboard device (since that is where the "port B" mentioned by Ralph Brown is implemented).
rtR0MemObjNativeAllocPhys / darwin. This might be a bit problematic and may very well require having to create our own object which we populate with pages but without mapping it into any address space. Estimate is 2-3 days.
First, the memory should've been mapped by now, and second, it shouild have the wired attribute in the PTE (bit 9). Neither is seems to be the case. The disabled locking code doesn't make any difference, which is extremely odd, and breaks rtR0MemObjNativeGetPagePhysAddr (getPhysicalSegment64 -> 64 for the lock descriptor.
Split out all the inline stuff into a separate file. Then we can include it later when VM and VMCPU are defined and so avoid all that &pVM->pgm.s and &pVCpu->pgm.s stuff. It also chops ~1600 lines off this file and will make it somewhat easier to navigate...