--- common/lib/modules/fglrx/build_mod/firegl_public.c 2007-10-15 13:57:26.000000000 +0600 +++ common/lib/modules/fglrx/build_mod/firegl_public.c 2007-10-15 13:55:11.000000000 +0600 @@ -2486,10 +2486,15 @@ #ifndef ptep_clear_flush_dirty #define ptep_clear_flush_dirty(__vma, __address, __ptep) \ ({ \ - int __dirty = ptep_test_and_clear_dirty(__ptep); \ - if (__dirty) \ - flush_tlb_page(__vma, __address); \ - __dirty; \ + int __dirty; \ + if( !pte_dirty(*__ptep) ) { \ + __dirty = 0; \ + } \ + else { \ + __dirty = test_and_clear_bit(_PAGE_BIT_ACCESSED,&__ptep->pte_low); \ + flush_tlb_page(__vma, __address); \ + } \ + __dirty; \ }) #endif @@ -2933,7 +2938,7 @@ { return request_irq(irq, (void(*)(int, void *, struct pt_regs *))handler, - SA_SHIRQ, dev_name, dev_id); + IRQF_SHARED, dev_name, dev_id); } void ATI_API_CALL __ke_free_irq(unsigned int irq, void *dev_id) @@ -2943,9 +2948,9 @@ #else static void ATI_API_CALL (*irq_handler_func)(int, void*, void*); /* function pointer variable */ -static irqreturn_t ke_irq_handler_wrap(int irq, void *arg1, struct pt_regs *regs) +static irqreturn_t ke_irq_handler_wrap(int irq, void *arg1) { - irq_handler_func(irq, arg1, regs); + irq_handler_func(irq, arg1, NULL); return IRQ_HANDLED; } @@ -2956,7 +2961,7 @@ irq_handler_func = handler; return request_irq(irq, ke_irq_handler_wrap, - SA_SHIRQ, dev_name, dev_id); + IRQF_SHARED, dev_name, dev_id); } void ATI_API_CALL __ke_free_irq(unsigned int irq, void *dev_id) @@ -3527,12 +3532,19 @@ #else *phys_address = pte_val(pte) & (u64)((u64)PAGE_MASK | (u64)0xf<<32); #endif - sprintf(buf, "0x%Lx %c%c%c%c%c%c\n", - *phys_address, - pte_present (pte) ? 'p' : '-', + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23) + sprintf(buf, "0x%Lx %c%c%c%c%c%c\n", +#else + sprintf(buf, "0x%Lx %c%c%c\n", +#endif + *phys_address, +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23) + pte_present (pte) ? 'p' : '-', pte_read (pte) ? 'r' : '-', - pte_write (pte) ? 'w' : '-', pte_exec (pte) ? 'x' : '-', +#endif + pte_write (pte) ? 'w' : '-', pte_dirty (pte) ? 'd' : '-', pte_young (pte) ? 'a' : '-'); } @@ -5433,7 +5445,7 @@ /** \brief Type definition of the structure describing Slab Cache object */ typedef struct tag_kasSlabCache_t { - kmem_cache_t* cache; /* OS slab cache object */ + struct kmem_cache* cache; /* OS slab cache object */ spinlock_t lock; /* OS spinlock object protecting the cache */ unsigned int routine_type; /* Type of routine the cache might be accessed from */ char name[14]; /* Cache object name (kernel 2.4 restricts its length to 19 chars) */ @@ -5479,7 +5491,11 @@ DBG_TRACE("creating slab object '%s'", slabcache_obj->name); if ((slabcache_obj->cache = - kmem_cache_create(slabcache_obj->name, iEntrySize, 0, 0, NULL, NULL))) +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23) + kmem_cache_create(slabcache_obj->name, iEntrySize, 0, 0, NULL, NULL))) +#else + kmem_cache_create(slabcache_obj->name, iEntrySize, 0, 0, NULL))) +#endif { ret = 1; }