From: Jan Rękorajski Date: Wed, 25 May 2022 14:21:18 +0000 (+0200) Subject: - fix building kernel modules for 5.18 X-Git-Tag: auto/th/dahdi-linux-3.1.0-9~1 X-Git-Url: http://git.pld-linux.org/?p=packages%2Fdahdi-linux.git;a=commitdiff_plain;h=52da11552eb1efa2684f22f11f78c4a66f7483ed - fix building kernel modules for 5.18 --- diff --git a/dahdi-linux.spec b/dahdi-linux.spec index 47b9261..8567e49 100644 --- a/dahdi-linux.spec +++ b/dahdi-linux.spec @@ -63,6 +63,7 @@ Patch4: kernel-5.9.patch Patch5: kernel-4.9.256.patch Patch6: nostdinc.patch Patch7: kernel-5.17.patch +Patch8: kernel-5.18.patch URL: http://www.asterisk.org/ %{?with_kernel:%{expand:%buildrequires_kernel kernel%%{_alt_kernel}-module-build >= 3:2.6.20.2}} BuildRequires: perl-base @@ -170,6 +171,7 @@ cd ../..\ %patch5 -p1 %patch6 -p1 %patch7 -p1 +%patch8 -p1 for a in %{SOURCE3} %{SOURCE4} %{SOURCE5} %{SOURCE6} %{SOURCE7}; do ln -s $a drivers/dahdi/firmware diff --git a/kernel-5.18.patch b/kernel-5.18.patch new file mode 100644 index 0000000..448076f --- /dev/null +++ b/kernel-5.18.patch @@ -0,0 +1,219 @@ +diff -ur dahdi-linux-3.1.0/drivers/dahdi/voicebus/voicebus.c dahdi-linux-3.1.0-5.18/drivers/dahdi/voicebus/voicebus.c +--- dahdi-linux-3.1.0/drivers/dahdi/voicebus/voicebus.c 2019-10-03 16:48:09.000000000 +0200 ++++ dahdi-linux-3.1.0-5.18/drivers/dahdi/voicebus/voicebus.c 2022-05-25 16:18:38.185204828 +0200 +@@ -260,8 +260,13 @@ + dl->padding = 0; + } + ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0) ++ dl->desc = dma_alloc_coherent(&vb->pdev->dev, ++ (sizeof(*d) + dl->padding) * DRING_SIZE, &dl->desc_dma, GFP_ATOMIC); ++#else + dl->desc = pci_alloc_consistent(vb->pdev, + (sizeof(*d) + dl->padding) * DRING_SIZE, &dl->desc_dma); ++#endif + if (!dl->desc) + return -ENOMEM; + +@@ -311,9 +316,15 @@ + dl->padding = 0; + } + ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0) ++ dl->desc = dma_alloc_coherent(&vb->pdev->dev, ++ (sizeof(*d) + dl->padding) * ++ DRING_SIZE, &dl->desc_dma, GFP_ATOMIC); ++#else + dl->desc = pci_alloc_consistent(vb->pdev, + (sizeof(*d) + dl->padding) * + DRING_SIZE, &dl->desc_dma); ++#endif + if (!dl->desc) + return -ENOMEM; + +@@ -544,10 +555,17 @@ + return; + } + vb_cleanup_descriptors(vb, dl); ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0) ++ dma_free_coherent( ++ &vb->pdev->dev, ++ (sizeof(struct voicebus_descriptor)+dl->padding)*DRING_SIZE, ++ dl->desc, dl->desc_dma); ++#else + pci_free_consistent( + vb->pdev, + (sizeof(struct voicebus_descriptor)+dl->padding)*DRING_SIZE, + dl->desc, dl->desc_dma); ++#endif + while (!list_empty(&vb->free_rx)) { + vbb = list_entry(vb->free_rx.next, struct vbb, entry); + list_del(&vbb->entry); +@@ -1783,7 +1801,11 @@ + /* ---------------------------------------------------------------- + Configure the hardware / kernel module interfaces. + ---------------------------------------------------------------- */ ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0) ++ if (dma_set_mask(&vb->pdev->dev, DMA_BIT_MASK(32))) { ++#else + if (pci_set_dma_mask(vb->pdev, DMA_BIT_MASK(32))) { ++#endif + dev_err(&vb->pdev->dev, "No suitable DMA available.\n"); + goto cleanup; + } +@@ -1826,7 +1848,11 @@ + /* ---------------------------------------------------------------- + Configure the hardware interface. + ---------------------------------------------------------------- */ ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0) ++ if (dma_set_mask(&vb->pdev->dev, DMA_BIT_MASK(32))) { ++#else + if (pci_set_dma_mask(vb->pdev, DMA_BIT_MASK(32))) { ++#endif + dev_warn(&vb->pdev->dev, "No suitable DMA available.\n"); + goto cleanup; + } +diff -ur dahdi-linux-3.1.0/drivers/dahdi/wct4xxp/base.c dahdi-linux-3.1.0-5.18/drivers/dahdi/wct4xxp/base.c +--- dahdi-linux-3.1.0/drivers/dahdi/wct4xxp/base.c 2019-10-03 16:48:09.000000000 +0200 ++++ dahdi-linux-3.1.0-5.18/drivers/dahdi/wct4xxp/base.c 2022-05-25 16:07:49.747890034 +0200 +@@ -3849,8 +3849,13 @@ + dma_addr_t writedma; + + /* 32 channels, Double-buffer, Read/Write, 4 spans */ ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0) ++ alloc = dma_alloc_coherent(&wc->dev->dev, numbufs * T4_BASE_SIZE(wc) * 2, ++ &writedma, GFP_ATOMIC); ++#else + alloc = pci_alloc_consistent(wc->dev, numbufs * T4_BASE_SIZE(wc) * 2, + &writedma); ++#endif + + if (!alloc) { + dev_notice(&wc->dev->dev, "wct%dxxp: Unable to allocate " +@@ -3928,8 +3933,13 @@ + + spin_unlock_irqrestore(&wc->reglock, flags); + ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0) ++ dma_free_coherent(&wc->dev->dev, T4_BASE_SIZE(wc) * oldbufs * 2, ++ oldalloc, oldaddr); ++#else + pci_free_consistent(wc->dev, T4_BASE_SIZE(wc) * oldbufs * 2, + oldalloc, oldaddr); ++#endif + + dev_info(&wc->dev->dev, "Increased latency to %d\n", newlatency); + +@@ -5122,8 +5132,13 @@ + * up first */ + pci_iounmap(wc->dev, wc->membase); + pci_release_regions(wc->dev); ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0) ++ dma_free_coherent(&wc->dev->dev, T4_BASE_SIZE(wc) * wc->numbufs * 2, ++ wc->writechunk, wc->writedma); ++#else + pci_free_consistent(wc->dev, T4_BASE_SIZE(wc) * wc->numbufs * 2, + wc->writechunk, wc->writedma); ++#endif + pci_set_drvdata(wc->dev, NULL); + free_wc(wc); + return res; +@@ -5302,8 +5317,13 @@ + pci_release_regions(wc->dev); + + /* Immediately free resources */ ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0) ++ dma_free_coherent(&wc->dev->dev, T4_BASE_SIZE(wc) * wc->numbufs * 2, ++ wc->writechunk, wc->writedma); ++#else + pci_free_consistent(wc->dev, T4_BASE_SIZE(wc) * wc->numbufs * 2, + wc->writechunk, wc->writedma); ++#endif + + order_index[wc->order]--; + +diff -ur dahdi-linux-3.1.0/drivers/dahdi/wctc4xxp/base.c dahdi-linux-3.1.0-5.18/drivers/dahdi/wctc4xxp/base.c +--- dahdi-linux-3.1.0/drivers/dahdi/wctc4xxp/base.c 2019-10-03 16:48:09.000000000 +0200 ++++ dahdi-linux-3.1.0-5.18/drivers/dahdi/wctc4xxp/base.c 2022-05-25 16:17:03.706798317 +0200 +@@ -822,8 +822,13 @@ + if (!dr->pending) + return -ENOMEM; + ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0) ++ dr->desc = dma_alloc_coherent(&pdev->dev, ++ (sizeof(*d)+dr->padding)*dr->size, &dr->desc_dma, GFP_ATOMIC); ++#else + dr->desc = pci_alloc_consistent(pdev, + (sizeof(*d)+dr->padding)*dr->size, &dr->desc_dma); ++#endif + if (!dr->desc) { + kfree(dr->pending); + return -ENOMEM; +@@ -873,8 +878,13 @@ + } + d->des1 &= cpu_to_le32(~(BUFFER1_SIZE_MASK)); + d->des1 |= cpu_to_le32(len & BUFFER1_SIZE_MASK); ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0) ++ d->buffer1 = cpu_to_le32(dma_map_single(&dr->pdev->dev, c->data, ++ SFRAME_SIZE, dr->direction)); ++#else + d->buffer1 = cpu_to_le32(pci_map_single(dr->pdev, c->data, + SFRAME_SIZE, dr->direction)); ++#endif + + SET_OWNED(d); /* That's it until the hardware is done with it. */ + dr->pending[dr->tail] = c; +@@ -895,8 +905,13 @@ + spin_lock_irqsave(&dr->lock, flags); + d = wctc4xxp_descriptor(dr, head); + if (d->buffer1 && !OWNED(d)) { ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0) ++ dma_unmap_single(&dr->pdev->dev, le32_to_cpu(d->buffer1), ++ SFRAME_SIZE, dr->direction); ++#else + pci_unmap_single(dr->pdev, le32_to_cpu(d->buffer1), + SFRAME_SIZE, dr->direction); ++#endif + c = dr->pending[head]; + WARN_ON(!c); + dr->head = (++head) & (dr->size-1); +@@ -1575,8 +1590,13 @@ + for (i = 0; i < dr->size; ++i) { + d = wctc4xxp_descriptor(dr, i); + if (d->buffer1) { ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0) ++ dma_unmap_single(&dr->pdev->dev, d->buffer1, ++ SFRAME_SIZE, dr->direction); ++#else + pci_unmap_single(dr->pdev, d->buffer1, + SFRAME_SIZE, dr->direction); ++#endif + d->buffer1 = 0; + /* Commands will also be sitting on the waiting for + * response list, so we want to make sure to delete +@@ -1589,8 +1609,13 @@ + dr->head = 0; + dr->tail = 0; + dr->count = 0; ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0) ++ dma_free_coherent(&dr->pdev->dev, (sizeof(*d)+dr->padding) * dr->size, ++ dr->desc, dr->desc_dma); ++#else + pci_free_consistent(dr->pdev, (sizeof(*d)+dr->padding) * dr->size, + dr->desc, dr->desc_dma); ++#endif + kfree(dr->pending); + } + +@@ -3940,7 +3965,11 @@ + INIT_WORK(&wc->deferred_work, deferred_work_func); + init_waitqueue_head(&wc->waitq); + ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0) ++ if (dma_set_mask(&wc->pdev->dev, DMA_BIT_MASK(32))) { ++#else + if (pci_set_dma_mask(wc->pdev, DMA_BIT_MASK(32))) { ++#endif + release_mem_region(pci_resource_start(wc->pdev, 1), + pci_resource_len(wc->pdev, 1)); + if (wc->iobase)