Message ID | 1406043740-7166-1-git-send-email-deathsimple@vodafone.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tue, Jul 22, 2014 at 11:42 AM, Christian König <deathsimple@vodafone.de> wrote: > From: Christian König <christian.koenig@amd.com> > > That didn't worked correctly any more and opened up a security problem. > > Signed-off-by: Christian König <christian.koenig@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@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/dri-devel
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;