[Cbe-oss-dev] Context switching while page fault handling and warning

HyeonSeung Jang hs8848.jang at samsung.com
Tue Jun 20 13:36:31 EST 2006


After I do some stress tests with my previous fix applied, I found some
data transferred by DMA are invalid when there are context-switches
during page faults.  (I mean switches between TH and BH).

I tried to analyze the reason:

- DMA PUT (8K)
- fault generated after being partially transferred.
- top-half executed
- save context
- restore context
- DMA resumed, fault for the same EA generated again
- bottom-half executed, page table filled, DMA restarted. 
- resumed 'DMA PUT' tries to transfer data from *wrong* local store
  address and the final size of data is different from the one
  requested.


So I just concluded that some necessary contexts for DMA, like LSA and
SIZE, are lost between context-switches and that's the reason of such
strange behavior(it looks like a serious bug because it corrupts LS
memory )

I attached the simulator log with several debug control options on.
I hope it can be some help for you, expert's debugging. :)

Regards,
Hyeoseung Jang.




spe side test code :
-------------------------------------------------

static void int spu_put_data(void* ls, void* dest, int size)
{
    mfc_put(ls,(unsigned int)dest, size, 31, 0, 0);
    mfc_write_tag_mask(1 <<31);
    mfc_read_tag_status_all();
}
main()
{
    ...

    for(i = 0; i < 8192; ++i) data[i] = i % 255;
    spu_put_data(data, cb->data, 8192);

    ...

    for(i = 0; i < 8192; ++i) data[i] = (i+1) % 255;
    spu_put_data(data, cb->data, 8192);

    ...
}





LOG OUTPUT:
-------------------------------------------------

...
...

DMA PUT(size = 8K, LSA=0x3BF50) STARTED

DEBUG: 63780694320: FUNC_MFC : SPE0: PC:0x000005E0 : SPU Write Channel
16 with value 0x0003BF50
DEBUG: 63780694322: FUNC_MFC : SPE0: PC:0x000005E8 : SPU Write Channel
17 with value 0x00000000
DEBUG: 63780694324: FUNC_MFC : SPE0: PC:0x000005F0 : SPU Write Channel
18 with value 0x01818080
DEBUG: 63780694326: FUNC_MFC : SPE0: PC:0x000005F8 : SPU Write Channel
19 with value 0x00002000
DEBUG: 63780694328: FUNC_MFC : SPE0: PC:0x00000600 : SPU Write Channel
20 with value 0x0000001F
DEBUG: 63780694330: FUNC_DMA : SPE0: DMA PUT enqueued on SPU queue:
EA=0x0000000001818080 LSA=0x0003BF50 size=0x2000 bytes, tag=31
DEBUG: 63780694330: FUNC_DMA : SPE0: Waking up DMAQ job
DEBUG: 63780694330: FUNC_MFC : SPE0: SPU writing 0x20 to
CH_MFC_CMD_QUEUE
DEBUG: 63780694330: FUNC_MFC : SPE0: PC:0x00000608 : SPU Write Channel
21 with value 0x00000020
DEBUG: 63780694330: FUNC_DMA : SPE0: DMAQ is running
DEBUG: 63780694330: FUNC_DMA : SPE0: DMAQ Entry 0x8000000F (PUT)
selected for issue
DEBUG: 63780694330: FUNC_DMA : SPE0: PUT started, EA=0x0000000001818080
LSA=0x0003BF50 size=0x2000 bytes
DEBUG: 63780694330: MFC_XLATE : SPE0: MFC_AddressTranslateLoadStore:
EA:0x0000000001818000
Previous Message Repeated 1 times
DEBUG: 63780694330: MFC_XLATE : SPE0: MFC_PageTabFindMapping:
EA:0x0000000001818000 vsid_unshifted:0x0000B986C02FD000
SDR:0x0000000007C00003
DEBUG: 63780694330: MFC_XLATE : SPE0: MFC_Page_Table: Searching Primary
Hash
DEBUG: 63780694330: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007CD7280) VSID:0x0000B986C02FD181 and
VSID:0x0000B986C02FD181
DEBUG: 63780694330: MFC_XLATE : SPE0: MFC_Page_Table: Found Match (PTE-
ADDR:0x0000000007CD7280) VSID:0x0000B986C02FD181 and
VSID:0x0000B986C02FD181
DEBUG: 63780694330: MFC_XLATE : SPE0: MFC_AddressTranslateLoadStore:
EA:0x0000000001818000, PA:0x0000000007AA6000 WIMG:0x02 Coherent-Memory
DEBUG: 63780694332: FUNC_DMA : SPE0: CH_MFC_WR_TAGMASK: setting tag
mask to 0x80000000
DEBUG: 63780694332: FUNC_MFC : SPE0: PC:0x00000610 : SPU Write Channel
22 with value 0x80000000
DEBUG: 63780694334: FUNC_DMA : SPE0: dma_get_spu_tag_group_status =
0x7FFFFFFF
DEBUG: 63780694334: FUNC_MFC : SPE0: MFC_WriteChannel: Write to channel
23 count 0 value 0x0
DEBUG: 63780694335: FUNC_MFC : SPE0: SPU stalled on CH_MFC_RD_TAG_STATUS
DEBUG: 63780694335: FUNC_MFC : SPE0: Set W bit
DEBUG: 63780694335: FUNC_MFC : SPE0: Set SPU state = 0x00000009
DEBUG: 63780694338: FUNC_DMA : SPE0: DMAQ Entry 0x8000000F (PUT)
selected for issue
DEBUG: 63780694338: FUNC_DMA_TRANSFER : SPE0: Performing DMA PUT of 48
bytes to EA: 0x0000000001818080 PA: 0x0000000007AA6080 from LS:
0x0003BF50
DEBUG: 63780694346: FUNC_DMA : SPE0: DMAQ Entry 0x8000000F (PUT)
selected for issue
DEBUG: 63780694346: FUNC_DMA_TRANSFER : SPE0: Performing DMA PUT of 80
bytes to EA: 0x00000000018180B0 PA: 0x0000000007AA60B0 from LS:
0x0003BF80
DEBUG: 63780694354: FUNC_DMA : SPE0: DMAQ Entry 0x8000000F (PUT)
selected for issue
DEBUG: 63780694354: FUNC_DMA_TRANSFER : SPE0: Performing DMA PUT of 48
bytes to EA: 0x0000000001818100 PA: 0x0000000007AA6100 from LS:
0x0003BFD0
DEBUG: 63780694362: FUNC_DMA : SPE0: DMAQ Entry 0x8000000F (PUT)
selected for issue
DEBUG: 63780694362: FUNC_DMA_TRANSFER : SPE0: Performing DMA PUT of 80
bytes to EA: 0x0000000001818130 PA: 0x0000000007AA6130 from LS:
0x0003C000
DEBUG: 63780694370: FUNC_DMA : SPE0: DMAQ Entry 0x8000000F (PUT)
selected for issue
...
DEBUG: 63780694818: FUNC_DMA : SPE0: DMAQ Entry 0x8000000F (PUT)
selected for issue
DEBUG: 63780694818: FUNC_DMA_TRANSFER : SPE0: Performing DMA PUT of 48
bytes to EA: 0x0000000001818F80 PA: 0x0000000007AA6F80 from LS:
0x0003CE50
DEBUG: 63780694826: FUNC_DMA : SPE0: DMAQ Entry 0x8000000F (PUT)
selected for issue
DEBUG: 63780694826: FUNC_DMA_TRANSFER : SPE0: Performing DMA PUT of 80
bytes to EA: 0x0000000001818FB0 PA: 0x0000000007AA6FB0 from LS:
0x0003CE80
DEBUG: 63780694834: FUNC_DMA : SPE0: DMAQ Entry 0x8000000F (PUT)
selected for issue
DEBUG: 63780694834: MFC_XLATE : SPE0: MFC_AddressTranslateLoadStore:
EA:0x0000000001819000
Previous Message Repeated 1 times
DEBUG: 63780694834: MFC_XLATE : SPE0: MFC_PageTabFindMapping:
EA:0x0000000001819000 vsid_unshifted:0x0000B986C02FD000
SDR:0x0000000007C00003
DEBUG: 63780694834: MFC_XLATE : SPE0: MFC_Page_Table: Searching Primary
Hash
DEBUG: 63780694834: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007CD7200) VSID:0x0000F09B89AF5001 and
VSID:0x0000B986C02FD181
DEBUG: 63780694834: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007CD7210) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD181
DEBUG: 63780694834: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007CD7220) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD181
DEBUG: 63780694834: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007CD7230) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD181
DEBUG: 63780694834: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007CD7240) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD181
DEBUG: 63780694834: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007CD7250) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD181
DEBUG: 63780694834: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007CD7260) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD181
DEBUG: 63780694834: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007CD7270) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD181
DEBUG: 63780694834: MFC_XLATE : SPE0: MFC_Page_Table: Searching
Secondary Hash
DEBUG: 63780694834: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007D28D80) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD183
DEBUG: 63780694834: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007D28D90) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD183
DEBUG: 63780694834: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007D28DA0) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD183
DEBUG: 63780694834: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007D28DB0) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD183
DEBUG: 63780694834: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007D28DC0) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD183
DEBUG: 63780694834: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007D28DD0) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD183
DEBUG: 63780694834: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007D28DE0) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD183
DEBUG: 63780694834: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007D28DF0) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD183
DEBUG: 63780694834: MFC_XLATE : SPE0: MFC_Page_Table: Search Failed
DEBUG: 63780694834: MFC_XLATE_FAULTS : SPE0: Page fault for
EA=0x0000000001819000
DEBUG: 63780694834: FUNC_MFC : SPE0:
Func_MFC_ScheduleDataStoragePageFaultInterrupt queue=15
EA=0x0000000001819000
DEBUG: 63780694834: FUNC_DMA : SPE0: DMA Queue suspended for XLATE fault
DEBUG: 63780694838: FUNC_DMA : SPE0: DMAQ Processing suspended
DEBUG: 63780694838: FUNC_DMA : SPE0: DMAQ job is going to sleep

 
PAGE FAULT INTERRUPT OCCURS IN THE MIDDLE OF DMA PUT
(bottom half is not executed)

UNBIND CONTEXT


DEBUG: 64906062156: FUNC_MFC : SPE0: MFC_WriteRunControl value=0
DEBUG: 64906062156: FUNC_MFC : SPE0: SPU_LeaveRunMode
DEBUG: 64906062156: FUNC_MFC : SPE0: Set SPU state = 0x00000008
DEBUG: 64906062156: FUNC_MFC : SPE0: Func_MFC_HaltStateChange
halt_status=8
DEBUG: 64906095323: FUNC_DMA : SPE0: NOT starting DMAQ Processing
because DMAQ suspended for XLATE
DEBUG: 64906095323: FUNC_MFC : SPE0: Decrementer Stopped
DEBUG: 64906098365: FUNC_DMA : SPE0: NOT starting DMAQ Processing
because DMAQ suspended for XLATE
DEBUG: 64906098365: FUNC_DMA : SPE0: DMA Queue resumed from XLATE fault
DEBUG: 64906098365: FUNC_DMA : SPE0: Waking up DMAQ job
Previous Message Repeated 1 times
DEBUG: 64906098365: FUNC_DMA : SPE0: DMAQ is empty
DEBUG: 64906098365: FUNC_DMA : SPE0: DMAQ job is going to sleep
DEBUG: 64906099133: FUNC_MFC : SPE0: MFC_ReadChannel: Read from channel
28 count 1 value 0x0
DEBUG: 64906099158: FUNC_MFC : SPE0: MFC_ReadChannel: Read from channel
30 count 1 value 0x0
DEBUG: 64906099878: FUNC_MFC : SPE0:
Func_MFC_ScheduleMailboxEmptyInterrupt
DEBUG: 64906099878: FUNC_MFC : SPE0: Setting PU->SPU mailbox empty
interrupt but it is masked off

WARNING: 64906099903: SPE0: MFC_CMD_QUEUE channel count of 15 is
inconsistent with number of available DMA queue entries of 16

DEBUG: 64906100146: FUNC_DMA : SPE0: Waking up DMAQ job
DEBUG: 64906100146: FUNC_DMA : SPE0: DMAQ job is going to sleep
DEBUG: 64906100712: FUNC_DMA : SPE0: DMA PUT enqueued on PU queue:
EA=0xD000000000001000 LSA=0x00000000 size=0x4000 bytes, tag=0
DEBUG: 64906100712: FUNC_DMA : SPE0: Waking up DMAQ job
DEBUG: 64906100712: FUNC_DMA : SPE0: DMAQ is running
DEBUG: 64906100712: FUNC_DMA : SPE0: DMAQ Entry 0x7 (PUT) selected for
issue
DEBUG: 64906100712: FUNC_DMA : SPE0: PUT started, EA=0xD000000000001000
LSA=0x00000000 size=0x4000 bytes
DEBUG: 64906100712: MFC_XLATE : SPE0: MFC_AddressTranslateLoadStore:
EA:0xD000000000001000
DEBUG: 64906100712: MFC_XLATE : SPE0: MFC_AddressTranslateLoadStore:
EA:0xD000000000001000, PA:0x0000000007AAB000 WIMG:0x02 Coherent-Memory
DEBUG: 64906100712: FUNC_DMA_TRANSFER : SPE0: Performing DMA PUT of 128
bytes to EA: 0xD000000000001000 PA: 0x0000000007AAB000 from LS:
0x00000000
DEBUG: 64906100720: FUNC_DMA : SPE0: DMAQ Entry 0x7 (PUT) selected for
issue
DEBUG: 64906100720: FUNC_DMA_TRANSFER : SPE0: Performing DMA PUT of 128
bytes to EA: 0xD000000000001080 PA: 0x0000000007AAB080 from LS:
0x00000080
DEBUG: 64906100728: FUNC_DMA : SPE0: DMAQ Entry 0x7 (PUT) selected for
issue
...

NORMAL UNBINDING STUFF HERE

...
DEBUG: 66243681120: FUNC_DMA : SPE0: DMAQ Entry 0x8000000D (GETL)
selected for issue
DEBUG: 66243681120: FUNC_DMA_TRANSFER : SPE0: Performing DMA GET of 128
bytes from EA: 0xD000000000040F00 PA: 0x0000000007B0AF00 to LS:
0x0003FF00
DEBUG: 66243681128: FUNC_DMA : SPE0: DMAQ Entry 0x8000000D (GETL)
selected for issue
DEBUG: 66243681128: FUNC_DMA_TRANSFER : SPE0: Performing DMA GET of 128
bytes from EA: 0xD000000000040F80 PA: 0x0000000007B0AF80 to LS:
0x0003FF80
DEBUG: 66243681128: FUNC_DMA : SPE0: GETL done, List=0x00000E00
LSA=0x00004000 entries=15
DEBUG: 66243681132: FUNC_MFC : SPE0: MFC_WriteChannel: Write to channel
21 count 15 value 0x0
DEBUG: 66243681132: FUNC_DMA : SPE0: dma_get_spu_tag_group_status =
0xFFFFFFFF
DEBUG: 66243681132: FUNC_DMA : SPE0: ***CH_MFC_TAG_UPDATE request=1
status=0x1 tag_mask = 0x1
DEBUG: 66243681132: FUNC_MFC : SPE0: MFC_WriteChannel: Write to channel
24 count 0 value 0x1
DEBUG: 66243681132: FUNC_MFC : SPE0: MFC_WriteChannel (TAG_STATUS)
value = 0x00000001
DEBUG: 66243681132: FUNC_MFC : SPE0: Clear W bit
DEBUG: 66243681132: FUNC_MFC : SPE0: Set SPU state = 0x00000001
DEBUG: 66243681133: FUNC_MFC : SPE0: PC:0x00000200 : SPU Read Channel
24 and got 0x00000001
DEBUG: 66243681134: FUNC_MFC : SPE0: PUT COND status returning 1
DEBUG: 66243681134: FUNC_MFC : SPE0: PC:0x00000204 : SPU Read Channel
27 and got 0x00000001
DEBUG: 66243681136: FUNC_DMA : SPE0: DMAQ is empty
DEBUG: 66243681136: FUNC_DMA : SPE0: DMAQ job is going to sleep
DEBUG: 66243681136: FUNC_MFC : SPE0: PC:0x0000020C : SPU Write Channel
28 with value 0x00000000
DEBUG: 66243681138: FUNC_MFC : SPE0: Func_MFC_ScheduleMailboxInterrupt
DEBUG: 66243681138: FUNC_MFC : SPE0: Setting mailbox int but it is
masked off
DEBUG: 66243681138: FUNC_MFC : SPE0: PC:0x00000214 : SPU Write Channel
30 with value 0x00000000
DEBUG: 66243681142: FUNC_MFC : SPE0: PC:0x00000224 : SPU Write Channel
14 with value 0x00000000
DEBUG: 66243681144: FUNC_MFC : SPE0: PC:0x0000022C : SPU Write Channel
1 with value 0x00000000
DEBUG: 66243681146: FUNC_DMA : SPE0: CH_MFC_WR_TAGMASK: setting tag
mask to 0x80000000
DEBUG: 66243681146: FUNC_MFC : SPE0: PC:0x00000234 : SPU Write Channel
22 with value 0x80000000
DEBUG: 66243681546: FUNC_MFC : SPE0: Func_MFC_HaltStateChange
halt_status=2
DEBUG: 66243681546: FUNC_MFC : SPE0: Set SPU state = 0x00000000


BIND AGAIN

DEBUG: 66243681744: FUNC_MFC : SPE0: MFC_WriteRunControl value=1
DEBUG: 66243681744: FUNC_MFC : SPE0: writing spu_run_control, value=
0x00000001
DEBUG: 66243681744: FUNC_MFC : SPE0: SPU_EnterRunMode
DEBUG: 66243681744: FUNC_MFC : SPE0: Set SPU state = 0x00000000
DEBUG: 66243681744: FUNC_MFC : SPE0: Set SPU state = 0x00000001
DEBUG: 66243681744: FUNC_MFC : SPE0: Func_MFC_HaltStateChange
halt_status=0
DEBUG: 66243681787: FUNC_MFC : SPE0: MFC_WriteRunControl value=0
DEBUG: 66243681787: FUNC_MFC : SPE0: SPU_LeaveRunMode
DEBUG: 66243681787: FUNC_MFC : SPE0: Set SPU state = 0x00000000
DEBUG: 66243681787: FUNC_MFC : SPE0: Func_MFC_HaltStateChange
halt_status=8
DEBUG: 66243681909: FUNC_DMA : SPE0: DMA GET enqueued on PU queue:
EA=0xD000000000001000 LSA=0x00000000 size=0x4000 bytes, tag=0
DEBUG: 66243681909: FUNC_DMA : SPE0: Waking up DMAQ job
DEBUG: 66243681909: FUNC_DMA : SPE0: DMAQ is running
DEBUG: 66243681909: FUNC_DMA : SPE0: DMAQ Entry 0x6 (GET) selected for
issue
...

NORMAL BIND STUFF HERE

...
DEBUG: 66243682917: FUNC_DMA_TRANSFER : SPE0: Performing DMA GET of 128
bytes from EA: 0xD000000000004F00 PA: 0x0000000007AAEF00 to LS:
0x00003F00
DEBUG: 66243682925: FUNC_DMA : SPE0: DMAQ Entry 0x6 (GET) selected for
issue
DEBUG: 66243682925: FUNC_DMA_TRANSFER : SPE0: Performing DMA GET of 128
bytes from EA: 0xD000000000004F80 PA: 0x0000000007AAEF80 to LS:
0x00003F80
DEBUG: 66243682925: FUNC_DMA : SPE0: GET done, EA=0xD000000000001000
LSA=0x00000000 size=0x4000 bytes
DEBUG: 66243682933: FUNC_DMA : SPE0: DMAQ is empty
DEBUG: 66243682933: FUNC_DMA : SPE0: DMAQ job is going to sleep
DEBUG: 66243682958: FUNC_DMA : SPE0: dma_get_pu_tag_group_status =
0xFFFFFFFF
Previous Message Repeated 1 times
DEBUG: 66243683045: FUNC_DMA : SPE0: DMA Queue suspended by MMIO write
to MFC_CNTL register
DEBUG: 66243683045: FUNC_MFC : SPE0: Decrementer Stopped
DEBUG: 66243685221: FUNC_DMA : SPE0: NOT starting DMAQ Processing
because DMAQ suspended for COMMAND
DEBUG: 66243685282: FUNC_DMA : SPE0: dma_get_spu_tag_group_status =
0x7FFFFFFF
DEBUG: 66243685282: FUNC_MFC : SPE0: MFC_WriteChannel: Write to channel
23 count 0 value 0x0
DEBUG: 66243686015: FUNC_MFC : SPE0:
Func_MFC_ScheduleMailboxEmptyInterrupt
DEBUG: 66243686015: FUNC_MFC : SPE0: Setting PU->SPU mailbox empty
interrupt but it is masked off
DEBUG: 66243686133: FUNC_MFC : SPE0: MFC_ReadChannel: Read from channel
28 count 0 value 0x0
DEBUG: 66243686160: FUNC_MFC : SPE0: MFC_ReadChannel: Read from channel
30 count 0 value 0x0


TRIGGER DMA RESUMED(my fix)

DEBUG: 66243686652: FUNC_DMA : SPE0: DMA Queue suspended by MMIO write
to MFC_CNTL register
DEBUG: 66243686668: FUNC_DMA : SPE0: DMA Queue resumed by MMIO write to
MFC_CNTL register
DEBUG: 66243686668: FUNC_DMA : SPE0: Waking up DMAQ job
DEBUG: 66243686668: MFC_XLATE_FAULTS : SPE0: Restart from xlate fault
DEBUG: 66243686668: FUNC_DMA : SPE0: Waking up DMAQ job
DEBUG: 66243686668: FUNC_DMA : SPE0: DMAQ is running
DEBUG: 66243686668: FUNC_DMA : SPE0: DMAQ Entry 0x8000000F (PUT)
selected for issue
DEBUG: 66243686668: MFC_XLATE : SPE0: MFC_AddressTranslateLoadStore:
EA:0x0000000001819000
Previous Message Repeated 1 times
DEBUG: 66243686668: MFC_XLATE : SPE0: MFC_PageTabFindMapping:
EA:0x0000000001819000 vsid_unshifted:0x0000B986C02FD000
SDR:0x0000000007C00003
DEBUG: 66243686668: MFC_XLATE : SPE0: MFC_Page_Table: Searching Primary
Hash
DEBUG: 66243686668: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007CD7200) VSID:0x0000F09B89AF5001 and
VSID:0x0000B986C02FD181
DEBUG: 66243686668: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007CD7210) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD181
DEBUG: 66243686668: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007CD7220) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD181
DEBUG: 66243686668: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007CD7230) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD181
DEBUG: 66243686668: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007CD7240) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD181
DEBUG: 66243686668: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007CD7250) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD181
DEBUG: 66243686668: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007CD7260) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD181
DEBUG: 66243686668: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007CD7270) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD181
DEBUG: 66243686668: MFC_XLATE : SPE0: MFC_Page_Table: Searching
Secondary Hash
DEBUG: 66243686668: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007D28D80) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD183
DEBUG: 66243686668: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007D28D90) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD183
DEBUG: 66243686668: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007D28DA0) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD183
DEBUG: 66243686668: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007D28DB0) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD183
DEBUG: 66243686668: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007D28DC0) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD183
DEBUG: 66243686668: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007D28DD0) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD183
DEBUG: 66243686668: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007D28DE0) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD183
DEBUG: 66243686668: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007D28DF0) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD183
DEBUG: 66243686668: MFC_XLATE : SPE0: MFC_Page_Table: Search Failed
DEBUG: 66243686668: MFC_XLATE_FAULTS : SPE0: Page fault for
EA=0x0000000001819000
DEBUG: 66243686668: FUNC_MFC : SPE0:
Func_MFC_ScheduleDataStoragePageFaultInterrupt queue=15
EA=0x0000000001819000
DEBUG: 66243686668: FUNC_DMA : SPE0: DMA Queue suspended for XLATE fault
DEBUG: 66243686668: FUNC_MFC : SPE0: Setting page fault but it is
masked off
DEBUG: 66243686672: FUNC_DMA : SPE0: DMAQ Processing suspended
DEBUG: 66243686672: FUNC_DMA : SPE0: DMAQ job is going to sleep
DEBUG: 66243860865: FUNC_MFC : SPE0: MFC_WriteRunControl value=1
DEBUG: 66243860865: FUNC_MFC : SPE0: writing spu_run_control, value=
0x00000001
DEBUG: 66243860865: FUNC_MFC : SPE0: SPU_EnterRunMode
DEBUG: 66243860865: FUNC_MFC : SPE0: Set SPU state = 0x00000001
DEBUG: 66243860865: FUNC_MFC : SPE0: Func_MFC_HaltStateChange
halt_status=0
DEBUG: 66243860867: FUNC_MFC : SPE0: SPU stalled on CH_MFC_RD_TAG_STATUS
DEBUG: 66243860867: FUNC_MFC : SPE0: Set W bit
DEBUG: 66243860867: FUNC_MFC : SPE0: Set SPU state = 0x00000009
DEBUG: 66243998259: FUNC_DMA : SPE0: NOT starting DMAQ Processing
because DMAQ suspended for XLATE
DEBUG: 66243998259: MFC_XLATE_FAULTS : SPE0: Restart from xlate fault
DEBUG: 66243998259: FUNC_DMA : SPE0: DMA Queue resumed from XLATE fault
DEBUG: 66243998259: FUNC_DMA : SPE0: Waking up DMAQ job
DEBUG: 66243998259: FUNC_DMA : SPE0: DMAQ is running
DEBUG: 66243998259: FUNC_DMA : SPE0: DMAQ Entry 0x8000000F (PUT)
selected for issue
DEBUG: 66243998259: MFC_XLATE : SPE0: MFC_AddressTranslateLoadStore:
EA:0x0000000001819000
Previous Message Repeated 1 times
DEBUG: 66243998259: MFC_XLATE : SPE0: MFC_PageTabFindMapping:
EA:0x0000000001819000 vsid_unshifted:0x0000B986C02FD000
SDR:0x0000000007C00003
DEBUG: 66243998259: MFC_XLATE : SPE0: MFC_Page_Table: Searching Primary
Hash
DEBUG: 66243998259: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007CD7200) VSID:0x0000F09B89AF5001 and
VSID:0x0000B986C02FD181
DEBUG: 66243998259: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007CD7210) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD181
DEBUG: 66243998259: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007CD7220) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD181
DEBUG: 66243998259: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007CD7230) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD181
DEBUG: 66243998259: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007CD7240) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD181
DEBUG: 66243998259: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007CD7250) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD181
DEBUG: 66243998259: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007CD7260) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD181
DEBUG: 66243998259: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007CD7270) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD181
DEBUG: 66243998259: MFC_XLATE : SPE0: MFC_Page_Table: Searching
Secondary Hash
DEBUG: 66243998259: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007D28D80) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD183
DEBUG: 66243998259: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007D28D90) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD183
DEBUG: 66243998259: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007D28DA0) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD183
DEBUG: 66243998259: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007D28DB0) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD183
DEBUG: 66243998259: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007D28DC0) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD183
DEBUG: 66243998259: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007D28DD0) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD183
DEBUG: 66243998259: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007D28DE0) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD183
DEBUG: 66243998259: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007D28DF0) VSID:0x0000000000000000 and
VSID:0x0000B986C02FD183
DEBUG: 66243998259: MFC_XLATE : SPE0: MFC_Page_Table: Search Failed
DEBUG: 66243998259: MFC_XLATE_FAULTS : SPE0: Page fault for
EA=0x0000000001819000
DEBUG: 66243998259: FUNC_MFC : SPE0:
Func_MFC_ScheduleDataStoragePageFaultInterrupt queue=15
EA=0x0000000001819000
DEBUG: 66243998259: FUNC_DMA : SPE0: DMA Queue suspended for XLATE fault
DEBUG: 66243998263: FUNC_DMA : SPE0: DMAQ Processing suspended
DEBUG: 66243998263: FUNC_DMA : SPE0: DMAQ job is going to sleep


BOTTOM HALF EXECUTED AND DMA RESUMED AGAIN


DEBUG: 66244206622: FUNC_DMA : SPE0: NOT starting DMAQ Processing
because DMAQ suspended for XLATE
DEBUG: 66244206622: MFC_XLATE_FAULTS : SPE0: Restart from xlate fault
DEBUG: 66244206622: FUNC_DMA : SPE0: DMA Queue resumed from XLATE fault
DEBUG: 66244206622: FUNC_DMA : SPE0: Waking up DMAQ job
DEBUG: 66244206622: FUNC_DMA : SPE0: DMAQ is running
DEBUG: 66244206622: FUNC_DMA : SPE0: DMAQ Entry 0x8000000F (PUT)
selected for issue
DEBUG: 66244206622: MFC_XLATE : SPE0: MFC_AddressTranslateLoadStore:
EA:0x0000000001819000
Previous Message Repeated 1 times
DEBUG: 66244206622: MFC_XLATE : SPE0: MFC_PageTabFindMapping:
EA:0x0000000001819000 vsid_unshifted:0x0000B986C02FD000
SDR:0x0000000007C00003
DEBUG: 66244206622: MFC_XLATE : SPE0: MFC_Page_Table: Searching Primary
Hash
DEBUG: 66244206622: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007CD7200) VSID:0x0000F09B89AF5001 and
VSID:0x0000B986C02FD181
DEBUG: 66244206622: MFC_XLATE : SPE0: MFC_Page_Table: Comparing (PTE-
ADDR:0x0000000007CD7210) VSID:0x0000B986C02FD181 and
VSID:0x0000B986C02FD181
DEBUG: 66244206622: MFC_XLATE : SPE0: MFC_Page_Table: Found Match (PTE-
ADDR:0x0000000007CD7210) VSID:0x0000B986C02FD181 and
VSID:0x0000B986C02FD181
DEBUG: 66244206622: MFC_XLATE : SPE0: MFC_AddressTranslateLoadStore:
EA:0x0000000001819000, PA:0x0000000007989000 WIMG:0x02 Coherent-Memory
DEBUG: 66244206630: FUNC_DMA : SPE0: DMAQ Entry 0x8000000F (PUT)
selected for issue


!!! NOW TARGET LS ADDRESS BECOMES WRONG( it must starts from 0x3CED0)
!!! 

DEBUG: 66244206630: FUNC_DMA_TRANSFER : SPE0: Performing DMA PUT of 48
bytes to EA: 0x0000000001819000 PA: 0x0000000007989000 from LS:
0x00000ED0
DEBUG: 66244206638: FUNC_DMA : SPE0: DMAQ Entry 0x8000000F (PUT)
selected for issue
DEBUG: 66244206638: FUNC_DMA_TRANSFER : SPE0: Performing DMA PUT of 80
bytes to EA: 0x0000000001819030 PA: 0x0000000007989030 from LS:
0x00000F00
DEBUG: 66244206646: FUNC_DMA : SPE0: DMAQ Entry 0x8000000F (PUT)
selected for issue
...
DEBUG: 66244207126: FUNC_DMA_TRANSFER : SPE0: Performing DMA PUT of 48
bytes to EA: 0x0000000001819F80 PA: 0x0000000007989F80 from LS:
0x00001E50
DEBUG: 66244207134: FUNC_DMA : SPE0: DMAQ Entry 0x8000000F (PUT)
selected for issue
DEBUG: 66244207134: FUNC_DMA_TRANSFER : SPE0: Performing DMA PUT of 80
bytes to EA: 0x0000000001819FB0 PA: 0x0000000007989FB0 from LS:
0x00001E80
DEBUG: 66244207142: FUNC_DMA : SPE0: DMAQ Entry 0x8000000F (PUT)
selected for issue
DEBUG: 66244207142: MFC_XLATE : SPE0: MFC_AddressTranslateLoadStore:
EA:0x000000000181A000
DEBUG: 66244207142: MFC_XLATE : SPE0: MFC_AddressTranslateLoadStore:
EA:0x000000000181A000, PA:0x0000000007AA7000 WIMG:0x02 Coherent-Memory
DEBUG: 66244207142: FUNC_DMA_TRANSFER : SPE0: Performing DMA PUT of 48
bytes to EA: 0x000000000181A000 PA: 0x0000000007AA7000 from LS:
0x00001ED0
DEBUG: 66244207150: FUNC_DMA : SPE0: DMAQ Entry 0x8000000F (PUT)
selected for issue
DEBUG: 66244207150: FUNC_DMA_TRANSFER : SPE0: Performing DMA PUT of 80
bytes to EA: 0x000000000181A030 PA: 0x0000000007AA7030 from LS:
0x00001F00


!!! TOTAL SIZE SENT IS ALSO STRANGE(it should be 0x2000 bytes)


DEBUG: 66244207150: FUNC_DMA : SPE0: PUT done, EA=0x0000000001819000
LSA=0x00000ED0 size=0x1080 bytes
DEBUG: 66244207154: FUNC_MFC : SPE0: MFC_WriteChannel: Write to channel
21 count 15 value 0x0
DEBUG: 66244207154: FUNC_DMA : SPE0: dma_get_spu_tag_group_status =
0xFFFFFFFF
DEBUG: 66244207154: FUNC_DMA : SPE0: ***CH_MFC_TAG_UPDATE request=1
status=0x80000000 tag_mask = 0x80000000
DEBUG: 66244207154: FUNC_MFC : SPE0: MFC_WriteChannel: Write to channel
24 count 0 value 0x80000000
DEBUG: 66244207154: FUNC_MFC : SPE0: MFC_WriteChannel (TAG_STATUS)
value = 0x80000000
DEBUG: 66244207154: FUNC_MFC : SPE0: Clear W bit
DEBUG: 66244207154: FUNC_MFC : SPE0: Set SPU state = 0x00000001
DEBUG: 66244207155: FUNC_MFC : SPE0: PC:0x0000061C : SPU Read Channel
24 and got 0x80000000
DEBUG: 66244207158: FUNC_DMA : SPE0: DMAQ is empty
DEBUG: 66244207158: FUNC_DMA : SPE0: DMAQ job is going to sleep


TRY DMA PUT AGAIN(SAME SIZE, LSA)
(this time there is no page fault and it works)

DEBUG: 66245094609: FUNC_MFC : SPE0: PC:0x000005E0 : SPU Write Channel
16 with value 0x0003BF50
DEBUG: 66245094611: FUNC_MFC : SPE0: PC:0x000005E8 : SPU Write Channel
17 with value 0x00000000
DEBUG: 66245094613: FUNC_MFC : SPE0: PC:0x000005F0 : SPU Write Channel
18 with value 0x01818080
DEBUG: 66245094615: FUNC_MFC : SPE0: PC:0x000005F8 : SPU Write Channel
19 with value 0x00002000
DEBUG: 66245094617: FUNC_MFC : SPE0: PC:0x00000600 : SPU Write Channel
20 with value 0x0000001F
DEBUG: 66245094619: FUNC_DMA : SPE0: DMA PUT enqueued on SPU queue:
EA=0x0000000001818080 LSA=0x0003BF50 size=0x2000 bytes, tag=31
DEBUG: 66245094619: FUNC_DMA : SPE0: Waking up DMAQ job
DEBUG: 66245094619: FUNC_MFC : SPE0: SPU writing 0x20 to
CH_MFC_CMD_QUEUE
DEBUG: 66245094619: FUNC_MFC : SPE0: PC:0x00000608 : SPU Write Channel
21 with value 0x00000020
DEBUG: 66245094619: FUNC_DMA : SPE0: DMAQ is running
DEBUG: 66245094619: FUNC_DMA : SPE0: DMAQ Entry 0x8000000F (PUT)
selected for issue

DEBUG: 66245094619: FUNC_DMA : SPE0: PUT started, EA=0x0000000001818080
LSA=0x0003BF50 size=0x2000 bytes
DEBUG: 66245094619: MFC_XLATE : SPE0: MFC_AddressTranslateLoadStore:
EA:0x0000000001818000
DEBUG: 66245094619: MFC_XLATE : SPE0: MFC_AddressTranslateLoadStore:
EA:0x0000000001818000, PA:0x0000000007AA6000 WIMG:0x02 Coherent-Memory
DEBUG: 66245094619: FUNC_DMA_TRANSFER : SPE0: Performing DMA PUT of 48
bytes to EA: 0x0000000001818080 PA: 0x0000000007AA6080 from LS:
0x0003BF50
DEBUG: 66245094621: FUNC_DMA : SPE0: CH_MFC_WR_TAGMASK: setting tag
mask to 0x80000000
DEBUG: 66245094621: FUNC_MFC : SPE0: PC:0x00000610 : SPU Write Channel
22 with value 0x80000000
DEBUG: 66245094623: FUNC_DMA : SPE0: dma_get_spu_tag_group_status =
0x7FFFFFFF
DEBUG: 66245094623: FUNC_MFC : SPE0: MFC_WriteChannel: Write to channel
23 count 0 value 0x0
DEBUG: 66245094624: FUNC_MFC : SPE0: SPU stalled on CH_MFC_RD_TAG_STATUS
DEBUG: 66245094624: FUNC_MFC : SPE0: Set W bit
DEBUG: 66245094624: FUNC_MFC : SPE0: Set SPU state = 0x00000009
DEBUG: 66245094627: FUNC_DMA : SPE0: DMAQ Entry 0x8000000F (PUT)
selected for issue
DEBUG: 66245094627: FUNC_DMA_TRANSFER : SPE0: Performing DMA PUT of 80
bytes to EA: 0x00000000018180B0 PA: 0x0000000007AA60B0 from LS:
0x0003BF80
DEBUG: 66245094635: FUNC_DMA : SPE0: DMAQ Entry 0x8000000F (PUT)
selected for issue
DEBUG: 66245094635: FUNC_DMA_TRANSFER : SPE0: Performing DMA PUT of 48
bytes to EA: 0x0000000001818100 PA: 0x0000000007AA6100 from LS:
0x0003BFD0
DEBUG: 66245094643: FUNC_DMA : SPE0: DMAQ Entry 0x8000000F (PUT)
selected for issue
...
DEBUG: 66245095099: FUNC_DMA_TRANSFER : SPE0: Performing DMA PUT of 48
bytes to EA: 0x0000000001818F80 PA: 0x0000000007AA6F80 from LS:
0x0003CE50
DEBUG: 66245095107: FUNC_DMA : SPE0: DMAQ Entry 0x8000000F (PUT)
selected for issue
DEBUG: 66245095107: FUNC_DMA_TRANSFER : SPE0: Performing DMA PUT of 80
bytes to EA: 0x0000000001818FB0 PA: 0x0000000007AA6FB0 from LS:
0x0003CE80
DEBUG: 66245095115: FUNC_DMA : SPE0: DMAQ Entry 0x8000000F (PUT)
selected for issue
DEBUG: 66245095115: MFC_XLATE : SPE0: MFC_AddressTranslateLoadStore:
EA:0x0000000001819000
DEBUG: 66245095115: MFC_XLATE : SPE0: MFC_AddressTranslateLoadStore:
EA:0x0000000001819000, PA:0x0000000007989000 WIMG:0x02 Coherent-Memory
DEBUG: 66245095115: FUNC_DMA_TRANSFER : SPE0: Performing DMA PUT of 48
bytes to EA: 0x0000000001819000 PA: 0x0000000007989000 from LS:
0x0003CED0
DEBUG: 66245095123: FUNC_DMA : SPE0: DMAQ Entry 0x8000000F (PUT)
selected for issue
DEBUG: 66245095123: FUNC_DMA_TRANSFER : SPE0: Performing DMA PUT of 80
bytes to EA: 0x0000000001819030 PA: 0x0000000007989030 from LS:
0x0003CF00
DEBUG: 66245095131: FUNC_DMA : SPE0: DMAQ Entry 0x8000000F (PUT)
selected for issue
...
DEBUG: 66245095603: FUNC_DMA_TRANSFER : SPE0: Performing DMA PUT of 80
bytes to EA: 0x0000000001819F30 PA: 0x0000000007989F30 from LS:
0x0003DE00
DEBUG: 66245095611: FUNC_DMA : SPE0: DMAQ Entry 0x8000000F (PUT)
selected for issue
DEBUG: 66245095611: FUNC_DMA_TRANSFER : SPE0: Performing DMA PUT of 48
bytes to EA: 0x0000000001819F80 PA: 0x0000000007989F80 from LS:
0x0003DE50
DEBUG: 66245095619: FUNC_DMA : SPE0: DMAQ Entry 0x8000000F (PUT)
selected for issue
DEBUG: 66245095619: FUNC_DMA_TRANSFER : SPE0: Performing DMA PUT of 80
bytes to EA: 0x0000000001819FB0 PA: 0x0000000007989FB0 from LS:
0x0003DE80
DEBUG: 66245095627: FUNC_DMA : SPE0: DMAQ Entry 0x8000000F (PUT)
selected for issue
DEBUG: 66245095627: MFC_XLATE : SPE0: MFC_AddressTranslateLoadStore:
EA:0x000000000181A000
DEBUG: 66245095627: MFC_XLATE : SPE0: MFC_AddressTranslateLoadStore:
EA:0x000000000181A000, PA:0x0000000007AA7000 WIMG:0x02 Coherent-Memory
DEBUG: 66245095627: FUNC_DMA_TRANSFER : SPE0: Performing DMA PUT of 48
bytes to EA: 0x000000000181A000 PA: 0x0000000007AA7000 from LS:
0x0003DED0
DEBUG: 66245095635: FUNC_DMA : SPE0: DMAQ Entry 0x8000000F (PUT)
selected for issue
DEBUG: 66245095635: FUNC_DMA_TRANSFER : SPE0: Performing DMA PUT of 80
bytes to EA: 0x000000000181A030 PA: 0x0000000007AA7030 from LS:
0x0003DF00
DEBUG: 66245095635: FUNC_DMA : SPE0: PUT done, EA=0x0000000001818080
LSA=0x0003BF50 size=0x2000 bytes
DEBUG: 66245095639: FUNC_MFC : SPE0: MFC_WriteChannel: Write to channel
21 count 15 value 0x0
DEBUG: 66245095639: FUNC_DMA : SPE0: dma_get_spu_tag_group_status =
0xFFFFFFFF
DEBUG: 66245095639: FUNC_DMA : SPE0: ***CH_MFC_TAG_UPDATE request=2
status=0x80000000 tag_mask = 0x80000000
DEBUG: 66245095639: FUNC_MFC : SPE0: MFC_WriteChannel: Write to channel
24 count 0 value 0x80000000
DEBUG: 66245095639: FUNC_MFC : SPE0: MFC_WriteChannel (TAG_STATUS)
value = 0x80000000
DEBUG: 66245095639: FUNC_MFC : SPE0: Clear W bit
DEBUG: 66245095639: FUNC_MFC : SPE0: Set SPU state = 0x00000001
DEBUG: 66245095640: FUNC_MFC : SPE0: PC:0x0000061C : SPU Read Channel
24 and got 0x80000000
DEBUG: 66245095643: FUNC_DMA : SPE0: DMAQ is empty
DEBUG: 66245095643: FUNC_DMA : SPE0: DMAQ job is going to sleep



-----Original Message-----
From: Arnd Bergmann [mailto:arnd.bergmann at de.ibm.com] 
Sent: Saturday, June 17, 2006 4:39 AM
To: cbe-oss-dev at ozlabs.org
Cc: HyeonSeung Jang; "[NGHome_systemSW]"@samsung.com
Subject: Re: [Cbe-oss-dev] Context switching while page fault handling
and warning

On Wednesday 14 June 2006 02:30, HyeonSeung Jang wrote:

>  
> static inline void restore_mfc_cntl(struct spu_state *csa, struct spu
> *spu)
> {
>              struct spu_priv2 __iomem *priv2 = spu->priv2;
>  
>              /* Restore, Step 72:
>               *    Restore the MFC_CNTL register for the CSA.
>               */
>              out_be64(&priv2->mfc_control_RW, csa-
> >priv2.mfc_control_RW);
>              eieio();
> }
>  
> After:
>  
> static inline void restore_mfc_cntl(struct spu_state *csa, struct spu
> *spu)
> {
>              struct spu_priv2 __iomem *priv2 = spu->priv2;
>  
>              /* Restore, Step 72:
>               *    Restore the MFC_CNTL register for the CSA.
>               */
>              out_be64(&priv2->mfc_control_RW, csa-
> >priv2.mfc_control_RW);
>              eieio();
>              if( (csa->priv2.mfc_control_RW &
> MFC_CNTL_SUSPEND_DMA_QUEUE_MASK)) {
>                            out_be64(&priv2->mfc_control_RW,
> MFC_CNTL_RESTART_DMA_COMMAND);
>                            eieio();
>              }
> }
>  
> It seems to work.
>  
>  
>  
> Now I have two questions :
>  
> 1) My fix is correct ? or are there any side effects of it ?

The fix looks technically correct, but I don't think its optimal.
Instead we should better have the context save/restore code
remember whether the context was about to handle a fault
and then process that later.

I'm adding your fix to the next release for now, but mark it
as something we need to work on again later.

> 2) Why there is following warning on mambo simulator? :
>    'WARNING: 61392752237: SPE2: MFC_CMD_QUEUE channel count of 15 is
> inconsistent with number of available DMA queue entries of 16'
>  
That's an unrelated but known problem we still need to debug.

	Arnd <><





More information about the cbe-oss-dev mailing list