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


中文 
glmos-code-explain
环境信息如下:
问题复现:
安装如上两个版本的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.h、vmmon-only/common/vmx86.c、vmnet-only/vmnetInt.h代码文件,并重新打包编译安装后,则VMware都可以正常运行启动,但执行sudo lshw命令则都会卡在 Network interfaces 环节,在root环境下,进行strace调试后,得到如下日志:lshw-strace.txt
与此同时,在普通用户环境下,执行命令
lshw则可以正常执行,同样进行 strace 调试后,得到如下日志:lshw-strace-User.txt