Hi, everyone! You guessed it, I updated my Arch Linux and got a new kernel which is not compatible with the latest Parallels Tools. Attached is a patch to the tools, so the modules compile against kernel v6.
@GalaxyMaster, I tried your patch which might work but I get a lot of other errors. Could you have a look what could it be? I use Suse aarch64 and get following errors: In file included from /usr/lib/parallels-tools/kmods/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg.c:23: /usr/lib/parallels-tools/kmods/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg_common.h: In function 'tg_out': /usr/lib/parallels-tools/kmods/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg_common.h:179:14: warning: assignment to 'long unsigned int' from 'void *' makes integer from pointer without a cast [-Wint-conversion] 179 | port += dev->base_addr; | ^~ /usr/lib/parallels-tools/kmods/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg_common.h:183:24: warning: passing argument 2 of 'iowrite64' makes pointer from integer without a cast [-Wint-conversion] 183 | iowrite64(val, port); | ^~~~ | | | long unsigned int In file included from /usr/src/linux-6.0.2-1/arch/arm64/include/asm/io.h:163, from /usr/src/linux-6.0.2-1/include/linux/io.h:13, from /usr/src/linux-6.0.2-1/include/linux/irq.h:20, from /usr/src/linux-6.0.2-1/include/asm-generic/hardirq.h:17, from /usr/src/linux-6.0.2-1/arch/arm64/include/asm/hardirq.h:17, from /usr/src/linux-6.0.2-1/include/linux/hardirq.h:11, from /usr/src/linux-6.0.2-1/include/linux/interrupt.h:11, from /usr/src/linux-6.0.2-1/include/linux/pci.h:38, from /usr/lib/parallels-tools/kmods/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg.c:7: /usr/src/linux-6.0.2-1/include/asm-generic/io.h:852:64: note: expected 'volatile void *' but argument is of type 'long unsigned int' 852 | static inline void iowrite64(u64 value, volatile void __iomem *addr) | ~~~~~~~~~~~~~~~~~~~~~~~^~~~ In file included from /usr/src/linux-6.0.2-1/include/asm-generic/bug.h:22, from /usr/src/linux-6.0.2-1/arch/arm64/include/asm/bug.h:26, from /usr/src/linux-6.0.2-1/include/linux/bug.h:5, from /usr/src/linux-6.0.2-1/arch/arm64/include/asm/cpufeature.h:19, from /usr/src/linux-6.0.2-1/arch/arm64/include/asm/hwcap.h:9, from /usr/src/linux-6.0.2-1/arch/arm64/include/asm/arch_timer.h:12, from /usr/src/linux-6.0.2-1/arch/arm64/include/asm/timex.h:8, from /usr/src/linux-6.0.2-1/include/linux/timex.h:67, from /usr/src/linux-6.0.2-1/include/linux/time32.h:13, from /usr/src/linux-6.0.2-1/include/linux/time.h:60, from /usr/src/linux-6.0.2-1/arch/arm64/include/asm/stat.h:12, from /usr/src/linux-6.0.2-1/include/linux/stat.h:6, from /usr/src/linux-6.0.2-1/include/linux/module.h:13, from /usr/lib/parallels-tools/kmods/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg.c:5: /usr/lib/parallels-tools/kmods/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg.c: In function 'prl_tg_probe_common': /usr/src/linux-6.0.2-1/include/linux/kern_levels.h:5:25: warning: format '%lx' expects argument of type 'long unsigned int', but argument 3 has type 'void *' [-Wformat=] 5 | #define KERN_SOH "\001" /* ASCII Start Of Header */ | ^~~~~~ /usr/src/linux-6.0.2-1/include/linux/printk.h:436:25: note: in definition of macro 'printk_index_wrap' 436 | _p_func(_fmt, ##__VA_ARGS__); \ | ^~~~ /usr/lib/parallels-tools/kmods/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg.c:524:9: note: in expansion of macro 'printk' 524 | printk(KERN_INFO "detected %s, base addr %08lx, IRQ %d\n", | ^~~~~~ /usr/src/linux-6.0.2-1/include/linux/kern_levels.h:14:25: note: in expansion of macro 'KERN_SOH' 14 | #define KERN_INFO KERN_SOH "6" /* informational */ | ^~~~~~~~ /usr/lib/parallels-tools/kmods/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg.c:524:16: note: in expansion of macro 'KERN_INFO' 524 | printk(KERN_INFO "detected %s, base addr %08lx, IRQ %d\n", | ^~~~~~~~~ /usr/lib/parallels-tools/kmods/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg.c: In function 'prl_tg_init_module': /usr/lib/parallels-tools/kmods/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg.c:650:13: warning: unused variable 'rc' [-Wunused-variable] 650 | int rc; | ^~ In file included from /usr/lib/parallels-tools/kmods/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg_call.c:11: /usr/lib/parallels-tools/kmods/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg_common.h: In function 'tg_out': /usr/lib/parallels-tools/kmods/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg_common.h:179:14: warning: assignment to 'long unsigned int' from 'void *' makes integer from pointer without a cast [-Wint-conversion] 179 | port += dev->base_addr; | ^~ /usr/lib/parallels-tools/kmods/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg_common.h:183:24: warning: passing argument 2 of 'iowrite64' makes pointer from integer without a cast [-Wint-conversion] 183 | iowrite64(val, port); | ^~~~ | | | long unsigned int In file included from /usr/src/linux-6.0.2-1/arch/arm64/include/asm/io.h:163, from /usr/src/linux-6.0.2-1/include/linux/io.h:13, from /usr/src/linux-6.0.2-1/include/linux/irq.h:20, from /usr/src/linux-6.0.2-1/include/asm-generic/hardirq.h:17, from /usr/src/linux-6.0.2-1/arch/arm64/include/asm/hardirq.h:17, from /usr/src/linux-6.0.2-1/include/linux/hardirq.h:11, from /usr/src/linux-6.0.2-1/include/linux/interrupt.h:11, from /usr/src/linux-6.0.2-1/include/linux/pci.h:38, from /usr/lib/parallels-tools/kmods/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg_call.c:7: /usr/src/linux-6.0.2-1/include/asm-generic/io.h:852:64: note: expected 'volatile void *' but argument is of type 'long unsigned int' 852 | static inline void iowrite64(u64 value, volatile void __iomem *addr) | ~~~~~~~~~~~~~~~~~~~~~~~^~~~ ld: warning: -z relro ignored ld: warning: -z relro ignored Skipping BTF generation for /usr/lib/parallels-tools/kmods/prl_tg/Toolgate/Guest/Linux/prl_tg/prl_tg.ko due to unavailability of vmlinux warning: the compiler differs from the one used to build the kernel The kernel was built by: gcc (SUSE Linux) 12.2.1 20220830 [revision e927d1cf141f221c5a32574bde0913307e140984] You are using: cc (SUSE Linux) 12.2.1 20220830 [revision e927d1cf141f221c5a32574bde0913307e140984] /usr/lib/parallels-tools/kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c:958:10: error: 'const struct address_space_operations' has no member named 'readpage' 958 | .readpage = prlfs_readpage, | ^~~~~~~~ /usr/lib/parallels-tools/kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c:958:35: error: initialization of 'int (*)(struct page *, struct writeback_control *)' from incompatible pointer type 'int (*)(struct file *, struct page *)' [-Werror=incompatible-pointer-types] 958 | .readpage = prlfs_readpage, | ^~~~~~~~~~~~~~ /usr/lib/parallels-tools/kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c:958:35: note: (near initialization for 'prlfs_aops.writepage') cc1: some warnings being treated as errors make[3]: *** [/usr/src/linux-6.0.2-1/scripts/Makefile.build:250: /usr/lib/parallels-tools/kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.o] Error 1 make[2]: *** [../../../linux-6.0.2-1/Makefile:1866: /usr/lib/parallels-tools/kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs] Error 2 make[1]: *** [Makefile:36: all] Error 2 make: *** [Makefile.kmods:49: compile] Error 2 Error: could not build kernel modules modprobe: FATAL: Module prl_tg not found in directory /lib/modules/6.0.2-1-default modprobe: FATAL: Module prl_tg not found in directory /lib/modules/6.0.2-1-default Error: failed to upgrade Parallels Guest Tools!
actually the only line I need to fix is: /usr/lib/parallels-tools/kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c:958:10: error: 'const struct address_space_operations' has no member named 'readpage' What can I do here?
I avoidhaving kernel updates on my guest OS at the moment, by choosing to remain on 5.19.8, as that 5.18 - 19, which was the last version reported on the Arch Linux info page for parallels, as being supported. The technique for avoiding kernel upgrades is quite easy in arch linux using pacman In the the /etc/pacman.conf (for aarch64 guest) # Pacman won't upgrade packages in the IgnorePkg and IgnoreGroup IgnorePkg = linux-aarch6 linux-aarch64-headers 4 linux-eos-arm-headers The linux-eos-arm-headers comes from having the Endeavour OS add-ons to Arch linux for aarch64.
The kernel interface seems have been changed, so I would look at the commits touching that space and see how kernel devs updated the related pieces. Unfortunately, I am running an Intel-based Mac, so I did not encounter this particular issue and I don't have a habit to provide advice that I cannot verify myself.
Just an update, Parallels Desktop 18.1.0 (and its parallel-tool of course) doesn't require the patch on kernel 6.0.2
Hi guys. I can not install parallels tools in Parrot OS with kernel 6.1. How can I fix this issue?? How could I install this patch mentioned by GalaxyMonster?
Parallels lost me as a customer in January this year (I switched over to UTM and it covers 90% of what I want for free), so I do not know what the status of 6.4 and prl_* drivers. I just got tired of fighting bad support from a product that is supposed to make my life easier. Since January I had no single occurence when I needed to patch or install anything on the guest system to support my current virtualisation solution and I think it is how it should be.