[arch-commits] Commit in nvidia-96xx/trunk (3 files)

Thomas Baechler thomas at archlinux.org
Mon Jul 21 20:41:39 UTC 2008


    Date: Monday, July 21, 2008 @ 16:41:39
  Author: thomas
Revision: 5964

upgpkg: nvidia-96xx 96.43.07-4

Modified:
  nvidia-96xx/trunk/PKGBUILD
  nvidia-96xx/trunk/nvidia-96xx.install
Deleted:
  nvidia-96xx/trunk/NVIDIA_kernel-96.43.05-2290218.diff.txt

-----------------------------------------+
 NVIDIA_kernel-96.43.05-2290218.diff.txt |  619 ------------------------------
 PKGBUILD                                |   16 
 nvidia-96xx.install                     |    4 
 3 files changed, 8 insertions(+), 631 deletions(-)

Deleted: NVIDIA_kernel-96.43.05-2290218.diff.txt
===================================================================
--- NVIDIA_kernel-96.43.05-2290218.diff.txt	2008-07-21 20:39:25 UTC (rev 5963)
+++ NVIDIA_kernel-96.43.05-2290218.diff.txt	2008-07-21 20:41:39 UTC (rev 5964)
@@ -1,619 +0,0 @@
-diff -ru usr/src/nv/Makefile.kbuild usr/src/nv.2290218/Makefile.kbuild
---- usr/src/nv/Makefile.kbuild	2008-01-22 20:12:23.000000000 -0800
-+++ usr/src/nv.2290218/Makefile.kbuild	2008-03-18 13:15:30.394522179 -0700
-@@ -177,6 +177,7 @@
- 	vmap \
- 	signal_struct \
- 	agp_backend_acquire \
-+	set_pages_uc \
- 	change_page_attr \
- 	pci_get_class \
- 	sysctl_max_map_count \
-diff -ru usr/src/nv/conftest.sh usr/src/nv.2290218/conftest.sh
---- usr/src/nv/conftest.sh	2008-01-22 20:12:23.000000000 -0800
-+++ usr/src/nv.2290218/conftest.sh	2008-03-18 13:15:32.710654166 -0700
-@@ -100,6 +100,32 @@
-             fi
-         ;;
- 
-+        set_pages_uc)
-+            #
-+            # Determine if the set_pages_uc() function is present.
-+            #
-+            echo "#include <linux/autoconf.h>
-+            #include <asm/cacheflush.h>
-+            void conftest_set_pages_uc(void) {
-+                set_pages_uc();
-+            }" > conftest$$.c
-+
-+            $CC $CFLAGS -c conftest$$.c > /dev/null 2>&1
-+            rm -f conftest$$.c
-+
-+            if [ -f conftest$$.o ]; then
-+                rm -f conftest$$.o
-+                echo "#undef NV_SET_PAGES_UC_PRESENT" >> conftest.h
-+                return
-+            else
-+                echo "#ifdef NV_CHANGE_PAGE_ATTR_PRESENT" >> conftest.h
-+                echo "#undef NV_CHANGE_PAGE_ATTR_PRESENT" >> conftest.h
-+                echo "#endif"                             >> conftest.h
-+                echo "#define NV_SET_PAGES_UC_PRESENT"    >> conftest.h
-+                return
-+            fi
-+        ;;
-+
-         change_page_attr)
-             #
-             # Determine if the change_page_attr() function is
-@@ -124,7 +150,9 @@
-                 rm -f conftest$$.o
-                 return
-             else
-+                echo "#ifndef NV_SET_PAGES_UC_PRESENT"     >> conftest.h
-                 echo "#define NV_CHANGE_PAGE_ATTR_PRESENT" >> conftest.h
-+                echo "#endif"                              >> conftest.h
-                 return
-             fi
-         ;;
-@@ -501,6 +529,8 @@
-                 return
-             fi
- 
-+            rm -f conftest$$.o
-+
-             echo "#include <linux/autoconf.h>
-             #include <linux/interrupt.h>
-             irq_handler_t conftest_isr;
-diff -ru usr/src/nv/nv-linux.h usr/src/nv.2290218/nv-linux.h
---- usr/src/nv/nv-linux.h	2008-01-22 20:12:23.000000000 -0800
-+++ usr/src/nv.2290218/nv-linux.h	2008-03-18 13:15:26.674310174 -0700
-@@ -808,9 +808,10 @@
- 
- #define NV_PGD_OFFSET(address, kernel, mm)              \
-    ({                                                   \
-+        struct mm_struct *__mm = (mm);                  \
-         pgd_t *__pgd;                                   \
-         if (!kernel)                                    \
--            __pgd = pgd_offset(mm, address);            \
-+            __pgd = pgd_offset(__mm, address);          \
-         else                                            \
-             __pgd = pgd_offset_k(address);              \
-         __pgd;                                          \
-@@ -1097,21 +1098,24 @@
- #define NV_ATOMIC_DEC_AND_TEST(data)    atomic_dec_and_test(&(data))
- #define NV_ATOMIC_READ(data)            atomic_read(&(data))
- 
-+extern int nv_update_memory_types;
-+
- /*
-- * a BUG() is triggered on early 2.6 x86_64 kernels. the underlying
-- * problem actually exists on many architectures and kernels, but
-- * these are the only kernels that check the condition and trigger
-- * a BUG(). note that this is a problem of the core kernel, not an
-- * nvidia bug (and can still be triggered by agpgart). let's avoid
-- * change_page_attr on those kernels.
-+ * Using change_page_attr() on early Linux/x86-64 2.6 kernels may
-+ * result in a BUG() being triggered. The underlying problem
-+ * actually exists on multiple architectures and kernels, but only
-+ * the above check for the condition and trigger a BUG().
-+ *
-+ * Note that this is a due to a bug in the Linux kernel, not an
-+ * NVIDIA driver bug (it can also be triggered by AGPGART).
-+ *
-+ * We therefore need to determine at runtime if change_page_attr()
-+ * can be used safely on these kernels.
-  */
--#if defined(NV_CHANGE_PAGE_ATTR_PRESENT)
--extern int nv_use_cpa;
--
--#if defined(NVCPU_X86_64) && !defined(KERNEL_2_4) && \
--         (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 11))
--#define NV_CHANGE_PAGE_ATTR_BUG_PRESENT 1
--#endif
-+#if defined(NV_CHANGE_PAGE_ATTR_PRESENT) && defined(NVCPU_X86_64) && \
-+  !defined(KERNEL_2_4) && \
-+  (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 11))
-+#define NV_CHANGE_PAGE_ATTR_BUG_PRESENT
- #endif
- 
- #if defined(NVCPU_X86) || defined(NVCPU_X86_64)
-@@ -1123,7 +1127,7 @@
-  *
-  * We need to be careful to mask out _PAGE_NX when the host system
-  * doesn't support this feature or when it's disabled: the kernel
-- * may not do this in its implementation of the  change_page_attr()
-+ * may not do this in its implementation of the change_page_attr()
-  * interface.
-  */
- #ifndef X86_FEATURE_NX
-diff -ru usr/src/nv/nv-vm.c usr/src/nv.2290218/nv-vm.c
---- usr/src/nv/nv-vm.c	2008-01-22 20:12:23.000000000 -0800
-+++ usr/src/nv.2290218/nv-vm.c	2008-03-18 13:15:34.806773619 -0700
-@@ -43,42 +43,40 @@
- }
- #endif
- 
--/*
-- * AMD Athlon processors expose a subtle bug in the Linux
-- * kernel, that may lead to AGP memory corruption. Recent
-- * kernel versions had a workaround for this problem, but
-- * 2.4.20 is the first kernel to address it properly. The
-- * page_attr API provides the means to solve the problem. 
-- */
--
- static inline void nv_set_page_attrib_uncached(nv_pte_t *page_ptr)
- {
--#if defined(NV_CHANGE_PAGE_ATTR_PRESENT)
--    if (nv_use_cpa)
-+    if (nv_update_memory_types)
-     {
--        struct page *page = virt_to_page(__va(page_ptr->phys_addr));
-+#if defined(NV_SET_PAGES_UC_PRESENT)
-+        struct page *page = NV_GET_PAGE_STRUCT(page_ptr->phys_addr);
-+        set_pages_uc(page, 1);
-+#elif defined(NV_CHANGE_PAGE_ATTR_PRESENT)
-+        struct page *page = NV_GET_PAGE_STRUCT(page_ptr->phys_addr);
-         pgprot_t prot = PAGE_KERNEL_NOCACHE;
- #if defined(NVCPU_X86) || defined(NVCPU_X86_64)
-         pgprot_val(prot) &= __nv_supported_pte_mask;
- #endif
-         change_page_attr(page, 1, prot);
--    }
- #endif
-+    }
- }
- 
- static inline void nv_set_page_attrib_cached(nv_pte_t *page_ptr)
- {
--#if defined(NV_CHANGE_PAGE_ATTR_PRESENT)
--    if (nv_use_cpa)
-+    if (nv_update_memory_types)
-     {
--        struct page *page = virt_to_page(__va(page_ptr->phys_addr));
-+#if defined(NV_SET_PAGES_UC_PRESENT)
-+        struct page *page = NV_GET_PAGE_STRUCT(page_ptr->phys_addr);
-+        set_pages_wb(page, 1);
-+#elif defined(NV_CHANGE_PAGE_ATTR_PRESENT)
-+        struct page *page = NV_GET_PAGE_STRUCT(page_ptr->phys_addr);
-         pgprot_t prot = PAGE_KERNEL;
- #if defined(NVCPU_X86) || defined(NVCPU_X86_64)
-         pgprot_val(prot) &= __nv_supported_pte_mask;
- #endif
-         change_page_attr(page, 1, prot);
-+#endif
-     }
--#endif /* NV_CHANGE_PAGE_ATTR_PRESENT */
- }
- 
- static inline void nv_lock_page(nv_pte_t *page_ptr)
-@@ -360,8 +358,11 @@
- #if defined(NV_CPA_NEEDS_FLUSHING)
-     nv_execute_on_all_cpus(cache_flush, NULL);
- #endif
-+#if (defined(NVCPU_X86) || defined(NVCPU_X86_64)) && \
-+  defined(NV_CHANGE_PAGE_ATTR_PRESENT)
-     global_flush_tlb();
- #endif
-+#endif
- }
- 
- /*
-@@ -656,7 +657,7 @@
- 
-         address = (unsigned long)virt_addr + i * PAGE_SIZE; 
- 
--        pgd = NV_PGD_OFFSET(address, 1, &init_mm);
-+        pgd = NV_PGD_OFFSET(address, 1, NULL);
-         if (!NV_PGD_PRESENT(pgd))
-             goto failed;
- 
-diff -ru usr/src/nv/nv.c usr/src/nv.2290218/nv.c
---- usr/src/nv/nv.c	2008-01-22 20:12:23.000000000 -0800
-+++ usr/src/nv.2290218/nv.c	2008-03-18 13:15:35.950838813 -0700
-@@ -112,10 +112,7 @@
- unsigned int nv_remap_limit;
- #endif
- 
--#if defined(NV_CHANGE_PAGE_ATTR_PRESENT)
--int nv_use_cpa = 1;
--#endif
--
-+int nv_update_memory_types = 1;
- static int nv_mmconfig_failure_detected = 0;
- 
- static void *nv_pte_t_cache = NULL;
-@@ -919,30 +916,26 @@
- #endif /* defined(NV_BUILD_NV_PAT_SUPPORT) */
- }
- 
--
- #if defined(NV_CHANGE_PAGE_ATTR_BUG_PRESENT)
--
--/* nv_verify_cpa_interface - determine if the change_page_attr bug is fixed
-- * in this kernel.
-+/*
-+ * nv_verify_cpa_interface() - determine if the change_page_attr() large page
-+ * management accounting bug known to exist in early Linux/x86-64 kernels
-+ * is present in this kernel.
-  *
-- * there's really not a good way to determine if change_page_attr is fixed.
-- * we can't really use cpa on 2.6 x86_64 kernels < 2.6.11, as if we run into
-- * the accounting bug, the kernel will throw a BUG. this isn't 100% accurate,
-- * as it doesn't throw a bug until we try to restore the caching attributes
-- * of the page. so if we can track down a 4M allocation, we can mark it
-- * uncached and see if the accounting was done correctly.
-- * 
-- * this is a little ugly, but the most accurate approach to determining if
-- * this kernel is good.
-+ * There's really no good way to determine if change_page_attr() is working
-+ * correctly. We can't reliably use change_page_attr() on Linux/x86-64 2.6
-+ * kernels < 2.6.11: if we run into the accounting bug, the Linux kernel will
-+ * trigger a BUG() if we attempt to restore the WB memory type of a page
-+ * originally part of a large page.
-  *
-- * why do we even bother? some distributions have back-ported the cpa fix to
-- * kernels < 2.6.11. we want to use change_page_attr to avoid random corruption
-- * and hangs, but need to make sure it's safe to do so.
-+ * So if we can successfully allocate such a page, change its memory type to
-+ * UC and check if the accounting was done correctly, we can determine if
-+ * the change_page_attr() interface can be used safely.
-  *
-- * return values:
-- *    0 - test passed, interface works
-- *    1 - test failed, status unclear
-- *   -1 - test failed, interface broken
-+ * Return values:
-+ *    0 - test passed, the change_page_attr() interface works
-+ *    1 - test failed, the status is unclear
-+ *   -1 - test failed, the change_page_attr() interface is broken
-  */
- 
- static inline pte_t *check_large_page(unsigned long vaddr)
-@@ -950,7 +943,7 @@
-     pgd_t *pgd = NULL;
-     pmd_t *pmd = NULL;
- 
--    pgd = NV_PGD_OFFSET(vaddr, 1, &init_mm);
-+    pgd = NV_PGD_OFFSET(vaddr, 1, NULL);
-     if (!NV_PGD_PRESENT(pgd))
-         return NULL;
- 
-@@ -1060,35 +1053,42 @@
- 
-     return 1;
- }
--
- #endif /* defined(NV_CHANGE_PAGE_ATTR_BUG_PRESENT) */
- 
--
--// verify that the kernel's mapping matches the requested type 
--// this is to protect against accidental cache aliasing problems
-+/*
-+ * nv_verify_page_mappings() - verify that the kernel mapping of the specified
-+ * page matches the specified type. This is to help detect bugs in the Linux
-+ * kernel's change_page_attr() interface, early.
-+ *
-+ * This function relies on the ability to perform kernel virtul address to PFN
-+ * translations and therefore on 'init_mm'. Unfortunately, the latter is no
-+ * longer exported in recent Linux/x86 2.6 kernels. The export was removed at
-+ * roughtly the same time as the set_pages_{uc,wb}() change_page_attr()
-+ * replacement interfaces were introduced; hopefully, it will be sufficient to
-+ * check for their presence.
-+ */
- int nv_verify_page_mappings(
-     nv_pte_t *page_ptr,
-     unsigned int cachetype
- )
- {
--    struct mm_struct *mm;
-+#if defined(NV_CHANGE_PAGE_ATTR_PRESENT) || \
-+    (defined(NV_SET_PAGES_UC_PRESENT) && !defined(NVCPU_X86))
-+    unsigned long retval = -1;
-+#if defined(NVCPU_X86) || defined(NVCPU_X86_64)
-     pgd_t *pgd = NULL;
-     pmd_t *pmd = NULL;
-     pte_t *pte = NULL;
--    unsigned long retval = -1;
-     unsigned int flags, expected;
-     unsigned long address;
-     static int count = 0;
- 
--#if defined(NV_CHANGE_PAGE_ATTR_PRESENT)
--    if (!nv_use_cpa)
-+    if (!nv_update_memory_types)
-         return 0;
--#endif
- 
-     address = (unsigned long)__va(page_ptr->phys_addr);
--    mm = &init_mm; // always a kernel page
- 
--    pgd = NV_PGD_OFFSET(address, 1, mm);
-+    pgd = NV_PGD_OFFSET(address, 1, NULL);
-     if (!NV_PGD_PRESENT(pgd))
-     {
-         nv_printf(NV_DBG_ERRORS, "NVRM: pgd not present for addr 0x%lx\n", address);
-@@ -1154,7 +1154,11 @@
-     }
- 
- failed:
-+#endif /* defined(NVCPU_X86) || defined(NVCPU_X86_64) */
-     return retval;
-+#else
-+    return 0;
-+#endif
- }
- 
- #if defined(NV_BUILD_NV_PAT_SUPPORT) && defined(CONFIG_HOTPLUG_CPU)
-@@ -1200,7 +1204,8 @@
- static int __init nvidia_init_module(void)
- {
-     int rc;
--    U032 i, count;
-+    U032 i, count, data;
-+    nv_state_t *nv = NV_STATE_PTR(&nv_ctl_device);
- 
- #if defined(VM_CHECKER)
-     nv_init_lock(vm_lock);
-@@ -1359,43 +1364,41 @@
-     /* create /proc/driver/nvidia */
-     nvos_proc_create();
- 
--#if defined(NV_CHANGE_PAGE_ATTR_PRESENT)
-+    /*
-+     * Give users an opportunity to disable the driver's use of
-+     * the change_page_attr() and set_pages_{uc,wb}() kernel
-+     * interfaces.
-+     */
-+    rc = rm_read_registry_dword(nv, "NVreg", "UpdateMemoryTypes", &data);
-+    if ((rc == 0) && ((int)data != ~0))
-     {
--        int data;
--
--        // allow the user to override us with a registry key
--        rc = rm_read_registry_dword(NV_STATE_PTR(&nv_ctl_device), "NVreg", "UseCPA",  &data);
--        if ((rc == 0) && (data != -1))
--        {
--            nv_use_cpa = data;
--        }
-+        nv_update_memory_types = data;
-+    }
- #if defined(NV_CHANGE_PAGE_ATTR_BUG_PRESENT)
--        else
-+    /*
-+     * Unless we explicitely detect that the change_page_attr()
-+     * inteface is fixed, disable usage of the interface on
-+     * this kernel. Notify the user of this problem using the
-+     * driver's /proc warnings interface (read by the installer
-+     * and the bug report script).
-+     */
-+    else
-+    {
-+        rc = nv_verify_cpa_interface();
-+        if (rc < 0)
-         {
--            /*
--             * Unless we explicitely detect that the change_page_attr()
--             * inteface is fixed, disable usage of the interface on
--             * this kernel. Notify the user of this problem using the
--             * driver's /proc warnings interface (read by the installer
--             * and the bug report script).
--             */
--            rc = nv_verify_cpa_interface();
--            if (rc < 0)
--            {
--                nv_prints(NV_DBG_ERRORS, __cpgattr_warning);
--                nvos_proc_add_warning_file("change_page_attr", __cpgattr_warning);
--                nv_use_cpa = 0;
--            }
--            else if (rc != 0)
--            {
--                nv_prints(NV_DBG_ERRORS, __cpgattr_warning_2);
--                nvos_proc_add_warning_file("change_page_attr", __cpgattr_warning_2);
--                nv_use_cpa = 0;
--            }
-+            nv_prints(NV_DBG_ERRORS, __cpgattr_warning);
-+            nvos_proc_add_warning_file("change_page_attr", __cpgattr_warning);
-+            nv_update_memory_types = 0;
-+        }
-+        else if (rc != 0)
-+        {
-+            nv_prints(NV_DBG_ERRORS, __cpgattr_warning_2);
-+            nvos_proc_add_warning_file("change_page_attr", __cpgattr_warning_2);
-+            nv_update_memory_types = 0;
-         }
--#endif
-     }
--#endif
-+#endif /* defined(NV_CHANGE_PAGE_ATTR_BUG_PRESENT) */
- 
- #if defined(NVCPU_X86_64) && defined(CONFIG_IA32_EMULATION) && !defined(HAVE_COMPAT_IOCTL)
-     /* Register ioctl conversions for 32 bit clients */
-@@ -3230,8 +3233,21 @@
-     pte_t *pte = NULL;
-     NvU64 retval;
- 
--    mm = (kern) ? &init_mm : current->mm;
--    if (!kern) down_read(&current->mm->mmap_sem);
-+    if (!kern)
-+    {
-+        mm = current->mm;
-+        down_read(&mm->mmap_sem);
-+    }
-+    else
-+    {
-+#if defined(NV_SET_PAGES_UC_PRESENT) && defined(NVCPU_X86)
-+        /* nv_printf(NV_DBG_ERRORS,
-+            "NVRM: can't translate KVA in nv_get_phys_address()!\n"); */
-+        return 0;
-+#else
-+        mm = NULL;
-+#endif
-+    }
- 
-     pgd = NV_PGD_OFFSET(address, kern, mm);
-     if (!NV_PGD_PRESENT(pgd))
-@@ -3252,22 +3268,24 @@
-     retval &= ~_PAGE_NX;
- #endif
- 
--    if (!kern) up_read(&current->mm->mmap_sem);
-+    if (!kern)
-+        up_read(&mm->mmap_sem);
-     return retval;
- 
- failed:
--    if (!kern) up_read(&current->mm->mmap_sem);
-+    if (!kern)
-+        up_read(&mm->mmap_sem);
-     return 0;
- }
- 
- NvU64 NV_API_CALL nv_get_kern_phys_address(NvU64 address)
- {
--    // make sure this address is a kernel pointer
-+    /* make sure this address is a kernel virtual address */
- #if defined(DEBUG) && !defined(CONFIG_X86_4G)
-     if (address < PAGE_OFFSET)
-     {
-         nv_printf(NV_DBG_WARNINGS,
--            "NVRM: user address passed to get_kern_phys_address: 0x%lx\n",
-+            "NVRM: user address passed to get_kern_phys_address: 0x%llx!\n",
-             address);
-         return 0;
-     }
-@@ -3282,12 +3300,12 @@
- 
- NvU64 NV_API_CALL nv_get_kern_user_address(NvU64 address)
- {
--    // make sure this address is not a kernel pointer
-+    /* make sure this address is not a kernel virtual address */
- #if defined(DEBUG) && !defined(CONFIG_X86_4G)
-     if (address >= PAGE_OFFSET)
-     {
-         nv_printf(NV_DBG_WARNINGS,
--            "NVRM: kernel address passed to get_user_phys_address: 0x%lx\n",
-+            "NVRM: kernel address passed to get_user_phys_address: 0x%llx!\n",
-             address);
-         return 0;
-     }
-@@ -3989,13 +4007,10 @@
-     return -1;
- }
- 
--int NV_API_CALL nv_no_incoherent_mappings
--(
--    void
--)
-+int NV_API_CALL nv_no_incoherent_mappings(void)
- {
--#if defined(NV_CHANGE_PAGE_ATTR_PRESENT)
--    return 1;
-+#if defined(NV_CHANGE_PAGE_ATTR_PRESENT) || defined(NV_SET_PAGES_UC_PRESENT)
-+    return (nv_update_memory_types);
- #else
-     return 0;
- #endif
-diff -ru usr/src/nv/os-interface.c usr/src/nv.2290218/os-interface.c
---- usr/src/nv/os-interface.c	2008-01-22 20:12:23.000000000 -0800
-+++ usr/src/nv.2290218/os-interface.c	2008-03-18 13:15:38.098961229 -0700
-@@ -1130,6 +1130,18 @@
- {
-     void *vaddr;
- 
-+    if (start == 0)
-+    {
-+        if (mode != NV_MEMORY_CACHED)
-+        {
-+            nv_printf(NV_DBG_ERRORS,
-+                "NVRM: os_map_kernel_space: won't map address 0x%0llx UC!\n", start);
-+            return NULL;
-+        }
-+        else
-+            return (void *)PAGE_OFFSET;
-+    }
-+
-     if (!NV_MAY_SLEEP())
-     {
-         nv_printf(NV_DBG_ERRORS,
-@@ -1162,6 +1174,9 @@
-     NvU64 size_bytes
- )
- {
-+    if (addr == (void *)PAGE_OFFSET)
-+        return;
-+
-     NV_IOUNMAP(addr, size_bytes);
- }
- 
-diff -ru usr/src/nv/os-registry.c usr/src/nv.2290218/os-registry.c
---- usr/src/nv/os-registry.c	2008-01-22 20:12:23.000000000 -0800
-+++ usr/src/nv.2290218/os-registry.c	2008-03-18 13:15:40.631105529 -0700
-@@ -381,34 +381,36 @@
- NV_MODULE_PARAMETER(NVreg_RemapLimit);
- 
- /*
-- * Option: UseCPA
-+ * Option: UpdateMemoryTypes
-  *
-  * Description:
-  *
-- * Many kernels have a broken implementation of change_page_attr that leads
-- * to cache aliasing problems. x86_64 kernels between 2.6.0 and 2.6.10 will
-- * force a kernel BUG_ON() when this condition is encountered. For this
-- * reason, the NVIDIA driver is very careful about not using the CPA kernel
-- * interface on these kernels.
-- *
-- * Some distributions have backported this fix to kernel versions that fall
-- * within this version range. The NVIDIA driver attempts to automatically
-- * detect these fixes and reenable usage of the change_page_attr interface.
-- *
-- * Due to the serious nature of the problems that can arise from this, the
-- * NVIDIA driver implements a manual registry key to force usage of this API
-- * to be enabled or disabled. This registry key can be used to force usage
-- * of the API on a known fixed kernel if the NVIDIA driver fails to detect
-- * the kernel as fixed. This registry key can also be used to disable usage
-- * of the API on a bad kernel that is misdetected as a fixed kernel.
-- *
-- * The default value is '-1' (use NVIDIA driver default logic)
-- * A value of '0' will forcibly disable change_page_attr calls.
-- * A value of '1' will forcibly enable change_page_attr calls.
-+ * Many kernels have broken implementations of the change_page_attr()
-+ * kernel interface that may cause cache aliasing problems. Linux/x86-64
-+ * kernels between 2.6.0 and 2.6.10 may prompt kernel BUG()s due to
-+ * improper accounting in the interface's large page management code, for
-+ * example. For this reason, the NVIDIA Linux driver is very careful about
-+ * not using the change_page_attr() kernel interface on these kernels.
-+ *
-+ * Due to the serious nature of the problems that can arise from bugs in
-+ * the change_page_attr(), set_pages_{uc,wb}() and other kernel interfaces
-+ * used to modify memory types, the NVIDIA driver implements a manual
-+ * registry key override to allow forcibly enabling or disabling use of
-+ * these APIs.
-+ *
-+ * Possible values:
-+ *
-+ * ~0 = use the NVIDIA driver's default logic (default)
-+ *  0 = enable use of change_page_attr(), etc.
-+ *  1 = disable use of change_page_attr(), etc.
-+ *
-+ * By default, the NVIDIA driver will attempt to auto-detect if it can
-+ * safely use the change_page_attr() and other kernel interfaces to modify
-+ * the memory types of kernel mappings.
-  */
- 
--static int NVreg_UseCPA = -1;
--NV_MODULE_PARAMETER(NVreg_UseCPA);
-+static int NVreg_UpdateMemoryTypes = ~0;
-+NV_MODULE_PARAMETER(NVreg_UpdateMemoryTypes);
- 
- /*
-  * Option: DetectPrimaryVga
-@@ -511,7 +513,7 @@
-     { "NVreg",  "DeviceFileGID",            &NVreg_DeviceFileGID,            1 },
-     { "NVreg",  "DeviceFileMode",           &NVreg_DeviceFileMode,           1 },
-     { "NVreg",  "RemapLimit",               &NVreg_RemapLimit,               1 },
--    { "NVreg",  "UseCPA",                   &NVreg_UseCPA,                   1 },
-+    { "NVreg",  "UpdateMemoryTypes",        &NVreg_UpdateMemoryTypes,        1 },
-     { "NVreg",  "DetectPrimaryVga",         &NVreg_DetectPrimaryVga,         1 },
-     { "NVreg",  "EnableBrightnessControl",  &NVreg_EnableBrightnessControl,  1 },
-     { "NVreg",  "PanelPWMFrequency",        &NVreg_PanelPWMFrequency,        1 },

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2008-07-21 20:39:25 UTC (rev 5963)
+++ PKGBUILD	2008-07-21 20:41:39 UTC (rev 5964)
@@ -2,8 +2,8 @@
 # Maintainer : Tobias Powalowski <tpowa at archlinux.org>
 
 pkgname=nvidia-96xx
-pkgver=96.43.05
-_kernver='2.6.25-ARCH'
+pkgver=96.43.07
+_kernver='2.6.26-ARCH'
 pkgrel=4
 pkgdesc="NVIDIA legacy drivers for kernel26, 96xx branch"
 arch=(i686 x86_64)
@@ -11,16 +11,13 @@
 [ "$CARCH" = "i686"   ] && ARCH=x86
 [ "$CARCH" = "x86_64" ] && ARCH=x86_64
 url="http://www.nvidia.com/"
-depends=('kernel26>=2.6.25.3-1' 'kernel26<2.6.26' 'nvidia-96xx-utils')
+depends=('kernel26>=2.6.26-1' 'kernel26<2.6.27' 'nvidia-96xx-utils')
 conflicts=('nvidia' 'nvidia-71xx' 'nvidia-legacy')
 install=nvidia-96xx.install
 license=('custom')
-source=(http://us.download.nvidia.com/XFree86/Linux-$ARCH/${pkgver}/NVIDIA-Linux-$ARCH-${pkgver}-pkg0.run
-        NVIDIA_kernel-96.43.05-2290218.diff.txt)
-md5sums=('575750b17f9fd19490fd999a72c7a661'
-         'f2d9c8605a0f655b3c5c9b2434b9dccd')
-[ "$CARCH" = "x86_64" ] && md5sums=('da37aa996073c4e813eda1be150a44d8'
-                                    'f2d9c8605a0f655b3c5c9b2434b9dccd')
+source=(http://us.download.nvidia.com/XFree86/Linux-$ARCH/${pkgver}/NVIDIA-Linux-$ARCH-${pkgver}-pkg0.run)
+md5sums=('8fa2b7c5e4629850d4bd33033ec46166')
+[ "$CARCH" = "x86_64" ] && md5sums=('c03bd2469292d91dde8767af1418c4e1')
 
 build()
 {
@@ -30,7 +27,6 @@
   cd NVIDIA-Linux-$ARCH-${pkgver}-pkg0
   
   # Any extra patches are applied in here...
-  patch -Np0 -i ../NVIDIA_kernel-96.43.05-2290218.diff.txt || return 1
 
   cd usr/src/nv/
   ln -s Makefile.kbuild Makefile

Modified: nvidia-96xx.install
===================================================================
--- nvidia-96xx.install	2008-07-21 20:39:25 UTC (rev 5963)
+++ nvidia-96xx.install	2008-07-21 20:41:39 UTC (rev 5964)
@@ -1,6 +1,6 @@
 # arg 1:  the new package version
 post_install() {
-  KERNEL_VERSION='2.6.25-ARCH'
+  KERNEL_VERSION='2.6.26-ARCH'
   depmod -v $KERNEL_VERSION  > /dev/null 2>&1		 
 }
 
@@ -13,7 +13,7 @@
 
 # arg 1:  the old package version
 post_remove() {
-  KERNEL_VERSION='2.6.25-ARCH'
+  KERNEL_VERSION='2.6.26-ARCH'
   depmod -v $KERNEL_VERSION	 > /dev/null 2>&1	 
 }
 





More information about the arch-commits mailing list