Wanna see this logo while booting your 2.6 kernel? Click here!

17.03.2005 11:45

VMware GSX Server 3.1 and Linux Kernel

VMware GSX server is the next thing, that doesn't work with 2.6.11 kernels. The "problem" is, that the vmnet module depends on an exported symbol called "skb_copy_datagram", which has been removed in 2.6.11. In fact, skb_copy_datagram was only a global wrapper function which built an iovec struct of the given buffer and called skb_copy_datagram_iovec. The change is listed in the Changelog of 2.6.11:
  [NET]: misc cleanups
  The patch below contains the following cleanups:
  - make needlessly global code static
  - remove the following unused global functions:
    - datagram.c: skb_copy_datagram
    - iovec.c: memcpy_tokerneliovec
  - remove the following unneeded EXPORT_SYMBOL's:
    - datagram.c: skb_copy_datagram
    - dev.c: ing_filter
    - iovec.c: memcpy_tokerneliovec
    - netpoll.c: netpoll_send_skb
    - rtnetlink.c: rtnetlink_dump_ifinfo
    - sock.c: sock_alloc_send_pskb
  Signed-off-by: Adrian Bunk <bunk@stusta.de>
  Signed-off-by: David S. Miller <davem@davemloft.net>
VMware's vmnet module depends on this deprecated exported symbol, so the only thing to do here was to modify the calling function so that it uses skb_copy_datagram_iovec instead.

You may download the diff to vmnet-only/userif.c here. There are two ways to apply this patch:
  1. Patch the temporary extracted folder in /tmp/vmware-config?.
  2. Patch the vmnet.tar archive in /usr/lib/vmware/source/.

Short instructions:
vi-edv003:~# cd /usr/lib/vmware/modules/source
vi-edv003:/usr/lib/vmware/modules/source# tar xf vmnet.tar
vi-edv003:/usr/lib/vmware/modules/source# cd vmnet-only/
vi-edv003:/usr/lib/vmware/modules/source/vmnet-only# patch </path/to/gsx-3.1-9089-userif.c-2.6.11.diff
patching file userif.c
vi-edv003:/usr/lib/vmware/modules/source/vmnet-only# cd ..
vi-edv003:/usr/lib/vmware/modules/source# rm vmnet.tar
vi-edv003:/usr/lib/vmware/modules/source# tar cf vmnet.tar vmnet-only/
vi-edv003:/usr/lib/vmware/modules/source# rm -r vmnet-only/