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.