Loading drivers/gpu/msm/kgsl.c +22 −4 Original line number Diff line number Diff line Loading @@ -3619,7 +3619,8 @@ err_put: static inline bool mmap_range_valid(unsigned long addr, unsigned long len) { return ((ULONG_MAX - addr) > len) && ((addr + len) < TASK_SIZE); return ((ULONG_MAX - addr) > len) && ((addr + len) < KGSL_SVM_UPPER_BOUND); } /** Loading Loading @@ -3696,7 +3697,15 @@ static int kgsl_check_gpu_addr_collision( if (flag_top_down) { addr = collision_entry->memdesc.gpuaddr - len; if (addr > collision_entry->memdesc.gpuaddr) { ret = -EOVERFLOW; KGSL_CORE_ERR_ONCE( "Underflow err ent:%x/%zx, addr:%lx/%lx align:%u", collision_entry->memdesc.gpuaddr, kgsl_memdesc_mmapsize( &collision_entry->memdesc), addr, len, align); *gpumap_free_addr = KGSL_SVM_UPPER_BOUND; ret = -EAGAIN; break; } } else { Loading @@ -3704,8 +3713,17 @@ static int kgsl_check_gpu_addr_collision( kgsl_memdesc_mmapsize( &collision_entry->memdesc); /* overflow check */ if (addr < collision_entry->memdesc.gpuaddr) { ret = -EOVERFLOW; if (addr < collision_entry->memdesc.gpuaddr || !mmap_range_valid(addr, len)) { KGSL_CORE_ERR_ONCE( "Overflow err ent:%x/%zx, addr:%lx/%lx align:%u", collision_entry->memdesc.gpuaddr, kgsl_memdesc_mmapsize( &collision_entry->memdesc), addr, len, align); *gpumap_free_addr = KGSL_SVM_UPPER_BOUND; ret = -EAGAIN; break; } } Loading drivers/gpu/msm/kgsl_log.h +11 −1 Original line number Diff line number Diff line /* Copyright (c) 2002,2008-2011,2013, The Linux Foundation. All rights reserved. /* Copyright (c) 2002,2008-2011,2013-2014 The Linux Foundation. * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -116,4 +117,13 @@ KGSL_LOG_CRIT(_dev->dev, _dev->pwr_log, fmt, ##args) #define KGSL_CORE_ERR(fmt, args...) \ pr_err("kgsl: %s: " fmt, __func__, ##args) #define KGSL_CORE_ERR_ONCE(fmt, args...) \ ({ \ static bool kgsl_core_err_once; \ if (!kgsl_core_err_once) { \ kgsl_core_err_once = true; \ pr_err("kgsl: %s: " fmt, __func__, ##args); \ } \ }) #endif /* __KGSL_LOG_H */ Loading
drivers/gpu/msm/kgsl.c +22 −4 Original line number Diff line number Diff line Loading @@ -3619,7 +3619,8 @@ err_put: static inline bool mmap_range_valid(unsigned long addr, unsigned long len) { return ((ULONG_MAX - addr) > len) && ((addr + len) < TASK_SIZE); return ((ULONG_MAX - addr) > len) && ((addr + len) < KGSL_SVM_UPPER_BOUND); } /** Loading Loading @@ -3696,7 +3697,15 @@ static int kgsl_check_gpu_addr_collision( if (flag_top_down) { addr = collision_entry->memdesc.gpuaddr - len; if (addr > collision_entry->memdesc.gpuaddr) { ret = -EOVERFLOW; KGSL_CORE_ERR_ONCE( "Underflow err ent:%x/%zx, addr:%lx/%lx align:%u", collision_entry->memdesc.gpuaddr, kgsl_memdesc_mmapsize( &collision_entry->memdesc), addr, len, align); *gpumap_free_addr = KGSL_SVM_UPPER_BOUND; ret = -EAGAIN; break; } } else { Loading @@ -3704,8 +3713,17 @@ static int kgsl_check_gpu_addr_collision( kgsl_memdesc_mmapsize( &collision_entry->memdesc); /* overflow check */ if (addr < collision_entry->memdesc.gpuaddr) { ret = -EOVERFLOW; if (addr < collision_entry->memdesc.gpuaddr || !mmap_range_valid(addr, len)) { KGSL_CORE_ERR_ONCE( "Overflow err ent:%x/%zx, addr:%lx/%lx align:%u", collision_entry->memdesc.gpuaddr, kgsl_memdesc_mmapsize( &collision_entry->memdesc), addr, len, align); *gpumap_free_addr = KGSL_SVM_UPPER_BOUND; ret = -EAGAIN; break; } } Loading
drivers/gpu/msm/kgsl_log.h +11 −1 Original line number Diff line number Diff line /* Copyright (c) 2002,2008-2011,2013, The Linux Foundation. All rights reserved. /* Copyright (c) 2002,2008-2011,2013-2014 The Linux Foundation. * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and Loading Loading @@ -116,4 +117,13 @@ KGSL_LOG_CRIT(_dev->dev, _dev->pwr_log, fmt, ##args) #define KGSL_CORE_ERR(fmt, args...) \ pr_err("kgsl: %s: " fmt, __func__, ##args) #define KGSL_CORE_ERR_ONCE(fmt, args...) \ ({ \ static bool kgsl_core_err_once; \ if (!kgsl_core_err_once) { \ kgsl_core_err_once = true; \ pr_err("kgsl: %s: " fmt, __func__, ##args); \ } \ }) #endif /* __KGSL_LOG_H */