Update of /cvsroot/alsa/alsa-driver/acore
In directory sc8-pr-cvs1:/tmp/cvs-serv12850/acore
Modified Files:
memalloc.patch
Log Message:
- fixed the DMA allocation.
pci_set_dma_mask() is called together with pci_set_consistent_dma_mask().
also clean up the double check of mask.
Index: memalloc.patch
===================================================================
RCS file: /cvsroot/alsa/alsa-driver/acore/memalloc.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- memalloc.patch 20 Nov 2003 13:23:27 -0000 1.2
+++ memalloc.patch 19 Jan 2004 18:38:28 -0000 1.3
@@ -1,5 +1,5 @@
---- memalloc.c 2003-11-20 12:44:06.000000000 +0100
-+++ memalloc.c 2003-11-20 12:52:50.000000000 +0100
+--- ../../alsa-kernel/core/memalloc.c 2004-01-19 12:52:21.856491159 +0100
++++ memalloc.c 2004-01-19 13:00:09.973519397 +0100
@@ -1,3 +1,4 @@
+#include "memalloc.inc"
/*
@@ -13,35 +13,41 @@
#ifdef CONFIG_PCI
#if defined(__i386__) || defined(__ppc__) || defined(__x86_64__)
#define HACK_PCI_ALLOC_CONSISTENT
-@@ -94,16 +96,25 @@
+@@ -94,19 +96,31 @@
dma_addr_t *dma_handle)
{
void *ret;
-- u64 dma_mask;
-+ u64 dma_mask = 0xffffffff, dma_mask1;
+- u64 dma_mask, cdma_mask;
++ u64 dma_mask;
++#ifdef CONFIG_HAVE_PCI_CONSISTENT_DMA_MASK
++ u64 cdma_mask;
++#endif
unsigned long mask;
if (hwdev == NULL)
return pci_alloc_consistent(hwdev, size, dma_handle);
+ dma_mask = hwdev->dma_mask;
++#ifdef CONFIG_HAVE_PCI_CONSISTENT_DMA_MASK
+ cdma_mask = hwdev->consistent_dma_mask;
+- mask = (unsigned long)dma_mask && (unsigned long)cdma_mask;
++#endif
++ mask = (unsigned long)dma_mask;
+#ifdef CONFIG_HAVE_PCI_CONSISTENT_DMA_MASK
- dma_mask = hwdev->consistent_dma_mask;
-- mask = (unsigned long)dma_mask;
++ mask &= (unsigned long)cdma_mask;
+#endif
-+ dma_mask1 = hwdev->dma_mask;
-+ mask = (unsigned long)(dma_mask & dma_mask1);
+ hwdev->dma_mask = 0xffffffff; /* do without masking */
+#ifdef CONFIG_HAVE_PCI_CONSISTENT_DMA_MASK
hwdev->consistent_dma_mask = 0xffffffff; /* do without masking */
+#endif
-+ hwdev->dma_mask = 0xffffffff; /* do without masking */
ret = pci_alloc_consistent(hwdev, size, dma_handle);
+ hwdev->dma_mask = dma_mask; /* restore */
+#ifdef CONFIG_HAVE_PCI_CONSISTENT_DMA_MASK
- hwdev->consistent_dma_mask = dma_mask; /* restore */
+ hwdev->consistent_dma_mask = cdma_mask; /* restore */
+#endif
-+ hwdev->dma_mask = dma_mask1; /* restore */
if (ret) {
/* obtained address is out of range? */
if (((unsigned long)*dma_handle + size - 1) & ~mask) {
-@@ -125,6 +136,7 @@
+@@ -128,6 +142,7 @@
#endif /* arch */
#endif /* CONFIG_PCI */
@@ -49,7 +55,7 @@
/*
-@@ -617,7 +629,7 @@
+@@ -623,7 +638,7 @@
}
@@ -58,19 +64,16 @@
/*
* on ix86, we allocate a page with GFP_KERNEL to assure the
* allocation. the code is almost same with kernel/i386/pci-dma.c but
-@@ -642,7 +654,11 @@
+@@ -648,7 +663,7 @@
dma_addr_t addr;
unsigned long mask;
-+#ifdef CONFIG_HAVE_PCI_CONSISTENT_DMA_MASK
- mask = pci ? (unsigned long)pci->consistent_dma_mask : 0x00ffffffUL;
-+#else
+- mask = pci ? (unsigned long)pci->consistent_dma_mask : 0x00ffffffUL;
+ mask = pci ? (unsigned long)pci->dma_mask : 0x00ffffffUL;
-+#endif
ptr = (void *)__get_free_page(GFP_KERNEL);
if (ptr) {
addr = virt_to_phys(ptr);
-@@ -997,3 +1013,5 @@
+@@ -1012,3 +1027,5 @@
EXPORT_SYMBOL(snd_malloc_sbus_pages_fallback);
EXPORT_SYMBOL(snd_free_sbus_pages);
#endif
-------------------------------------------------------
The SF.Net email is sponsored by EclipseCon 2004
Premiere Conference on Open Tools Development and Integration
See the breadth of Eclipse activity. February 3-5 in Anaheim, CA.
http://www.eclipsecon.org/osdn
_______________________________________________
Alsa-cvslog mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-cvslog