• Jerome Glisse's avatar
    drm/radeon: convert fence to uint64_t v4 · bb635567
    Jerome Glisse authored
    This convert fence to use uint64_t sequence number intention is
    to use the fact that uin64_t is big enough that we don't need to
    care about wrap around.
    
    Tested with and without writeback using 0xFFFFF000 as initial
    fence sequence and thus allowing to test the wrap around from
    32bits to 64bits.
    
    v2: Add comment about possible race btw CPU & GPU, add comment
        stressing that we need 2 dword aligned for R600_WB_EVENT_OFFSET
        Read fence sequenc in reverse order of GPU write them so we
        mitigate the race btw CPU and GPU.
    
    v3: Drop the need for ring to emit the 64bits fence, and just have
        each ring emit the lower 32bits of the fence sequence. We
        handle the wrap over 32bits in fence_process.
    
    v4: Just a small optimization: Don't reread the last_seq value
        if loop restarts, since we already know its value anyway.
        Also start at zero not one for seq value and use pre instead
        of post increment in emmit, otherwise wait_empty will deadlock.
    Signed-off-by: default avatarJerome Glisse <jglisse@redhat.com>
    Signed-off-by: default avatarChristian König <deathsimple@vodafone.de>
    Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
    bb635567
radeon_fence.c 15.6 KB