Discussion:
[vbox-dev] VBoxServiceCpuHotPlug.cpp: sysdev -> physical_node
Petar Bogdanovic
2014-01-24 19:05:10 UTC
Permalink
Hi,

[1]this commit removes the "sysdev" symlink from the cpu device-subtree
of sysfs. The files that were found in "sysdev" are now located in
"physical_node" which is also a symlink.

VBoxServiceCpuHotPlug.cpp relies on the former symlink:

279 /* Get the sysdev */
280 uint32_t idCore = RTLinuxSysFsReadIntFile(10, "%s/sysdev/topology/core_id",
281 pszPathCurr);
282 uint32_t idPackage = RTLinuxSysFsReadIntFile(10, "%s/sysdev/topology/physical_package_id",
283 pszPathCurr);

and since VBoxService now can't match a cpu, it dies whenever there is an
attempt to "unplugcpu" by the host:

# VBoxService -fvvv --disable-automount
VBoxService 4.3.6 r91406 (verbosity: 3) linux.x86 (Dec 18 2013 16:44:16) release log
(...)
00:00:00.001981 main OS Release: 3.12.6-1-ARCH
(...)
00:00:03.617740 cpuhotplug CpuHotPlug: Event happened idCpuCore=1 idCpuPackage=0 enmEventType=3
00:00:03.618315 cpuhotplug Final path after probing /sys/devices/LNXSYSTM:00/device:00/ACPI0004:00/LNXCPU:00 rc=VINF_SUCCESS
00:00:03.618347 cpuhotplug Going deeper (iLvlCurr=1)
00:00:03.618358 cpuhotplug New path /sys/devices/LNXSYSTM:00/device:*
00:00:03.618391 cpuhotplug Going deeper (iLvlCurr=2)
00:00:03.618402 cpuhotplug New path /sys/devices/LNXSYSTM:00/device:00/ACPI0004:*
00:00:03.618472 cpuhotplug Going deeper (iLvlCurr=3)
00:00:03.618483 cpuhotplug New path /sys/devices/LNXSYSTM:00/device:00/ACPI0004:00/LNXCPU:*
00:00:03.618609 cpuhotplug CPU doesn't match, next directory
00:00:03.618624 cpuhotplug Directory not found, going back (iLvlCurr=2)
00:00:03.618642 cpuhotplug Going deeper (iLvlCurr=3)
00:00:03.618652 cpuhotplug New path /sys/devices/LNXSYSTM:00/device:00/ACPI0004:01/LNXCPU:*
00:00:03.618693 cpuhotplug CPU doesn't match, next directory
00:00:03.618707 cpuhotplug Directory not found, going back (iLvlCurr=2)
00:00:03.618719 cpuhotplug Directory not found, going back (iLvlCurr=1)
00:00:03.618731 cpuhotplug Going deeper (iLvlCurr=2)
00:00:03.618741 cpuhotplug New path /sys/devices/LNXSYSTM:00/device:02/ACPI0004:*
00:00:03.618772 cpuhotplug Directory not found, going back (iLvlCurr=1)
00:00:03.618788 cpuhotplug Directory not found, going back (iLvlCurr=0)
00:00:03.618801 cpuhotplug Directory not found, going back (iLvlCurr=4294967295)
00:00:03.618811 cpuhotplug Directory not found, going back (iLvlCurr=4294967294)
00:00:03.618822 cpuhotplug Directory not found, going back (iLvlCurr=4294967293)
*** glibc detected *** VBoxService: free(): invalid pointer: 0x08056640 ***
======= Backtrace: =========
/lib/libc.so.6(+0x6e822)[0xb7553822]
/lib/libc.so.6(+0x6f4c2)[0xb75544c2]
/lib/libc.so.6(cfree+0x6d)[0xb75575ad]
VBoxService[0x8058e0a]
VBoxService[0x8059040]
VBoxService[0x80591bf]
VBoxService[0x804becc]
VBoxService[0x8071a72]
VBoxService[0x805adc0]
/lib/libpthread.so.0(+0x6cf7)[0xb769bcf7]
/lib/libc.so.6(clone+0x5e)[0xb75b786e]
(...)

The issuer of unplugcpu gets this in return:

$ VBoxManage controlvm pintail unplugcpu 1
VBoxManage: error: Hot-Remove was aborted because the CPU may still be used by the guest
VBoxManage: error: Details: code VBOX_E_VM_ERROR (0x80bb0003), component Console, interface IConsole, callee nsISupports
VBoxManage: error: Context: "HotUnplugCPU(n)" at line 135 of file VBoxManageControlVM.cpp


Not sure how to fix this properly since the change needs to be backward
compatible and I'm not very familiar with the source yet.

Petar Bogdanovic

[1] https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/drivers/acpi/processor_driver.c?id=ac212b6980d8d5eda705864fc5a8ecddc6d6eacc
Alexander Eichner
2014-01-30 13:35:13 UTC
Permalink
Hi Petar,

thanks for the report. This will be fixed in the next maintenance release.

Regards,
Alexander Eichner
Post by Petar Bogdanovic
Hi,
[1]this commit removes the "sysdev" symlink from the cpu device-subtree
of sysfs. The files that were found in "sysdev" are now located in
"physical_node" which is also a symlink.
279 /* Get the sysdev */
280 uint32_t idCore = RTLinuxSysFsReadIntFile(10, "%s/sysdev/topology/core_id",
281 pszPathCurr);
282 uint32_t idPackage = RTLinuxSysFsReadIntFile(10, "%s/sysdev/topology/physical_package_id",
283 pszPathCurr);
and since VBoxService now can't match a cpu, it dies whenever there is an
# VBoxService -fvvv --disable-automount
VBoxService 4.3.6 r91406 (verbosity: 3) linux.x86 (Dec 18 2013 16:44:16) release log
(...)
00:00:00.001981 main OS Release: 3.12.6-1-ARCH
(...)
00:00:03.617740 cpuhotplug CpuHotPlug: Event happened idCpuCore=1 idCpuPackage=0 enmEventType=3
00:00:03.618315 cpuhotplug Final path after probing /sys/devices/LNXSYSTM:00/device:00/ACPI0004:00/LNXCPU:00 rc=VINF_SUCCESS
00:00:03.618347 cpuhotplug Going deeper (iLvlCurr=1)
00:00:03.618358 cpuhotplug New path /sys/devices/LNXSYSTM:00/device:*
00:00:03.618391 cpuhotplug Going deeper (iLvlCurr=2)
00:00:03.618402 cpuhotplug New path /sys/devices/LNXSYSTM:00/device:00/ACPI0004:*
00:00:03.618472 cpuhotplug Going deeper (iLvlCurr=3)
00:00:03.618483 cpuhotplug New path /sys/devices/LNXSYSTM:00/device:00/ACPI0004:00/LNXCPU:*
00:00:03.618609 cpuhotplug CPU doesn't match, next directory
00:00:03.618624 cpuhotplug Directory not found, going back (iLvlCurr=2)
00:00:03.618642 cpuhotplug Going deeper (iLvlCurr=3)
00:00:03.618652 cpuhotplug New path /sys/devices/LNXSYSTM:00/device:00/ACPI0004:01/LNXCPU:*
00:00:03.618693 cpuhotplug CPU doesn't match, next directory
00:00:03.618707 cpuhotplug Directory not found, going back (iLvlCurr=2)
00:00:03.618719 cpuhotplug Directory not found, going back (iLvlCurr=1)
00:00:03.618731 cpuhotplug Going deeper (iLvlCurr=2)
00:00:03.618741 cpuhotplug New path /sys/devices/LNXSYSTM:00/device:02/ACPI0004:*
00:00:03.618772 cpuhotplug Directory not found, going back (iLvlCurr=1)
00:00:03.618788 cpuhotplug Directory not found, going back (iLvlCurr=0)
00:00:03.618801 cpuhotplug Directory not found, going back (iLvlCurr=4294967295)
00:00:03.618811 cpuhotplug Directory not found, going back (iLvlCurr=4294967294)
00:00:03.618822 cpuhotplug Directory not found, going back (iLvlCurr=4294967293)
*** glibc detected *** VBoxService: free(): invalid pointer: 0x08056640 ***
======= Backtrace: =========
/lib/libc.so.6(+0x6e822)[0xb7553822]
/lib/libc.so.6(+0x6f4c2)[0xb75544c2]
/lib/libc.so.6(cfree+0x6d)[0xb75575ad]
VBoxService[0x8058e0a]
VBoxService[0x8059040]
VBoxService[0x80591bf]
VBoxService[0x804becc]
VBoxService[0x8071a72]
VBoxService[0x805adc0]
/lib/libpthread.so.0(+0x6cf7)[0xb769bcf7]
/lib/libc.so.6(clone+0x5e)[0xb75b786e]
(...)
$ VBoxManage controlvm pintail unplugcpu 1
VBoxManage: error: Hot-Remove was aborted because the CPU may still be used by the guest
VBoxManage: error: Details: code VBOX_E_VM_ERROR (0x80bb0003), component Console, interface IConsole, callee nsISupports
VBoxManage: error: Context: "HotUnplugCPU(n)" at line 135 of file VBoxManageControlVM.cpp
Not sure how to fix this properly since the change needs to be backward
compatible and I'm not very familiar with the source yet.
Petar Bogdanovic
[1] https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/drivers/acpi/processor_driver.c?id=ac212b6980d8d5eda705864fc5a8ecddc6d6eacc
_______________________________________________
vbox-dev mailing list
vbox-dev at virtualbox.org
https://www.virtualbox.org/mailman/listinfo/vbox-dev
Loading...