[packages/dahdi-linux] - fix building kernel modules for 5.18

baggins baggins at pld-linux.org
Wed May 25 16:21:49 CEST 2022


commit 52da11552eb1efa2684f22f11f78c4a66f7483ed
Author: Jan Rękorajski <baggins at pld-linux.org>
Date:   Wed May 25 16:21:18 2022 +0200

    - fix building kernel modules for 5.18

 dahdi-linux.spec  |   2 +
 kernel-5.18.patch | 219 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 221 insertions(+)
---
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)
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/dahdi-linux.git/commitdiff/52da11552eb1efa2684f22f11f78c4a66f7483ed



More information about the pld-cvs-commit mailing list