Loading drivers/char/agp/backend.c +7 −2 Original line number Diff line number Diff line Loading @@ -147,6 +147,7 @@ static int agp_backend_initialize(struct agp_bridge_data *bridge) printk(KERN_ERR PFX "unable to get memory for scratch page.\n"); return -ENOMEM; } global_flush_tlb(); bridge->scratch_page_real = virt_to_gart(addr); bridge->scratch_page = Loading Loading @@ -187,9 +188,11 @@ static int agp_backend_initialize(struct agp_bridge_data *bridge) return 0; err_out: if (bridge->driver->needs_scratch_page) if (bridge->driver->needs_scratch_page) { bridge->driver->agp_destroy_page( gart_to_virt(bridge->scratch_page_real)); global_flush_tlb(); } if (got_gatt) bridge->driver->free_gatt_table(bridge); if (got_keylist) { Loading @@ -211,9 +214,11 @@ static void agp_backend_cleanup(struct agp_bridge_data *bridge) bridge->key_list = NULL; if (bridge->driver->agp_destroy_page && bridge->driver->needs_scratch_page) bridge->driver->needs_scratch_page) { bridge->driver->agp_destroy_page( gart_to_virt(bridge->scratch_page_real)); global_flush_tlb(); } } /* When we remove the global variable agp_bridge from all drivers Loading drivers/char/agp/generic.c +8 −3 Original line number Diff line number Diff line Loading @@ -57,7 +57,8 @@ int map_page_into_agp(struct page *page) { int i; i = change_page_attr(page, 1, PAGE_KERNEL_NOCACHE); global_flush_tlb(); /* Caller's responsibility to call global_flush_tlb() for * performance reasons */ return i; } EXPORT_SYMBOL_GPL(map_page_into_agp); Loading @@ -66,7 +67,8 @@ int unmap_page_from_agp(struct page *page) { int i; i = change_page_attr(page, 1, PAGE_KERNEL); global_flush_tlb(); /* Caller's responsibility to call global_flush_tlb() for * performance reasons */ return i; } EXPORT_SYMBOL_GPL(unmap_page_from_agp); Loading Loading @@ -153,6 +155,7 @@ void agp_free_memory(struct agp_memory *curr) for (i = 0; i < curr->page_count; i++) { curr->bridge->driver->agp_destroy_page(gart_to_virt(curr->memory[i])); } global_flush_tlb(); } agp_free_key(curr->key); vfree(curr->memory); Loading Loading @@ -210,6 +213,8 @@ struct agp_memory *agp_allocate_memory(struct agp_bridge_data *bridge, new->memory[i] = virt_to_gart(addr); new->page_count++; } global_flush_tlb(); new->bridge = bridge; flush_agp_mappings(); Loading drivers/char/agp/i460-agp.c +11 −6 Original line number Diff line number Diff line Loading @@ -111,8 +111,10 @@ static int i460_fetch_size (void) if (i460.io_page_shift != I460_IO_PAGE_SHIFT) { printk(KERN_ERR PFX "I/O (GART) page-size %ZuKB doesn't match expected size %ZuKB\n", 1UL << (i460.io_page_shift - 10), 1UL << (I460_IO_PAGE_SHIFT)); "I/O (GART) page-size %luKB doesn't match expected " "size %luKB\n", 1UL << (i460.io_page_shift - 10), 1UL << (I460_IO_PAGE_SHIFT)); return 0; } Loading Loading @@ -514,9 +516,10 @@ static void *i460_alloc_page (struct agp_bridge_data *bridge) { void *page; if (I460_IO_PAGE_SHIFT <= PAGE_SHIFT) if (I460_IO_PAGE_SHIFT <= PAGE_SHIFT) { page = agp_generic_alloc_page(agp_bridge); else global_flush_tlb(); } else /* Returning NULL would cause problems */ /* AK: really dubious code. */ page = (void *)~0UL; Loading @@ -525,8 +528,10 @@ static void *i460_alloc_page (struct agp_bridge_data *bridge) static void i460_destroy_page (void *page) { if (I460_IO_PAGE_SHIFT <= PAGE_SHIFT) if (I460_IO_PAGE_SHIFT <= PAGE_SHIFT) { agp_generic_destroy_page(page); global_flush_tlb(); } } #endif /* I460_LARGE_IO_PAGES */ Loading @@ -536,7 +541,7 @@ static unsigned long i460_mask_memory (struct agp_bridge_data *bridge, { /* Make sure the returned address is a valid GATT entry */ return bridge->driver->masks[0].mask | (((addr & ~((1 << I460_IO_PAGE_SHIFT) - 1)) & 0xffffff000) >> 12); | (((addr & ~((1 << I460_IO_PAGE_SHIFT) - 1)) & 0xfffff000) >> 12); } struct agp_bridge_driver intel_i460_driver = { Loading drivers/char/agp/intel-agp.c +4 −1 Original line number Diff line number Diff line Loading @@ -270,6 +270,7 @@ static struct agp_memory *alloc_agpphysmem_i8xx(size_t pg_count, int type) switch (pg_count) { case 1: addr = agp_bridge->driver->agp_alloc_page(agp_bridge); global_flush_tlb(); break; case 4: /* kludge to get 4 physical pages for ARGB cursor */ Loading Loading @@ -330,9 +331,11 @@ static void intel_i810_free_by_type(struct agp_memory *curr) if(curr->type == AGP_PHYS_MEMORY) { if (curr->page_count == 4) i8xx_destroy_pages(gart_to_virt(curr->memory[0])); else else { agp_bridge->driver->agp_destroy_page( gart_to_virt(curr->memory[0])); global_flush_tlb(); } vfree(curr->memory); } kfree(curr); Loading Loading
drivers/char/agp/backend.c +7 −2 Original line number Diff line number Diff line Loading @@ -147,6 +147,7 @@ static int agp_backend_initialize(struct agp_bridge_data *bridge) printk(KERN_ERR PFX "unable to get memory for scratch page.\n"); return -ENOMEM; } global_flush_tlb(); bridge->scratch_page_real = virt_to_gart(addr); bridge->scratch_page = Loading Loading @@ -187,9 +188,11 @@ static int agp_backend_initialize(struct agp_bridge_data *bridge) return 0; err_out: if (bridge->driver->needs_scratch_page) if (bridge->driver->needs_scratch_page) { bridge->driver->agp_destroy_page( gart_to_virt(bridge->scratch_page_real)); global_flush_tlb(); } if (got_gatt) bridge->driver->free_gatt_table(bridge); if (got_keylist) { Loading @@ -211,9 +214,11 @@ static void agp_backend_cleanup(struct agp_bridge_data *bridge) bridge->key_list = NULL; if (bridge->driver->agp_destroy_page && bridge->driver->needs_scratch_page) bridge->driver->needs_scratch_page) { bridge->driver->agp_destroy_page( gart_to_virt(bridge->scratch_page_real)); global_flush_tlb(); } } /* When we remove the global variable agp_bridge from all drivers Loading
drivers/char/agp/generic.c +8 −3 Original line number Diff line number Diff line Loading @@ -57,7 +57,8 @@ int map_page_into_agp(struct page *page) { int i; i = change_page_attr(page, 1, PAGE_KERNEL_NOCACHE); global_flush_tlb(); /* Caller's responsibility to call global_flush_tlb() for * performance reasons */ return i; } EXPORT_SYMBOL_GPL(map_page_into_agp); Loading @@ -66,7 +67,8 @@ int unmap_page_from_agp(struct page *page) { int i; i = change_page_attr(page, 1, PAGE_KERNEL); global_flush_tlb(); /* Caller's responsibility to call global_flush_tlb() for * performance reasons */ return i; } EXPORT_SYMBOL_GPL(unmap_page_from_agp); Loading Loading @@ -153,6 +155,7 @@ void agp_free_memory(struct agp_memory *curr) for (i = 0; i < curr->page_count; i++) { curr->bridge->driver->agp_destroy_page(gart_to_virt(curr->memory[i])); } global_flush_tlb(); } agp_free_key(curr->key); vfree(curr->memory); Loading Loading @@ -210,6 +213,8 @@ struct agp_memory *agp_allocate_memory(struct agp_bridge_data *bridge, new->memory[i] = virt_to_gart(addr); new->page_count++; } global_flush_tlb(); new->bridge = bridge; flush_agp_mappings(); Loading
drivers/char/agp/i460-agp.c +11 −6 Original line number Diff line number Diff line Loading @@ -111,8 +111,10 @@ static int i460_fetch_size (void) if (i460.io_page_shift != I460_IO_PAGE_SHIFT) { printk(KERN_ERR PFX "I/O (GART) page-size %ZuKB doesn't match expected size %ZuKB\n", 1UL << (i460.io_page_shift - 10), 1UL << (I460_IO_PAGE_SHIFT)); "I/O (GART) page-size %luKB doesn't match expected " "size %luKB\n", 1UL << (i460.io_page_shift - 10), 1UL << (I460_IO_PAGE_SHIFT)); return 0; } Loading Loading @@ -514,9 +516,10 @@ static void *i460_alloc_page (struct agp_bridge_data *bridge) { void *page; if (I460_IO_PAGE_SHIFT <= PAGE_SHIFT) if (I460_IO_PAGE_SHIFT <= PAGE_SHIFT) { page = agp_generic_alloc_page(agp_bridge); else global_flush_tlb(); } else /* Returning NULL would cause problems */ /* AK: really dubious code. */ page = (void *)~0UL; Loading @@ -525,8 +528,10 @@ static void *i460_alloc_page (struct agp_bridge_data *bridge) static void i460_destroy_page (void *page) { if (I460_IO_PAGE_SHIFT <= PAGE_SHIFT) if (I460_IO_PAGE_SHIFT <= PAGE_SHIFT) { agp_generic_destroy_page(page); global_flush_tlb(); } } #endif /* I460_LARGE_IO_PAGES */ Loading @@ -536,7 +541,7 @@ static unsigned long i460_mask_memory (struct agp_bridge_data *bridge, { /* Make sure the returned address is a valid GATT entry */ return bridge->driver->masks[0].mask | (((addr & ~((1 << I460_IO_PAGE_SHIFT) - 1)) & 0xffffff000) >> 12); | (((addr & ~((1 << I460_IO_PAGE_SHIFT) - 1)) & 0xfffff000) >> 12); } struct agp_bridge_driver intel_i460_driver = { Loading
drivers/char/agp/intel-agp.c +4 −1 Original line number Diff line number Diff line Loading @@ -270,6 +270,7 @@ static struct agp_memory *alloc_agpphysmem_i8xx(size_t pg_count, int type) switch (pg_count) { case 1: addr = agp_bridge->driver->agp_alloc_page(agp_bridge); global_flush_tlb(); break; case 4: /* kludge to get 4 physical pages for ARGB cursor */ Loading Loading @@ -330,9 +331,11 @@ static void intel_i810_free_by_type(struct agp_memory *curr) if(curr->type == AGP_PHYS_MEMORY) { if (curr->page_count == 4) i8xx_destroy_pages(gart_to_virt(curr->memory[0])); else else { agp_bridge->driver->agp_destroy_page( gart_to_virt(curr->memory[0])); global_flush_tlb(); } vfree(curr->memory); } kfree(curr); Loading