On Tue, Jul 22, 2014 at 11:42 AM, Christian K?nig <deathsimple at vodafone.de> wrote: > From: Christian K?nig <christian.koenig at amd.com> > > That didn't worked correctly any more and opened up a security problem. > > Signed-off-by: Christian K?nig <christian.koenig at amd.com>
Applied to my 3.17 tree. Alex > --- > drivers/gpu/drm/radeon/cik_sdma.c | 3 +-- > drivers/gpu/drm/radeon/radeon.h | 6 +++--- > drivers/gpu/drm/radeon/si_dma.c | 3 +-- > 3 files changed, 5 insertions(+), 7 deletions(-) > > diff --git a/drivers/gpu/drm/radeon/cik_sdma.c > b/drivers/gpu/drm/radeon/cik_sdma.c > index 8534068..28ca3cb 100644 > --- a/drivers/gpu/drm/radeon/cik_sdma.c > +++ b/drivers/gpu/drm/radeon/cik_sdma.c > @@ -775,8 +775,7 @@ void cik_sdma_vm_set_page(struct radeon_device *rdev, > > trace_radeon_vm_set_page(pe, addr, count, incr, flags); > > - /* XXX: How to distinguish between GART and other system memory > pages? */ > - if (flags & R600_PTE_SYSTEM) { > + if ((flags & R600_PTE_GART_MASK) == R600_PTE_GART_MASK) { > uint64_t src = rdev->gart.table_addr + (addr >> 12) * 8; > while (count) { > unsigned bytes = count * 8; > diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h > index 89b63b9..fd878c7 100644 > --- a/drivers/gpu/drm/radeon/radeon.h > +++ b/drivers/gpu/drm/radeon/radeon.h > @@ -864,9 +864,9 @@ struct radeon_mec { > #define R600_PTE_FRAG_64KB (4 << 7) > #define R600_PTE_FRAG_256KB (6 << 7) > > -/* flags used for GART page table entries on R600+ */ > -#define R600_PTE_GART ( R600_PTE_VALID | R600_PTE_SYSTEM | R600_PTE_SNOOPED > \ > - | R600_PTE_READABLE | R600_PTE_WRITEABLE) > +/* flags needed to be set so we can copy directly from the GART table */ > +#define R600_PTE_GART_MASK ( R600_PTE_READABLE | R600_PTE_WRITEABLE | \ > + R600_PTE_SYSTEM | R600_PTE_VALID ) > > struct radeon_vm_pt { > struct radeon_bo *bo; > diff --git a/drivers/gpu/drm/radeon/si_dma.c b/drivers/gpu/drm/radeon/si_dma.c > index c9da341..a26e842 100644 > --- a/drivers/gpu/drm/radeon/si_dma.c > +++ b/drivers/gpu/drm/radeon/si_dma.c > @@ -79,8 +79,7 @@ void si_dma_vm_set_page(struct radeon_device *rdev, > > trace_radeon_vm_set_page(pe, addr, count, incr, flags); > > - /* XXX: How to distinguish between GART and other system memory > pages? */ > - if (flags & R600_PTE_SYSTEM) { > + if ((flags & R600_PTE_GART_MASK) == R600_PTE_GART_MASK) { > uint64_t src = rdev->gart.table_addr + (addr >> 12) * 8; > while (count) { > unsigned bytes = count * 8; > -- > 1.9.1 > > _______________________________________________ > dri-devel mailing list > dri-devel at lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/dri-devel