On 6/8/20 4:12 AM, Frank Batschulat wrote:
Larry, thanks - this work will be tracked with:

Ticket #19644 (accepted defect)
Linux kernel version: 5.8 - we need changes
https://www.virtualbox.org/ticket/19644

With each update to the mainline kernel, another API change for Kernel 5.8 emerges. Thus far, there have been three different changes:

1. In struct mm_struct, member mmap_sem is renamed to mmap_lock. The comment in the commit says "Rename the mmap_sem field to mmap_lock. Any new uses of this lock should now go through the new mmap locking api. The mmap_lock is still implemented as a rwsem, though this could change in the future." Until that unknown future time, only the member name needs to change, and that is what I propose.

2. The shadow set of kernel quantities stored in cpu_tlbstate are no longer available. The only quantity used from that structure is CR4. My fix is to use __read_cr4() rather than this_cpu_read(cpu_tlbstate.cr4) to read CR4, and ASMSetCR4(uNew) rather than this_cpu_write(cpu_tlbstate.cr4, uNew) to write a new value into CR4. This change has tested OK.

3. Kernel routine __get_vm_area() was first changed to __get_vm_area_caller(), and then the latter routine was no longer exported. In addition, routine map_vm_area() has been removed. I do not have a fix for this. At first it seemed that reverting to the method used before kernel 2.6.13 would work by not defining RTMEMALLOC_EXEC_VM_AREA and using RTMEMALLOC_EXEC_HEAP instead. Unfortunately, this code fails to allocate the memory correctly, and VMs fail to start. I have been unable to fix that problem.

Until there is a fix for the code using RTMEMALLOC_EXEC_HEAP, I will be recommending that the openSUSE versions of 5.8 include a patch that exports __get_vm_area_caller() and map_kernel_range(). The latter routine is used to replace map_vm_area. With these two changes, the VB modules build and execute. I will be posting the patches for vboxdrv and the proposed kernel patch at https://www.virtualbox.org/ticket/19644.

As an editorial aside, it is clear that VirtualBox needs to get at least part of vboxdrv into the kernel as a module in the way that VMWare has done so that this incompatibility with memory management never occurs again.

Larry



_______________________________________________
vbox-dev mailing list
vbox-dev@virtualbox.org
https://www.virtualbox.org/mailman/listinfo/vbox-dev

Reply via email to