From 62df4f0a48776e55443d7f61a41e1ed0fb77b6ed Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Mon, 14 Jan 2008 19:36:10 +1000 Subject: fixup i915 compat resource allocation --- linux-core/i915_compat.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'linux-core/i915_compat.c') diff --git a/linux-core/i915_compat.c b/linux-core/i915_compat.c index 58fb8418..f77260b1 100644 --- a/linux-core/i915_compat.c +++ b/linux-core/i915_compat.c @@ -21,6 +21,7 @@ static struct _i9xx_private_compat { void __iomem *flush_page; + int resource_valid; struct resource ifp_resource; } i9xx_private; @@ -57,16 +58,17 @@ static void intel_i915_setup_chipset_flush(struct pci_dev *pdev) pci_read_config_dword(pdev, I915_IFPADDR, &temp); if (!(temp & 0x1)) { intel_alloc_chipset_flush_resource(pdev); - + i9xx_private.resource_valid = 1; pci_write_config_dword(pdev, I915_IFPADDR, (i9xx_private.ifp_resource.start & 0xffffffff) | 0x1); } else { temp &= ~1; + i9xx_private.resource_valid = 1; i9xx_private.ifp_resource.start = temp; i9xx_private.ifp_resource.end = temp + PAGE_SIZE; ret = request_resource(&iomem_resource, &i9xx_private.ifp_resource); if (ret) { - i9xx_private.ifp_resource.start = 0; + i9xx_private.resource_valid = 0; printk("Failed inserting resource into tree\n"); } } @@ -84,6 +86,7 @@ static void intel_i965_g33_setup_chipset_flush(struct pci_dev *pdev) intel_alloc_chipset_flush_resource(pdev); + i9xx_private.resource_valid = 1; pci_write_config_dword(pdev, I965_IFPADDR + 4, upper_32_bits(i9xx_private.ifp_resource.start)); pci_write_config_dword(pdev, I965_IFPADDR, (i9xx_private.ifp_resource.start & 0xffffffff) | 0x1); @@ -93,11 +96,12 @@ static void intel_i965_g33_setup_chipset_flush(struct pci_dev *pdev) temp_lo &= ~0x1; l64 = ((u64)temp_hi << 32) | temp_lo; + i9xx_private.resource_valid = 1; i9xx_private.ifp_resource.start = l64; i9xx_private.ifp_resource.end = l64 + PAGE_SIZE; ret = request_resource(&iomem_resource, &i9xx_private.ifp_resource); if (!ret) { - i9xx_private.ifp_resource.start = 0; + i9xx_private.resource_valid = 0; printk("Failed inserting resource into tree\n"); } } @@ -167,7 +171,9 @@ static void intel_i9xx_setup_flush(struct drm_device *dev) static void intel_i9xx_fini_flush(struct drm_device *dev) { iounmap(i9xx_private.flush_page); - release_resource(&i9xx_private.ifp_resource); + if (i9xx_private.resource_valid) + release_resource(&i9xx_private.ifp_resource); + i9xx_private.resource_valid = 0; } static void intel_i9xx_flush_page(struct drm_device *dev) -- cgit v1.2.3 From 099e89edf094ec231621b67129e9226ba50e99ad Mon Sep 17 00:00:00 2001 From: Thomas Hellstrom Date: Tue, 15 Jan 2008 09:46:59 +0100 Subject: Define i915_compat.c upper_32_bits for kernels < 2.6.21 --- linux-core/i915_compat.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'linux-core/i915_compat.c') diff --git a/linux-core/i915_compat.c b/linux-core/i915_compat.c index f77260b1..cc024085 100644 --- a/linux-core/i915_compat.c +++ b/linux-core/i915_compat.c @@ -19,6 +19,10 @@ #define I915_IFPADDR 0x60 #define I965_IFPADDR 0x70 +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,21) +#define upper_32_bits(_val) (((u64)(_val)) >> 32) +#endif + static struct _i9xx_private_compat { void __iomem *flush_page; int resource_valid; -- cgit v1.2.3 From c57f43e3a266d247c8a2be6fd7702caab2dc009b Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Wed, 23 Jan 2008 16:45:09 +1000 Subject: i915/flush: get the ret the right way around --- linux-core/i915_compat.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'linux-core/i915_compat.c') diff --git a/linux-core/i915_compat.c b/linux-core/i915_compat.c index cc024085..f3e0a081 100644 --- a/linux-core/i915_compat.c +++ b/linux-core/i915_compat.c @@ -104,7 +104,7 @@ static void intel_i965_g33_setup_chipset_flush(struct pci_dev *pdev) i9xx_private.ifp_resource.start = l64; i9xx_private.ifp_resource.end = l64 + PAGE_SIZE; ret = request_resource(&iomem_resource, &i9xx_private.ifp_resource); - if (!ret) { + if (ret) { i9xx_private.resource_valid = 0; printk("Failed inserting resource into tree\n"); } -- cgit v1.2.3