mirror of https://github.com/RPCS3/rpcs3.git
SPU: Fix not acuiring reservation locks on DMA with more than one cache line (Accurate DMA)
This commit is contained in:
parent
baf96b3eb6
commit
c7a185d4e7
|
@ -1348,7 +1348,7 @@ void spu_thread::do_dma_transfer(const spu_mfc_cmd& args)
|
||||||
if ((!g_use_rtm && !is_get) || g_cfg.core.spu_accurate_dma) [[unlikely]]
|
if ((!g_use_rtm && !is_get) || g_cfg.core.spu_accurate_dma) [[unlikely]]
|
||||||
{
|
{
|
||||||
for (u32 size = args.size, size0; is_get;
|
for (u32 size = args.size, size0; is_get;
|
||||||
size -= size0, dst += size0, src += size0)
|
size -= size0, dst += size0, src += size0, eal += size0)
|
||||||
{
|
{
|
||||||
size0 = std::min<u32>(128 - (eal & 127), std::min<u32>(size, 128));
|
size0 = std::min<u32>(128 - (eal & 127), std::min<u32>(size, 128));
|
||||||
|
|
||||||
|
@ -1470,8 +1470,7 @@ void spu_thread::do_dma_transfer(const spu_mfc_cmd& args)
|
||||||
{
|
{
|
||||||
if (g_cfg.core.spu_accurate_dma)
|
if (g_cfg.core.spu_accurate_dma)
|
||||||
{
|
{
|
||||||
for (u32 size0;;
|
for (u32 size0;; size -= size0, dst += size0, src += size0, eal += size0)
|
||||||
size -= size0, dst += size0, src += size0)
|
|
||||||
{
|
{
|
||||||
size0 = std::min<u32>(128 - (eal & 127), std::min<u32>(size, 128));
|
size0 = std::min<u32>(128 - (eal & 127), std::min<u32>(size, 128));
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue