diff --git a/drivers/gpu/arm/mali400/mali/common/mali_control_timer.c b/drivers/gpu/arm/mali400/mali/common/mali_control_timer.c index d3ff94678c94..5bed27a8c5c9 100755 --- a/drivers/gpu/arm/mali400/mali/common/mali_control_timer.c +++ b/drivers/gpu/arm/mali400/mali/common/mali_control_timer.c @@ -76,7 +76,7 @@ _mali_osk_errcode_t mali_control_timer_init(void) } } - mali_control_timer = _mali_osk_timer_init(); + mali_control_timer = _mali_osk_timer_init(mali_control_timer_callback); if (NULL == mali_control_timer) { return _MALI_OSK_ERR_FAULT; } diff --git a/drivers/gpu/arm/mali400/mali/common/mali_group.c b/drivers/gpu/arm/mali400/mali/common/mali_group.c index 7d79ddd8439c..47979a2f1a35 100755 --- a/drivers/gpu/arm/mali400/mali/common/mali_group.c +++ b/drivers/gpu/arm/mali400/mali/common/mali_group.c @@ -65,7 +65,7 @@ struct mali_group *mali_group_create(struct mali_l2_cache_core *core, group = _mali_osk_calloc(1, sizeof(struct mali_group)); if (NULL != group) { - group->timeout_timer = _mali_osk_timer_init(); + group->timeout_timer = _mali_osk_timer_init(mali_group_timeout); if (NULL != group->timeout_timer) { _mali_osk_timer_setcallback(group->timeout_timer, mali_group_timeout, (void *)group); diff --git a/drivers/gpu/arm/mali400/mali/common/mali_osk.h b/drivers/gpu/arm/mali400/mali/common/mali_osk.h index a5017789c97e..9ade362d6b28 100755 --- a/drivers/gpu/arm/mali400/mali/common/mali_osk.h +++ b/drivers/gpu/arm/mali400/mali/common/mali_osk.h @@ -955,7 +955,7 @@ _mali_osk_errcode_t _mali_osk_notification_queue_dequeue(_mali_osk_notification_ * * @return a pointer to the allocated timer object, or NULL on failure. */ -_mali_osk_timer_t *_mali_osk_timer_init(void); +_mali_osk_timer_t *_mali_osk_timer_init(_mali_osk_timer_callback_t callback); /** @brief Start a timer * diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_linux_trace.h b/drivers/gpu/arm/mali400/mali/linux/mali_linux_trace.h index e6c928dc7c9f..222260823c81 100755 --- a/drivers/gpu/arm/mali400/mali/linux/mali_linux_trace.h +++ b/drivers/gpu/arm/mali400/mali/linux/mali_linux_trace.h @@ -18,7 +18,6 @@ #undef TRACE_SYSTEM #define TRACE_SYSTEM mali -#define TRACE_SYSTEM_STRING __stringfy(TRACE_SYSTEM) #define TRACE_INCLUDE_PATH . #define TRACE_INCLUDE_FILE mali_linux_trace diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory.c b/drivers/gpu/arm/mali400/mali/linux/mali_memory.c index b7ef7391b652..8fa841de786c 100755 --- a/drivers/gpu/arm/mali400/mali/linux/mali_memory.c +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory.c @@ -57,14 +57,15 @@ static void mali_mem_vma_close(struct vm_area_struct *vma) vma->vm_private_data = NULL; } -static int mali_mem_vma_fault(struct vm_area_struct *vma, struct vm_fault *vmf) +static int mali_mem_vma_fault(struct vm_fault *vmf) { + struct vm_area_struct *vma = vmf->vma; mali_mem_allocation *alloc = (mali_mem_allocation *)vma->vm_private_data; mali_mem_backend *mem_bkend = NULL; int ret; int prefetch_num = MALI_VM_NUM_FAULT_PREFETCH; - unsigned long address = (unsigned long)vmf->virtual_address; + unsigned long address = (unsigned long)vmf->address; MALI_DEBUG_ASSERT(alloc->backend_handle); MALI_DEBUG_ASSERT((unsigned long)alloc->cpu_mapping.addr <= address); diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory_os_alloc.c b/drivers/gpu/arm/mali400/mali/linux/mali_memory_os_alloc.c index a04ce36f8fa6..5cbcc75990f8 100755 --- a/drivers/gpu/arm/mali400/mali/linux/mali_memory_os_alloc.c +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory_os_alloc.c @@ -28,11 +28,6 @@ #define MALI_OS_MEMORY_KERNEL_BUFFER_SIZE_IN_PAGES (MALI_OS_MEMORY_KERNEL_BUFFER_SIZE_IN_MB * 256) #define MALI_OS_MEMORY_POOL_TRIM_JIFFIES (10 * CONFIG_HZ) /* Default to 10s */ -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0) -/* Write combine dma_attrs */ -static DEFINE_DMA_ATTRS(dma_attrs_wc); -#endif - #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 0, 0) #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 35) static int mali_mem_os_shrink(int nr_to_scan, gfp_t gfp_mask); @@ -520,7 +515,7 @@ _mali_osk_errcode_t mali_mem_os_get_table_page(mali_dma_addr *phys, mali_io_addr #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0) *mapping = dma_alloc_attrs(&mali_platform_device->dev, _MALI_OSK_MALI_PAGE_SIZE, &tmp_phys, - GFP_KERNEL, &dma_attrs_wc); + GFP_KERNEL, DMA_ATTR_WRITE_COMBINE); #else *mapping = dma_alloc_writecombine(&mali_platform_device->dev, _MALI_OSK_MALI_PAGE_SIZE, &tmp_phys, GFP_KERNEL); @@ -559,7 +554,7 @@ void mali_mem_os_release_table_page(mali_dma_addr phys, void *virt) #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0) dma_free_attrs(&mali_platform_device->dev, _MALI_OSK_MALI_PAGE_SIZE, virt, phys, - &dma_attrs_wc); + DMA_ATTR_WRITE_COMBINE); #else dma_free_writecombine(&mali_platform_device->dev, _MALI_OSK_MALI_PAGE_SIZE, virt, phys); @@ -614,7 +609,8 @@ static void mali_mem_os_page_table_pool_free(size_t nr_to_free) for (i = 0; i < nr_to_free; i++) { #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0) dma_free_attrs(&mali_platform_device->dev, _MALI_OSK_MALI_PAGE_SIZE, - virt_arr[i], (dma_addr_t)phys_arr[i], &dma_attrs_wc); + virt_arr[i], (dma_addr_t)phys_arr[i], + DMA_ATTR_WRITE_COMBINE); #else dma_free_writecombine(&mali_platform_device->dev, _MALI_OSK_MALI_PAGE_SIZE, @@ -763,10 +759,6 @@ _mali_osk_errcode_t mali_mem_os_init(void) return _MALI_OSK_ERR_NOMEM; } -#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 8, 0) - dma_set_attr(DMA_ATTR_WRITE_COMBINE, &dma_attrs_wc); -#endif - register_shrinker(&mali_mem_os_allocator.shrinker); return _MALI_OSK_ERR_OK; diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory_secure.c b/drivers/gpu/arm/mali400/mali/linux/mali_memory_secure.c index 2836b1b76a03..c2308b8a0eb5 100644 --- a/drivers/gpu/arm/mali400/mali/linux/mali_memory_secure.c +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory_secure.c @@ -15,6 +15,7 @@ #include #include #include +#include _mali_osk_errcode_t mali_mem_secure_attach_dma_buf(mali_mem_secure *secure_mem, u32 size, int mem_fd) { diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_memory_swap_alloc.c b/drivers/gpu/arm/mali400/mali/linux/mali_memory_swap_alloc.c index 84fa2f858287..d682785b9673 100644 --- a/drivers/gpu/arm/mali400/mali/linux/mali_memory_swap_alloc.c +++ b/drivers/gpu/arm/mali400/mali/linux/mali_memory_swap_alloc.c @@ -52,7 +52,8 @@ extern struct mali_mem_os_allocator mali_mem_os_allocator; #define MALI_SWAP_LOW_MEM_DEFAULT_VALUE (60*1024*1024) #define MALI_SWAP_INVALIDATE_MALI_ADDRESS (0) /* Used to mark the given memory cookie is invalidate. */ #define MALI_SWAP_GLOBAL_SWAP_FILE_SIZE (0xFFFFFFFF) -#define MALI_SWAP_GLOBAL_SWAP_FILE_INDEX ((MALI_SWAP_GLOBAL_SWAP_FILE_SIZE) >> PAGE_CACHE_SHIFT) +#define MALI_SWAP_GLOBAL_SWAP_FILE_INDEX \ + ((MALI_SWAP_GLOBAL_SWAP_FILE_SIZE) >> PAGE_SHIFT) #define MALI_SWAP_GLOBAL_SWAP_FILE_INDEX_RESERVE (1 << 15) /* Reserved for CoW nonlinear swap backend memory, the space size is 128MB. */ unsigned int mali_mem_swap_out_threshold_value = MALI_SWAP_LOW_MEM_DEFAULT_VALUE; @@ -183,7 +184,7 @@ static void mali_mem_swap_out_page_node(mali_page_node *page_node) dma_unmap_page(&mali_platform_device->dev, page_node->swap_it->dma_addr, _MALI_OSK_MALI_PAGE_SIZE, DMA_TO_DEVICE); set_page_dirty(page_node->swap_it->page); - page_cache_release(page_node->swap_it->page); + put_page(page_node->swap_it->page); } void mali_mem_swap_unlock_single_mem_backend(mali_mem_backend *mem_bkend) @@ -248,7 +249,7 @@ static void mali_mem_swap_swapped_bkend_pool_shrink(_mali_mem_swap_pool_shrink_t } /* Get system free pages number. */ - system_free_size = global_page_state(NR_FREE_PAGES) * PAGE_SIZE; + system_free_size = global_zone_page_state(NR_FREE_PAGES) * PAGE_SIZE; last_gpu_utilization = _mali_ukk_utilization_gp_pp(); if ((last_gpu_utilization < gpu_utilization_threshold_value) @@ -576,7 +577,7 @@ int mali_mem_swap_alloc_pages(mali_mem_swap *swap_mem, u32 size, u32 *bkend_idx) list_add_tail(&m_page->list, &swap_mem->pages); } - system_free_size = global_page_state(NR_FREE_PAGES) * PAGE_SIZE; + system_free_size = global_zone_page_state(NR_FREE_PAGES) * PAGE_SIZE; if ((system_free_size < mali_mem_swap_out_threshold_value) && (mem_backend_swapped_pool_size > (mali_mem_swap_out_threshold_value >> 2)) diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_osk_notification.c b/drivers/gpu/arm/mali400/mali/linux/mali_osk_notification.c index 19e12e38d522..a05f8f066964 100755 --- a/drivers/gpu/arm/mali400/mali/linux/mali_osk_notification.c +++ b/drivers/gpu/arm/mali400/mali/linux/mali_osk_notification.c @@ -57,7 +57,7 @@ _mali_osk_notification_t *_mali_osk_notification_create(u32 type, u32 size) _mali_osk_notification_wrapper_t *notification; notification = (_mali_osk_notification_wrapper_t *)kmalloc(sizeof(_mali_osk_notification_wrapper_t) + size, - GFP_KERNEL | __GFP_HIGH | __GFP_REPEAT); + GFP_KERNEL | __GFP_HIGH | __GFP_RETRY_MAYFAIL); if (NULL == notification) { MALI_DEBUG_PRINT(1, ("Failed to create a notification object\n")); return NULL; diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_osk_specific.h b/drivers/gpu/arm/mali400/mali/linux/mali_osk_specific.h index 19e33f236359..8c2862631870 100755 --- a/drivers/gpu/arm/mali400/mali/linux/mali_osk_specific.h +++ b/drivers/gpu/arm/mali400/mali/linux/mali_osk_specific.h @@ -21,6 +21,7 @@ #include #include #include +#include #include "mali_osk_types.h" diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_osk_timers.c b/drivers/gpu/arm/mali400/mali/linux/mali_osk_timers.c index 7e592b7e6225..d01c1148272a 100755 --- a/drivers/gpu/arm/mali400/mali/linux/mali_osk_timers.c +++ b/drivers/gpu/arm/mali400/mali/linux/mali_osk_timers.c @@ -24,10 +24,12 @@ struct _mali_osk_timer_t_struct { typedef void (*timer_timeout_function_t)(unsigned long); -_mali_osk_timer_t *_mali_osk_timer_init(void) +_mali_osk_timer_t *_mali_osk_timer_init(_mali_osk_timer_callback_t callback) { _mali_osk_timer_t *t = (_mali_osk_timer_t *)kmalloc(sizeof(_mali_osk_timer_t), GFP_KERNEL); - if (NULL != t) init_timer(&t->timer); + if (NULL != t) + timer_setup(&t->timer, + (void (*)(struct timer_list *))callback, 0); return t; } @@ -65,8 +67,6 @@ mali_bool _mali_osk_timer_pending(_mali_osk_timer_t *tim) void _mali_osk_timer_setcallback(_mali_osk_timer_t *tim, _mali_osk_timer_callback_t callback, void *data) { MALI_DEBUG_ASSERT_POINTER(tim); - tim->timer.data = (unsigned long)data; - tim->timer.function = (timer_timeout_function_t)callback; } void _mali_osk_timer_term(_mali_osk_timer_t *tim) diff --git a/drivers/gpu/arm/mali400/mali/linux/mali_ukk_mem.c b/drivers/gpu/arm/mali400/mali/linux/mali_ukk_mem.c index 508b7d1a1897..a620ee006271 100755 --- a/drivers/gpu/arm/mali400/mali/linux/mali_ukk_mem.c +++ b/drivers/gpu/arm/mali400/mali/linux/mali_ukk_mem.c @@ -202,8 +202,8 @@ int mem_write_safe_wrapper(struct mali_session_data *session_data, _mali_uk_mem_ kargs.ctx = (uintptr_t)session_data; /* Check if we can access the buffers */ - if (!access_ok(VERIFY_WRITE, kargs.dest, kargs.size) - || !access_ok(VERIFY_READ, kargs.src, kargs.size)) { + if (!access_ok(VERIFY_WRITE, (const void *)kargs.dest, kargs.size) || + !access_ok(VERIFY_READ, (const void *)kargs.src, kargs.size)) { return -EINVAL; }