For me all drivers past 325.15 was breaking vmware-workstation 10.
And now, after some debugging I believe I have explanation.
vmware-vmx was crashing with SIGSEGV in Hostinfo_TouchBackDoor(). But it seems SIGSEGV in that code is perfectly normal, and supposed to be caught by vmware.
See https://github.com/drothlis/open-vm-tools/blob/master/lib/misc/hostinfoHV.c, and comments:
/*
* Access the backdoor. This is used to determine if we are
* running in a VM or on a physical host. On a physical host
* this should generate a GP which we catch and thereby determine
* that we are not in a VM.
*/
Actual spot where SIGSEGV was generated:
Dump of assembler code for function Hostinfo_TouchBackDoor:
0x00000000006a4000 <+0>: push %rbx
0x00000000006a4001 <+1>: mov $0x564d5868,%eax
0x00000000006a4006 <+6>: mov $0xa9b2a797,%ebx
0x00000000006a400b <+11>: mov $0xa,%ecx
0x00000000006a4010 <+16>: mov $0x5658,%edx
=> 0x00000000006a4015 <+21>: in (%dx),%eax
0x00000000006a4016 <+22>: cmp $0x564d5868,%ebx
0x00000000006a401c <+28>: sete %al
0x00000000006a401f <+31>: pop %rbx
0x00000000006a4020 <+32>: retq
End of assembler dump.
Apparently, SIGSEGV wasn’t received by vmware-vmx, instead entire process gets killed.
It works as expected with driver 325.15, but not with newer drivers.
For a quick workaround I had to patch vmware-vmx binary to avoid calling that “in (%dx), %eax” that leads to expected SIGSEGV. But that’s just a crutch for the primary cause - SIGSEGV is not delivered to vmware-vmx when nvidia-drivers-331.20 is installed.
Any comments?