Merge pull request #186121 from catap/prl-tools

authored by Sandro and committed by GitHub 6c95b6dc 7cab540d

+2 -178
+2 -6
pkgs/os-specific/linux/prl-tools/default.nix
··· 22 22 }: 23 23 24 24 assert (!libsOnly) -> kernel != null; 25 - assert lib.elem stdenv.hostPlatform.system [ "x86_64-linux" "i686-linux" "aarch64-linux" ]; 26 25 27 26 stdenv.mkDerivation rec { 28 - version = "17.1.4-51567"; 27 + version = "18.0.0-53049"; 29 28 pname = "prl-tools"; 30 29 31 30 # We download the full distribution to extract prl-tools-lin.iso from 32 31 # => ${dmg}/Parallels\ Desktop.app/Contents/Resources/Tools/prl-tools-lin.iso 33 32 src = fetchurl { 34 33 url = "https://download.parallels.com/desktop/v${lib.versions.major version}/${version}/ParallelsDesktop-${version}.dmg"; 35 - sha256 = "sha256-gjLxQOTFuVghv1Bj+zfbNW97q1IN2rurSnPQi13gzRA="; 34 + sha256 = "sha256-MGiqCvOsu/sKz6JHJFGP5bT12XYnm2kTMdOiflg9ses="; 36 35 }; 37 36 38 37 hardeningDisable = [ "pic" "format" ]; ··· 55 54 ( cd $sourceRoot/kmods; tar -xaf prl_mod.tar.gz ) 56 55 fi 57 56 ''; 58 - 59 - patches = lib.optional (lib.versionAtLeast kernel.version "5.18") ./prl-tools-5.18.patch 60 - ++ lib.optional (lib.versionAtLeast kernel.version "5.19") ./prl-tools-5.19.patch; 61 57 62 58 kernelVersion = lib.optionalString (!libsOnly) kernel.modDirVersion; 63 59 kernelDir = lib.optionalString (!libsOnly) "${kernel.dev}/lib/modules/${kernelVersion}";
-143
pkgs/os-specific/linux/prl-tools/prl-tools-5.18.patch
··· 1 - diff -puNr prl-tools-build/kmods/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg.c prl-tools-build/kmods/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg.c 2 - --- prl-tools-build/kmods/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg.c 3 - +++ prl-tools-build/kmods/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg.c 4 - @@ -382,7 +382,7 @@ static int prl_tg_initialize(struct tg_d 5 - } 6 - #endif 7 - /* Set DMA ability. Only lower 4G is possible to address */ 8 - - rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(64)); 9 - + rc = dma_set_mask(&pdev->dev, DMA_BIT_MASK(64)); 10 - if (rc) { 11 - printk(KERN_ERR "no usable DMA configuration\n"); 12 - goto err_out; 13 - diff -puNr prl-tools-build/kmods/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg_call.c prl-tools-build/kmods/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg_call.c 14 - --- prl-tools-build/kmods/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg_call.c 15 - +++ prl-tools-build/kmods/prl_tg/Toolgate/Guest/Linux/prl_tg/prltg_call.c 16 - @@ -76,7 +76,7 @@ static int tg_req_map_internal(struct TG 17 - uple->p[i] = vmalloc_to_page(mem); 18 - page_cache_get(uple->p[i]); 19 - 20 - - dst->RequestPages[i] = pci_map_page(pdev, uple->p[i], 0, PAGE_SIZE, DMA_BIDIRECTIONAL) >> PAGE_SHIFT; 21 - + dst->RequestPages[i] = dma_map_page(&pdev->dev, uple->p[i], 0, PAGE_SIZE, DMA_BIDIRECTIONAL) >> PAGE_SHIFT; 22 - if (!dst->RequestPages[i]) { 23 - page_cache_release(uple->p[i]); 24 - goto err; 25 - @@ -88,7 +88,7 @@ static int tg_req_map_internal(struct TG 26 - 27 - err: 28 - for (i = 0; i < uple->count; i++) { 29 - - pci_unmap_page(pdev, dst->RequestPages[i] << PAGE_SHIFT, PAGE_SIZE, DMA_BIDIRECTIONAL); 30 - + dma_unmap_page(&pdev->dev, dst->RequestPages[i] << PAGE_SHIFT, PAGE_SIZE, DMA_BIDIRECTIONAL); 31 - page_cache_release(uple->p[i]); 32 - } 33 - kfree(uple); 34 - @@ -129,7 +129,7 @@ static TG_PAGED_BUFFER *tg_req_map_user_ 35 - pfn = (u64 *)dbuf - 1; 36 - 37 - for (; npages > 0; npages--, mapped++) { 38 - - dma_addr_t addr = pci_map_page(pdev, uple->p[npages-1], 0, PAGE_SIZE, DMA_BIDIRECTIONAL); 39 - + dma_addr_t addr = dma_map_page(&pdev->dev, uple->p[npages-1], 0, PAGE_SIZE, DMA_BIDIRECTIONAL); 40 - 41 - if (!addr) { 42 - DPRINTK("[3] %d < %d \n", got, npages); 43 - @@ -144,7 +144,7 @@ static TG_PAGED_BUFFER *tg_req_map_user_ 44 - 45 - err_unmap: 46 - for (i = 0; i < mapped; i++, pfn++) 47 - - pci_unmap_page(pdev, *pfn << PAGE_SHIFT, PAGE_SIZE, DMA_BIDIRECTIONAL); 48 - + dma_unmap_page(&pdev->dev, *pfn << PAGE_SHIFT, PAGE_SIZE, DMA_BIDIRECTIONAL); 49 - 50 - err_put: 51 - for(i = 0; i < got; i++) 52 - @@ -176,7 +176,7 @@ static TG_PAGED_BUFFER *tg_req_map_kerne 53 - goto err; 54 - } 55 - 56 - - addr = pci_map_page(pdev, page, 0, PAGE_SIZE, DMA_BIDIRECTIONAL); 57 - + addr = dma_map_page(&pdev->dev, page, 0, PAGE_SIZE, DMA_BIDIRECTIONAL); 58 - if (!addr) { 59 - DPRINTK("[2] va:%p can't map\n", buffer); 60 - goto err; 61 - @@ -189,7 +189,7 @@ static TG_PAGED_BUFFER *tg_req_map_kerne 62 - 63 - err: 64 - for (; i > 0; i--, pfn--) 65 - - pci_unmap_page(pdev, *pfn << PAGE_SHIFT, PAGE_SIZE, DMA_BIDIRECTIONAL); 66 - + dma_unmap_page(&pdev->dev, *pfn << PAGE_SHIFT, PAGE_SIZE, DMA_BIDIRECTIONAL); 67 - 68 - return ERR_PTR(-ENOMEM); 69 - } 70 - @@ -203,7 +203,7 @@ static inline int tg_req_unmap_internal( 71 - dst->RequestSize + ~PAGE_MASK) >> PAGE_SHIFT; 72 - 73 - for (i = 0; i < count; i++) 74 - - pci_unmap_page(req->dev->pci_dev, dst->RequestPages[i] << PAGE_SHIFT, PAGE_SIZE, DMA_BIDIRECTIONAL); 75 - + dma_unmap_page(&req->dev->pci_dev->dev, dst->RequestPages[i] << PAGE_SHIFT, PAGE_SIZE, DMA_BIDIRECTIONAL); 76 - 77 - return count; 78 - } 79 - @@ -264,7 +264,7 @@ static void tg_req_unmap_pages(struct TG 80 - 81 - pfn = (u64 *)(dbuf + 1); 82 - for (; npages > 0; npages--, pfn++) 83 - - pci_unmap_page(pdev, (*pfn) << PAGE_SHIFT, PAGE_SIZE, DMA_BIDIRECTIONAL); 84 - + dma_unmap_page(&pdev->dev, (*pfn) << PAGE_SHIFT, PAGE_SIZE, DMA_BIDIRECTIONAL); 85 - 86 - dbuf = (TG_PAGED_BUFFER *)pfn; 87 - } 88 - @@ -374,7 +374,7 @@ static int tg_req_submit(struct TG_PENDI 89 - * also no any offset inside page needed. 90 - */ 91 - req->pg = vmalloc_to_page(dst); 92 - - req->phys = pci_map_page(dev->pci_dev, vmalloc_to_page(dst), 0, PAGE_SIZE, DMA_BIDIRECTIONAL); 93 - + req->phys = dma_map_page(&dev->pci_dev->dev, vmalloc_to_page(dst), 0, PAGE_SIZE, DMA_BIDIRECTIONAL); 94 - if (!req->phys) { 95 - DPRINTK("Can not allocate memory for DMA mapping\n"); 96 - goto out; 97 - @@ -405,7 +405,7 @@ static int tg_req_submit(struct TG_PENDI 98 - out: 99 - if (ret != TG_STATUS_PENDING) { 100 - page_cache_release(req->pg); 101 - - pci_unmap_page(dev->pci_dev, req->phys, PAGE_SIZE, DMA_BIDIRECTIONAL); 102 - + dma_unmap_page(&dev->pci_dev->dev, req->phys, PAGE_SIZE, DMA_BIDIRECTIONAL); 103 - } 104 - 105 - DPRINTK("EXIT\n"); 106 - @@ -460,7 +460,7 @@ out_wait: 107 - wait_for_completion(&req->waiting); 108 - out: 109 - page_cache_release(req->pg); 110 - - pci_unmap_page(dev->pci_dev, req->phys, PAGE_SIZE, DMA_BIDIRECTIONAL); 111 - + dma_unmap_page(&dev->pci_dev->dev, req->phys, PAGE_SIZE, DMA_BIDIRECTIONAL); 112 - DPRINTK("EXIT\n"); 113 - return ret; 114 - } 115 - diff -puNr prl-tools-build/kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c prl-tools-build/kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c 116 - --- prl-tools-build/kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c 117 - +++ prl-tools-build/kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c 118 - @@ -16,6 +16,7 @@ 119 - #include <linux/pagemap.h> 120 - #include <linux/namei.h> 121 - #include <linux/cred.h> 122 - +#include <linux/writeback.h> 123 - 124 - #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 40)) && \ 125 - (LINUX_VERSION_CODE < KERNEL_VERSION(3, 0, 0)) 126 - @@ -57,7 +58,7 @@ unsigned long *prlfs_dfl( struct dentry 127 - } 128 - 129 - #if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 9, 0) 130 - -#define prl_uaccess_kernel() uaccess_kernel() 131 - +#define prl_uaccess_kernel() (false) 132 - #else 133 - #define prl_uaccess_kernel() segment_eq(get_fs(), KERNEL_DS) 134 - #endif 135 - @@ -954,7 +955,7 @@ static const struct address_space_operat 136 - .writepage = prlfs_writepage, 137 - .write_begin = simple_write_begin, 138 - .write_end = prlfs_write_end, 139 - - .set_page_dirty = __set_page_dirty_nobuffers, 140 - + .dirty_folio = filemap_dirty_folio, 141 - }; 142 - 143 -
-29
pkgs/os-specific/linux/prl-tools/prl-tools-5.19.patch
··· 1 - diff -puNr prl-tools-build/kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c prl-tools-build/kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c 2 - --- prl-tools-build/kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c 3 - +++ prl-tools-build/kmods/prl_fs/SharedFolders/Guest/Linux/prl_fs/inode.c 4 - @@ -851,7 +851,7 @@ ssize_t prlfs_rw(struct inode *inode, char *buf, size_t size, 5 - loff_t *off, unsigned int rw, int user, int flags); 6 - 7 - 8 - -int prlfs_readpage(struct file *file, struct page *page) { 9 - +int prlfs_read_folio(struct file *file, struct folio *folio) { 10 - char *buf; 11 - ssize_t ret; 12 - #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 9, 0) 13 - @@ -859,6 +859,7 @@ int prlfs_readpage(struct file *file, struct page *page) { 14 - #else 15 - struct inode *inode = file->f_dentry->d_inode; 16 - #endif 17 - + struct page *page = &folio->page; 18 - loff_t off = page->index << PAGE_SHIFT; 19 - 20 - if (!file) { 21 - @@ -950,7 +951,7 @@ out: 22 - } 23 - 24 - static const struct address_space_operations prlfs_aops = { 25 - - .readpage = prlfs_readpage, 26 - + .read_folio = prlfs_read_folio, 27 - .writepage = prlfs_writepage, 28 - .write_begin = simple_write_begin, 29 - .write_end = prlfs_write_end,