Benutzer-Werkzeuge

Webseiten-Werkzeuge


snippets:vmware:fedora-compiler-error

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Nächste Überarbeitung
Vorherige Überarbeitung
snippets:vmware:fedora-compiler-error [2013/09/03 14:54] – created benhsnippets:vmware:fedora-compiler-error [2014/03/24 09:19] (aktuell) benh
Zeile 1: Zeile 1:
 ====== Get VMware Player running under Fedora 18 (Kernel 3.10.*) ====== ====== Get VMware Player running under Fedora 18 (Kernel 3.10.*) ======
 +<note>source: [[http://forums.fedoraforum.org/showthread.php?t=292907|FedoraForum.org]]</note>
   - open /usr/bin/vmplayer\\ <code bash>vi /usr/bin/vmplayer</code>   - open /usr/bin/vmplayer\\ <code bash>vi /usr/bin/vmplayer</code>
-    - add the following lines\\ <code># Makes vmware player more compatible with Fedora 19.+    - add the following lines after line 21 (sharedir=$libdir/share)\\ <code># Makes vmware player more compatible with Fedora 19.
 export VMWARE_USE_SHIPPED_LIBS=force export VMWARE_USE_SHIPPED_LIBS=force
 export LD_LIBRARY_PATH=$PATH:/usr/lib64/gtk-2.0/modules/: export LD_LIBRARY_PATH=$PATH:/usr/lib64/gtk-2.0/modules/:
                                 </code>                                 </code>
 +  - download the patch files 
 +    - <code bash vmblock.3.10.patch>diff -u -r vmblock-only/linux/control.c vmblock-only-patched/linux/control.c 
 +--- vmblock-only/linux/control.c 2013-02-26 19:17:29.000000000 +1100 
 ++++ vmblock-only-patched/linux/control.c 2013-07-02 16:09:10.000000000 +1000 
 +@@ -208,17 +208,18 @@ 
 +    VMBlockSetProcEntryOwner(controlProcMountpoint); 
 +  
 +    /* Create /proc/fs/vmblock/dev */ 
 +-   controlProcEntry = create_proc_entry(VMBLOCK_CONTROL_DEVNAME, 
 ++   /*controlProcEntry = create_proc_entry(VMBLOCK_CONTROL_DEVNAME, 
 +                                         VMBLOCK_CONTROL_MODE, 
 +-                                        controlProcDirEntry); 
 +-   if (!controlProcEntry) { 
 ++                                        controlProcDirEntry);*/ 
 ++   controlProcEntry = proc_create(VMBLOCK_CONTROL_DEVNAME, VMBLOCK_CONTROL_MODE, controlProcDirEntry, &ControlFileOps); 
 ++   if (controlProcEntry == NULL) { 
 +       Warning("SetupProcDevice: could not create " VMBLOCK_DEVICE "\n"); 
 +       remove_proc_entry(VMBLOCK_CONTROL_MOUNTPOINT, controlProcDirEntry); 
 +       remove_proc_entry(VMBLOCK_CONTROL_PROC_DIRNAME, NULL); 
 +       return -EINVAL; 
 +    } 
 +  
 +-   controlProcEntry->proc_fops = &ControlFileOps; 
 ++   /* controlProcEntry->proc_fops = &ControlFileOps; */ 
 +    return 0; 
 + } 
 +  
 +@@ -293,7 +294,7 @@ 
 +  
 +    retval = i < 0 ? -EINVAL : blockOp(name, blocker); 
 +  
 +-   putname(name); 
 ++   __putname(name); 
 +  
 +    return retval; 
 + } 
 +</code> 
 +    - <code bash vmnet.3.10.patch>--- a/bridge.c 
 ++++ b/bridge.c 
 +@@ -105,8 +105,6 @@ static Bool VNetBridgeCycleDetect(VNetJack *this, int generation); 
 + static Bool VNetBridgeIsDeviceWireless(struct net_device *dev); 
 + static void VNetBridgePortsChanged(VNetJack *this); 
 + static int  VNetBridgeIsBridged(VNetJack *this); 
 +-static int  VNetBridgeProcRead(char *page, char **start, off_t off, 
 +-                               int count, int *eof, void *data); 
 + static void VNetBridgeComputeHeaderPosIPv6(struct sk_buff *skb); 
 + static PacketStatus VNetCallSMACFunc(struct SMACState *state, 
 +                                      struct sk_buff **skb, void *startOfData, 
 +@@ -225,6 +223,53 @@ VNetBridgeDevCompatible(VNetBridge *bridge,      // IN: Bridge 
 + /* 
 +  *---------------------------------------------------------------------- 
 +  * 
 ++ * VNetBridgeProcShow -- 
 ++ * 
 ++ *      Callback for read operation on this bridge entry in vnets proc fs. 
 ++ * 
 ++ * Results: 
 ++ *      Length of read operation. 
 ++ * 
 ++ * Side effects: 
 ++ *      None. 
 ++ * 
 ++ *---------------------------------------------------------------------- 
 ++ */ 
 +
 ++int 
 ++VNetBridgeProcShow(struct seq_file *seqf, // IN/OUT: buffer to write into 
 ++                   void    *data)   // IN: client data - pointer to bridge 
 ++{ 
 ++   VNetBridge *bridge = (VNetBridge*)data; 
 +
 ++   if (!bridge) { 
 ++      return 0; 
 ++   } 
 +
 ++   VNetPrintPort(&bridge->port, seqf); 
 +
 ++   seq_printf(seqf, "dev %s ", bridge->name); 
 +
 ++   seq_printf(seqf, "\n"); 
 +
 ++   return 0; 
 ++} 
 +
 ++static int proc_bridge_open(struct inode *inode, struct file *file) 
 ++{ 
 ++       return single_open(file, VNetBridgeProcShow, PDE_DATA(inode)); 
 ++} 
 +
 ++static const struct file_operations proc_bridge_fops = { 
 ++       .open           = proc_bridge_open, 
 ++       .read           = seq_read, 
 ++       .llseek         = seq_lseek, 
 ++       .release        = seq_release, 
 ++}; 
 +
 ++/* 
 ++ *---------------------------------------------------------------------- 
 ++ * 
 +  * VNetBridge_Create -- 
 +  * 
 +  *      Creates a bridge. Allocates struct, allocates internal device, 
 +@@ -319,17 +364,14 @@ VNetBridge_Create(const char *devName, // IN:  name of device (e.g., "eth0"
 +     * Make proc entry for this jack. 
 +     */ 
 +  
 +-   retval = VNetProc_MakeEntry(bridge->port.jack.name, S_IFREG, 
 +-                               &bridge->port.jack.procEntry); 
 ++   retval = VNetProc_MakeEntryOps(bridge->port.jack.name, S_IFREG, 
 ++                               &bridge->port.jack.procEntry, &proc_bridge_fops, bridge); 
 +    if (retval) { 
 +       if (retval == -ENXIO) { 
 +          bridge->port.jack.procEntry = NULL; 
 +       } else { 
 +          goto out; 
 +       } 
 +-   } else { 
 +-      bridge->port.jack.procEntry->read_proc = VNetBridgeProcRead; 
 +-      bridge->port.jack.procEntry->data = bridge; 
 +    } 
 +  
 +    /* 
 +@@ -1719,45 +1761,3 @@ VNetBridgeReceiveFromDev(struct sk_buff *skb,         // IN: packet to receive 
 +    return 0; 
 + } 
 +  
 +
 +-/* 
 +- *---------------------------------------------------------------------- 
 +- * 
 +- * VNetBridgeProcRead -- 
 +- * 
 +- *      Callback for read operation on this bridge entry in vnets proc fs. 
 +- * 
 +- * Results: 
 +- *      Length of read operation. 
 +- * 
 +- * Side effects: 
 +- *      None. 
 +- * 
 +- *---------------------------------------------------------------------- 
 +- */ 
 +
 +-int 
 +-VNetBridgeProcRead(char    *page,   // IN/OUT: buffer to write into 
 +-                   char   **start,  // OUT: 0 if file < 4k, else offset into page 
 +-                   off_t    off,    // IN: (unused) offset of read into the file 
 +-                   int      count,  // IN: (unused) maximum number of bytes to read 
 +-                   int     *eof,    // OUT: TRUE if there is nothing more to read 
 +-                   void    *data)   // IN: client data - pointer to bridge 
 +-{ 
 +-   VNetBridge *bridge = (VNetBridge*)data; 
 +-   int len = 0; 
 +
 +-   if (!bridge) { 
 +-      return len; 
 +-   } 
 +
 +-   len += VNetPrintPort(&bridge->port, page+len); 
 +
 +-   len += sprintf(page+len, "dev %s ", bridge->name); 
 +
 +-   len += sprintf(page+len, "\n"); 
 +
 +-   *start = 0; 
 +-   *eof   = 1; 
 +-   return len; 
 +-} 
 +--- a/driver.c 
 ++++ b/driver.c 
 +@@ -1785,21 +1785,17 @@ VNetSetMACUnique(VNetPort *port,            // IN: 
 +  *---------------------------------------------------------------------- 
 +  */ 
 +  
 +-int 
 ++void 
 + VNetPrintJack(const VNetJack *jack, // IN: jack 
 +-              char           *buf)  // OUT: info about jack 
 ++              struct seq_file *seqf)  // OUT: info about jack 
 + { 
 +-   int len = 0; 
 +
 +    read_lock(&vnetPeerLock); 
 +    if (!jack->peer) { 
 +-      len += sprintf(buf+len, "connected not "); 
 ++      seq_printf(seqf, "connected not "); 
 +    } else { 
 +-      len += sprintf(buf+len, "connected %s ", jack->peer->name); 
 ++      seq_printf(seqf, "connected %s ", jack->peer->name); 
 +    } 
 +    read_unlock(&vnetPeerLock); 
 +
 +-   return len; 
 + } 
 +  
 +  
 +@@ -1819,52 +1815,48 @@ VNetPrintJack(const VNetJack *jack, // IN: jack 
 +  *---------------------------------------------------------------------- 
 +  */ 
 +  
 +-int 
 ++void 
 + VNetPrintPort(const VNetPort *port, // IN: port 
 +-              char           *buf)  // OUT: info about port 
 ++              struct seq_file *seqf)  // OUT: info about port 
 + { 
 +-   int len = 0; 
 ++   VNetPrintJack(&port->jack, seqf); 
 +  
 +-   len += VNetPrintJack(&port->jack, buf+len); 
 +
 +-   len += sprintf(buf+len, "mac %02x:%02x:%02x:%02x:%02x:%02x ", 
 ++   seq_printf(seqf, "mac %02x:%02x:%02x:%02x:%02x:%02x ", 
 +                   port->paddr[0], port->paddr[1], port->paddr[2], 
 +                   port->paddr[3], port->paddr[4], port->paddr[5]); 
 +  
 +-   len += sprintf(buf+len, "ladrf %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x ", 
 ++   seq_printf(seqf, "ladrf %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x ", 
 +                   port->ladrf[0], port->ladrf[1], port->ladrf[2], 
 +                   port->ladrf[3], port->ladrf[4], port->ladrf[5], 
 +                   port->ladrf[6], port->ladrf[7]); 
 +  
 +-   len += sprintf(buf+len, "flags IFF_RUNNING"); 
 ++   seq_printf(seqf, "flags IFF_RUNNING"); 
 +  
 +    if (port->flags & IFF_UP) { 
 +-      len += sprintf(buf+len, ",IFF_UP"); 
 ++      seq_printf(seqf, ",IFF_UP"); 
 +    } 
 +  
 +    if (port->flags & IFF_BROADCAST) { 
 +-      len += sprintf(buf+len, ",IFF_BROADCAST"); 
 ++      seq_printf(seqf, ",IFF_BROADCAST"); 
 +    } 
 +  
 +    if (port->flags & IFF_DEBUG) { 
 +-      len += sprintf(buf+len, ",IFF_DEBUG"); 
 ++      seq_printf(seqf, ",IFF_DEBUG"); 
 +    } 
 +  
 +    if (port->flags & IFF_PROMISC) { 
 +-      len += sprintf(buf+len, ",IFF_PROMISC"); 
 ++      seq_printf(seqf, ",IFF_PROMISC"); 
 +    } 
 +  
 +    if (port->flags & IFF_MULTICAST) { 
 +-      len += sprintf(buf+len, ",IFF_MULTICAST"); 
 ++      seq_printf(seqf, ",IFF_MULTICAST"); 
 +    } 
 +  
 +    if (port->flags & IFF_ALLMULTI) { 
 +-      len += sprintf(buf+len, ",IFF_ALLMULTI"); 
 ++      seq_printf(seqf, ",IFF_ALLMULTI"); 
 +    } 
 +  
 +-   len += sprintf(buf+len, " "); 
 +
 +-   return len; 
 ++   seq_printf(seqf, " "); 
 + } 
 +  
 +  
 +--- a/hub.c 
 ++++ b/hub.c 
 +@@ -25,6 +25,7 @@ 
 + #include <linux/sched.h> 
 + #include <linux/slab.h> 
 + #include <linux/poll.h> 
 ++#include <linux/seq_file.h> 
 +  
 + #include <linux/netdevice.h> 
 + #include <linux/etherdevice.h> 
 +@@ -71,8 +72,6 @@ static void VNetHubReceive(VNetJack *this, struct sk_buff *skb); 
 + static Bool VNetHubCycleDetect(VNetJack *this, int generation); 
 + static void VNetHubPortsChanged(VNetJack *this); 
 + static int  VNetHubIsBridged(VNetJack *this); 
 +-static int  VNetHubProcRead(char *page, char **start, off_t off, 
 +-                            int count, int *eof, void *data); 
 +  
 + static VNetHub *vnetHub; 
 + static DEFINE_SPINLOCK(vnetHubLock); 
 +@@ -241,6 +240,53 @@ VNetHub_AllocPvn(uint8 id[]) // IN: the PVN ID to alloc on 
 + /* 
 +  *---------------------------------------------------------------------- 
 +  * 
 ++ * VNetHubProcShow -- 
 ++ * 
 ++ *      Callback for read operation on hub entry in vnets proc fs. 
 ++ * 
 ++ * Results: 
 ++ *      Length of read operation. 
 ++ * 
 ++ * Side effects: 
 ++ *      None. 
 ++ * 
 ++ *---------------------------------------------------------------------- 
 ++ */ 
 +
 ++int 
 ++VNetHubProcShow(struct seq_file  *seqf,   // IN/OUT: buffer to write into 
 ++                void    *data)   // IN: client data - not used 
 ++{ 
 ++   VNetJack *jack = (VNetJack*)data; 
 ++   VNetHub *hub; 
 +
 ++   if (!jack || !jack->private) { 
 ++      return 0; 
 ++   } 
 ++   hub = (VNetHub*)jack->private; 
 +
 ++   VNetPrintJack(jack, seqf); 
 +
 ++   seq_printf(seqf, "tx %u ", hub->stats[jack->index].tx); 
 ++   seq_printf(seqf, "\n"); 
 ++   return 0; 
 ++} 
 +
 ++static int proc_hub_open(struct inode *inode, struct file *file) 
 ++{ 
 ++       return single_open(file, VNetHubProcShow, PDE_DATA(inode)); 
 ++} 
 +
 ++static const struct file_operations proc_hub_fops = { 
 ++       .open           = proc_hub_open, 
 ++       .read           = seq_read, 
 ++       .llseek         = seq_lseek, 
 ++       .release        = seq_release, 
 ++}; 
 +
 ++/* 
 ++ *---------------------------------------------------------------------- 
 ++ * 
 +  * VNetHubAlloc -- 
 +  * 
 +  *      Allocate a jack on this hub. 
 +@@ -354,7 +400,7 @@ VNetHubAlloc(Bool allocPvn, // IN: TRUE for PVN, FALSE for vnet 
 +           * Make proc entry for this jack. 
 +           */ 
 +  
 +-         retval = VNetProc_MakeEntry(jack->name, S_IFREG, &jack->procEntry); 
 ++         retval = VNetProc_MakeEntryOps(jack->name, S_IFREG, &jack->procEntry, &proc_hub_fops, jack); 
 +          if (retval) { 
 +             if (retval == -ENXIO) { 
 +                jack->procEntry = NULL; 
 +@@ -362,9 +408,6 @@ VNetHubAlloc(Bool allocPvn, // IN: TRUE for PVN, FALSE for vnet 
 +         hub->used[i] = FALSE; 
 +                return NULL; 
 +             } 
 +-         } else { 
 +-            jack->procEntry->read_proc = VNetHubProcRead; 
 +-            jack->procEntry->data = jack; 
 +          } 
 +  
 +          /* 
 +@@ -686,46 +729,3 @@ VNetHubIsBridged(VNetJack *this) 
 + } 
 +  
 +  
 +-/* 
 +- *---------------------------------------------------------------------- 
 +- * 
 +- * VNetHubProcRead -- 
 +- * 
 +- *      Callback for read operation on hub entry in vnets proc fs. 
 +- * 
 +- * Results: 
 +- *      Length of read operation. 
 +- * 
 +- * Side effects: 
 +- *      None. 
 +- * 
 +- *---------------------------------------------------------------------- 
 +- */ 
 +
 +-int 
 +-VNetHubProcRead(char    *page,   // IN/OUT: buffer to write into 
 +-                char   **start,  // OUT: 0 if file < 4k, else offset into page 
 +-                off_t    off,    // IN: offset of read into the file 
 +-                int      count,  // IN: maximum number of bytes to read 
 +-                int     *eof,    // OUT: TRUE if there is nothing more to read 
 +-                void    *data)   // IN: client data - not used 
 +-{ 
 +-   VNetJack *jack = (VNetJack*)data; 
 +-   VNetHub *hub; 
 +-   int len = 0; 
 +
 +-   if (!jack || !jack->private) { 
 +-      return len; 
 +-   } 
 +-   hub = (VNetHub*)jack->private; 
 +
 +-   len += VNetPrintJack(jack, page+len); 
 +
 +-   len += sprintf(page+len, "tx %u ", hub->stats[jack->index].tx); 
 +
 +-   len += sprintf(page+len, "\n"); 
 +
 +-   *start = 0; 
 +-   *eof   = 1; 
 +-   return len; 
 +-} 
 +--- a/netif.c 
 ++++ b/netif.c 
 +@@ -62,8 +62,6 @@ static int  VNetNetifStartXmit(struct sk_buff *skb, struct net_device *dev); 
 + static struct net_device_stats *VNetNetifGetStats(struct net_device *dev); 
 + static int  VNetNetifSetMAC(struct net_device *dev, void *addr); 
 + static void VNetNetifSetMulticast(struct net_device *dev); 
 +-static int  VNetNetIfProcRead(char *page, char **start, off_t off, 
 +-                              int count, int *eof, void *data); 
 +  
 + /* 
 +  *---------------------------------------------------------------------- 
 +@@ -116,6 +114,53 @@ VNetNetIfSetup(struct net_device *dev)  // IN: 
 +  
 + } 
 +  
 ++/* 
 ++ *---------------------------------------------------------------------- 
 ++ * 
 ++ * VNetNetIfProcShow -- 
 ++ * 
 ++ *      Callback for read operation on this netif entry in vnets proc fs. 
 ++ * 
 ++ * Results:  
 ++ *      Length of read operation. 
 ++ * 
 ++ * Side effects: 
 ++ *      None. 
 ++ * 
 ++ *---------------------------------------------------------------------- 
 ++ */ 
 +
 ++int 
 ++VNetNetIfProcShow(struct seq_file *seqf, // IN/OUT: buffer to write into 
 ++                  void   *data)  // IN: client data 
 ++{ 
 ++   VNetNetIF *netIf = data;  
 ++    
 ++   if (!netIf) { 
 ++      return 0; 
 ++   } 
 ++    
 ++   VNetPrintPort(&netIf->port, seqf); 
 +
 ++   seq_printf(seqf, "dev %s ", netIf->dev->name); 
 ++    
 ++   seq_printf(seqf, "\n"); 
 +
 ++   return 0; 
 ++} 
 +
 ++static int proc_netif_open(struct inode *inode, struct file *file) 
 ++{ 
 ++       return single_open(file, VNetNetIfProcShow, PDE_DATA(inode)); 
 ++} 
 +
 ++static const struct file_operations proc_netif_fops = { 
 ++       .open           = proc_netif_open, 
 ++       .read           = seq_read, 
 ++       .llseek         = seq_lseek, 
 ++       .release        = seq_release, 
 ++}; 
 +
 +  
 + /* 
 +  *---------------------------------------------------------------------- 
 +@@ -180,16 +225,13 @@ VNetNetIf_Create(char *devName,  // IN: 
 +     * Make proc entry for this jack. 
 +     */ 
 +  
 +-   retval = VNetProc_MakeEntry(netIf->port.jack.name, S_IFREG, 
 +-                               &netIf->port.jack.procEntry); 
 ++   retval = VNetProc_MakeEntryOps(netIf->port.jack.name, S_IFREG, 
 ++                               &netIf->port.jack.procEntry, &proc_netif_fops, netIf); 
 +    if (retval) { 
 +       netIf->port.jack.procEntry = NULL; 
 +       if (retval != -ENXIO) { 
 +          goto outFreeDev; 
 +       } 
 +-   } else { 
 +-      netIf->port.jack.procEntry->read_proc = VNetNetIfProcRead; 
 +-      netIf->port.jack.procEntry->data = netIf; 
 +    } 
 +  
 +    /* 
 +@@ -553,45 +595,3 @@ VNetNetifGetStats(struct net_device *dev) // IN: 
 +    return &netIf->stats; 
 + } 
 +  
 +
 +-/* 
 +- *---------------------------------------------------------------------- 
 +- * 
 +- * VNetNetIfProcRead -- 
 +- * 
 +- *      Callback for read operation on this netif entry in vnets proc fs. 
 +- * 
 +- * Results:  
 +- *      Length of read operation. 
 +- * 
 +- * Side effects: 
 +- *      None. 
 +- * 
 +- *---------------------------------------------------------------------- 
 +- */ 
 +
 +-int 
 +-VNetNetIfProcRead(char   *page,  // IN/OUT: buffer to write into 
 +-                  char  **start, // OUT: 0 if file < 4k, else offset into page 
 +-                  off_t   off,   // IN: (unused) offset of read into the file 
 +-                  int     count, // IN: (unused) maximum number of bytes to read 
 +-                  int    *eof,   // OUT: TRUE if there is nothing more to read 
 +-                  void   *data)  // IN: client data 
 +-{ 
 +-   VNetNetIF *netIf = data;  
 +-   int len = 0; 
 +-    
 +-   if (!netIf) { 
 +-      return len; 
 +-   } 
 +-    
 +-   len += VNetPrintPort(&netIf->port, page+len); 
 +
 +-   len += sprintf(page+len, "dev %s ", netIf->dev->name); 
 +-    
 +-   len += sprintf(page+len, "\n"); 
 +
 +-   *start = 0; 
 +-   *eof   = 1; 
 +-   return len; 
 +-} 
 +--- a/procfs.c 
 ++++ b/procfs.c 
 +@@ -45,10 +45,6 @@ 
 +  
 + #if defined(CONFIG_PROC_FS) 
 +  
 +-static int VNetProcMakeEntryInt(VNetProcEntry *parent, char *name, int mode, 
 +-                                VNetProcEntry **ret); 
 +-static void VNetProcRemoveEntryInt(VNetProcEntry *node, VNetProcEntry *parent); 
 +
 + static VNetProcEntry *base = NULL; 
 +  
 +  
 +@@ -71,7 +67,12 @@ static VNetProcEntry *base = NULL; 
 + int 
 + VNetProc_Init(void) 
 + { 
 +-   return VNetProcMakeEntryInt(NULL, "vmnet", S_IFDIR, &base); 
 ++ base = proc_mkdir("vmnet", NULL); 
 ++ if(IS_ERR(base)) { 
 ++ base = NULL; 
 ++ return PTR_ERR(base); 
 ++ } 
 ++ return 0; 
 + } 
 +  
 +  
 +@@ -94,14 +95,14 @@ VNetProc_Init(void) 
 + void 
 + VNetProc_Cleanup(void) 
 + { 
 +-   VNetProcRemoveEntryInt(base, NULL); 
 ++   proc_remove(base); 
 +    base = NULL; 
 + } 
 +  
 + /* 
 +  *---------------------------------------------------------------------- 
 +  * 
 +- * VNetProcMakeEntryInt -- 
 ++ * VNetProc_MakeEntryOps -- 
 +  * 
 +  *      Make an entry in the vnets proc file system. 
 +  * 
 +@@ -116,72 +117,21 @@ VNetProc_Cleanup(void) 
 +  */ 
 +  
 + int 
 +-VNetProcMakeEntryInt(VNetProcEntry  *parent, // IN: 
 +-      char            *name,  // IN: 
 ++VNetProc_MakeEntryOps(char            *name,  // IN: 
 +       int              mode,  // IN: 
 +-      VNetProcEntry  **ret)   // OUT: 
 ++      VNetProcEntry  **ret, 
 ++      const struct file_operations *fops, 
 ++      void *data 
 ++        // OUT: 
 + { 
 +    VNetProcEntry *ent; 
 +-   ent = create_proc_entry(name, mode, parent); 
 ++   ent = proc_create_data(name, mode, base, fops, data); 
 +    *ret = ent; 
 +    if (!ent) 
 +       return -ENOMEM; 
 +    return 0; 
 + } 
 +  
 +
 +-/* 
 +- *---------------------------------------------------------------------- 
 +- * 
 +- * VNetProcRemoveEntryInt -- 
 +- * 
 +- *      Remove a previously installed proc entry. 
 +- * 
 +- * Results:  
 +- *      None. 
 +- * 
 +- * Side effects: 
 +- *      None. 
 +- * 
 +- *---------------------------------------------------------------------- 
 +- */ 
 +
 +-void 
 +-VNetProcRemoveEntryInt(VNetProcEntry *node, 
 +-                       VNetProcEntry *parent) 
 +-{ 
 +-   if (node) { 
 +-      remove_proc_entry(node->name, parent); 
 +-   } 
 +-} 
 +
 +
 +-/* 
 +- *---------------------------------------------------------------------- 
 +- * 
 +- * VNetProc_MakeEntry -- 
 +- * 
 +- *      Make an entry in the vnets proc file system. 
 +- * 
 +- * Results:  
 +- *      errno. If errno is 0 and ret is non NULL then ret is filled 
 +- *      in with the resulting proc entry. 
 +- *       
 +- * Side effects: 
 +- *      None. 
 +- * 
 +- *---------------------------------------------------------------------- 
 +- */ 
 +
 +-int 
 +-VNetProc_MakeEntry(char            *name,  // IN: 
 +-    int              mode,  // IN: 
 +-    VNetProcEntry  **ret)   // OUT: 
 +-{ 
 +-   return VNetProcMakeEntryInt(base, name, mode, ret); 
 +-} 
 +
 +
 + /* 
 +  *---------------------------------------------------------------------- 
 +  * 
 +@@ -201,7 +151,8 @@ VNetProc_MakeEntry(char            *name,  // IN: 
 + void 
 + VNetProc_RemoveEntry(VNetProcEntry *node) 
 + { 
 +-   VNetProcRemoveEntryInt(node, base); 
 ++ if(node) 
 ++ proc_remove(node); 
 + } 
 +  
 +  
 +@@ -253,31 +204,6 @@ VNetProc_Cleanup(void) 
 + } 
 +  
 +  
 +-/* 
 +- *---------------------------------------------------------------------- 
 +- * 
 +- * VNetProc_MakeEntry -- 
 +- * 
 +- *      Make an entry in the vnets proc file system. 
 +- * 
 +- * Results:  
 +- *      errno. If errno is 0 and ret is non NULL then ret is filled 
 +- *      in with the resulting proc entry. 
 +- *       
 +- * Side effects: 
 +- *      None. 
 +- * 
 +- *---------------------------------------------------------------------- 
 +- */ 
 +
 +-int 
 +-VNetProc_MakeEntry(char            *name, 
 +-                   int              mode, 
 +-                   VNetProcEntry  **ret) 
 +-{ 
 +-   return -ENXIO; 
 +-} 
 +
 +  
 + /* 
 +  *---------------------------------------------------------------------- 
 +--- a/userif.c 
 ++++ b/userif.c 
 +@@ -389,7 +389,7 @@ VNetUserIfReceive(VNetJack       *this, // IN 
 + /* 
 +  *---------------------------------------------------------------------- 
 +  * 
 +- * VNetUserIfProcRead -- 
 ++ * VNetUserIfProcShow -- 
 +  * 
 +  *      Callback for read operation on this userif entry in vnets proc fs. 
 +  * 
 +@@ -403,30 +403,23 @@ VNetUserIfReceive(VNetJack       *this, // IN 
 +  */ 
 +  
 + static int 
 +-VNetUserIfProcRead(char    *page,  // IN/OUT: buffer to write into 
 +-                   char   **start, // OUT: 0 if file < 4k, else offset into 
 +-                                   //      page 
 +-                   off_t    off,   // IN: offset of read into the file 
 +-                   int      count, // IN: maximum number of bytes to read 
 +-                   int     *eof,   // OUT: TRUE if there is nothing more to 
 +-                                   //      read 
 ++VNetUserIfProcShow(struct seq_file    *seqf,  // IN/OUT: buffer to write into 
 +                    void    *data)  // IN: client data - not used 
 + { 
 +    VNetUserIF *userIf = (VNetUserIF*)data;  
 +-   int len = 0; 
 +     
 +    if (!userIf) { 
 +-      return len; 
 ++      return 0; 
 +    } 
 +     
 +-   len += VNetPrintPort(&userIf->port, page+len); 
 ++   VNetPrintPort(&userIf->port, seqf); 
 +     
 +-   len += sprintf(page+len, "read %u written %u queued %u ", 
 ++   seq_printf(seqf, "read %u written %u queued %u ", 
 +                   userIf->stats.read, 
 +                   userIf->stats.written, 
 +                   userIf->stats.queued); 
 +     
 +-   len += sprintf(page+len,  
 ++   seq_printf(seqf,  
 +    "dropped.down %u dropped.mismatch %u " 
 +    "dropped.overflow %u dropped.largePacket %u", 
 +                   userIf->stats.droppedDown, 
 +@@ -434,13 +427,23 @@ VNetUserIfProcRead(char    *page,  // IN/OUT: buffer to write into 
 +                   userIf->stats.droppedOverflow, 
 +    userIf->stats.droppedLargePacket); 
 +  
 +-   len += sprintf(page+len, "\n"); 
 ++   seq_printf(seqf, "\n"); 
 +     
 +-   *start = 0; 
 +-   *eof   = 1; 
 +-   return len; 
 ++   return 0; 
 ++} 
 +
 ++static int proc_userif_open(struct inode *inode, struct file *file) 
 ++{ 
 ++       return single_open(file, VNetUserIfProcShow, PDE_DATA(inode)); 
 + } 
 +  
 ++static const struct file_operations proc_userif_fops = { 
 ++       .open           = proc_userif_open, 
 ++       .read           = seq_read, 
 ++       .llseek         = seq_lseek, 
 ++       .release        = seq_release, 
 ++}; 
 +
 +  
 + /* 
 +  *---------------------------------------------------------------------- 
 +@@ -1036,8 +1039,8 @@ VNetUserIf_Create(VNetPort **ret) // OUT 
 +     * Make proc entry for this jack. 
 +     */ 
 +     
 +-   retval = VNetProc_MakeEntry(userIf->port.jack.name, S_IFREG, 
 +-                               &userIf->port.jack.procEntry); 
 ++   retval = VNetProc_MakeEntryOps(userIf->port.jack.name, S_IFREG, 
 ++                               &userIf->port.jack.procEntry, &proc_userif_fops, userIf); 
 +    if (retval) { 
 +       if (retval == -ENXIO) { 
 +          userIf->port.jack.procEntry = NULL; 
 +@@ -1045,9 +1048,6 @@ VNetUserIf_Create(VNetPort **ret) // OUT 
 +          kfree(userIf); 
 +          return retval; 
 +       } 
 +-   } else { 
 +-      userIf->port.jack.procEntry->read_proc = VNetUserIfProcRead; 
 +-      userIf->port.jack.procEntry->data = userIf; 
 +    } 
 +  
 +    /* 
 +--- a/vnetInt.h 
 ++++ b/vnetInt.h 
 +@@ -171,12 +171,14 @@ VNetJack *VNetDisconnect(VNetJack *jack); 
 +  
 + void VNetSend(const VNetJack *jack, struct sk_buff *skb); 
 +  
 +-int VNetProc_MakeEntry(char *name, int mode, 
 +-                       VNetProcEntry **ret); 
 ++int VNetProc_MakeEntryOps(char *name, int mode, 
 ++                       VNetProcEntry **ret, 
 ++        const struct file_operations *fops, 
 ++        void *data); 
 +  
 + void VNetProc_RemoveEntry(VNetProcEntry *node); 
 +  
 +-int VNetPrintJack(const VNetJack *jack, char *buf); 
 ++void VNetPrintJack(const VNetJack *jack, struct seq_file *seqf); 
 +  
 + int VNet_MakeMACAddress(VNetPort *port); 
 +  
 +@@ -196,7 +198,7 @@ Bool VNetPacketMatch(const uint8 *destAddr, const uint8 *ifAddr, 
 +  
 + Bool VNetCycleDetectIf(const char *name, int generation); 
 +  
 +-int VNetPrintPort(const VNetPort *port, char *buf); 
 ++void VNetPrintPort(const VNetPort *port, struct seq_file *seqf); 
 +  
 + int VNetSnprintf(char *str, size_t size, const char *format, ...); 
 +  
 +--  
 +</code> 
 +  - patch source files 
 +    - change directory\\ <code bash>cd /lib/vmware/modules/source</code> 
 +    - copy files to desktop\\ <code bash>cp vmnet.tar vmblock.tar ~/Desktop/</code> 
 +    - change directory\\ <code bash>cd ~/Desktop</code> 
 +    - extract tar-archives\\ <code bash>tar xvf vm*.tar</code> 
 +    - change directory\\ <code bash>cd vmnet-only</code> 
 +    - patch vmnet-files\\ <code bash>patch -p1 < ~/Downloads/vmnet.3.10.patch</code> 
 +    - change directory\\ <code bash>cd ../vmblock-only/</code> 
 +    - patch vmblock-files\\ <code bash>patch -p1 < ~/Downloads/vmblock.3.10.patch</code> 
 +    - recreate archives\\ <code bash>tar cvf vmnet.tar vmnet-only 
 +tar cvf vmblock.tar vmblock-only</code> 
 +    - change directory\\ <code bash>cd /lib/vmware/modules/source</code> 
 +    - create backups\\ <code bash>cp vmnet.tar vmnet.tar.bak 
 +cp vmblock.tar vmblock.tar.bak</code> 
 +    - copy files\\ <code bash>cp /home/benh/Desktop/vm*.tar .</code> 
 +  - compile VMware kernel modules\\ <code bash>vmware-modconfig --console --install-all</code>
snippets/vmware/fedora-compiler-error.1378212863.txt.gz · Zuletzt geändert: (Externe Bearbeitung)