File nvidia-blacklist-register-mapping-195.diff of Package nvidia-gfx
diff -ur usr/src/nv/nv.c usr/src/nv/nv.c
--- usr/src/nv/nv.c 2012-04-05 14:45:07.000000000 -0500
+++ usr/src/nv/nv.c 2012-04-05 14:45:07.000000000 -0500
@@ -2548,6 +2548,12 @@
/* NV reg space */
if (IS_REG_OFFSET(nv, NV_VMA_OFFSET(vma), NV_VMA_SIZE(vma)))
{
+ if (IS_BLACKLISTED_REG_OFFSET(nv, NV_VMA_OFFSET(vma), NV_VMA_SIZE(vma)))
+ {
+ status = -EINVAL;
+ goto done;
+ }
+
if (nv_encode_caching(&vma->vm_page_prot,
NV_MEMORY_UNCACHED,
NV_MEMORY_TYPE_REGISTERS))
diff -ur kernel/nv.h kernel/nv.h
--- usr/src/nv/nv.h 2012-04-05 14:45:07.000000000 -0500
+++ usr/src/nv/nv.h 2012-04-05 14:45:07.000000000 -0500
@@ -430,6 +430,14 @@
((offset) >= (nv)->agp.address) && \
(((offset) + ((length)-1)) <= (nv)->agp.address + ((nv)->agp.size-1)))
+#define IS_REG_RANGE_WITHIN_MAPPING(nv, roffset, rlength, moffset, mlength) \
+ (((moffset) <= ((nv)->regs->address + ((roffset) + (rlength)-1))) &&\
+ (((moffset) + (mlength)-1) >= ((nv)->regs->address + (roffset))))
+
+#define IS_BLACKLISTED_REG_OFFSET(nv, offset, length) \
+ ((IS_REG_RANGE_WITHIN_MAPPING(nv, 0x1000, 0x1000, offset, length)) ||\
+ (IS_REG_RANGE_WITHIN_MAPPING(nv, 0x700000, 0x100000, offset, length)))
+
/* duplicated from nvos.h for external builds */
#ifndef NVOS_AGP_CONFIG_DISABLE_AGP
# define NVOS_AGP_CONFIG_DISABLE_AGP (0x00000000)