Howto fix the VMWare Products

The vmmon module in VMware Player 3.x and Workstation 7.x fails to compile on the latest kernel (2.6.35):

The error message:

  • /tmp/vmware-root/modules/vmmon-only/linux/iommu.c:156: error: implicit declaration of function ‘iommu_map_range’
  • /tmp/vmware-root/modules/vmmon-only/linux/iommu.c: In function ‘IOMMU_VMCleanup’:
  • /tmp/vmware-root/modules/vmmon-only/linux/iommu.c:403: error: implicit declaration of function ‘iommu_unmap_range’
  • make[2]: *** [/tmp/vmware-root/modules/vmmon-only/linux/iommu.o] Error 1
  • make[1]: *** [_module_/tmp/vmware-root/modules/vmmon-only] Error 2
  • make[1]: Leaving directory `/usr/src/linux’
  • Using VMware-Player-3.1.0-261024.XXXX.bundle from here:

    Within the vmmon sources, the iommu.c file has function calls to iommu_map_range and iommu_unmap_range. After some poking around I figured these calls need the ‘_range’ suffix removed. Update: these kernel changes are documented here.

    After installing VMware, the following commands patches the vmmon sources:

    cd /tmp
    tar xvf /usr/lib/vmware/modules/source/vmmon.tar -C /tmp
    perl -pi -e 's,_range,,' vmmon-only/linux/iommu.c
    tar cvf /usr/lib/vmware/modules/source/vmmon.tar vmmon-only

    The recompiling on each load is likely something to do with the “vsock” kernel module. The default installation enables it.

    The vmware start-up output looks like this:
    ~# service vmware start
    Starting VMware services:
    VMware USB Arbitrator done
    Virtual machine monitor done
    Virtual machine communication interface done
    VM communication interface socket family failed
    Blocking file system done
    Virtual ethernet done
    Shared Memory Available done

    The module failing to load is most likely causing the need to recompile. Also confirmed during the (re)compilation:

    ERROR: modinfo: could not find module vsock

    The easiest workaround I came up with is to disable the vsock module:

    ~# mcedit /etc/vmware/config

    And change the vsock configuration line to:

    VSOCK_CONFED = "no"