<br><font size=1 color=#800080 face="sans-serif">----- Forwarded by John
F Davis/Raleigh/IBM on 02/06/2005 07:54 PM -----</font>
<br>
<table width=100%>
<tr valign=top>
<td width=40%><font size=1 face="sans-serif"><b>John F Davis/Raleigh/IBM</b>
</font>
<p><font size=1 face="sans-serif">02/06/2005 03:41 PM</font>
<td width=59%>
<table width=100%>
<tr>
<td>
<div align=right><font size=1 face="sans-serif">To</font></div>
<td valign=top><font size=1 face="sans-serif">linuxppc-embedded-bounces@ozlabs.org</font>
<tr>
<td>
<div align=right><font size=1 face="sans-serif">cc</font></div>
<td valign=top><font size=1 face="sans-serif">andre@linux-ide.org, vojtech@suse.cz,
maratbn@yahoo.com, jean-luc.coulon@fnac.net</font>
<tr>
<td>
<div align=right><font size=1 face="sans-serif">Subject</font></div>
<td valign=top><font size=1 face="sans-serif">IDE DMA on ppc405 with via
VT82C686</font></table>
<br>
<table>
<tr valign=top>
<td>
<td></table>
<br></table>
<br>
<br><font size=2 face="sans-serif">Hello</font>
<br>
<br><font size=2 face="sans-serif">I am still trying to get this IDE DMA
code working. I have modified </font>
<br><font size=2 face="sans-serif">(hacked) the ide_build_dmatable so that
it flushes the buffer for each range of </font>
<br><font size=2 face="sans-serif">memory that is modified by the dma bus
master. I am certain I have flushed</font>
<br><font size=2 face="sans-serif">the cache properly as shown below, but
the problem persists.</font>
<br>
<br><font size=2 face="sans-serif">Below are two traces. The first
one is from my </font>
<br><font size=2 face="sans-serif">log buffer utility which shows the operation
of the modified ide_build_dmatable routine.</font>
<br><font size=2 face="sans-serif">The second one is from the logic analyzer
and it corresponds to the first</font>
<br><font size=2 face="sans-serif">dma operation. </font>
<br>
<br><font size=2 face="sans-serif">Lastly, I have the entire ide_build_dmatable
routine for reference as</font>
<br><font size=2 face="sans-serif">well as the resulting ksymoops. Note,
this code appears to be rock solid</font>
<br><font size=2 face="sans-serif">for running multiple consecutive hdparm
tests. ie. enable dma and then</font>
<br><font size=2 face="sans-serif">issue "while true; do hdparm -t
/dev/hda; done" in four logins to the target</font>
<br><font size=2 face="sans-serif">with ssh.</font>
<br>
<br><font size=2 face="sans-serif">However, I get the oops when I start
playback of a video in Xine from</font>
<br><font size=2 face="sans-serif">the disk.</font>
<br>
<br><font size=2 face="sans-serif">I am at the point now, where my next
task is to try this board with a different</font>
<br><font size=2 face="sans-serif">IDE controller and see if its a problem
with the IDE DMA code for this</font>
<br><font size=2 face="sans-serif">non cache coherent processor or if its
a problem in the VIA driver.</font>
<br>
<br><font size=2 face="sans-serif">JD</font>
<br>
<br>
<br><font size=2 face="sans-serif">Truncated portion of my log buffer.</font>
<br><font size=2 face="sans-serif">----------------------------------------------------</font>
<br>
<br><font size=2 face="sans-serif">IBM john f. davis utils</font>
<br><font size=2 face="sans-serif">**************************************</font>
<br><font size=2 face="sans-serif">ide_build_dmatable</font>
<br><font size=2 face="sans-serif">ide_build_sglist</font>
<br><font size=2 face="sans-serif">sg_table -> dma/prd table 16</font>
<br><font size=2 face="sans-serif">bcount = f000 </font>
<br><font size=2 face="sans-serif">table (cpu view) = b2009000 (bus view)
= fefd000</font>
<br><font size=2 face="sans-serif"> cpu
view addr [b2009000] = 10c00e</font>
<br><font size=2 face="sans-serif"> cpu
view data [b2009004] = 100000</font>
<br><font size=2 face="sans-serif"> bus
view addr [fefd000] = ec01000</font>
<br><font size=2 face="sans-serif"> bus
view data [fefd004] = 1000</font>
<br><font size=2 face="sans-serif">flush_dcache_range (aec01000, aec02000)</font>
<br><font size=2 face="sans-serif">sg_table -> dma/prd table 15</font>
<br><font size=2 face="sans-serif">bcount = 10000 </font>
<br><font size=2 face="sans-serif">table (cpu view) = b2009008 (bus view)
= fefd008</font>
<br><font size=2 face="sans-serif"> cpu
view addr [b2009008] = c00e</font>
<br><font size=2 face="sans-serif"> cpu
view data [b200900c] = 100000</font>
<br><font size=2 face="sans-serif"> bus
view addr [fefd008] = ec00000</font>
<br><font size=2 face="sans-serif"> bus
view data [fefd00c] = 1000</font>
<br><font size=2 face="sans-serif">flush_dcache_range (aec00000, aec01000)</font>
<br><font size=2 face="sans-serif">sg_table -> dma/prd table 14</font>
<br><font size=2 face="sans-serif">bcount = 1000 </font>
<br><font size=2 face="sans-serif">table (cpu view) = b2009010 (bus view)
= fefd010</font>
<br><font size=2 face="sans-serif"> cpu
view addr [b2009010] = f0bf0e</font>
<br><font size=2 face="sans-serif"> cpu
view data [b2009014] = 100000</font>
<br><font size=2 face="sans-serif"> bus
view addr [fefd010] = ebff000</font>
<br><font size=2 face="sans-serif"> bus
view data [fefd014] = 1000</font>
<br><font size=2 face="sans-serif">flush_dcache_range (aebff000, aec00000)</font>
<br><font size=2 face="sans-serif">...</font>
<br><font size=2 face="sans-serif">...</font>
<br>
<br>
<br>
<br>
<br><font size=2 face="sans-serif">Truncated portion of Logic Analyzer
Trace</font>
<br><font size=2 face="sans-serif">----------------------------------------------------</font>
<br>
<br><font size=2 face="sans-serif">Listing(Listing<1>) - 22 May 2003
(23:45)</font>
<br>
<br><font size=2 face="sans-serif">State Number ADDR
FUTUREPLUS SYSTEMS c 1996
</font>
<br><font size=2 face="sans-serif">Decimal
Hex PCI BUS TRANSACTIONS
REV 1.2 </font>
<br><font size=2 face="sans-serif">________________ ___________
____________________________________ </font>
<br>
<br><font size=2 face="sans-serif">...</font>
<br><font size=2 face="sans-serif">...
</font>
<br><font size=2 face="sans-serif">44
0000FFD4 I/O WRITE ADR=0000FFD4
</font>
<br><font size=2 face="sans-serif">45
0FEFD000 D32=0FEFD000
</font>
<br><font size=2 face="sans-serif">46
0FEFD000 IDLE
</font>
<br><font size=2 face="sans-serif">47
0000FFD4 IDLE
</font>
<br><font size=2 face="sans-serif">
</font>
<br><font size=2 face="sans-serif">...</font>
<br><font size=2 face="sans-serif">...</font>
<br><font size=2 face="sans-serif">...
</font>
<br><font size=2 face="sans-serif">71
0FEFD000 MEM READ ADR=0FEFD000
</font>
<br><font size=2 face="sans-serif">72
0BF9D000 STOP-NO
DATA XFERED-RETRY </font>
<br><font size=2 face="sans-serif">
</font>
<br><font size=2 face="sans-serif">73
0FEFD000 MEM READ ADR=0FEFD000
</font>
<br><font size=2 face="sans-serif">74
0EC01000 D32=0EC01000
</font>
<br><font size=2 face="sans-serif">75
00001000 D32=00001000
</font>
<br><font size=2 face="sans-serif">76
00001000 IDLE
</font>
<br><font size=2 face="sans-serif">77
00001000 IDLE
</font>
<br><font size=2 face="sans-serif">
</font>
<br><font size=2 face="sans-serif">78
000000A1 I/O WRITE ADR=000000A1
</font>
<br><font size=2 face="sans-serif">79
3F3F3F3F D32=xxxx3Fxx
STOP# </font>
<br><font size=2 face="sans-serif">80
3F3F3F3F IDLE
</font>
<br><font size=2 face="sans-serif">81
000000A1 IDLE
</font>
<br><font size=2 face="sans-serif">
</font>
<br><font size=2 face="sans-serif">82
00000021 I/O WRITE ADR=00000021
</font>
<br><font size=2 face="sans-serif">83
F9F9F9F9 D32=xxxxF9xx
STOP# </font>
<br><font size=2 face="sans-serif">84
F9F9F9F9 IDLE
</font>
<br><font size=2 face="sans-serif">85
00000021 IDLE
</font>
<br><font size=2 face="sans-serif">
</font>
<br><font size=2 face="sans-serif">86
0EC01000 MEM WRITE ADR=0EC01000
</font>
<br><font size=2 face="sans-serif">87
1000B8FA D32=1000B8FA
</font>
<br><font size=2 face="sans-serif">88
00BCD08E D32=00BCD08E
</font>
<br><font size=2 face="sans-serif">89
0000B8B0 D32=0000B8B0
</font>
<br><font size=2 face="sans-serif">90
C08ED88E D32=C08ED88E
</font>
<br><font size=2 face="sans-serif">91
7C00BEFB D32=7C00BEFB
</font>
<br><font size=2 face="sans-serif">92
B90600BF D32=B90600BF
</font>
<br>
<br>
<br><font size=2 face="sans-serif">Modified ide_build_dma_table routine</font>
<br><font size=2 face="sans-serif">----------------------------------------------------</font>
<br>
<br>
<br><font size=2 face="sans-serif">/* JFD NOTES</font>
<br><font size=2 face="sans-serif"> * This is called second after
the dma_read is started.</font>
<br><font size=2 face="sans-serif"> */ </font>
<br><font size=2 face="sans-serif">int ide_build_dmatable (ide_drive_t
*drive, struct request *rq, int ddir)</font>
<br><font size=2 face="sans-serif">{</font>
<br><font size=2 face="sans-serif"> ide_hwif_t
*hwif = HWIF(drive);</font>
<br><font size=2 face="sans-serif"> unsigned
int *table = hwif->dmatable_cpu;
/* JFD Blach table gets the non cached memory */</font>
<br><font size=2 face="sans-serif"> volatile
unsigned int *tableJFD;</font>
<br><font size=2 face="sans-serif"> unsigned
int is_trm290 = (hwif->chipset ==
ide_trm290) ? 1 : 0;</font>
<br><font size=2 face="sans-serif"> unsigned
int count = 0;</font>
<br><font size=2 face="sans-serif"> unsigned
int countJFD;</font>
<br><font size=2 face="sans-serif"> int
i,m;</font>
<br><font size=2 face="sans-serif"> struct
scatterlist *sg;</font>
<br><font size=2 face="sans-serif"> unsigned
int *prd_entry;</font>
<br><font size=2 face="sans-serif"> unsigned
int flush_start_addr;</font>
<br><font size=2 face="sans-serif"> unsigned
int flush_length;</font>
<br><font size=2 face="sans-serif"> </font>
<br>
<br><font size=2 face="sans-serif">// jd_print_it("ide_build_dmatable\n");</font>
<br>
<br><font size=2 face="sans-serif"> if
(rq->cmd == IDE_DRIVE_TASKFILE) {</font>
<br><font size=2 face="sans-serif">
printk("calling ide_raw_build_sglist\n");</font>
<br><font size=2 face="sans-serif">
hwif->sg_nents = i = ide_raw_build_sglist(hwif,
rq);</font>
<br><font size=2 face="sans-serif"> }
else {</font>
<br><font size=2 face="sans-serif">
/* JFD we call this routine each time */</font>
<br><font size=2 face="sans-serif">
// printk("calling ide_build_sglist\n");</font>
<br><font size=2 face="sans-serif">
hwif->sg_nents = i = ide_build_sglist(hwif,
rq, ddir);</font>
<br><font size=2 face="sans-serif"> }</font>
<br>
<br>
<br><font size=2 face="sans-serif"> if
(!i)</font>
<br><font size=2 face="sans-serif">
return 0;</font>
<br>
<br><font size=2 face="sans-serif"> sg
= hwif->sg_table;</font>
<br><font size=2 face="sans-serif"> while
(i && sg_dma_len(sg)) {</font>
<br><font size=2 face="sans-serif">
u32 cur_addr;</font>
<br><font size=2 face="sans-serif">
u32 cur_len;</font>
<br>
<br><font size=2 face="sans-serif">
cur_addr = sg_dma_address(sg); /* jfd
blach these are real addresses */</font>
<br><font size=2 face="sans-serif">
cur_len = sg_dma_len(sg);</font>
<br><font size=2 face="sans-serif">//
jd_print_it("sg_table -> dma/PRD
table %i\n", i);</font>
<br>
<br><font size=2 face="sans-serif">
/*</font>
<br><font size=2 face="sans-serif">
* Fill in the dma table, without crossing
any 64kB boundaries.</font>
<br><font size=2 face="sans-serif">
* Most hardware requires 16-bit alignment
of all blocks,</font>
<br><font size=2 face="sans-serif">
* but the trm290 requires 32-bit alignment.</font>
<br><font size=2 face="sans-serif">
*/</font>
<br>
<br><font size=2 face="sans-serif">
while (cur_len) {</font>
<br><font size=2 face="sans-serif">
tableJFD=table;</font>
<br><font size=2 face="sans-serif">
if (count++
>= PRD_ENTRIES) {</font>
<br><font size=2 face="sans-serif">
printk("%s: DMA table too small\n",
drive->name);</font>
<br><font size=2 face="sans-serif">
goto use_pio_instead;</font>
<br><font size=2 face="sans-serif">
} else
{</font>
<br><font size=2 face="sans-serif">
u32 xcount, bcount = 0x10000 - (cur_addr &
0xffff);</font>
<br>
<br><font size=2 face="sans-serif">
jd_print_it("bcount = %x \n",bcount);</font>
<br><font size=2 face="sans-serif">
if (bcount > cur_len)</font>
<br><font size=2 face="sans-serif">
bcount
= cur_len;</font>
<br>
<br><font size=2 face="sans-serif">
// JFD writes the address to the PRD table</font>
<br><font size=2 face="sans-serif">
*table++ = cpu_to_le32(cur_addr);</font>
<br><font size=2 face="sans-serif">
xcount = bcount & 0xffff;</font>
<br><font size=2 face="sans-serif">
countJFD=xcount;</font>
<br><font size=2 face="sans-serif">
if (is_trm290)</font>
<br><font size=2 face="sans-serif">
xcount
= ((xcount >> 2) - 1) << 16;</font>
<br><font size=2 face="sans-serif">
if (xcount == 0x0000) {</font>
<br><font size=2 face="sans-serif"> /*
</font>
<br><font size=2 face="sans-serif"> *
Most chipsets correctly interpret a length of 0x0000 as 64KB,</font>
<br><font size=2 face="sans-serif"> *
but at least one (e.g. CS5530) misinterprets it as zero (!).</font>
<br><font size=2 face="sans-serif"> *
So here we break the 64KB entry into two 32KB entries instead.</font>
<br><font size=2 face="sans-serif"> */</font>
<br><font size=2 face="sans-serif">
if (count++
>= PRD_ENTRIES) {</font>
<br><font size=2 face="sans-serif">
printk("%s: DMA table too small\n",
drive->name);</font>
<br><font size=2 face="sans-serif">
goto use_pio_instead;</font>
<br><font size=2 face="sans-serif">
}</font>
<br><font size=2 face="sans-serif">
</font>
<br><font size=2 face="sans-serif">
// JFD
Write the truncated length to the PRD table</font>
<br><font size=2 face="sans-serif">
*table++
= cpu_to_le32(0x8000);</font>
<br><font size=2 face="sans-serif">
// JFD
Write the address for the next truncated length to the PRD table</font>
<br><font size=2 face="sans-serif">
*table++
= cpu_to_le32(cur_addr + 0x8000);</font>
<br><font size=2 face="sans-serif">
xcount
= 0x8000;</font>
<br>
<br><font size=2 face="sans-serif">// cut out the logging for real test</font>
<br><font size=2 face="sans-serif">#if 0</font>
<br>
<br><font size=2 face="sans-serif">
jd_print_it("table-trunc
(cpu view) = %x (bus view) = %x\n",tableJFD, virt_to_bus(tableJFD));</font>
<br><font size=2 face="sans-serif">
jd_print_it("\tCPU
View ADDR [%x] = %x\n",tableJFD, *tableJFD);</font>
<br><font size=2 face="sans-serif">
jd_print_it("\tCPU
View DATA [%x] = %x\n",tableJFD+1, *(tableJFD+1));</font>
<br>
<br><font size=2 face="sans-serif">
jd_print_it("\tBUS
View ADDR [%x] = %x\n",virt_to_bus(tableJFD), le32_to_cpu(*tableJFD));</font>
<br><font size=2 face="sans-serif">
jd_print_it("\tBUS
View DATA [%x] = %x\n",virt_to_bus(tableJFD+1), le32_to_cpu(*(tableJFD+1)));</font>
<br>
<br><font size=2 face="sans-serif">#endif</font>
<br><font size=2 face="sans-serif">
flush_start_addr
= bus_to_virt((unsigned int *)le32_to_cpu(*tableJFD));</font>
<br><font size=2 face="sans-serif">
flush_length
= le32_to_cpu(*(tableJFD+1));</font>
<br>
<br><font size=2 face="sans-serif">//
jd_print_it("flush_dcache_range
(%x, %x)\n", flush_start_addr, flush_start_addr + flush_length);</font>
<br><font size=2 face="sans-serif">
flush_dcache_range
(flush_start_addr, flush_start_addr + flush_length );</font>
<br><font size=2 face="sans-serif">
</font>
<br><font size=2 face="sans-serif">
// have
to increment our pointer to the next PRD address loc as well.</font>
<br><font size=2 face="sans-serif">
tableJFD++;</font>
<br><font size=2 face="sans-serif">
tableJFD++;</font>
<br><font size=2 face="sans-serif">
}</font>
<br>
<br>
<br><font size=2 face="sans-serif">
// JFD Write the length (could be trucated
per above) to the PRD table</font>
<br><font size=2 face="sans-serif">
*table++ = cpu_to_le32(xcount);</font>
<br><font size=2 face="sans-serif">
cur_addr += bcount;</font>
<br><font size=2 face="sans-serif">
cur_len -= bcount;</font>
<br><font size=2 face="sans-serif">
}</font>
<br>
<br><font size=2 face="sans-serif">// cut out the logging for real test.</font>
<br><font size=2 face="sans-serif">#if 0</font>
<br><font size=2 face="sans-serif">
jd_print_it("table
(cpu view) = %x (bus view) = %x\n",tableJFD, virt_to_bus(tableJFD));</font>
<br><font size=2 face="sans-serif">
jd_print_it("\tCPU
View ADDR [%x] = %x\n",tableJFD, *tableJFD);</font>
<br><font size=2 face="sans-serif">
jd_print_it("\tCPU
View DATA [%x] = %x\n",tableJFD+1, *(tableJFD+1));</font>
<br>
<br><font size=2 face="sans-serif">
jd_print_it("\tBUS
View ADDR [%x] = %x\n",virt_to_bus(tableJFD), le32_to_cpu(*tableJFD));</font>
<br><font size=2 face="sans-serif">
jd_print_it("\tBUS
View DATA [%x] = %x\n",virt_to_bus(tableJFD+1), le32_to_cpu(*(tableJFD+1)));</font>
<br>
<br><font size=2 face="sans-serif">#endif</font>
<br><font size=2 face="sans-serif">
flush_start_addr
= bus_to_virt((unsigned int *)le32_to_cpu(*tableJFD));</font>
<br><font size=2 face="sans-serif">
flush_length
= le32_to_cpu(*(tableJFD+1));</font>
<br>
<br><font size=2 face="sans-serif">//
jd_print_it("flush_dcache_range
(%x, %x)\n", flush_start_addr, flush_start_addr + flush_length);</font>
<br><font size=2 face="sans-serif">
flush_dcache_range
(flush_start_addr, flush_start_addr + flush_length );</font>
<br>
<br>
<br><font size=2 face="sans-serif"> </font>
<br><font size=2 face="sans-serif">#if 0</font>
<br><font size=2 face="sans-serif">
// Lets
try to read that address into a variable to see if it "flushes that
cache entry"</font>
<br><font size=2 face="sans-serif">
for (m=0;
m< 0x1000;m++) {</font>
<br><font size=2 face="sans-serif">
ulFoo = *(unsigned int*) bus_to_virt(le32_to_cpu(*tableJFD++));</font>
<br><font size=2 face="sans-serif">
}</font>
<br><font size=2 face="sans-serif">#endif</font>
<br>
<br><font size=2 face="sans-serif">
}</font>
<br>
<br>
<br>
<br>
<br><font size=2 face="sans-serif">
sg++;</font>
<br><font size=2 face="sans-serif">
i--;</font>
<br><font size=2 face="sans-serif"> }</font>
<br>
<br><font size=2 face="sans-serif"> if
(count) {</font>
<br><font size=2 face="sans-serif">
if (!is_trm290)</font>
<br><font size=2 face="sans-serif">
*--table
|= cpu_to_le32(0x80000000);</font>
<br><font size=2 face="sans-serif">
return count;</font>
<br><font size=2 face="sans-serif"> }</font>
<br><font size=2 face="sans-serif"> printk("%s:
empty DMA table?\n", drive->name);</font>
<br><font size=2 face="sans-serif">use_pio_instead:</font>
<br><font size=2 face="sans-serif"> pci_unmap_sg(hwif->pci_dev,</font>
<br><font size=2 face="sans-serif">
hwif->sg_table,</font>
<br><font size=2 face="sans-serif">
hwif->sg_nents,</font>
<br><font size=2 face="sans-serif">
hwif->sg_dma_direction);</font>
<br><font size=2 face="sans-serif"> hwif->sg_dma_active
= 0;</font>
<br><font size=2 face="sans-serif"> return
0; /* revert to PIO for this request */</font>
<br><font size=2 face="sans-serif">}</font>
<br>
<br>
<br>
<br>
<br><font size=2 face="sans-serif">Ksymoops dump</font>
<br><font size=2 face="sans-serif">----------------------------------------------------</font>
<br>
<br><font size=2 face="sans-serif">003AF9C A002F770 A002EC18 A003B14C A003B288
A003B5E8 A003C1E4 </font>
<br><font size=2 face="sans-serif">AA003AF9C A002F770 A002EC18 A003B14C
A003B288 A003B5E8 A003C1E4 </font>
<br><font size=2 face="sans-serif">007CA8C A0027690 A0028044 A0028518 A0028A5C
A003840C A000279C </font>
<br><font size=2 face="sans-serif">0A007CA8C A0027690 A0028044 A0028518
A0028A5C A003840C A000279C </font>
<br><font size=2 face="sans-serif">FECCB68 0F833B80 0F59D02C 0F59D298 0F59C830
0FF5B278 0FEC7914 </font>
<br><font size=2 face="sans-serif">00FECCB68 0F833B80 0F59D02C 0F59D298
0F59C830 0FF5B278 0FEC7914 </font>
<br><font size=2 face="sans-serif">FC0B408
</font>
<br><font size=2 face="sans-serif">0FC0B408
</font>
<br><font size=2 face="sans-serif">Warning (Oops_read): Code line not seen,
dumping what data is available</font>
<br>
<br>
<br><font size=2 face="sans-serif">>>NIP; a002fc68 <kmem_find_general_cachep+da4/2bb4>
<=====</font>
<br>
<br><font size=2 face="sans-serif">>>GPR1; ac803cf0 <_end+c55ffc8/125f6420></font>
<br><font size=2 face="sans-serif">>>GPR2; ac802000 <_end+c55e2d8/125f6420></font>
<br><font size=2 face="sans-serif">>>GPR3; a02eb1c8 <_end+474a0/125f6420></font>
<br><font size=2 face="sans-serif">>>GPR4; ac0b4000 <_end+be102d8/125f6420></font>
<br><font size=2 face="sans-serif">>>GPR9; ac12c020 <_end+be882f8/125f6420></font>
<br><font size=2 face="sans-serif">>>GPR11; a02eb1d0 <_end+474a8/125f6420></font>
<br><font size=2 face="sans-serif">>>GPR18; a00288ec <do_generic_file_read+74c/814></font>
<br><font size=2 face="sans-serif">>>GPR19; ad3fc834 <_end+d158b0c/125f6420></font>
<br><font size=2 face="sans-serif">>>GPR20; ac803ed8 <_end+c5601b0/125f6420></font>
<br><font size=2 face="sans-serif">>>GPR21; a007c768 <journal_blocks_per_page+4390/8868></font>
<br><font size=2 face="sans-serif">>>GPR25; a04ff860 <_end+25bb38/125f6420></font>
<br><font size=2 face="sans-serif">>>GPR29; a02eb1c8 <_end+474a0/125f6420></font>
<br><font size=2 face="sans-serif">>>GPR30; ac0b4f60 <_end+be11238/125f6420></font>
<br><font size=2 face="sans-serif">>>GPR31; a02eb1c8 <_end+474a0/125f6420></font>
<br>
<br><font size=2 face="sans-serif">Trace; a003af9c <bread+10/138></font>
<br><font size=2 face="sans-serif">Trace; a002f770 <kmem_find_general_cachep+8ac/2bb4></font>
<br><font size=2 face="sans-serif">Trace; a002ec18 <kmem_cache_alloc+10/20></font>
<br><font size=2 face="sans-serif">Trace; a003b14c <get_unused_buffer_head+68/c8></font>
<br><font size=2 face="sans-serif">Trace; a003b288 <set_bh_page+dc/350></font>
<br><font size=2 face="sans-serif">Trace; a003b5e8 <create_empty_buffers+24/960></font>
<br><font size=2 face="sans-serif">Trace; a003c1e4 <block_read_full_page+2c0/2ec></font>
<br><font size=2 face="sans-serif">Trace; a007ca8c <journal_blocks_per_page+46b4/8868></font>
<br><font size=2 face="sans-serif">Trace; a0027690 <filemap_fdatawait+424/4ec></font>
<br><font size=2 face="sans-serif">Trace; a0028044 <grab_cache_page_nowait+230/38c></font>
<br><font size=2 face="sans-serif">Trace; a0028518 <do_generic_file_read+378/814></font>
<br><font size=2 face="sans-serif">Trace; a0028a5c <generic_file_read+a8/9e4></font>
<br><font size=2 face="sans-serif">Trace; a003840c <default_llseek+340/e28></font>
<br><font size=2 face="sans-serif">Trace; a000279c <set_context+3b4/5e0></font>
<br><font size=2 face="sans-serif">Trace; 0feccb68 Before first symbol</font>
<br><font size=2 face="sans-serif">Trace; 0f833b80 Before first symbol</font>
<br><font size=2 face="sans-serif">Trace; 0f59d02c Before first symbol</font>
<br><font size=2 face="sans-serif">Trace; 0f59d298 Before first symbol</font>
<br><font size=2 face="sans-serif">Trace; 0f59c830 Before first symbol</font>
<br><font size=2 face="sans-serif">Trace; 0ff5b278 Before first symbol</font>
<br><font size=2 face="sans-serif">Trace; 0fec7914 Before first symbol</font>
<br><font size=2 face="sans-serif">Trace; 0fc0b408 Before first symbol</font>
<br>
<br>
<br><font size=2 face="sans-serif">5 warnings and 2 errors issued. Results
may not be reliable.</font>
<br>
<br>