1 |
Author: dsd |
2 |
Date: 2008-02-24 23:25:27 +0000 (Sun, 24 Feb 2008) |
3 |
New Revision: 1253 |
4 |
|
5 |
Modified: |
6 |
genpatches-2.6/trunk/2.6.24/2500_arcmsr-dma-coherent-warnings.patch |
7 |
Log: |
8 |
updated arcmsr fix |
9 |
|
10 |
Modified: genpatches-2.6/trunk/2.6.24/2500_arcmsr-dma-coherent-warnings.patch |
11 |
=================================================================== |
12 |
--- genpatches-2.6/trunk/2.6.24/2500_arcmsr-dma-coherent-warnings.patch 2008-02-16 21:55:54 UTC (rev 1252) |
13 |
+++ genpatches-2.6/trunk/2.6.24/2500_arcmsr-dma-coherent-warnings.patch 2008-02-24 23:25:27 UTC (rev 1253) |
14 |
@@ -1,61 +1,83 @@ |
15 |
-From: Nick Cheng <nick.cheng@×××××××××.tw> |
16 |
+[PATCH] arcmsr: fix IRQs disabled warning spew |
17 |
|
18 |
-Partial backport of 76d78300 ("arcmsr: updates (1.20.00.15)") by |
19 |
-Daniel Drake <dsd@g.o>. Removes pci_free_consistent usage, which |
20 |
-should not be used when IRQs are disabled for portability reasons. Fixes a |
21 |
-spew of dma_free_coherent irqs_disabled() warnings. |
22 |
+As of 2.6.24, running the archttp passthrough daemon with the arcmsr |
23 |
+driver produces an endless spew of dma_free_coherent warnings: |
24 |
|
25 |
-diff --git a/drivers/scsi/arcmsr/arcmsr_hba.c b/drivers/scsi/arcmsr/arcmsr_hba.c |
26 |
-index f4a202e..4f9ff32 100644 |
27 |
---- a/drivers/scsi/arcmsr/arcmsr_hba.c |
28 |
-+++ b/drivers/scsi/arcmsr/arcmsr_hba.c |
29 |
-@@ -1380,12 +1388,13 @@ static int arcmsr_iop_message_xfer(struct AdapterControlBlock *acb, \ |
30 |
+ WARNING: at arch/x86/kernel/pci-dma_64.c:169 dma_free_coherent() |
31 |
+ |
32 |
+It turns out that coherent memory is not needed, so commit 76d78300 by |
33 |
+Nick Cheng <nick.cheng@×××××××××.tw> switched it to kmalloc (as well as |
34 |
+making a lot of other changes which have not been included here). |
35 |
+ |
36 |
+James Bottomley pointed out that the new kmalloc usage was also wrong, |
37 |
+I corrected this in commit 69e562c2. |
38 |
+ |
39 |
+This patch combines both of the above for the purpose of fixing 2.6.24. |
40 |
+ |
41 |
+Signed-off-by: Daniel Drake <dsd@g.o> |
42 |
+ |
43 |
+Index: linux-2.6.24-gentoo/drivers/scsi/arcmsr/arcmsr_hba.c |
44 |
+=================================================================== |
45 |
+--- linux-2.6.24-gentoo.orig/drivers/scsi/arcmsr/arcmsr_hba.c |
46 |
++++ linux-2.6.24-gentoo/drivers/scsi/arcmsr/arcmsr_hba.c |
47 |
+@@ -1380,17 +1380,16 @@ static int arcmsr_iop_message_xfer(struc |
48 |
+ switch(controlcode) { |
49 |
|
50 |
case ARCMSR_MESSAGE_READ_RQBUFFER: { |
51 |
- unsigned long *ver_addr; |
52 |
+- unsigned long *ver_addr; |
53 |
- dma_addr_t buf_handle; |
54 |
++ unsigned char *ver_addr; |
55 |
uint8_t *pQbuffer, *ptmpQbuffer; |
56 |
int32_t allxfer_len = 0; |
57 |
-+ void *tmp; |
58 |
|
59 |
- ver_addr = pci_alloc_consistent(acb->pdev, 1032, &buf_handle); |
60 |
-- if (!ver_addr) { |
61 |
-+ tmp = kmalloc(1032, GFP_KERNEL|GFP_DMA); |
62 |
-+ ver_addr = (unsigned long *)tmp; |
63 |
-+ if (!tmp) { |
64 |
++ ver_addr = kmalloc(1032, GFP_ATOMIC); |
65 |
+ if (!ver_addr) { |
66 |
retvalue = ARCMSR_MESSAGE_FAIL; |
67 |
goto message_out; |
68 |
} |
69 |
-@@ -1421,18 +1430,19 @@ static int arcmsr_iop_message_xfer(struct AdapterControlBlock *acb, \ |
70 |
- memcpy(pcmdmessagefld->messagedatabuffer, (uint8_t *)ver_addr, allxfer_len); |
71 |
+- ptmpQbuffer = (uint8_t *) ver_addr; |
72 |
++ ptmpQbuffer = ver_addr; |
73 |
+ while ((acb->rqbuf_firstindex != acb->rqbuf_lastindex) |
74 |
+ && (allxfer_len < 1031)) { |
75 |
+ pQbuffer = &acb->rqbuffer[acb->rqbuf_firstindex]; |
76 |
+@@ -1419,25 +1418,24 @@ static int arcmsr_iop_message_xfer(struc |
77 |
+ } |
78 |
+ arcmsr_iop_message_read(acb); |
79 |
+ } |
80 |
+- memcpy(pcmdmessagefld->messagedatabuffer, (uint8_t *)ver_addr, allxfer_len); |
81 |
++ memcpy(pcmdmessagefld->messagedatabuffer, ver_addr, allxfer_len); |
82 |
pcmdmessagefld->cmdmessage.Length = allxfer_len; |
83 |
pcmdmessagefld->cmdmessage.ReturnCode = ARCMSR_MESSAGE_RETURNCODE_OK; |
84 |
- pci_free_consistent(acb->pdev, 1032, ver_addr, buf_handle); |
85 |
-+ kfree(tmp); |
86 |
++ kfree(ver_addr); |
87 |
} |
88 |
break; |
89 |
|
90 |
case ARCMSR_MESSAGE_WRITE_WQBUFFER: { |
91 |
- unsigned long *ver_addr; |
92 |
+- unsigned long *ver_addr; |
93 |
- dma_addr_t buf_handle; |
94 |
++ unsigned char *ver_addr; |
95 |
int32_t my_empty_len, user_len, wqbuf_firstindex, wqbuf_lastindex; |
96 |
uint8_t *pQbuffer, *ptmpuserbuffer; |
97 |
-+ void *tmp; |
98 |
|
99 |
- ver_addr = pci_alloc_consistent(acb->pdev, 1032, &buf_handle); |
100 |
-- if (!ver_addr) { |
101 |
-+ tmp = kmalloc(1032, GFP_KERNEL|GFP_DMA); |
102 |
-+ ver_addr = (unsigned long *)tmp; |
103 |
-+ if (!tmp) { |
104 |
++ ver_addr = kmalloc(1032, GFP_ATOMIC); |
105 |
+ if (!ver_addr) { |
106 |
retvalue = ARCMSR_MESSAGE_FAIL; |
107 |
goto message_out; |
108 |
} |
109 |
-@@ -1482,7 +1492,7 @@ static int arcmsr_iop_message_xfer(struct AdapterControlBlock *acb, \ |
110 |
+- ptmpuserbuffer = (uint8_t *)ver_addr; |
111 |
++ ptmpuserbuffer = ver_addr; |
112 |
+ user_len = pcmdmessagefld->cmdmessage.Length; |
113 |
+ memcpy(ptmpuserbuffer, pcmdmessagefld->messagedatabuffer, user_len); |
114 |
+ wqbuf_lastindex = acb->wqbuf_lastindex; |
115 |
+@@ -1483,7 +1481,7 @@ static int arcmsr_iop_message_xfer(struc |
116 |
retvalue = ARCMSR_MESSAGE_FAIL; |
117 |
} |
118 |
} |
119 |
- pci_free_consistent(acb->pdev, 1032, ver_addr, buf_handle); |
120 |
-+ kfree(tmp); |
121 |
++ kfree(ver_addr); |
122 |
} |
123 |
break; |
124 |
|
125 |
|
126 |
-- |
127 |
gentoo-commits@l.g.o mailing list |