[Freezing/Lagging] 安装vmware后,sudo lshw执行会被 vmnet 卡在 Network interfaces 环节
Tofloor
poster avatar
Zyx丶心
deepin
2025-04-30 14:53
Author

glmos-code-explain

环境信息如下:

$ cat /etc/os-release 
PRETTY_NAME="Deepin 23.1"
NAME="Deepin"
VERSION_CODENAME=beige
ID=deepin
HOME_URL="https://www.deepin.org/"
BUG_REPORT_URL="https://bbs.deepin.org"
VERSION_ID="23.1"
VERSION="23.1"

$ cat /etc/os-version 
[Version] 
SystemName=Deepin
SystemName[zh_CN]=深度操作系统
ProductType=Desktop
ProductType[zh_CN]=桌面
EditionName=Community
EditionName[en_US]=Community
EditionName[zh_CN]=社区版
MajorVersion=23
MinorVersion=23.1
OsBuild=31038.102

$ uname -r
6.12.20-amd64-desktop-rolling

$ ll
-rw-r--r-- 1 Lyx Lyx 523M 2023年 8月 6日 VMware-Workstation-Full-16.2.5-20904516.x86_64.bundle
-rw-rw-r-- 1 Lyx Lyx 511M  4月30日 09:39 VMware-Workstation-Full-17.5.2-23775571.x86_64.bundle

问题复现:

安装如上两个版本的VMware后,直接进行虚拟网卡驱动的安装 sudo vmware-modconfig --console --install-all 会提示报错。

此时执行 sudo lshw 命令,则可以正常执行,有正确的结果返回。

参考 [经验分享] V23 Release 6.6及6.9内核下VMware 17解决网络及使用问题的方法 后,无论是参考引用 tree/workstation-17.5.2-k6.9+ 代码,还是参考引用 tree/workstation-17.5.2-k6.9+-sav 代码,亦或者直接手动最小影响的修改vmnet、vmmon模块的 vmmon-only/include/pgtbl.hvmmon-only/common/vmx86.cvmnet-only/vmnetInt.h 代码文件,并重新打包编译安装后,则VMware都可以正常运行启动,但执行 sudo lshw 命令则都会卡在 Network interfaces 环节,在root环境下,进行strace调试后,得到如下日志:

lshw-strace.txt

与此同时,在普通用户环境下,执行命令 lshw 则可以正常执行,同样进行 strace 调试后,得到如下日志:

lshw-strace-User.txt

Reply Favorite View the author
All Replies
Zyx丶心
deepin
2025-04-30 15:09
#1

glmos-code-explain

手动修改代码内容如下:

vmnet-only/vmnetInt.h

cat >vmware-vmnet-k6.12.patch <<'EOF'
--- vmnet-only/vmnetInt.h
+++ vmnet-only/vmnetInt.h
@@ -41,8 +41,13 @@
     compat_skb_set_network_header(skb, sizeof (struct ethhdr)),  \
     dev_queue_xmit(skb)                                   \
   )
-#define dev_lock_list()    read_lock(&dev_base_lock)
-#define dev_unlock_list()  read_unlock(&dev_base_lock)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 9, 0)
+#   define dev_lock_list()    rcu_read_lock()
+#   define dev_unlock_list()  rcu_read_unlock()
+#else
+#   define dev_lock_list()    read_lock(&dev_base_lock)
+#   define dev_unlock_list()  read_unlock(&dev_base_lock)
+#endif
EOF

vmmon-only/common/vmx86.c

cat >vmware-vmmon-vmx86-k6.12.patch <<'EOF'
--- vmmon-only/common/vmx86.c
+++ vmmon-only/common/vmx86.c
@@ -49,7 +49,7 @@
 #include "x86svm.h"
 #include "x86cpuid_asm.h"
 #if defined(__linux__)
-#include 
+#include 
 #endif
 #include "perfctr.h"
 #include "x86vtinstr.h"
EOF

vmmon-only/include/pgtbl.h

cat >vmware-vmmon-pgtbl-k6.12.patch <<'EOF'
--- vmmon-only/include/pgtbl.h
+++ vmmon-only/include/pgtbl.h
@@ -25,6 +25,7 @@
 #include "compat_pgtable.h"
 #include "compat_spinlock.h"
 #include "compat_page.h"
+#include "compat_version.h"
 
 
 /*
@@ -45,6 +46,7 @@
  *-----------------------------------------------------------------------------
  */
 
+#if COMPAT_LINUX_VERSION_CHECK_LT(6, 5, 0) // only used by PgtblVa2MPN() below
 static INLINE MPN
 PgtblVa2MPNLocked(struct mm_struct *mm, // IN: Mm structure of a process
                   VA addr)              // IN: Address in the virtual address
@@ -106,6 +108,7 @@
    }
    return mpn;
 }
+#endif
 
 
 /*
@@ -125,6 +128,7 @@
  *-----------------------------------------------------------------------------
  */
 
+#if COMPAT_LINUX_VERSION_CHECK_LT(6, 5, 0)
 static INLINE MPN
 PgtblVa2MPN(VA addr)  // IN
 {
@@ -138,5 +142,24 @@
    spin_unlock(&mm->page_table_lock);
    return mpn;
 }
+#else /* COMPAT_LINUX_VERSION_CHECK_LT(6, 5, 0) */
+
+static INLINE MPN
+PgtblVa2MPN(VA addr)  // IN
+{
+   struct page *page;
+   int npages;
+   MPN mpn;
+
+   npages = get_user_pages_unlocked(addr, 1, &page, FOLL_HWPOISON);
+   if (npages != 1)
+          return INVALID_MPN;
+   mpn = page_to_pfn(page);
+   put_page(page);
+
+   return mpn;
+}
+
+#endif /* COMPAT_LINUX_VERSION_CHECK_LT(6, 5, 0) */
 
 #endif /* __PGTBL_H__ */
EOF
Reply View the author
Zyx丶心
deepin
2025-04-30 15:18
#2

glmos-code-explain

我看社区里面有提到VMware 17.6.x 版本会造成锁屏失败,故我就没考虑使用 17.6.x 版本进行测试,但从 16.2.x 版本就已经存在且遗留至 17.5.x 版本,估摸着 17.6.x 也大概率不会修好了。

Reply View the author
Zyx丶心
deepin
2025-04-30 15:50
#3

glmos-code-explain

刚刚看到Ubuntu也反馈了这个问题:lshw hangs running forever at Network Interfaces CLASS

sudo lshw 命令执行问题不解决的话,在同时使用 VMware 时,是会对很多应用造成使用影响的,包括但不限于需要root身份执行的应用商店、设备管理器、浏览器插件工作等

Reply View the author
mlbhk007
deepin
2025-05-05 16:51
#4

还请高手细细指点一番,新人,没怎么理解

Reply View the author
Zyx丶心
deepin
2025-05-06 09:48
#5
mlbhk007

还请高手细细指点一番,新人,没怎么理解

glmos-code-explain

我是哪方面还需要补充,你想了解什么?麻烦告知下,我补充下

Reply View the author
Zyx丶心
deepin
2025-05-06 18:11
#6

glmos-code-explain

有大佬能解决下这个问题吗?

Reply View the author
mlbhk007
deepin
2025-05-08 13:38
#7
Zyx丶心

glmos-code-explain

我是哪方面还需要补充,你想了解什么?麻烦告知下,我补充下

主要是怎么按照您的这个代码修改,不会这个代码修改,现在我安装的vmware17.6.3也是这样,能够正常使用但是sudo lshw的时候会卡在Network interfaces这里

Reply View the author
Zyx丶心
deepin
2025-05-08 14:05
#8
mlbhk007

主要是怎么按照您的这个代码修改,不会这个代码修改,现在我安装的vmware17.6.3也是这样,能够正常使用但是sudo lshw的时候会卡在Network interfaces这里

glmos-code-explain

这个我该怎么给你解释呢。。。这其实就是代码合并的方法。你可以参考这个教程:linux中patch补丁的文件格式和使用

将我提供的代码如 vmntInt.h的代码内容保存到 vmware-vmnetInt-k6.9.patch文件中,然后再执行如下命令:

patch -p0 vmware-host-modules/vmnet-only/vmnetInt.h vmware-vmnetInt-k6.9.patch

这些代码并不能解决主题中反馈的问题,我验证过,sudo lshw依然是不行的,但 lshw 是可以。

Reply View the author
mlbhk007
deepin
2025-05-08 15:35
#9
Zyx丶心

glmos-code-explain

这个我该怎么给你解释呢。。。这其实就是代码合并的方法。你可以参考这个教程:linux中patch补丁的文件格式和使用

将我提供的代码如 vmntInt.h的代码内容保存到 vmware-vmnetInt-k6.9.patch文件中,然后再执行如下命令:

patch -p0 vmware-host-modules/vmnet-only/vmnetInt.h vmware-vmnetInt-k6.9.patch

这些代码并不能解决主题中反馈的问题,我验证过,sudo lshw依然是不行的,但 lshw 是可以。

收到,感谢指点

Reply View the author