Published: Fri 24 July 2015
         
        
                By                         Wayne 
         
In tips .
tags: linux-kernel  vmware  
 Last week I pulled the 4.0.0-2 kernel from the Debian testing repositories and
started using it on my main box.  Yesterday morning I try to start VMWare Workstation 11 for
the first time since upgrading the kernel, only to have the driver install fail.
Some poking around revealed that the network driver was failing because of
apparent changes in the kernel headers.
I manually unpacked the driver source (located in /usr/lib/vmware/modules/source )
and started debugging the compiler errors.  I found four:
One of the VMWare headers defined PCI_VENDOR_ID_VMWARE , which is in the kernel
headers as of 4.0. 
The function alloc_netdev  gained an additional argument in 3.17. 
The driver code was referring to the f_dentry  member of struct file .  This
member was a #define  that was removed in 3.19. 
The driver code was referencing function skb_copy_datagram_iovec , which was also
removed in 3.19. 
 
The first three were easy enough to fix. For the first, just remove the redundant
#define  from the driver header.  For the second, add NET_NAME_UNKNOWN  as
the third argument to alloc_netdev  (I got that from StackOverflow, I think).
For the third, replace the reference to f_dentry  with the code that used to be
in the #define .
The fourth was trickier.  There was no clear replacement
for the removed function.  Fortunately, I was able to track down a recent post  on the VMWare message boards asking
about these same issues.  That gave me the solution for the third problem: replace the
missing function with the following:
struct   iov_iter   to ; 
iov_iter_init ( & to ,   READ ,   & iov ,   1 ,   len ); 
return   skb_copy_datagram_iter ( skb ,   0 ,   & to ,   len ); 
To resume the driver install after making these changes, I repackaged the driver source
into the tarball in the VMWare source directory (command tar -cvf  vmnet.tar vmnet-only/  )
so the VMWare driver installation program would use it and finish installing the other
components.  I had no problems with anything else in the driver builds, and was able to
start my Windows VM with no issues using the modified source.
I should note that one of the commenters on the VMWare board mentioned that the proper
fix for the filep->f_dentry 
with
I did not do this, since I just wanted a quick-and-dirty fix for the driver so I
could get to my VMs again.