]> git.baikalelectronics.ru Git - kernel.git/commit
[POWERPC] spufs: fix save of mfc_cntl register
authorJeremy Kerr <jk@ozlabs.org>
Wed, 9 Apr 2008 05:24:22 +0000 (15:24 +1000)
committerJeremy Kerr <jk@ozlabs.org>
Mon, 5 May 2008 03:33:42 +0000 (13:33 +1000)
commit20da62d5aab6c2cd12193340ba3035798da805a0
tree86c27361d4d89853c387934879573ce7b658dae5
parent30cb854a18234ecee4c2b7cec8a85eecd3b56458
[POWERPC] spufs: fix save of mfc_cntl register

Currently, we can introduce invalid entries into the MFC queues:

1) context starts a DMA

2) context gets scheduled out during a DMA
  - kernel saves MFC queue to CSA
  - kernel saves 0x0 in csa->mfc_control_RW

3) context gets scheduled in
  - csa->mfc_control[Q] ('queues empty') isn't set, so DMA queues are
    restored from the CSA

4) context's DMA is completed

5) context gets scheduled out again, no DMA occuring this time
  - kernel sees that MFC_CNTL[Q] ('queues empty') is set, so doesn't
    touch saved queue data in CSA
  - kernel saves 0x0 in csa->mfc_control_RW

6) context gets scheduled in
  - csa->mfc_control[Q] ('queues empty') isn't set (we saved is as 0!),
    so DMA queues are restored from the CSA

In this last restore, we've restored the queue status from step 2,
which are now invalid.

This change makes save_mfc_cntl() closer to the save/restore sequence,
as specified in the CBE handbook.

With changes from Luke Browning.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
arch/powerpc/platforms/cell/spufs/switch.c