• E
    agp/intel: Fix the pre-9xx chipset flush. · e517a5e9
    Eric Anholt 提交于
    Ever since we enabled GEM, the pre-9xx chipsets (particularly 865) have had
    serious stability issues.  Back in May a wbinvd was added to the DRM to
    work around much of the problem.  Some failure remained -- easily visible
    by dragging a window around on an X -retro desktop, or by looking at bugzilla.
    
    The chipset flush was on the right track -- hitting the right amount of
    memory, and it appears to be the only way to flush on these chipsets, but the
    flush page was mapped uncached.  As a result, the writes trying to clear the
    writeback cache ended up bypassing the cache, and not flushing anything!  The
    wbinvd would flush out other writeback data and often cause the data we wanted
    to get flushed, but not always.  By removing the setting of the page to UC
    and instead just clflushing the data we write to try to flush it, we get the
    desired behavior with no wbinvd.
    
    This exports clflush_cache_range(), which was laying around and happened to
    basically match the code I was otherwise going to copy from the DRM.
    Signed-off-by: NEric Anholt <eric@anholt.net>
    Signed-off-by: NBrice Goglin <Brice.Goglin@ens-lyon.org>
    Cc: stable@kernel.org
    e517a5e9
intel-agp.c 73.0 KB