From b2bd18c5a3749ecb56a3314e872cf524d50ed170 Mon Sep 17 00:00:00 2001 From: Sankeerth Billakanti Date: Thu, 11 Jul 2019 15:53:40 +0530 Subject: [PATCH 01/63] drm/msm/dp: add checks to prevent buffer overflows Add checks to prevent buffer overflows through debugfs. Change-Id: I1242a6e94b3182a9a3b0cbef4b04a9f8b14a4103 Signed-off-by: Sankeerth Billakanti --- drivers/gpu/drm/msm/dp/dp_debug.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/msm/dp/dp_debug.c b/drivers/gpu/drm/msm/dp/dp_debug.c index e21614aa41e9..00c521b98a57 100644 --- a/drivers/gpu/drm/msm/dp/dp_debug.c +++ b/drivers/gpu/drm/msm/dp/dp_debug.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2019, The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2020, 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 @@ -176,6 +176,8 @@ static ssize_t dp_debug_write_dpcd(struct file *file, goto bail; size = min_t(size_t, count, SZ_2K); + if (size < 4) + goto bail; buf = kzalloc(size, GFP_KERNEL); if (ZERO_OR_NULL_PTR(buf)) { @@ -204,6 +206,8 @@ static ssize_t dp_debug_write_dpcd(struct file *file, } size -= 4; + if (size == 0) + goto bail; dpcd_size = size / char_to_nib; buf_t = buf + 4; @@ -258,6 +262,7 @@ static ssize_t dp_debug_read_dpcd(struct file *file, if (copy_to_user(user_buff, buf, len)) return -EFAULT; + len = min_t(size_t, count, len); *ppos += len; return len; } @@ -412,7 +417,7 @@ static ssize_t dp_debug_write_exe_mode(struct file *file, const char __user *user_buff, size_t count, loff_t *ppos) { struct dp_debug_private *debug = file->private_data; - char *buf; + char buf[SZ_32]; size_t len = 0; if (!debug) @@ -420,9 +425,11 @@ static ssize_t dp_debug_write_exe_mode(struct file *file, if (*ppos) return 0; - + /* Leave room for termination char */ len = min_t(size_t, count, SZ_32 - 1); - buf = memdup_user(user_buff, len); + if (copy_from_user(buf, user_buff, len)) + goto end; + buf[len] = '\0'; if (sscanf(buf, "%3s", debug->exe_mode) != 1) @@ -453,6 +460,7 @@ static ssize_t dp_debug_read_connected(struct file *file, len += snprintf(buf, SZ_8, "%d\n", debug->usbpd->hpd_high); + len = min_t(size_t, count, len); if (copy_to_user(user_buff, buf, len)) return -EFAULT; @@ -516,6 +524,7 @@ static ssize_t dp_debug_read_edid_modes(struct file *file, } mutex_unlock(&connector->dev->mode_config.mutex); + len = min_t(size_t, count, len); if (copy_to_user(user_buff, buf, len)) { kfree(buf); rc = -EFAULT; @@ -605,6 +614,7 @@ static ssize_t dp_debug_read_info(struct file *file, char __user *user_buff, if (dp_debug_check_buffer_overflow(rc, &max_size, &len)) goto error; + len = min_t(size_t, count, len); if (copy_to_user(user_buff, buf, len)) goto error; @@ -637,6 +647,7 @@ static ssize_t dp_debug_bw_code_read(struct file *file, len += snprintf(buf + len, (SZ_4K - len), "max_bw_code = %d\n", debug->panel->max_bw_code); + len = min_t(size_t, count, len); if (copy_to_user(user_buff, buf, len)) { kfree(buf); return -EFAULT; @@ -662,6 +673,7 @@ static ssize_t dp_debug_tpg_read(struct file *file, len += snprintf(buf, SZ_8, "%d\n", debug->dp_debug.tpg_state); + len = min_t(size_t, count, len); if (copy_to_user(user_buff, buf, len)) return -EFAULT; @@ -852,6 +864,7 @@ static ssize_t dp_debug_read_hdr(struct file *file, goto error; } + len = min_t(size_t, count, len); if (copy_to_user(user_buff, buf, len)) { kfree(buf); rc = -EFAULT; @@ -1011,6 +1024,7 @@ static ssize_t dp_debug_read_dump(struct file *file, print_hex_dump(KERN_DEBUG, prefix, DUMP_PREFIX_NONE, 16, 4, buf, len, false); + len = min_t(size_t, count, len); if (copy_to_user(user_buff, buf, len)) return -EFAULT; From 3afc4ce33d594158bbf59229ef4ac2165aab491b Mon Sep 17 00:00:00 2001 From: Zhen Kong Date: Mon, 24 Sep 2018 14:33:27 -0700 Subject: [PATCH 02/63] qseecom: change to use pr_debug in listener operations change to use pr_debug in listener operation to eliminate excessive log during system reboot test. Change-Id: If2c6d7c3117d422c05c12644b833c0573d3f751b Signed-off-by: Zhen Kong --- drivers/misc/qseecom.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/misc/qseecom.c b/drivers/misc/qseecom.c index c0ca6cdcc822..a5b0ee552628 100644 --- a/drivers/misc/qseecom.c +++ b/drivers/misc/qseecom.c @@ -1,7 +1,7 @@ /* * QTI Secure Execution Environment Communicator (QSEECOM) driver * - * Copyright (c) 2012-2019, The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2018, 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 @@ -1265,7 +1265,7 @@ static int qseecom_register_listener(struct qseecom_dev_handle *data, new_entry->listener_in_use = false; list_add_tail(&new_entry->list, &qseecom.registered_listener_list_head); - pr_warn("Service %d is registered\n", rcvd_lstnr.listener_id); + pr_debug("Service %d is registered\n", rcvd_lstnr.listener_id); return ret; } @@ -1324,7 +1324,7 @@ exit: kzfree(ptr_svc); data->released = true; - pr_warn("Service %d is unregistered\n", data->listener.id); + pr_debug("Service %d is unregistered\n", data->listener.id); return ret; } @@ -3998,7 +3998,7 @@ static int qseecom_receive_req(struct qseecom_dev_handle *data) if (wait_event_interruptible(this_lstnr->rcv_req_wq, __qseecom_listener_has_rcvd_req(data, this_lstnr))) { - pr_warn("Interrupted: exiting Listener Service = %d\n", + pr_debug("Interrupted: exiting Listener Service = %d\n", (uint32_t)data->listener.id); /* woken up for different reason */ return -ERESTARTSYS; From 32e7ba2aeece6ed7fa84571d1ca582ca4853a642 Mon Sep 17 00:00:00 2001 From: Zhen Kong Date: Fri, 20 Sep 2019 13:49:41 -0700 Subject: [PATCH 03/63] qseecom: don't unregister listener when data->released is true Don't unregister listener when data->released is true and only update listener id in private data when listener is registered successfully, to avoid unnecessary unregister operation. Change-Id: I10c3b353ae93a0366d6ea00416cbbe35a6d4ec36 Signed-off-by: Zhen Kong --- drivers/misc/qseecom.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/drivers/misc/qseecom.c b/drivers/misc/qseecom.c index a5b0ee552628..8b2306640bf0 100644 --- a/drivers/misc/qseecom.c +++ b/drivers/misc/qseecom.c @@ -1,7 +1,7 @@ /* * QTI Secure Execution Environment Communicator (QSEECOM) driver * - * Copyright (c) 2012-2018, The Linux Foundation. All rights reserved. + * Copyright (c) 2012-2019, 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 @@ -1216,8 +1216,6 @@ static int qseecom_register_listener(struct qseecom_dev_handle *data, rcvd_lstnr.sb_size)) return -EFAULT; - data->listener.id = rcvd_lstnr.listener_id; - ptr_svc = __qseecom_find_svc(rcvd_lstnr.listener_id); if (ptr_svc) { if (ptr_svc->unregister_pending == false) { @@ -1265,6 +1263,7 @@ static int qseecom_register_listener(struct qseecom_dev_handle *data, new_entry->listener_in_use = false; list_add_tail(&new_entry->list, &qseecom.registered_listener_list_head); + data->listener.id = rcvd_lstnr.listener_id; pr_debug("Service %d is registered\n", rcvd_lstnr.listener_id); return ret; } @@ -1333,6 +1332,11 @@ static int qseecom_unregister_listener(struct qseecom_dev_handle *data) struct qseecom_registered_listener_list *ptr_svc = NULL; struct qseecom_unregister_pending_list *entry = NULL; + if (data->released) { + pr_err("Don't unregister lsnr %d\n", data->listener.id); + return -EINVAL; + } + ptr_svc = __qseecom_find_svc(data->listener.id); if (!ptr_svc) { pr_err("Unregiser invalid listener ID %d\n", data->listener.id); @@ -7870,9 +7874,10 @@ static int qseecom_release(struct inode *inode, struct file *file) switch (data->type) { case QSEECOM_LISTENER_SERVICE: pr_debug("release lsnr svc %d\n", data->listener.id); - free_private_data = false; mutex_lock(&listener_access_lock); ret = qseecom_unregister_listener(data); + if (!ret) + free_private_data = false; data->listener.release_called = true; mutex_unlock(&listener_access_lock); break; From 84d8ca4a21e5dfb4e280e5d457db225c31f901dc Mon Sep 17 00:00:00 2001 From: Manoj Prabhu B Date: Wed, 18 Mar 2020 15:14:53 +0530 Subject: [PATCH 04/63] diag: Prevent resource leakage of task structure The task structure with reference count incremented while dci client is registered should be updated with reference count decremented in failure case of registration. Change-Id: I093229d83dca2699e0343224756895eff0915e38 Signed-off-by: Manoj Prabhu B --- drivers/char/diag/diag_dci.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/char/diag/diag_dci.c b/drivers/char/diag/diag_dci.c index d69688627cbd..2e0244332981 100644 --- a/drivers/char/diag/diag_dci.c +++ b/drivers/char/diag/diag_dci.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2012-2019, The Linux Foundation. All rights reserved. +/* Copyright (c) 2012-2020, 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 @@ -3075,6 +3075,7 @@ fail_alloc: kfree(new_entry); new_entry = NULL; } + put_task_struct(current); mutex_unlock(&driver->dci_mutex); return DIAG_DCI_NO_REG; } From 934900ee1d3b52d875a52305beeb833393f527c4 Mon Sep 17 00:00:00 2001 From: Akhil P Oommen Date: Fri, 6 Mar 2020 16:59:08 +0530 Subject: [PATCH 05/63] msm: kgsl: Fix DMA API warnings Currently, we call dma_buf_map_attachment() with dma direction DMA_TO_DEVICE and DMA_FROM_DEVICE while calling dma_buf_unmap_attachment(). A mismatch of DMA direction during map, unmap or sync of a buffer triggers a warning when CONFIG_DMA_API_DEBUG is enabled like the below one: [6.994847] CPU: 7 PID: 785 at ./lib/dma-debug.c check_unmap+0x664/0xd3c [6.994852] Kernel panic - not syncing: panic_on_warn set ... [6.994852] [6.994859] CPU: 7 PID: 785 Comm: android.hardwar Tainted: G S O 4.14.117-g3254dd9dae41-ab6213388 #1 [6.994862] Hardware name: Qualcomm Technologies, Inc. [6.994866] Call trace: [6.994873] dump_backtrace+0x0/0x1f0 [6.994877] show_stack+0x14/0x1c [6.994883] dump_stack+0xa8/0xe0 [6.994887] panic+0x1ac/0x3a4 [6.994890] __stack_chk_fail+0x0/0x18 [6.994893] report_bug+0x148/0x184 [6.994896] bug_handler+0x28/0x84 [6.994899] brk_handler+0x80/0x13c [6.994902] do_debug_exception+0xc4/0x14c [6.994905] el1_dbg+0x18/0x74 [6.994907] check_unmap+0x664/0xd3c [6.994911] debug_dma_unmap_sg+0x8c/0x160 [6.994916] ion_unmap_dma_buf+0x1f4/0x270 [6.994920] dma_buf_unmap_attachment+0x24/0x38 [6.994925] kgsl_destroy_ion+0xa8/0xd0 [6.994928] kgsl_mem_entry_destroy+0x8c/0x14c [6.994932] kgsl_ioctl_gpuobj_free+0x388/0x420 [6.994936] kgsl_ioctl_helper+0x118/0x148 [6.994939] kgsl_ioctl+0x30/0xbc [6.994942] do_vfs_ioctl+0x5cc/0x910 [6.994945] SyS_ioctl+0x88/0x94 [6.994948] el0_svc_naked+0x34/0x38 We can fix these warnings by using a consistent dma direction during map, unmap and sync which is DMA_BIDIRECTIONAL because GPU may read or write from this buffer. Change-Id: I3f9c7c27418e5e7d0db44761fa68d27560aa8aaf Signed-off-by: Akhil P Oommen Signed-off-by: anuradha lella --- drivers/gpu/msm/kgsl.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/msm/kgsl.c b/drivers/gpu/msm/kgsl.c index 1a9a2db6ac22..7ea862e67c6d 100644 --- a/drivers/gpu/msm/kgsl.c +++ b/drivers/gpu/msm/kgsl.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2008-2019, The Linux Foundation. All rights reserved. +/* Copyright (c) 2008-2020, 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 @@ -272,7 +272,7 @@ static void kgsl_destroy_ion(struct kgsl_dma_buf_meta *meta) { if (meta != NULL) { dma_buf_unmap_attachment(meta->attach, meta->table, - DMA_FROM_DEVICE); + DMA_BIDIRECTIONAL); dma_buf_detach(meta->dmabuf, meta->attach); dma_buf_put(meta->dmabuf); kfree(meta); @@ -2561,7 +2561,7 @@ static int kgsl_setup_dma_buf(struct kgsl_device *device, entry->memdesc.flags &= ~((uint64_t) KGSL_MEMFLAGS_USE_CPU_MAP); entry->memdesc.flags |= (uint64_t)KGSL_MEMFLAGS_USERMEM_ION; - sg_table = dma_buf_map_attachment(attach, DMA_TO_DEVICE); + sg_table = dma_buf_map_attachment(attach, DMA_BIDIRECTIONAL); if (IS_ERR_OR_NULL(sg_table)) { ret = PTR_ERR(sg_table); From 07e725e8dbefd0b898bce1fc819452c031927d7a Mon Sep 17 00:00:00 2001 From: Edgar Flores Date: Fri, 7 Feb 2020 14:59:29 -0800 Subject: [PATCH 06/63] msm: adsprpc: store process specific info in GETINFO ioctl call Currently, process specific info like name and PID is being stored in the internal data structures at the time of device open. But since the DSP HAL service will now be opening the device node on behalf of third-party applications, store process specific info in GETINFO ioctl call which will be the first IOCTL call directly from the client application. Change-Id: If05d48123e4ec52c0271a7cb7f3ca790662d9abe Acked-by: Thyagarajan Venkatanarayanan Signed-off-by: Edgar Flores Signed-off-by: Himateja Reddy --- drivers/char/adsprpc.c | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/drivers/char/adsprpc.c b/drivers/char/adsprpc.c index c8eee1354f7e..24935677567b 100644 --- a/drivers/char/adsprpc.c +++ b/drivers/char/adsprpc.c @@ -3424,11 +3424,8 @@ bail: static int fastrpc_device_open(struct inode *inode, struct file *filp) { int err = 0; - struct dentry *debugfs_file; struct fastrpc_file *fl = NULL; struct fastrpc_apps *me = &gfa; - char strpid[PID_SIZE]; - int buf_size = 0; /* * Indicates the device node opened @@ -3446,13 +3443,6 @@ static int fastrpc_device_open(struct inode *inode, struct file *filp) VERIFY(err, NULL != (fl = kzalloc(sizeof(*fl), GFP_KERNEL))); if (err) return err; - snprintf(strpid, PID_SIZE, "%d", current->pid); - buf_size = strlen(current->comm) + strlen("_") + strlen(strpid) + 1; - fl->debug_buf = kzalloc(buf_size, GFP_KERNEL); - snprintf(fl->debug_buf, UL_SIZE, "%.10s%s%d", - current->comm, "_", current->pid); - debugfs_file = debugfs_create_file(fl->debug_buf, 0644, - debugfs_root, fl, &debugfs_fops); context_list_ctor(&fl->clst); spin_lock_init(&fl->hlock); @@ -3462,14 +3452,11 @@ static int fastrpc_device_open(struct inode *inode, struct file *filp) INIT_HLIST_HEAD(&fl->remote_bufs); INIT_HLIST_NODE(&fl->hn); fl->sessionid = 0; - fl->tgid = current->tgid; fl->apps = me; fl->mode = FASTRPC_MODE_SERIAL; fl->cid = -1; fl->dev_minor = dev_minor; fl->init_mem = NULL; - if (debugfs_file != NULL) - fl->debugfs_file = debugfs_file; fl->qos_request = 0; fl->refcount = 0; filp->private_data = fl; @@ -3483,12 +3470,38 @@ static int fastrpc_device_open(struct inode *inode, struct file *filp) return 0; } +static int fastrpc_set_process_info(struct fastrpc_file *fl) +{ + int err = 0, buf_size = 0; + char strpid[PID_SIZE]; + + fl->tgid = current->tgid; + snprintf(strpid, PID_SIZE, "%d", current->pid); + buf_size = strlen(current->comm) + strlen("_") + strlen(strpid) + 1; + fl->debug_buf = kzalloc(buf_size, GFP_KERNEL); + if (!fl->debug_buf) { + err = -ENOMEM; + return err; + } + snprintf(fl->debug_buf, UL_SIZE, "%.10s%s%d", + current->comm, "_", current->pid); + fl->debugfs_file = debugfs_create_file(fl->debug_buf, 0644, + debugfs_root, fl, &debugfs_fops); + if (!fl->debugfs_file) + pr_warn("Error: %s: %s: failed to create debugfs file %s\n", + current->comm, __func__, fl->debug_buf); + return err; +} + static int fastrpc_get_info(struct fastrpc_file *fl, uint32_t *info) { int err = 0; uint32_t cid; VERIFY(err, fl != NULL); + if (err) + goto bail; + err = fastrpc_set_process_info(fl); if (err) goto bail; if (fl->cid == -1) { From b382ca7f0c00a2f831ba4eda916aa5974f0dd436 Mon Sep 17 00:00:00 2001 From: Anmolpreet Kaur Date: Wed, 6 Mar 2019 14:18:06 +0530 Subject: [PATCH 07/63] qseecom: Fix clang compilation in qseecom driver Make changes to ensure qseecom driver compiles fine with clang enabled. Change-Id: I390a1438425d77c23438fceb5c2c52063b472c90 Signed-off-by: Anmolpreet Kaur Signed-off-by: Swetha Chikkaboraiah --- include/soc/qcom/qseecomi.h | 127 ++++++++++++++++++------------------ 1 file changed, 63 insertions(+), 64 deletions(-) diff --git a/include/soc/qcom/qseecomi.h b/include/soc/qcom/qseecomi.h index a7d4190fe2a2..1b9b8725aea1 100644 --- a/include/soc/qcom/qseecomi.h +++ b/include/soc/qcom/qseecomi.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013-2017, The Linux Foundation. All rights reserved. + * Copyright (c) 2013-2017, 2020 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 @@ -104,82 +104,82 @@ enum qseecom_qsee_reentrancy_phase { QSEE_REENTRANCY_PHASE_MAX = 0xFF }; -__packed struct qsee_apps_region_info_ireq { +struct qsee_apps_region_info_ireq { uint32_t qsee_cmd_id; uint32_t addr; uint32_t size; -}; +} __attribute__((__packed__)); -__packed struct qsee_apps_region_info_64bit_ireq { +struct qsee_apps_region_info_64bit_ireq { uint32_t qsee_cmd_id; uint64_t addr; uint32_t size; -}; +} __attribute__((__packed__)); -__packed struct qseecom_check_app_ireq { +struct qseecom_check_app_ireq { uint32_t qsee_cmd_id; char app_name[MAX_APP_NAME_SIZE]; -}; +} __attribute__((__packed__)); -__packed struct qseecom_load_app_ireq { +struct qseecom_load_app_ireq { uint32_t qsee_cmd_id; uint32_t mdt_len; /* Length of the mdt file */ uint32_t img_len; /* Length of .bxx and .mdt files */ uint32_t phy_addr; /* phy addr of the start of image */ char app_name[MAX_APP_NAME_SIZE]; /* application name*/ -}; +} __attribute__((__packed__)); -__packed struct qseecom_load_app_64bit_ireq { +struct qseecom_load_app_64bit_ireq { uint32_t qsee_cmd_id; uint32_t mdt_len; uint32_t img_len; uint64_t phy_addr; char app_name[MAX_APP_NAME_SIZE]; -}; +} __attribute__((__packed__)); -__packed struct qseecom_unload_app_ireq { +struct qseecom_unload_app_ireq { uint32_t qsee_cmd_id; uint32_t app_id; -}; +} __attribute__((__packed__)); -__packed struct qseecom_load_lib_image_ireq { +struct qseecom_load_lib_image_ireq { uint32_t qsee_cmd_id; uint32_t mdt_len; uint32_t img_len; uint32_t phy_addr; -}; +} __attribute__((__packed__)); -__packed struct qseecom_load_lib_image_64bit_ireq { +struct qseecom_load_lib_image_64bit_ireq { uint32_t qsee_cmd_id; uint32_t mdt_len; uint32_t img_len; uint64_t phy_addr; -}; +} __attribute__((__packed__)); -__packed struct qseecom_unload_lib_image_ireq { +struct qseecom_unload_lib_image_ireq { uint32_t qsee_cmd_id; -}; +} __attribute__((__packed__)); -__packed struct qseecom_register_listener_ireq { +struct qseecom_register_listener_ireq { uint32_t qsee_cmd_id; uint32_t listener_id; uint32_t sb_ptr; uint32_t sb_len; -}; +} __attribute__((__packed__)); -__packed struct qseecom_register_listener_64bit_ireq { +struct qseecom_register_listener_64bit_ireq { uint32_t qsee_cmd_id; uint32_t listener_id; uint64_t sb_ptr; uint32_t sb_len; -}; +} __attribute__((__packed__)); -__packed struct qseecom_unregister_listener_ireq { +struct qseecom_unregister_listener_ireq { uint32_t qsee_cmd_id; uint32_t listener_id; -}; +} __attribute__((__packed__)); -__packed struct qseecom_client_send_data_ireq { +struct qseecom_client_send_data_ireq { uint32_t qsee_cmd_id; uint32_t app_id; uint32_t req_ptr; @@ -188,9 +188,9 @@ __packed struct qseecom_client_send_data_ireq { uint32_t rsp_len; uint32_t sglistinfo_ptr; uint32_t sglistinfo_len; -}; +} __attribute__((__packed__)); -__packed struct qseecom_client_send_data_64bit_ireq { +struct qseecom_client_send_data_64bit_ireq { uint32_t qsee_cmd_id; uint32_t app_id; uint64_t req_ptr; @@ -199,36 +199,36 @@ __packed struct qseecom_client_send_data_64bit_ireq { uint32_t rsp_len; uint64_t sglistinfo_ptr; uint32_t sglistinfo_len; -}; +} __attribute__((__packed__)); -__packed struct qseecom_reg_log_buf_ireq { +struct qseecom_reg_log_buf_ireq { uint32_t qsee_cmd_id; uint32_t phy_addr; uint32_t len; -}; +} __attribute__((__packed__)); -__packed struct qseecom_reg_log_buf_64bit_ireq { +struct qseecom_reg_log_buf_64bit_ireq { uint32_t qsee_cmd_id; uint64_t phy_addr; uint32_t len; -}; +} __attribute__((__packed__)); /* send_data resp */ -__packed struct qseecom_client_listener_data_irsp { +struct qseecom_client_listener_data_irsp { uint32_t qsee_cmd_id; uint32_t listener_id; uint32_t status; uint32_t sglistinfo_ptr; uint32_t sglistinfo_len; -}; +} __attribute__((__packed__)); -__packed struct qseecom_client_listener_data_64bit_irsp { +struct qseecom_client_listener_data_64bit_irsp { uint32_t qsee_cmd_id; uint32_t listener_id; uint32_t status; uint64_t sglistinfo_ptr; uint32_t sglistinfo_len; -}; +} __attribute__((__packed__)); /* * struct qseecom_command_scm_resp - qseecom response buffer @@ -237,40 +237,40 @@ __packed struct qseecom_client_listener_data_64bit_irsp { * buffer * @sb_in_rsp_len: length of command response */ -__packed struct qseecom_command_scm_resp { +struct qseecom_command_scm_resp { uint32_t result; enum qseecom_command_scm_resp_type resp_type; unsigned int data; -}; +} __attribute__((__packed__)); struct qseecom_rpmb_provision_key { uint32_t key_type; }; -__packed struct qseecom_client_send_service_ireq { +struct qseecom_client_send_service_ireq { uint32_t qsee_cmd_id; uint32_t key_type; /* in */ unsigned int req_len; /* in */ uint32_t rsp_ptr; /* in/out */ unsigned int rsp_len; /* in/out */ -}; +} __attribute__((__packed__)); -__packed struct qseecom_client_send_service_64bit_ireq { +struct qseecom_client_send_service_64bit_ireq { uint32_t qsee_cmd_id; uint32_t key_type; unsigned int req_len; uint64_t rsp_ptr; unsigned int rsp_len; -}; +} __attribute__((__packed__)); -__packed struct qseecom_key_generate_ireq { +struct qseecom_key_generate_ireq { uint32_t qsee_command_id; uint32_t flags; uint8_t key_id[QSEECOM_KEY_ID_SIZE]; uint8_t hash32[QSEECOM_HASH_SIZE]; -}; +} __attribute__((__packed__)); -__packed struct qseecom_key_select_ireq { +struct qseecom_key_select_ireq { uint32_t qsee_command_id; uint32_t ce; uint32_t pipe; @@ -278,33 +278,33 @@ __packed struct qseecom_key_select_ireq { uint32_t flags; uint8_t key_id[QSEECOM_KEY_ID_SIZE]; uint8_t hash32[QSEECOM_HASH_SIZE]; -}; +} __attribute__((__packed__)); -__packed struct qseecom_key_delete_ireq { +struct qseecom_key_delete_ireq { uint32_t qsee_command_id; uint32_t flags; uint8_t key_id[QSEECOM_KEY_ID_SIZE]; uint8_t hash32[QSEECOM_HASH_SIZE]; -}; +} __attribute__((__packed__)); -__packed struct qseecom_key_userinfo_update_ireq { +struct qseecom_key_userinfo_update_ireq { uint32_t qsee_command_id; uint32_t flags; uint8_t key_id[QSEECOM_KEY_ID_SIZE]; uint8_t current_hash32[QSEECOM_HASH_SIZE]; uint8_t new_hash32[QSEECOM_HASH_SIZE]; -}; +} __attribute__((__packed__)); -__packed struct qseecom_key_max_count_query_ireq { +struct qseecom_key_max_count_query_ireq { uint32_t flags; -}; +} __attribute__((__packed__)); -__packed struct qseecom_key_max_count_query_irsp { +struct qseecom_key_max_count_query_irsp { uint32_t max_key_count; -}; +} __attribute__((__packed__)); -__packed struct qseecom_qteec_ireq { +struct qseecom_qteec_ireq { uint32_t qsee_cmd_id; uint32_t app_id; uint32_t req_ptr; @@ -313,9 +313,9 @@ __packed struct qseecom_qteec_ireq { uint32_t resp_len; uint32_t sglistinfo_ptr; uint32_t sglistinfo_len; -}; +} __attribute__((__packed__)); -__packed struct qseecom_qteec_64bit_ireq { +struct qseecom_qteec_64bit_ireq { uint32_t qsee_cmd_id; uint32_t app_id; uint64_t req_ptr; @@ -324,21 +324,20 @@ __packed struct qseecom_qteec_64bit_ireq { uint32_t resp_len; uint64_t sglistinfo_ptr; uint32_t sglistinfo_len; -}; +} __attribute__((__packed__)); -__packed struct qseecom_client_send_fsm_key_req { +struct qseecom_client_send_fsm_key_req { uint32_t qsee_cmd_id; uint32_t req_ptr; uint32_t req_len; uint32_t rsp_ptr; uint32_t rsp_len; -}; +} __attribute__((__packed__)); -__packed struct qseecom_continue_blocked_request_ireq { +struct qseecom_continue_blocked_request_ireq { uint32_t qsee_cmd_id; uint32_t app_or_session_id; /*legacy: app_id; smcinvoke: session_id*/ -}; - +} __attribute__((__packed__)); /********** ARMV8 SMC INTERFACE TZ MACRO *******************/ From 31e900b70abfe3b6ac36402fab95058ac6aff7e5 Mon Sep 17 00:00:00 2001 From: Matthias Kaehlcke Date: Thu, 10 Aug 2017 15:24:29 -0700 Subject: [PATCH 08/63] zram: rework copy of compressor name in comp_algorithm_store() comp_algorithm_store() passes the size of the source buffer to strlcpy() instead of the destination buffer size. Make it explicit that the two buffers have the same size and use strcpy() instead of strlcpy(). The latter can be done safely since the function ensures that the string in the source buffer is terminated. Change-Id: I041199959dd43e7ebf115932a2b88b13c1c83655 Link: http://lkml.kernel.org/r/20170803163350.45245-1-mka@chromium.org Signed-off-by: Matthias Kaehlcke Reviewed-by: Douglas Anderson Reviewed-by: Sergey Senozhatsky Acked-by: Minchan Kim Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds Git-Commit: f357e345eef7863da037e0243f2d3df4ba6df986 Git-Repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git Signed-off-by: Swetha Chikkaboraiah --- drivers/block/zram/zram_drv.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/block/zram/zram_drv.c b/drivers/block/zram/zram_drv.c index 58f7c3913dc2..54241319c2a6 100644 --- a/drivers/block/zram/zram_drv.c +++ b/drivers/block/zram/zram_drv.c @@ -357,7 +357,7 @@ static ssize_t comp_algorithm_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t len) { struct zram *zram = dev_to_zram(dev); - char compressor[CRYPTO_MAX_ALG_NAME]; + char compressor[ARRAY_SIZE(zram->compressor)]; size_t sz; strlcpy(compressor, buf, sizeof(compressor)); @@ -376,7 +376,7 @@ static ssize_t comp_algorithm_store(struct device *dev, return -EBUSY; } - strlcpy(zram->compressor, compressor, sizeof(compressor)); + strcpy(zram->compressor, compressor); up_write(&zram->init_lock); return len; } From 8f7d29327aac555de501fc545cd44da33d8ebc52 Mon Sep 17 00:00:00 2001 From: Hardik Arya Date: Tue, 14 Aug 2018 12:48:29 +0530 Subject: [PATCH 09/63] diag: Use strlcpy/strlcat properly Currently strlcpy/strlcat are used like strncpy/strncat in diag driver. The patch corrects the use of strlcpy and strncpy by passing size as size of destination buffer. Change-Id: If8f5376413a6f23405e918469c83568c6c73b552 Signed-off-by: Hardik Arya Signed-off-by: Swetha Chikkaboraiah --- drivers/char/diag/diag_usb.c | 6 +++--- drivers/char/diag/diagchar_core.c | 4 ++-- drivers/char/diag/diagfwd_bridge.c | 6 +++--- drivers/char/diag/diagfwd_cntl.c | 10 ++++++---- drivers/char/diag/diagfwd_hsic.c | 6 +++--- drivers/char/diag/diagfwd_mhi.c | 6 +++--- drivers/char/diag/diagfwd_smux.c | 6 +++--- drivers/char/diag/diagfwd_socket.c | 6 +++--- 8 files changed, 26 insertions(+), 24 deletions(-) diff --git a/drivers/char/diag/diag_usb.c b/drivers/char/diag/diag_usb.c index 24a9f8af728a..10c46a175ce3 100644 --- a/drivers/char/diag/diag_usb.c +++ b/drivers/char/diag/diag_usb.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2014-2016, 2018 The Linux Foundation. All rights reserved. +/* Copyright (c) 2014-2016, 2018, 2020, 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 @@ -635,8 +635,8 @@ int diag_usb_register(int id, int ctxt, struct diag_mux_ops *ops) INIT_WORK(&(ch->read_done_work), usb_read_done_work_fn); INIT_WORK(&(ch->connect_work), usb_connect_work_fn); INIT_WORK(&(ch->disconnect_work), usb_disconnect_work_fn); - strlcpy(wq_name, "DIAG_USB_", DIAG_USB_STRING_SZ); - strlcat(wq_name, ch->name, sizeof(ch->name)); + strlcpy(wq_name, "DIAG_USB_", sizeof(wq_name)); + strlcat(wq_name, ch->name, sizeof(wq_name)); ch->usb_wq = create_singlethread_workqueue(wq_name); if (!ch->usb_wq) goto err; diff --git a/drivers/char/diag/diagchar_core.c b/drivers/char/diag/diagchar_core.c index 55a7380da391..384466a1e51e 100644 --- a/drivers/char/diag/diagchar_core.c +++ b/drivers/char/diag/diagchar_core.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2008-2019, The Linux Foundation. All rights reserved. +/* Copyright (c) 2008-2020, 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 @@ -4067,7 +4067,7 @@ static int __init diagchar_init(void) pr_debug("diagchar initializing ..\n"); driver->num = 1; driver->name = ((void *)driver) + sizeof(struct diagchar_dev); - strlcpy(driver->name, "diag", 4); + strlcpy(driver->name, "diag", 5); /* Get major number from kernel and initialize */ ret = alloc_chrdev_region(&dev, driver->minor_start, driver->num, driver->name); diff --git a/drivers/char/diag/diagfwd_bridge.c b/drivers/char/diag/diagfwd_bridge.c index 5de7897b31a2..f11f8ad69648 100644 --- a/drivers/char/diag/diagfwd_bridge.c +++ b/drivers/char/diag/diagfwd_bridge.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2012-2017, The Linux Foundation. All rights reserved. +/* Copyright (c) 2012-2018, 2020, 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 @@ -176,8 +176,8 @@ int diagfwd_bridge_register(int id, int ctxt, struct diag_remote_dev_ops *ops) if (!ch->dci_read_buf) return -ENOMEM; ch->dci_read_len = 0; - strlcpy(wq_name, "diag_dci_", 10); - strlcat(wq_name, ch->name, sizeof(ch->name)); + strlcpy(wq_name, "diag_dci_", sizeof(wq_name)); + strlcat(wq_name, ch->name, sizeof(wq_name)); INIT_WORK(&(ch->dci_read_work), bridge_dci_read_work_fn); ch->dci_wq = create_singlethread_workqueue(wq_name); if (!ch->dci_wq) { diff --git a/drivers/char/diag/diagfwd_cntl.c b/drivers/char/diag/diagfwd_cntl.c index e20246894984..bbb7481cd7f9 100644 --- a/drivers/char/diag/diagfwd_cntl.c +++ b/drivers/char/diag/diagfwd_cntl.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2011-2018, The Linux Foundation. All rights reserved. +/* Copyright (c) 2011-2018, 2020, 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 @@ -724,6 +724,7 @@ int diag_add_diag_id_to_list(uint8_t diag_id, char *process_name, uint8_t pd_val, uint8_t peripheral) { struct diag_id_tbl_t *new_item = NULL; + int process_len = 0; if (!process_name || diag_id == 0) return -EINVAL; @@ -732,7 +733,8 @@ int diag_add_diag_id_to_list(uint8_t diag_id, char *process_name, if (!new_item) return -ENOMEM; kmemleak_not_leak(new_item); - new_item->process_name = kzalloc(strlen(process_name) + 1, GFP_KERNEL); + process_len = strlen(process_name); + new_item->process_name = kzalloc(process_len + 1, GFP_KERNEL); if (!new_item->process_name) { kfree(new_item); new_item = NULL; @@ -742,7 +744,7 @@ int diag_add_diag_id_to_list(uint8_t diag_id, char *process_name, new_item->diag_id = diag_id; new_item->pd_val = pd_val; new_item->peripheral = peripheral; - strlcpy(new_item->process_name, process_name, strlen(process_name) + 1); + strlcpy(new_item->process_name, process_name, process_len + 1); INIT_LIST_HEAD(&new_item->link); mutex_lock(&driver->diag_id_mutex); list_add_tail(&new_item->link, &driver->diag_id_list); @@ -838,7 +840,7 @@ static void process_diagid(uint8_t *buf, uint32_t len, ctrl_pkt.pkt_id = DIAG_CTRL_MSG_DIAGID; ctrl_pkt.version = 1; strlcpy((char *)&ctrl_pkt.process_name, process_name, - strlen(process_name) + 1); + sizeof(ctrl_pkt.process_name)); ctrl_pkt.len = sizeof(ctrl_pkt.diag_id) + sizeof(ctrl_pkt.version) + strlen(process_name) + 1; err = diagfwd_write(peripheral, TYPE_CNTL, &ctrl_pkt, ctrl_pkt.len + diff --git a/drivers/char/diag/diagfwd_hsic.c b/drivers/char/diag/diagfwd_hsic.c index 81afcaeaf3db..df5c79bf09cb 100644 --- a/drivers/char/diag/diagfwd_hsic.c +++ b/drivers/char/diag/diagfwd_hsic.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2012-2014, 2016 The Linux Foundation. All rights reserved. +/* Copyright (c) 2012-2014, 2016, 2020, 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 @@ -407,8 +407,8 @@ int diag_hsic_init(void) INIT_WORK(&(ch->read_work), hsic_read_work_fn); INIT_WORK(&(ch->open_work), hsic_open_work_fn); INIT_WORK(&(ch->close_work), hsic_close_work_fn); - strlcpy(wq_name, "DIAG_HSIC_", DIAG_HSIC_STRING_SZ); - strlcat(wq_name, ch->name, sizeof(ch->name)); + strlcpy(wq_name, "DIAG_HSIC_", sizeof(wq_name)); + strlcat(wq_name, ch->name, sizeof(wq_name)); ch->hsic_wq = create_singlethread_workqueue(wq_name); if (!ch->hsic_wq) goto fail; diff --git a/drivers/char/diag/diagfwd_mhi.c b/drivers/char/diag/diagfwd_mhi.c index 6f418681c8ff..118907a27458 100644 --- a/drivers/char/diag/diagfwd_mhi.c +++ b/drivers/char/diag/diagfwd_mhi.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2014-2018, The Linux Foundation. All rights reserved. +/* Copyright (c) 2014-2018, 2020, 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 @@ -695,8 +695,8 @@ int diag_mhi_init(void) INIT_WORK(&(mhi_info->read_done_work), mhi_read_done_work_fn); INIT_WORK(&(mhi_info->open_work), mhi_open_work_fn); INIT_WORK(&(mhi_info->close_work), mhi_close_work_fn); - strlcpy(wq_name, "diag_mhi_", DIAG_MHI_STRING_SZ); - strlcat(wq_name, mhi_info->name, sizeof(mhi_info->name)); + strlcpy(wq_name, "diag_mhi_", sizeof(wq_name)); + strlcat(wq_name, mhi_info->name, sizeof(wq_name)); diagmem_init(driver, mhi_info->mempool); mhi_info->mempool_init = 1; mhi_info->mhi_wq = create_singlethread_workqueue(wq_name); diff --git a/drivers/char/diag/diagfwd_smux.c b/drivers/char/diag/diagfwd_smux.c index 33f91d15c0b3..aee6b954459f 100644 --- a/drivers/char/diag/diagfwd_smux.c +++ b/drivers/char/diag/diagfwd_smux.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2012, 2014, 2016 The Linux Foundation. All rights reserved. +/* Copyright (c) 2012, 2014, 2016, 2020, 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 @@ -286,8 +286,8 @@ int diag_smux_init(void) for (i = 0; i < NUM_SMUX_DEV; i++) { ch = &diag_smux[i]; - strlcpy(wq_name, "DIAG_SMUX_", 11); - strlcat(wq_name, ch->name, sizeof(ch->name)); + strlcpy(wq_name, "DIAG_SMUX_", sizeof(wq_name)); + strlcat(wq_name, ch->name, sizeof(wq_name)); ch->smux_wq = create_singlethread_workqueue(wq_name); if (!ch->smux_wq) { err = -ENOMEM; diff --git a/drivers/char/diag/diagfwd_socket.c b/drivers/char/diag/diagfwd_socket.c index 401dbb0f7c25..646b39cb0fd1 100644 --- a/drivers/char/diag/diagfwd_socket.c +++ b/drivers/char/diag/diagfwd_socket.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved. +/* Copyright (c) 2015-2018, 2020, 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 @@ -767,8 +767,8 @@ static void __diag_socket_init(struct diag_socket_info *info) info->data_ready = 0; atomic_set(&info->flow_cnt, 0); spin_lock_init(&info->lock); - strlcpy(wq_name, "DIAG_SOCKET_", 10); - strlcat(wq_name, info->name, sizeof(info->name)); + strlcpy(wq_name, "DIAG_SOCKET_", sizeof(wq_name)); + strlcpy(wq_name, info->name, sizeof(wq_name)); init_waitqueue_head(&info->read_wait_q); info->wq = create_singlethread_workqueue(wq_name); if (!info->wq) { From 26cc3fcd4f50b00e76c07fcca4852799dbda3e9d Mon Sep 17 00:00:00 2001 From: Matthias Kaehlcke Date: Mon, 30 Oct 2017 11:08:16 -0700 Subject: [PATCH 10/63] sched/sysctl: Fix attributes of some extern declarations The definition of sysctl_sched_migration_cost, sysctl_sched_nr_migrate and sysctl_sched_time_avg includes the attribute const_debug. This attribute is not part of the extern declaration of these variables in include/linux/sched/sysctl.h, while it is in kernel/sched/sched.h, and as a result Clang generates warnings like this: kernel/sched/sched.h:1618:33: warning: section attribute is specified on redeclared variable [-Wsection] extern const_debug unsigned int sysctl_sched_time_avg; ^ ./include/linux/sched/sysctl.h:42:21: note: previous declaration is here extern unsigned int sysctl_sched_time_avg; The header only declares the variables when CONFIG_SCHED_DEBUG is defined, therefore it is not necessary to duplicate the definition of const_debug. Instead we can use the attribute __read_mostly, which is the expansion of const_debug when CONFIG_SCHED_DEBUG=y is set. Change-Id: I49537778bdb93f0ec1e0ceade94a3d32dd30b09f Signed-off-by: Matthias Kaehlcke Reviewed-by: Nick Desaulniers Cc: Douglas Anderson Cc: Guenter Roeck Cc: Linus Torvalds Cc: Peter Zijlstra Cc: Shile Zhang Cc: Thomas Gleixner Link: http://lkml.kernel.org/r/20171030180816.170850-1-mka@chromium.org Signed-off-by: Ingo Molnar Git-commit: 264aed7c2d2c7159a8980a3a897a9e118b5a69f1 Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git Signed-off-by: Prasad Sodagudi [clingutla@codeaurora.org: Resolved minor merge conflicts] Signed-off-by: Lingutla Chandrasekhar Signed-off-by: Swetha Chikkaboraiah --- include/linux/sched/sysctl.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/include/linux/sched/sysctl.h b/include/linux/sched/sysctl.h index 99948cbb198d..d4a1fc6be744 100644 --- a/include/linux/sched/sysctl.h +++ b/include/linux/sched/sysctl.h @@ -61,9 +61,10 @@ extern unsigned int sysctl_numa_balancing_scan_period_max; extern unsigned int sysctl_numa_balancing_scan_size; #ifdef CONFIG_SCHED_DEBUG -extern unsigned int sysctl_sched_migration_cost; -extern unsigned int sysctl_sched_nr_migrate; -extern unsigned int sysctl_sched_time_avg; +extern __read_mostly unsigned int sysctl_sched_migration_cost; +extern __read_mostly unsigned int sysctl_sched_nr_migrate; +extern __read_mostly unsigned int sysctl_sched_time_avg; + extern unsigned int sysctl_sched_shares_window; int sched_proc_update_handler(struct ctl_table *table, int write, From ca6c2dca739c918760c456071a2ff900f3b702cf Mon Sep 17 00:00:00 2001 From: Nick Desaulniers Date: Mon, 10 Jul 2017 15:47:26 -0700 Subject: [PATCH 11/63] mm/zsmalloc.c: fix -Wunneeded-internal-declaration warning is_first_page() is only called from the macro VM_BUG_ON_PAGE() which is only compiled in as a runtime check when CONFIG_DEBUG_VM is set, otherwise is checked at compile time and not actually compiled in. Fixes the following warning, found with Clang: mm/zsmalloc.c:472:12: warning: function 'is_first_page' is not needed and will not be emitted [-Wunneeded-internal-declaration] static int is_first_page(struct page *page) ^ Link: http://lkml.kernel.org/r/20170524053859.29059-1-nick.desaulniers@gmail.com Signed-off-by: Nick Desaulniers Reviewed-by: Sergey Senozhatsky Acked-by: Minchan Kim Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds Git-Commit: 3457f4147675108aa83f9f33c136f06bb9f8518f Git-Repo: git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git Change-Id: I0dded99709c7c0236fd47a97d9fee6a51177783a Signed-off-by: Vijayanand Jitta Signed-off-by: Swetha Chikkaboraiah --- mm/zsmalloc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index d3548c48369f..978e519f4a02 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -473,7 +473,7 @@ static bool is_zspage_isolated(struct zspage *zspage) return zspage->isolated; } -static int is_first_page(struct page *page) +static __maybe_unused int is_first_page(struct page *page) { return PagePrivate(page); } From 09b7dbff349a04a0824f26fce81f02f404d0df53 Mon Sep 17 00:00:00 2001 From: Mulu He Date: Wed, 6 Jun 2018 10:18:58 +0800 Subject: [PATCH 12/63] coresight: stm: Wrong condition check in unlink function Wrong method used in parameter check for "entities", intent to zero check for all bits in the "entities" array, but only check the pointer so need replaced by bitmap_empty. Change-Id: Id4ae42ebae3014741780da4450ff4ecbbeb1f2dc Signed-off-by: Mulu He Signed-off-by: Swetha Chikkaboraiah --- drivers/hwtracing/coresight/coresight-stm.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/hwtracing/coresight/coresight-stm.c b/drivers/hwtracing/coresight/coresight-stm.c index 159512c5f342..e8cc5699ac77 100644 --- a/drivers/hwtracing/coresight/coresight-stm.c +++ b/drivers/hwtracing/coresight/coresight-stm.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved. +/* Copyright (c) 2015-2017, 2020, The Linux Foundation. All rights reserved. * * Description: CoreSight System Trace Macrocell driver * @@ -297,7 +297,7 @@ static void stm_generic_unlink(struct stm_data *stm_data, return; /* If any OST entity is enabled do not disable the device */ - if (drvdata->entities) + if (!bitmap_empty(drvdata->entities, OST_ENTITY_MAX)) return; coresight_disable(drvdata->csdev); From 50faafe3b5d1c12176acf4a029c34d53fc3bb7de Mon Sep 17 00:00:00 2001 From: Manu Gautam Date: Wed, 6 Mar 2019 16:24:06 +0530 Subject: [PATCH 13/63] usb_bam: Fix usb bam_type assignment during suspend Driver incorrectly uses bam_mode (device/host) as bam_type (dwc3/CI). This logic will work as long as bus-suspend happens for dwc3 in device mode with BAM function but will fail with CI core in device mode. However host mode BAM pipes are no longer supported. Fix this by using proper variable for bam_type instead of cur_bam_mode. Change-Id: Id3b2bf3e578b5c339c46c940645b439dfafd28fb Signed-off-by: Manu Gautam Signed-off-by: Swetha Chikkaboraiah --- drivers/platform/msm/usb_bam.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/platform/msm/usb_bam.c b/drivers/platform/msm/usb_bam.c index 9374bc8475ad..06166400966f 100644 --- a/drivers/platform/msm/usb_bam.c +++ b/drivers/platform/msm/usb_bam.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2011-2018, The Linux Foundation. All rights reserved. +/* Copyright (c) 2011-2018, 2020, 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 @@ -1478,7 +1478,7 @@ void usb_bam_finish_suspend_(struct work_struct *w) info_ptr = container_of(w, struct usb_bam_ipa_handshake_info, finish_suspend_work); - cur_bam = info_ptr->cur_bam_mode; + cur_bam = info_ptr->bam_type; log_event_dbg("%s: Finishing suspend sequence(BAM=%s)\n", __func__, bam_enable_strings[cur_bam]); From 833b42ab66060e7b628e7648e09033f013092c59 Mon Sep 17 00:00:00 2001 From: Praveen Kurapati Date: Tue, 26 Mar 2019 11:58:56 +0530 Subject: [PATCH 14/63] msm: ipa3: Fix compilation errors after enabling LLVM After enabling compilation with LLVM for ipa driver, assignment errors occurred. Added changes to resolve compilation warnings. Change-Id: I66b8c3f37677586955e5aba3250bc24bd93bad62 Signed-off-by: Praveen Kurapati Signed-off-by: Swetha Chikkaboraiah --- drivers/platform/msm/ipa/ipa_v3/ipa_rt.c | 4 ++-- drivers/platform/msm/ipa/ipa_v3/rmnet_ipa.c | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/drivers/platform/msm/ipa/ipa_v3/ipa_rt.c b/drivers/platform/msm/ipa/ipa_v3/ipa_rt.c index aa06de41fefe..8b84fd016d1f 100644 --- a/drivers/platform/msm/ipa/ipa_v3/ipa_rt.c +++ b/drivers/platform/msm/ipa/ipa_v3/ipa_rt.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved. +/* Copyright (c) 2012-2018, 2020, 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 @@ -1242,7 +1242,7 @@ int ipa3_add_rt_rule_after(struct ipa_ioc_add_rt_rule_after *rules) tbl = __ipa3_find_rt_tbl(rules->ip, rules->rt_tbl_name); if (tbl == NULL || (tbl->cookie != IPA_RT_TBL_COOKIE)) { IPAERR_RL("failed finding rt tbl name = %s\n", - rules->rt_tbl_name ? rules->rt_tbl_name : ""); + (rules->rt_tbl_name != NULL) ? rules->rt_tbl_name : ""); ret = -EINVAL; goto bail; } diff --git a/drivers/platform/msm/ipa/ipa_v3/rmnet_ipa.c b/drivers/platform/msm/ipa/ipa_v3/rmnet_ipa.c index 7eebf38e1d4d..9836196d2d14 100644 --- a/drivers/platform/msm/ipa/ipa_v3/rmnet_ipa.c +++ b/drivers/platform/msm/ipa/ipa_v3/rmnet_ipa.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2014-2018, The Linux Foundation. All rights reserved. +/* Copyright (c) 2014-2018, 2020, 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 @@ -728,7 +728,8 @@ static int ipa3_wwan_add_ul_flt_rule_to_ipa(void) retval = -EFAULT; } - req->install_status = QMI_RESULT_SUCCESS_V01; + req->install_status = (enum ipa_qmi_result_type_v01) + QMI_RESULT_SUCCESS_V01; req->rule_id_valid = 1; req->rule_id_len = rmnet_ipa3_ctx->num_q6_rules; for (i = 0; i < rmnet_ipa3_ctx->num_q6_rules; i++) { From 9e83f237b3922449476a696b1d6cb3995b571089 Mon Sep 17 00:00:00 2001 From: Prerna Kalla Date: Mon, 30 Mar 2020 17:31:07 +0530 Subject: [PATCH 15/63] crypto: msm: restrict value of num_fds to QCEDEV_MAX_BUFFERS Set the max value of num_fds to QCEDEV_MAX_BUFFERS to prevent out of bound access of fd, fd_size, fd_offset array. Change-Id: I88889472a4bd14f786588bd2c9e06e69a98e94c9 Signed-off-by: Prerna Kalla --- drivers/crypto/msm/qcedev.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/crypto/msm/qcedev.c b/drivers/crypto/msm/qcedev.c index d58144f3b6e6..52bcea35868b 100644 --- a/drivers/crypto/msm/qcedev.c +++ b/drivers/crypto/msm/qcedev.c @@ -1,7 +1,7 @@ /* * QTI CE device driver. * - * Copyright (c) 2010-2018, The Linux Foundation. All rights reserved. + * Copyright (c) 2010-2020, 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 @@ -1878,6 +1878,11 @@ static inline long qcedev_ioctl(struct file *file, (void __user *)arg, sizeof(map_buf))) return -EFAULT; + if (map_buf.num_fds > QCEDEV_MAX_BUFFERS) { + err = -EINVAL; + return err; + } + for (i = 0; i < map_buf.num_fds; i++) { err = qcedev_check_and_map_buffer(handle, map_buf.fd[i], From 8b373f1b235cc73d56533f85f4040d619ca8b5ce Mon Sep 17 00:00:00 2001 From: Matthias Kaehlcke Date: Fri, 8 Sep 2017 16:13:02 -0700 Subject: [PATCH 16/63] mm/zsmalloc.c: change stat type parameter to int zs_stat_inc/dec/get() uses enum zs_stat_type for the stat type, however some callers pass an enum fullness_group value. Change the type to int to reflect the actual use of the functions and get rid of 'enum-conversion' warnings. Change-Id: I15afde493223afdfeb4d007dfa3359a34f6d1df7 Link: http://lkml.kernel.org/r/20170731175000.56538-1-mka@chromium.org Signed-off-by: Matthias Kaehlcke Reviewed-by: Sergey Senozhatsky Acked-by: Minchan Kim Cc: Doug Anderson Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds Git-Commit: 3eb95feac113d8ebad5b7b5189a65efcbd95a749 Git-Repo: git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git Signed-off-by: Vijayanand Jitta --- mm/zsmalloc.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/mm/zsmalloc.c b/mm/zsmalloc.c index 1689bb58e0d1..243446979db8 100644 --- a/mm/zsmalloc.c +++ b/mm/zsmalloc.c @@ -558,20 +558,23 @@ static int get_size_class_index(int size) return min(zs_size_classes - 1, idx); } +/* type can be of enum type zs_stat_type or fullness_group */ static inline void zs_stat_inc(struct size_class *class, - enum zs_stat_type type, unsigned long cnt) + int type, unsigned long cnt) { class->stats.objs[type] += cnt; } +/* type can be of enum type zs_stat_type or fullness_group */ static inline void zs_stat_dec(struct size_class *class, - enum zs_stat_type type, unsigned long cnt) + int type, unsigned long cnt) { class->stats.objs[type] -= cnt; } +/* type can be of enum type zs_stat_type or fullness_group */ static inline unsigned long zs_stat_get(struct size_class *class, - enum zs_stat_type type) + int type) { return class->stats.objs[type]; } From 2c2da2d40fa08f311bc17d46cf80f85d9d20244d Mon Sep 17 00:00:00 2001 From: Chenbo Feng Date: Tue, 14 May 2019 19:42:57 -0700 Subject: [PATCH 17/63] bpf: relax inode permission check for retrieving bpf program For iptable module to load a bpf program from a pinned location, it only retrieve a loaded program and cannot change the program content so requiring a write permission for it might not be necessary. Also when adding or removing an unrelated iptable rule, it might need to flush and reload the xt_bpf related rules as well and triggers the inode permission check. It might be better to remove the write premission check for the inode so we won't need to grant write access to all the processes that flush and restore iptables rules. Change-Id: Ie622e772ca38ab92996a60f661705bb9277f390f Git-commit: e547ff3f803e779a3898f1f48447b29f43c54085 Git-repo: https://android.googlesource.com/kernel/common/ Signed-off-by: Chenbo Feng Signed-off-by: Sharath Chandra Vurukala --- kernel/bpf/inode.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/bpf/inode.c b/kernel/bpf/inode.c index 7e48fa609579..002a0b9dacdd 100644 --- a/kernel/bpf/inode.c +++ b/kernel/bpf/inode.c @@ -325,7 +325,7 @@ out: static struct bpf_prog *__get_prog_inode(struct inode *inode, enum bpf_prog_type type) { struct bpf_prog *prog; - int ret = inode_permission(inode, MAY_READ | MAY_WRITE); + int ret = inode_permission(inode, MAY_READ); if (ret) return ERR_PTR(ret); From 0be6134a420604cea3fd53c2dc0d1ca3a8c87950 Mon Sep 17 00:00:00 2001 From: Matthias Kaehlcke Date: Fri, 21 Apr 2017 16:41:10 -0700 Subject: [PATCH 18/63] tracing: Use cpumask_available() to check if cpumask variable may be used This fixes the following clang warning: kernel/trace/trace.c:3231:12: warning: address of array 'iter->started' will always evaluate to 'true' [-Wpointer-bool-conversion] if (iter->started) Link: http://lkml.kernel.org/r/20170421234110.117075-1-mka@chromium.org . Change-Id: I992e980dd4cd30d2a3c0ffe4f6b5a7c410aef4fa Signed-off-by: Matthias Kaehlcke Signed-off-by: Steven Rostedt (VMware) Git-Commit: 4dbbe2d8e95c351157f292ece067f985c30c7b53 Git-Repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git Signed-off-by: Swetha Chikkaboraiah --- kernel/trace/trace.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c index 046abb084dbe..de11b815ad0e 100644 --- a/kernel/trace/trace.c +++ b/kernel/trace/trace.c @@ -3078,13 +3078,14 @@ static void test_cpu_buff_start(struct trace_iterator *iter) if (!(iter->iter_flags & TRACE_FILE_ANNOTATE)) return; - if (iter->started && cpumask_test_cpu(iter->cpu, iter->started)) + if (cpumask_available(iter->started) && + cpumask_test_cpu(iter->cpu, iter->started)) return; if (per_cpu_ptr(iter->trace_buffer->data, iter->cpu)->skipped_entries) return; - if (iter->started) + if (cpumask_available(iter->started)) cpumask_set_cpu(iter->cpu, iter->started); /* Don't print started cpu buffer for the first entry of the trace */ From 37fe598d64c297ceac02edf6318e677ab2600089 Mon Sep 17 00:00:00 2001 From: Vijayanand Jitta Date: Wed, 6 Mar 2019 10:48:07 +0530 Subject: [PATCH 19/63] ion: Fix typecasting of msm_ion_heap_types msm_ion_heap_types type variable is assigned to a ion_heap_type variable, typecast this properly to ion_heap_type before assigning also fix is_cp_flag_present function by using bitwise operators instead of logical operators and consider ION_FLAG_SECURE as well while allocating through system secure heap. Change-Id: I7f65c5d5d92e3007a1f803e7438ccbfb672907e6 Signed-off-by: Vijayanand Jitta Signed-off-by: Swetha Chikkaboraiah --- drivers/staging/android/ion/ion_carveout_heap.c | 2 +- drivers/staging/android/ion/ion_cma_heap.c | 6 +++--- drivers/staging/android/ion/ion_cma_secure_heap.c | 4 ++-- .../staging/android/ion/ion_system_secure_heap.c | 14 +++++++------- drivers/staging/android/ion/msm/msm_ion.c | 12 ++++++++---- 5 files changed, 21 insertions(+), 17 deletions(-) diff --git a/drivers/staging/android/ion/ion_carveout_heap.c b/drivers/staging/android/ion/ion_carveout_heap.c index 492a93deeb88..e2a566aefc42 100644 --- a/drivers/staging/android/ion/ion_carveout_heap.c +++ b/drivers/staging/android/ion/ion_carveout_heap.c @@ -420,7 +420,7 @@ struct ion_heap *ion_secure_carveout_heap_create( } manager->heap.ops = &ion_sc_heap_ops; - manager->heap.type = ION_HEAP_TYPE_SECURE_CARVEOUT; + manager->heap.type = (enum ion_heap_type)ION_HEAP_TYPE_SECURE_CARVEOUT; return &manager->heap; err: diff --git a/drivers/staging/android/ion/ion_cma_heap.c b/drivers/staging/android/ion/ion_cma_heap.c index 3f0ebe861e2f..90914a4d3c91 100644 --- a/drivers/staging/android/ion/ion_cma_heap.c +++ b/drivers/staging/android/ion/ion_cma_heap.c @@ -4,7 +4,7 @@ * Copyright (C) Linaro 2012 * Author: for ST-Ericsson. * - * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved. + * Copyright (c) 2016-2018, 2020, The Linux Foundation. All rights reserved. * * This software is licensed under the terms of the GNU General Public * License version 2, as published by the Free Software Foundation, and @@ -258,7 +258,7 @@ struct ion_heap *ion_cma_heap_create(struct ion_platform_heap *data) * used to make the link with reserved CMA memory */ heap->priv = data->priv; - heap->type = ION_HEAP_TYPE_DMA; + heap->type = (enum ion_heap_type)ION_HEAP_TYPE_DMA; cma_heap_has_outer_cache = data->has_outer_cache; return heap; } @@ -440,7 +440,7 @@ struct ion_heap *ion_cma_secure_heap_create(struct ion_platform_heap *data) * used to make the link with reserved CMA memory */ heap->priv = data->priv; - heap->type = ION_HEAP_TYPE_HYP_CMA; + heap->type = (enum ion_heap_type)ION_HEAP_TYPE_HYP_CMA; cma_heap_has_outer_cache = data->has_outer_cache; return heap; } diff --git a/drivers/staging/android/ion/ion_cma_secure_heap.c b/drivers/staging/android/ion/ion_cma_secure_heap.c index b2eac281e805..26c13ec79cc6 100644 --- a/drivers/staging/android/ion/ion_cma_secure_heap.c +++ b/drivers/staging/android/ion/ion_cma_secure_heap.c @@ -3,7 +3,7 @@ * * Copyright (C) Linaro 2012 * Author: for ST-Ericsson. - * Copyright (c) 2013-2017, The Linux Foundation. All rights reserved. + * Copyright (c) 2013-2017, 2020, The Linux Foundation. All rights reserved. * * This software is licensed under the terms of the GNU General Public * License version 2, as published by the Free Software Foundation, and @@ -859,7 +859,7 @@ struct ion_heap *ion_secure_cma_heap_create(struct ion_platform_heap *data) mutex_init(&sheap->chunk_lock); mutex_init(&sheap->alloc_lock); sheap->heap.ops = &ion_secure_cma_ops; - sheap->heap.type = ION_HEAP_TYPE_SECURE_DMA; + sheap->heap.type = (enum ion_heap_type)ION_HEAP_TYPE_SECURE_DMA; sheap->npages = data->size >> PAGE_SHIFT; sheap->base = data->base; sheap->heap_size = data->size; diff --git a/drivers/staging/android/ion/ion_system_secure_heap.c b/drivers/staging/android/ion/ion_system_secure_heap.c index cf86ea21838a..f913672f8426 100644 --- a/drivers/staging/android/ion/ion_system_secure_heap.c +++ b/drivers/staging/android/ion/ion_system_secure_heap.c @@ -1,6 +1,6 @@ /* * - * Copyright (c) 2014-2016,2018 The Linux Foundation. All rights reserved. + * Copyright (c) 2014-2016, 2018, 2020, 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 @@ -49,10 +49,10 @@ struct prefetch_info { static bool is_cp_flag_present(unsigned long flags) { - return flags && (ION_FLAG_CP_TOUCH || - ION_FLAG_CP_BITSTREAM || - ION_FLAG_CP_PIXEL || - ION_FLAG_CP_NON_PIXEL || + return flags & (ION_FLAG_CP_TOUCH | + ION_FLAG_CP_BITSTREAM | + ION_FLAG_CP_PIXEL | + ION_FLAG_CP_NON_PIXEL | ION_FLAG_CP_CAMERA); } @@ -118,7 +118,7 @@ static int ion_system_secure_heap_allocate( heap); if (!ion_heap_is_system_secure_heap_type(secure_heap->heap.type) || - !is_cp_flag_present(flags)) { + !(is_cp_flag_present(flags) || (flags & ION_FLAG_SECURE))) { pr_info("%s: Incorrect heap type or incorrect flags\n", __func__); return -EINVAL; @@ -393,7 +393,7 @@ struct ion_heap *ion_system_secure_heap_create(struct ion_platform_heap *unused) if (!heap) return ERR_PTR(-ENOMEM); heap->heap.ops = &system_secure_heap_ops; - heap->heap.type = ION_HEAP_TYPE_SYSTEM_SECURE; + heap->heap.type = (enum ion_heap_type)ION_HEAP_TYPE_SYSTEM_SECURE; heap->sys_heap = get_ion_heap(ION_SYSTEM_HEAP_ID); heap->destroy_heap = false; diff --git a/drivers/staging/android/ion/msm/msm_ion.c b/drivers/staging/android/ion/msm/msm_ion.c index 656eb493cad8..8c1cdd8e210c 100644 --- a/drivers/staging/android/ion/msm/msm_ion.c +++ b/drivers/staging/android/ion/msm/msm_ion.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2011-2018, The Linux Foundation. All rights reserved. +/* Copyright (c) 2011-2018, 2020, 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 @@ -837,13 +837,15 @@ long msm_ion_custom_ioctl(struct ion_client *client, int ret; ret = ion_walk_heaps(client, data.prefetch_data.heap_id, - ION_HEAP_TYPE_SECURE_DMA, - (void *)data.prefetch_data.len, - ion_secure_cma_prefetch); + (enum ion_heap_type) + ION_HEAP_TYPE_SECURE_DMA, + (void *)data.prefetch_data.len, + ion_secure_cma_prefetch); if (ret) return ret; ret = ion_walk_heaps(client, data.prefetch_data.heap_id, + (enum ion_heap_type) ION_HEAP_TYPE_SYSTEM_SECURE, (void *)&data.prefetch_data, ion_system_secure_heap_prefetch); @@ -855,6 +857,7 @@ long msm_ion_custom_ioctl(struct ion_client *client, { int ret; ret = ion_walk_heaps(client, data.prefetch_data.heap_id, + (enum ion_heap_type) ION_HEAP_TYPE_SECURE_DMA, (void *)data.prefetch_data.len, ion_secure_cma_drain_pool); @@ -863,6 +866,7 @@ long msm_ion_custom_ioctl(struct ion_client *client, return ret; ret = ion_walk_heaps(client, data.prefetch_data.heap_id, + (enum ion_heap_type) ION_HEAP_TYPE_SYSTEM_SECURE, (void *)&data.prefetch_data, ion_system_secure_heap_drain); From 15a22e100821053ea688b68ce54ac0e730d50d8b Mon Sep 17 00:00:00 2001 From: Ajay Prathi Date: Tue, 10 Dec 2019 14:57:26 +0530 Subject: [PATCH 20/63] msm: pcie: Use list_empty check Existing code incorrectly uses NULL check for a list_head, use list_empty instead. Change-Id: Ib497642a1d1f90379b1cb54b5161d25cb17dedbb Signed-off-by: Ajay Prathi Signed-off-by: Swetha Chikkaboraiah --- drivers/pci/host/pci-msm.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/pci/host/pci-msm.c b/drivers/pci/host/pci-msm.c index cc681366d2db..dfa7a1223e90 100644 --- a/drivers/pci/host/pci-msm.c +++ b/drivers/pci/host/pci-msm.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2014-2018, The Linux Foundation. All rights reserved. +/* Copyright (c) 2014-2018, 2020, 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 @@ -5519,7 +5519,7 @@ static void msm_pcie_config_link_pm_rc(struct msm_pcie_dev_t *dev, { bool child_l0s_enable = 0, child_l1_enable = 0, child_l1ss_enable = 0; - if (!pdev->subordinate || !(&pdev->subordinate->devices)) { + if (!pdev->subordinate || list_empty(&pdev->subordinate->devices)) { PCIE_DBG(dev, "PCIe: RC%d: no device connected to root complex\n", dev->rc_idx); From 68c7e942a5f98d0c2a8d8ee1473000b35686a82c Mon Sep 17 00:00:00 2001 From: Sankeerth Billakanti Date: Wed, 6 Mar 2019 13:59:22 +0530 Subject: [PATCH 21/63] drm/msm/dp: fix clang compilation in dp driver Make changes to ensure the DP driver is compiled successfully with clang enabled. Change-Id: I28d3d5db197beea454460441e853eef143dac0b4 Signed-off-by: Sankeerth Billakanti Signed-off-by: Swetha Chikkaboraiah --- drivers/gpu/drm/msm/dp/dp_display.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c index 3e5cdc658306..a373d0a67851 100644 --- a/drivers/gpu/drm/msm/dp/dp_display.c +++ b/drivers/gpu/drm/msm/dp/dp_display.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2018, The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2019, 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 @@ -262,8 +262,7 @@ static void dp_display_deinitialize_hdcp(struct dp_display_private *dp) sde_dp_hdcp2p2_deinit(dp->hdcp.data); dp_display_destroy_hdcp_workqueue(dp); - if (&dp->hdcp_mutex) - mutex_destroy(&dp->hdcp_mutex); + mutex_destroy(&dp->hdcp_mutex); } static int dp_display_initialize_hdcp(struct dp_display_private *dp) From 676f206493e52e98490880f4a4522d561fc14731 Mon Sep 17 00:00:00 2001 From: Jayant Shekhar Date: Wed, 6 Mar 2019 12:02:52 +0530 Subject: [PATCH 22/63] drm/msm/sde: Fix clang compilation in SDE driver Make change to ensure SDE driver compiles fine with clang enabled. Change-Id: I83cb2fef2b0ff8a4cdd1d77b180ebea4fef1b629 Signed-off-by: Jayant Shekhar Signed-off-by: Swetha Chikkaboraiah --- drivers/gpu/drm/msm/sde/sde_plane.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/msm/sde/sde_plane.c b/drivers/gpu/drm/msm/sde/sde_plane.c index 2e465999d76f..f794ae87ffd2 100644 --- a/drivers/gpu/drm/msm/sde/sde_plane.c +++ b/drivers/gpu/drm/msm/sde/sde_plane.c @@ -4241,7 +4241,7 @@ static void _sde_plane_install_properties(struct drm_plane *plane, psde->catalog = catalog; if (sde_is_custom_client()) { - if (catalog->mixer_count && catalog->mixer && + if (catalog->mixer_count && catalog->mixer[0].sblk->maxblendstages) { zpos_max = catalog->mixer[0].sblk->maxblendstages - 1; if (zpos_max > SDE_STAGE_MAX - SDE_STAGE_0 - 1) From a669b7c6b6aff4f8908b29b8adeb77760968b019 Mon Sep 17 00:00:00 2001 From: Swetha Chikkaboraiah Date: Mon, 6 Apr 2020 15:39:21 +0530 Subject: [PATCH 23/63] kernel: Fix build errors with LLVM This patch intends to fix compilation errors while building kernel with LLVM toolchain. Change-Id: I44693ef204b7541c2e82e988179d9dacb028d0ba Signed-off-by: Swetha Chikkaboraiah --- .../msm/camera/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.c | 7 ++++--- drivers/mmc/core/sdio_cis.c | 4 +++- drivers/soc/qcom/msm_minidump.c | 4 ++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.c b/drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.c index 61a91380b3d2..5ecba8698645 100644 --- a/drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.c +++ b/drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2017-2019, The Linux Foundation. All rights reserved. +/* Copyright (c) 2017-2019, 2020, 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 @@ -1186,7 +1186,8 @@ static int cam_ife_hw_mgr_acquire_res_ife_csid_rdi( goto err; } - csid_res->res_type = CAM_ISP_RESOURCE_PIX_PATH; + csid_res->res_type = (enum cam_ife_hw_mgr_res_type) + CAM_ISP_RESOURCE_PIX_PATH; csid_res->res_id = csid_acquire.res_id; csid_res->is_dual_vfe = 0; csid_res->hw_res[0] = csid_acquire.node_res; @@ -2207,7 +2208,7 @@ static int cam_ife_mgr_start_hw(void *hw_mgr_priv, void *start_hw_args) CAM_DBG(CAM_ISP, "Exit...(success)"); return 0; err: - stop_hw_method.hw_stop_cmd = CAM_CSID_HALT_IMMEDIATELY; + stop_hw_method.hw_stop_cmd = CAM_ISP_HW_STOP_IMMEDIATELY; stop_args.ctxt_to_hw_map = start_args->ctxt_to_hw_map; stop_args.args = (void *)(&stop_hw_method); cam_ife_mgr_stop_hw(hw_mgr_priv, &stop_args); diff --git a/drivers/mmc/core/sdio_cis.c b/drivers/mmc/core/sdio_cis.c index 5d7f1986c481..2f0e448ba4fe 100644 --- a/drivers/mmc/core/sdio_cis.c +++ b/drivers/mmc/core/sdio_cis.c @@ -29,6 +29,7 @@ static int cistpl_vers_1(struct mmc_card *card, struct sdio_func *func, { unsigned i, nr_strings; char **buffer, *string; + size_t buf_len; /* Find all null-terminated (including zero length) strings in the TPLLV1_INFO field. Trailing garbage is ignored. */ @@ -55,7 +56,8 @@ static int cistpl_vers_1(struct mmc_card *card, struct sdio_func *func, for (i = 0; i < nr_strings; i++) { buffer[i] = string; - strlcpy(string, buf, strlen(buf) + 1); + buf_len = strlen(buf) + 1; + strlcpy(string, buf, buf_len); string += strlen(string) + 1; buf += strlen(buf) + 1; } diff --git a/drivers/soc/qcom/msm_minidump.c b/drivers/soc/qcom/msm_minidump.c index 3644dd69e032..27b43fc0347a 100644 --- a/drivers/soc/qcom/msm_minidump.c +++ b/drivers/soc/qcom/msm_minidump.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2017, The Linux Foundation. All rights reserved. +/* Copyright (c) 2017, 2020, 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 @@ -294,7 +294,7 @@ static int msm_minidump_add_header(void) /* 4th section is linux banner */ banner = (char *)ehdr + strtbl_off + MAX_STRTBL_SIZE; - strlcpy(banner, linux_banner, strlen(linux_banner) + 1); + strlcpy(banner, linux_banner, strlen(banner) + 1); shdr->sh_type = SHT_PROGBITS; shdr->sh_offset = (elf_addr_t)(strtbl_off + MAX_STRTBL_SIZE); From 6d084859bcef69df8710d9e8e539fb2d17a1bd55 Mon Sep 17 00:00:00 2001 From: Jishnu Prakash Date: Fri, 8 Mar 2019 11:00:51 +0530 Subject: [PATCH 24/63] drivers: hwmon: Fix compilation errors in ADC for kernel 4.9 Correct the value of cal_val to pick from right enum. Make additional changes to fix compilation issues. Change-Id: I89a83e308da9171f79663951b05678fbe40eb9cf Signed-off-by: Jishnu Prakash Signed-off-by: Swetha Chikkaboraiah --- drivers/hwmon/qpnp-adc-common.c | 4 ++-- drivers/hwmon/qpnp-adc-voltage.c | 14 +++++++------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/drivers/hwmon/qpnp-adc-common.c b/drivers/hwmon/qpnp-adc-common.c index b900f76b9b55..a20bfce980c3 100644 --- a/drivers/hwmon/qpnp-adc-common.c +++ b/drivers/hwmon/qpnp-adc-common.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved. +/* Copyright (c) 2012-2018, 2020, 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 @@ -1747,7 +1747,7 @@ int32_t qpnp_adc_scale_default(struct qpnp_vadc_chip *vadc, } else { qpnp_adc_scale_with_calib_param(adc_code, adc_properties, chan_properties, &scale_voltage); - if (!chan_properties->calib_type == CALIB_ABSOLUTE) + if (!(chan_properties->calib_type == CALIB_ABSOLUTE)) scale_voltage *= 1000; } diff --git a/drivers/hwmon/qpnp-adc-voltage.c b/drivers/hwmon/qpnp-adc-voltage.c index 7e6af659a649..2783e4f6d736 100644 --- a/drivers/hwmon/qpnp-adc-voltage.c +++ b/drivers/hwmon/qpnp-adc-voltage.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved. +/* Copyright (c) 2012-2018, 2020, 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 @@ -1445,7 +1445,7 @@ int32_t qpnp_vadc_calib_vref(struct qpnp_vadc_chip *vadc, conv.mode_sel = ADC_OP_NORMAL_MODE << QPNP_VADC_OP_MODE_SHIFT; conv.hw_settle_time = ADC_CHANNEL_HW_SETTLE_DELAY_0US; conv.fast_avg_setup = ADC_FAST_AVG_SAMPLE_1; - conv.cal_val = calib_type; + conv.cal_val = (enum qpnp_adc_cal_val)calib_type; if (vadc->vadc_hc) { rc = qpnp_vadc_hc_configure(vadc, &conv); @@ -1518,7 +1518,7 @@ int32_t qpnp_vadc_calib_gnd(struct qpnp_vadc_chip *vadc, conv.mode_sel = ADC_OP_NORMAL_MODE << QPNP_VADC_OP_MODE_SHIFT; conv.hw_settle_time = ADC_CHANNEL_HW_SETTLE_DELAY_0US; conv.fast_avg_setup = ADC_FAST_AVG_SAMPLE_1; - conv.cal_val = calib_type; + conv.cal_val = (enum qpnp_adc_cal_val)calib_type; if (vadc->vadc_hc) { rc = qpnp_vadc_hc_configure(vadc, &conv); @@ -1636,10 +1636,10 @@ static int32_t qpnp_vadc_calib_device(struct qpnp_vadc_chip *vadc) (calib_read_1 - calib_read_2); vadc->adc->amux_prop->chan_prop->adc_graph[CALIB_RATIOMETRIC].dx = vadc->adc->adc_prop->adc_vdd_reference; - vadc->adc->amux_prop->chan_prop->adc_graph[CALIB_RATIOMETRIC].adc_vref - = calib_read_1; - vadc->adc->amux_prop->chan_prop->adc_graph[CALIB_RATIOMETRIC].adc_gnd - = calib_read_2; + vadc->adc->amux_prop->chan_prop->adc_graph[CALIB_RATIOMETRIC].adc_vref = + calib_read_1; + vadc->adc->amux_prop->chan_prop->adc_graph[CALIB_RATIOMETRIC].adc_gnd = + calib_read_2; calib_fail: return rc; From 1129aea8b5e4dc555fd867078ebc4b12276dc082 Mon Sep 17 00:00:00 2001 From: Kiran Gunda Date: Wed, 23 Oct 2019 19:12:20 +0530 Subject: [PATCH 25/63] thermal: qpnp-temp-alarm: Fix compilation error Checks against NULL for "pdev", "pdev->dev" and "of_node" are not necessary as these are not expected to be NULL in the probe. Hence remove these checks. This addresses the compilation issue as well. Change-Id: Ifd9d8910dc81edaee1f3998e5d9f9e463aab65d5 Signed-off-by: Kiran Gunda Signed-off-by: Swetha Chikkaboraiah --- drivers/thermal/qpnp-temp-alarm.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/drivers/thermal/qpnp-temp-alarm.c b/drivers/thermal/qpnp-temp-alarm.c index 7398b7b5d391..1e3d76c0777b 100644 --- a/drivers/thermal/qpnp-temp-alarm.c +++ b/drivers/thermal/qpnp-temp-alarm.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011-2018, The Linux Foundation. All rights reserved. + * Copyright (c) 2011-2019, 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 @@ -403,12 +403,6 @@ static int qpnp_tm_probe(struct platform_device *pdev) int rc = 0; u8 raw_type[2], type, subtype; - if (!pdev || !(&pdev->dev) || !pdev->dev.of_node) { - dev_err(&pdev->dev, "%s: device tree node not found\n", - __func__); - return -EINVAL; - } - node = pdev->dev.of_node; chip = kzalloc(sizeof(struct qpnp_tm_chip), GFP_KERNEL); From 8d8fdfc1a73b3e544d7a49481f6bd53f8a5afbfe Mon Sep 17 00:00:00 2001 From: Michael Davidson Date: Fri, 14 Apr 2017 14:15:09 -0700 Subject: [PATCH 26/63] misc: lkdtm: Add volatile to intentional NULL pointer reference Add a volatile qualifier where a NULL pointer is deliberately dereferenced to trigger a panic. Without the volatile qualifier clang will issue the following warning: "indirection of non-volatile null pointer will be deleted, not trap [-Wnull-dereference]" and replace the pointer reference with a __builtin_trap() (which generates a ud2 instruction on x86_64). Change-Id: I6ed1d723234c607eb33dc3ed0be23c093d8c835c Link: https://lore.kernel.org/patchwork/patch/780024/ Signed-off-by: Michael Davidson Signed-off-by: Matthias Kaehlcke Acked-by: Kees Cook Signed-off-by: Greg Kroah-Hartman Git-commit: 9e18308a5dcc2250a271e598dfe0d917b5522475 Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git Signed-off-by: Shadab Naseem Signed-off-by: Swetha Chikkaboraiah --- drivers/misc/lkdtm_bugs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/misc/lkdtm_bugs.c b/drivers/misc/lkdtm_bugs.c index bb3bb8ef5f44..f36674e04e73 100644 --- a/drivers/misc/lkdtm_bugs.c +++ b/drivers/misc/lkdtm_bugs.c @@ -66,7 +66,7 @@ void lkdtm_WARNING(void) void lkdtm_EXCEPTION(void) { - *((int *) 0) = 0; + *((volatile int *) 0) = 0; } void lkdtm_LOOP(void) From 89041b8f15c5f34da9393c47301a289c3346f3db Mon Sep 17 00:00:00 2001 From: Trishansh Bhardwaj Date: Wed, 13 Mar 2019 14:32:38 +0530 Subject: [PATCH 27/63] msm: camera: Fix compilation error with clang Fix compilation errors in smmu, flash, ife and cdm. Change-Id: If9c80f74c5b0b2c69ea8506d7f0b256f91c80bc0 Signed-off-by: Trishansh Bhardwaj Signed-off-by: Swetha Chikkaboraiah --- .../media/platform/msm/camera/cam_cdm/cam_cdm_intf.c | 5 ++--- .../msm/camera/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.c | 12 ++++++++---- .../cam_sensor_module/cam_flash/cam_flash_core.c | 4 ++-- .../platform/msm/camera/cam_smmu/cam_smmu_api.c | 4 ++-- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/drivers/media/platform/msm/camera/cam_cdm/cam_cdm_intf.c b/drivers/media/platform/msm/camera/cam_cdm/cam_cdm_intf.c index fa98be2285b7..1766d39687ad 100644 --- a/drivers/media/platform/msm/camera/cam_cdm/cam_cdm_intf.c +++ b/drivers/media/platform/msm/camera/cam_cdm/cam_cdm_intf.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2017, The Linux Foundation. All rights reserved. +/* Copyright (c) 2017, 2020, 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 @@ -166,8 +166,7 @@ int cam_cdm_acquire(struct cam_cdm_acquire_data *data) struct cam_hw_intf *hw; uint32_t hw_index = 0; - if ((!data) || (!data->identifier) || (!data->base_array) || - (!data->base_array_cnt)) + if (!data || !data->base_array_cnt) return -EINVAL; if (get_cdm_mgr_refcount()) { diff --git a/drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.c b/drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.c index 61a91380b3d2..cb7d3eb518f5 100644 --- a/drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.c +++ b/drivers/media/platform/msm/camera/cam_isp/isp_hw_mgr/cam_ife_hw_mgr.c @@ -615,7 +615,8 @@ static int cam_ife_hw_mgr_acquire_res_ife_out_rdi( ife_out_res->hw_res[0] = vfe_acquire.vfe_out.rsrc_node; ife_out_res->is_dual_vfe = 0; ife_out_res->res_id = vfe_out_res_id; - ife_out_res->res_type = CAM_ISP_RESOURCE_VFE_OUT; + ife_out_res->res_type = (enum cam_ife_hw_mgr_res_type) + CAM_ISP_RESOURCE_VFE_OUT; ife_src_res->child[ife_src_res->num_children++] = ife_out_res; return 0; @@ -703,7 +704,8 @@ static int cam_ife_hw_mgr_acquire_res_ife_out_pixel( ife_out_res->hw_res[j]->res_id); } - ife_out_res->res_type = CAM_ISP_RESOURCE_VFE_OUT; + ife_out_res->res_type = (enum cam_ife_hw_mgr_res_type) + CAM_ISP_RESOURCE_VFE_OUT; ife_out_res->res_id = out_port->res_type; ife_out_res->parent = ife_src_res; ife_src_res->child[ife_src_res->num_children++] = ife_out_res; @@ -816,7 +818,8 @@ static int cam_ife_hw_mgr_acquire_res_ife_src( CAM_ERR(CAM_ISP, "Wrong IFE CSID Resource Node"); goto err; } - ife_src_res->res_type = vfe_acquire.rsrc_type; + ife_src_res->res_type = (enum cam_ife_hw_mgr_res_type) + vfe_acquire.rsrc_type; ife_src_res->res_id = vfe_acquire.vfe_in.res_id; ife_src_res->is_dual_vfe = csid_res->is_dual_vfe; @@ -992,7 +995,8 @@ static int cam_ife_hw_mgr_acquire_res_ife_csid_ipp( csid_acquire.in_port = in_port; csid_acquire.out_port = in_port->data; - csid_res->res_type = CAM_ISP_RESOURCE_PIX_PATH; + csid_res->res_type = (enum cam_ife_hw_mgr_res_type) + CAM_ISP_RESOURCE_PIX_PATH; csid_res->res_id = CAM_IFE_PIX_PATH_RES_IPP; csid_res->is_dual_vfe = in_port->usage_type; diff --git a/drivers/media/platform/msm/camera/cam_sensor_module/cam_flash/cam_flash_core.c b/drivers/media/platform/msm/camera/cam_sensor_module/cam_flash/cam_flash_core.c index 966a5b2c964b..7713f8ff3f4f 100644 --- a/drivers/media/platform/msm/camera/cam_sensor_module/cam_flash/cam_flash_core.c +++ b/drivers/media/platform/msm/camera/cam_sensor_module/cam_flash/cam_flash_core.c @@ -186,7 +186,7 @@ static int cam_flash_ops(struct cam_flash_ctrl *flash_ctrl, if (flash_ctrl->switch_trigger) cam_res_mgr_led_trigger_event( flash_ctrl->switch_trigger, - LED_SWITCH_ON); + (enum led_brightness)LED_SWITCH_ON); return 0; } @@ -214,7 +214,7 @@ int cam_flash_off(struct cam_flash_ctrl *flash_ctrl) if (flash_ctrl->switch_trigger) cam_res_mgr_led_trigger_event(flash_ctrl->switch_trigger, - LED_SWITCH_OFF); + (enum led_brightness)LED_SWITCH_OFF); flash_ctrl->flash_state = CAM_FLASH_STATE_START; return 0; diff --git a/drivers/media/platform/msm/camera/cam_smmu/cam_smmu_api.c b/drivers/media/platform/msm/camera/cam_smmu/cam_smmu_api.c index ecfc5665085b..56c17de5cb3d 100644 --- a/drivers/media/platform/msm/camera/cam_smmu/cam_smmu_api.c +++ b/drivers/media/platform/msm/camera/cam_smmu/cam_smmu_api.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2014-2018, The Linux Foundation. All rights reserved. +/* Copyright (c) 2014-2019, 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 @@ -2924,7 +2924,7 @@ int cam_smmu_destroy_handle(int handle) cam_smmu_clean_kernel_buffer_list(idx); } - if (&iommu_cb_set.cb_info[idx].is_secure) { + if (iommu_cb_set.cb_info[idx].is_secure) { if (iommu_cb_set.cb_info[idx].secure_count == 0) { mutex_unlock(&iommu_cb_set.cb_info[idx].lock); return -EPERM; From 40ada3443367534250ec61d26dbd97956ac94160 Mon Sep 17 00:00:00 2001 From: Priyanka Gujjula Date: Thu, 7 Mar 2019 20:03:15 +0530 Subject: [PATCH 28/63] msm: vidc: Resolve clang compilation error pkt->rg_buffer_info will always evaluate to 'true', hence refining the code. Change-Id: Ifb686c991b9ae06d449a5a1ec3485823ca9b926c Signed-off-by: Priyanka Gujjula Signed-off-by: Swetha Chikkaboraiah --- drivers/media/platform/msm/vidc/hfi_response_handler.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/drivers/media/platform/msm/vidc/hfi_response_handler.c b/drivers/media/platform/msm/vidc/hfi_response_handler.c index a3d4709c1b5c..6c2eebef23c5 100644 --- a/drivers/media/platform/msm/vidc/hfi_response_handler.c +++ b/drivers/media/platform/msm/vidc/hfi_response_handler.c @@ -1851,12 +1851,8 @@ static int hfi_process_session_rel_buf_done(u32 device_id, cmd_done.size = sizeof(struct msm_vidc_cb_cmd_done); cmd_done.session_id = (void *)(uintptr_t)pkt->session_id; cmd_done.status = hfi_map_err_status(pkt->error_type); - if (pkt->rg_buffer_info) { - cmd_done.data.buffer_info.buffer_addr = *pkt->rg_buffer_info; - cmd_done.size = sizeof(struct hal_buffer_info); - } else { - dprintk(VIDC_ERR, "invalid payload in rel_buff_done\n"); - } + cmd_done.data.buffer_info.buffer_addr = *pkt->rg_buffer_info; + cmd_done.size = sizeof(struct hal_buffer_info); info->response_type = HAL_SESSION_RELEASE_BUFFER_DONE; info->response.cmd = cmd_done; From a1fb446cc2655370307d1c4f416416f6729965dc Mon Sep 17 00:00:00 2001 From: Zhen Kong Date: Thu, 1 Feb 2018 14:52:10 -0800 Subject: [PATCH 29/63] crypto: msm: update QTI crypto drivers for msm-4.14 Fix compilation issues for QTI crypto driver on msm-4.14 , this change does code clean up to remove unsupported SMMU attribute, allocate qcedev_async_req from heap instead of stack, and add NULL pointer check for ota_async_req. Change-Id: I5cabcb6993d8855275f3b38c7de6eafb77f8cbf4 Signed-off-by: Zhen Kong Signed-off-by: Naitik Bharadiya Signed-off-by: Swetha Chikkaboraiah --- drivers/crypto/msm/qcedev.c | 78 +++++++++++++++++++------------------ 1 file changed, 41 insertions(+), 37 deletions(-) diff --git a/drivers/crypto/msm/qcedev.c b/drivers/crypto/msm/qcedev.c index 52bcea35868b..cfad023fa425 100644 --- a/drivers/crypto/msm/qcedev.c +++ b/drivers/crypto/msm/qcedev.c @@ -1668,12 +1668,16 @@ static inline long qcedev_ioctl(struct file *file, int err = 0; struct qcedev_handle *handle; struct qcedev_control *podev; - struct qcedev_async_req qcedev_areq; + struct qcedev_async_req *qcedev_areq; struct qcedev_stat *pstat; + qcedev_areq = kzalloc(sizeof(struct qcedev_async_req), GFP_KERNEL); + if (!qcedev_areq) + return -ENOMEM; + handle = file->private_data; podev = handle->cntl; - qcedev_areq.handle = handle; + qcedev_areq->handle = handle; if (podev == NULL || podev->magic != QCEDEV_MAGIC) { pr_err("%s: invalid handle %pK\n", __func__, podev); @@ -1684,27 +1688,27 @@ static inline long qcedev_ioctl(struct file *file, if (_IOC_TYPE(cmd) != QCEDEV_IOC_MAGIC) return -ENOTTY; - init_completion(&qcedev_areq.complete); + init_completion(&qcedev_areq->complete); pstat = &_qcedev_stat; switch (cmd) { case QCEDEV_IOCTL_ENC_REQ: case QCEDEV_IOCTL_DEC_REQ: - if (copy_from_user(&qcedev_areq.cipher_op_req, + if (copy_from_user(&qcedev_areq->cipher_op_req, (void __user *)arg, sizeof(struct qcedev_cipher_op_req))) return -EFAULT; - qcedev_areq.op_type = QCEDEV_CRYPTO_OPER_CIPHER; + qcedev_areq->op_type = QCEDEV_CRYPTO_OPER_CIPHER; - if (qcedev_check_cipher_params(&qcedev_areq.cipher_op_req, + if (qcedev_check_cipher_params(&qcedev_areq->cipher_op_req, podev)) return -EINVAL; - err = qcedev_vbuf_ablk_cipher(&qcedev_areq, handle); + err = qcedev_vbuf_ablk_cipher(qcedev_areq, handle); if (err) return err; if (copy_to_user((void __user *)arg, - &qcedev_areq.cipher_op_req, + &qcedev_areq->cipher_op_req, sizeof(struct qcedev_cipher_op_req))) return -EFAULT; break; @@ -1713,23 +1717,23 @@ static inline long qcedev_ioctl(struct file *file, { struct scatterlist sg_src; - if (copy_from_user(&qcedev_areq.sha_op_req, + if (copy_from_user(&qcedev_areq->sha_op_req, (void __user *)arg, sizeof(struct qcedev_sha_op_req))) return -EFAULT; mutex_lock(&hash_access_lock); - if (qcedev_check_sha_params(&qcedev_areq.sha_op_req, podev)) { + if (qcedev_check_sha_params(&qcedev_areq->sha_op_req, podev)) { mutex_unlock(&hash_access_lock); return -EINVAL; } - qcedev_areq.op_type = QCEDEV_CRYPTO_OPER_SHA; - err = qcedev_hash_init(&qcedev_areq, handle, &sg_src); + qcedev_areq->op_type = QCEDEV_CRYPTO_OPER_SHA; + err = qcedev_hash_init(qcedev_areq, handle, &sg_src); if (err) { mutex_unlock(&hash_access_lock); return err; } mutex_unlock(&hash_access_lock); - if (copy_to_user((void __user *)arg, &qcedev_areq.sha_op_req, + if (copy_to_user((void __user *)arg, &qcedev_areq->sha_op_req, sizeof(struct qcedev_sha_op_req))) return -EFAULT; } @@ -1742,19 +1746,19 @@ static inline long qcedev_ioctl(struct file *file, { struct scatterlist sg_src; - if (copy_from_user(&qcedev_areq.sha_op_req, + if (copy_from_user(&qcedev_areq->sha_op_req, (void __user *)arg, sizeof(struct qcedev_sha_op_req))) return -EFAULT; mutex_lock(&hash_access_lock); - if (qcedev_check_sha_params(&qcedev_areq.sha_op_req, podev)) { + if (qcedev_check_sha_params(&qcedev_areq->sha_op_req, podev)) { mutex_unlock(&hash_access_lock); return -EINVAL; } - qcedev_areq.op_type = QCEDEV_CRYPTO_OPER_SHA; + qcedev_areq->op_type = QCEDEV_CRYPTO_OPER_SHA; - if (qcedev_areq.sha_op_req.alg == QCEDEV_ALG_AES_CMAC) { - err = qcedev_hash_cmac(&qcedev_areq, handle, &sg_src); + if (qcedev_areq->sha_op_req.alg == QCEDEV_ALG_AES_CMAC) { + err = qcedev_hash_cmac(qcedev_areq, handle, &sg_src); if (err) { mutex_unlock(&hash_access_lock); return err; @@ -1765,7 +1769,7 @@ static inline long qcedev_ioctl(struct file *file, mutex_unlock(&hash_access_lock); return -EINVAL; } - err = qcedev_hash_update(&qcedev_areq, handle, &sg_src); + err = qcedev_hash_update(qcedev_areq, handle, &sg_src); if (err) { mutex_unlock(&hash_access_lock); return err; @@ -1778,11 +1782,11 @@ static inline long qcedev_ioctl(struct file *file, mutex_unlock(&hash_access_lock); return -EINVAL; } - memcpy(&qcedev_areq.sha_op_req.digest[0], + memcpy(&qcedev_areq->sha_op_req.digest[0], &handle->sha_ctxt.digest[0], handle->sha_ctxt.diglen); mutex_unlock(&hash_access_lock); - if (copy_to_user((void __user *)arg, &qcedev_areq.sha_op_req, + if (copy_to_user((void __user *)arg, &qcedev_areq->sha_op_req, sizeof(struct qcedev_sha_op_req))) return -EFAULT; } @@ -1794,17 +1798,17 @@ static inline long qcedev_ioctl(struct file *file, pr_err("%s Init was not called\n", __func__); return -EINVAL; } - if (copy_from_user(&qcedev_areq.sha_op_req, + if (copy_from_user(&qcedev_areq->sha_op_req, (void __user *)arg, sizeof(struct qcedev_sha_op_req))) return -EFAULT; mutex_lock(&hash_access_lock); - if (qcedev_check_sha_params(&qcedev_areq.sha_op_req, podev)) { + if (qcedev_check_sha_params(&qcedev_areq->sha_op_req, podev)) { mutex_unlock(&hash_access_lock); return -EINVAL; } - qcedev_areq.op_type = QCEDEV_CRYPTO_OPER_SHA; - err = qcedev_hash_final(&qcedev_areq, handle); + qcedev_areq->op_type = QCEDEV_CRYPTO_OPER_SHA; + err = qcedev_hash_final(qcedev_areq, handle); if (err) { mutex_unlock(&hash_access_lock); return err; @@ -1815,12 +1819,12 @@ static inline long qcedev_ioctl(struct file *file, mutex_unlock(&hash_access_lock); return -EINVAL; } - qcedev_areq.sha_op_req.diglen = handle->sha_ctxt.diglen; - memcpy(&qcedev_areq.sha_op_req.digest[0], + qcedev_areq->sha_op_req.diglen = handle->sha_ctxt.diglen; + memcpy(&qcedev_areq->sha_op_req.digest[0], &handle->sha_ctxt.digest[0], handle->sha_ctxt.diglen); mutex_unlock(&hash_access_lock); - if (copy_to_user((void __user *)arg, &qcedev_areq.sha_op_req, + if (copy_to_user((void __user *)arg, &qcedev_areq->sha_op_req, sizeof(struct qcedev_sha_op_req))) return -EFAULT; handle->sha_ctxt.init_done = false; @@ -1830,23 +1834,23 @@ static inline long qcedev_ioctl(struct file *file, { struct scatterlist sg_src; - if (copy_from_user(&qcedev_areq.sha_op_req, + if (copy_from_user(&qcedev_areq->sha_op_req, (void __user *)arg, sizeof(struct qcedev_sha_op_req))) return -EFAULT; mutex_lock(&hash_access_lock); - if (qcedev_check_sha_params(&qcedev_areq.sha_op_req, podev)) { + if (qcedev_check_sha_params(&qcedev_areq->sha_op_req, podev)) { mutex_unlock(&hash_access_lock); return -EINVAL; } - qcedev_areq.op_type = QCEDEV_CRYPTO_OPER_SHA; - qcedev_hash_init(&qcedev_areq, handle, &sg_src); - err = qcedev_hash_update(&qcedev_areq, handle, &sg_src); + qcedev_areq->op_type = QCEDEV_CRYPTO_OPER_SHA; + qcedev_hash_init(qcedev_areq, handle, &sg_src); + err = qcedev_hash_update(qcedev_areq, handle, &sg_src); if (err) { mutex_unlock(&hash_access_lock); return err; } - err = qcedev_hash_final(&qcedev_areq, handle); + err = qcedev_hash_final(qcedev_areq, handle); if (err) { mutex_unlock(&hash_access_lock); return err; @@ -1857,12 +1861,12 @@ static inline long qcedev_ioctl(struct file *file, mutex_unlock(&hash_access_lock); return -EINVAL; } - qcedev_areq.sha_op_req.diglen = handle->sha_ctxt.diglen; - memcpy(&qcedev_areq.sha_op_req.digest[0], + qcedev_areq->sha_op_req.diglen = handle->sha_ctxt.diglen; + memcpy(&qcedev_areq->sha_op_req.digest[0], &handle->sha_ctxt.digest[0], handle->sha_ctxt.diglen); mutex_unlock(&hash_access_lock); - if (copy_to_user((void __user *)arg, &qcedev_areq.sha_op_req, + if (copy_to_user((void __user *)arg, &qcedev_areq->sha_op_req, sizeof(struct qcedev_sha_op_req))) return -EFAULT; } From 9eb8f0cec0eeebd422ad85c10f0eaf243c4d452a Mon Sep 17 00:00:00 2001 From: Nathan Chancellor Date: Sat, 31 Mar 2018 20:56:23 -0700 Subject: [PATCH 30/63] ANDROID: xt_qtaguid: Remove unnecessary null checks to device's name 'name' will never be NULL since it isn't a plain pointer but an array of char values. ../net/netfilter/xt_qtaguid.c:1195:27: warning: address of array '(*el_dev)->name' will always evaluate to 'true' [-Wpointer-bool-conversion] if (unlikely(!(*el_dev)->name)) { ~~~~~~~~~~~~^~~~ Change-Id: If3b25f17829b43e8a639193fb9cd04ae45947200 Signed-off-by: Nathan Chancellor Git-repo: https://source.codeaurora.org/quic/la/kernel/msm-4.4 Git-commit: 207b579e3db6fd0cb6fe40ba3e929635ad748d89 Signed-off-by: Swetha Chikkaboraiah --- net/netfilter/xt_qtaguid.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/net/netfilter/xt_qtaguid.c b/net/netfilter/xt_qtaguid.c index d2141a6a268d..7f51f6da1ad2 100644 --- a/net/netfilter/xt_qtaguid.c +++ b/net/netfilter/xt_qtaguid.c @@ -1191,11 +1191,6 @@ static void get_dev_and_dir(const struct sk_buff *skb, par->hooknum, __func__); BUG(); } - if (unlikely(!(*el_dev)->name)) { - pr_err("qtaguid[%d]: %s(): no dev->name?!!\n", - par->hooknum, __func__); - BUG(); - } if (skb->dev && *el_dev != skb->dev) { MT_DEBUG("qtaguid[%d]: skb->dev=%pK %s vs par->%s=%pK %s\n", par->hooknum, skb->dev, skb->dev->name, From 13ba544ef998a6a06bf5abdf811364a5aace03e8 Mon Sep 17 00:00:00 2001 From: Naitik Bharadiya Date: Mon, 14 Oct 2019 16:05:02 +0530 Subject: [PATCH 31/63] soc: qcom: glink_debugfs: Fix compilation error with clang use destination string size in strlcpy size argument to fix clang compilation error. Change-Id: Ice7fa2753d07e07c5c214ffb0792450985378643 Signed-off-by: Naitik Bharadiya Signed-off-by: Swetha Chikkaboraiah --- drivers/soc/qcom/glink_debugfs.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/soc/qcom/glink_debugfs.c b/drivers/soc/qcom/glink_debugfs.c index b8318807f3b1..fe464d29a8f8 100644 --- a/drivers/soc/qcom/glink_debugfs.c +++ b/drivers/soc/qcom/glink_debugfs.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2014-2016, The Linux Foundation. All rights reserved. +/* Copyright (c) 2014-2016, 2019, 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 @@ -568,9 +568,9 @@ void glink_dfs_update_list(struct dentry *curr_dent, struct dentry *parent, dbgfs_dent_s->parent = parent; dbgfs_dent_s->self = curr_dent; strlcpy(dbgfs_dent_s->self_name, - curr, strlen(curr) + 1); + curr, sizeof(dbgfs_dent_s->self_name)); strlcpy(dbgfs_dent_s->par_name, par_dir, - strlen(par_dir) + 1); + sizeof(dbgfs_dent_s->par_name)); INIT_WORK(&dbgfs_dent_s->rm_work, glink_dfs_dent_rm_worker); mutex_lock(&dent_list_lock_lha0); From b17a6a0067d886892d58c3f994706a93427cd769 Mon Sep 17 00:00:00 2001 From: Jishnu Prakash Date: Fri, 8 Mar 2019 13:06:23 +0530 Subject: [PATCH 32/63] thermal: tsens: Fix CLANG compilation issues in TSENS for kernel 4.9 Correct datatype of sensor threshold states to avoid compilation issues. Change-Id: I6a6a9ac051853c8d32b597d74201f1243e682bb3 Signed-off-by: Jishnu Prakash Signed-off-by: Swetha Chikkaboraiah --- drivers/thermal/tsens.h | 8 ++++---- drivers/thermal/tsens1xxx.c | 30 +++++++++++++++--------------- drivers/thermal/tsens2xxx.c | 11 +++++++---- 3 files changed, 26 insertions(+), 23 deletions(-) diff --git a/drivers/thermal/tsens.h b/drivers/thermal/tsens.h index d35b867d92fd..41463f63fc69 100644 --- a/drivers/thermal/tsens.h +++ b/drivers/thermal/tsens.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2017-2018, The Linux Foundation. All rights reserved. +/* Copyright (c) 2017-2019, 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 @@ -69,9 +69,9 @@ struct tsens_dbg_context { }; struct tsens_context { - enum thermal_device_mode high_th_state; - enum thermal_device_mode low_th_state; - enum thermal_device_mode crit_th_state; + enum thermal_trip_activation_mode high_th_state; + enum thermal_trip_activation_mode low_th_state; + enum thermal_trip_activation_mode crit_th_state; int high_temp; int low_temp; int crit_temp; diff --git a/drivers/thermal/tsens1xxx.c b/drivers/thermal/tsens1xxx.c index 19e2b5a91b5c..ea751bc3a932 100644 --- a/drivers/thermal/tsens1xxx.c +++ b/drivers/thermal/tsens1xxx.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved. +/* Copyright (c) 2012-2019, 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 @@ -314,7 +314,7 @@ static int tsens1xxx_get_temp(struct tsens_sensor *sensor, int *temp) } static int tsens_tz_activate_trip_type(struct tsens_sensor *tm_sensor, - int trip, enum thermal_device_mode mode) + int trip, enum thermal_trip_activation_mode mode) { struct tsens_device *tmdev = NULL; unsigned int reg_cntl, code, hi_code, lo_code, mask; @@ -360,7 +360,7 @@ static int tsens_tz_activate_trip_type(struct tsens_sensor *tm_sensor, return -EINVAL; } - if (mode == THERMAL_DEVICE_DISABLED) + if (mode == THERMAL_TRIP_ACTIVATION_DISABLED) writel_relaxed(reg_cntl | mask, (TSENS_S0_UPPER_LOWER_STATUS_CTRL_ADDR(tmdev->tsens_tm_addr) + (tm_sensor->hw_id * TSENS_SN_ADDR_OFFSET))); @@ -439,7 +439,7 @@ static int tsens1xxx_set_trip_temp(struct tsens_sensor *tm_sensor, if (high_temp != INT_MAX) { rc = tsens_tz_activate_trip_type(tm_sensor, THERMAL_TRIP_CONFIGURABLE_HI, - THERMAL_DEVICE_ENABLED); + THERMAL_TRIP_ACTIVATION_ENABLED); if (rc) { pr_err("trip high enable error :%d\n", rc); goto fail; @@ -447,7 +447,7 @@ static int tsens1xxx_set_trip_temp(struct tsens_sensor *tm_sensor, } else { rc = tsens_tz_activate_trip_type(tm_sensor, THERMAL_TRIP_CONFIGURABLE_HI, - THERMAL_DEVICE_DISABLED); + THERMAL_TRIP_ACTIVATION_DISABLED); if (rc) { pr_err("trip high disable error :%d\n", rc); goto fail; @@ -457,7 +457,7 @@ static int tsens1xxx_set_trip_temp(struct tsens_sensor *tm_sensor, if (low_temp != INT_MIN) { rc = tsens_tz_activate_trip_type(tm_sensor, THERMAL_TRIP_CONFIGURABLE_LOW, - THERMAL_DEVICE_ENABLED); + THERMAL_TRIP_ACTIVATION_ENABLED); if (rc) { pr_err("trip low enable activation error :%d\n", rc); goto fail; @@ -465,7 +465,7 @@ static int tsens1xxx_set_trip_temp(struct tsens_sensor *tm_sensor, } else { rc = tsens_tz_activate_trip_type(tm_sensor, THERMAL_TRIP_CONFIGURABLE_LOW, - THERMAL_DEVICE_DISABLED); + THERMAL_TRIP_ACTIVATION_DISABLED); if (rc) { pr_err("trip low disable error :%d\n", rc); goto fail; @@ -521,15 +521,15 @@ static irqreturn_t tsens_irq_thread(int irq, void *data) if (th_temp > (temp/TSENS_SCALE_MILLIDEG)) { pr_debug("Re-arm high threshold\n"); rc = tsens_tz_activate_trip_type( - &tm->sensor[i], - THERMAL_TRIP_CONFIGURABLE_HI, - THERMAL_DEVICE_ENABLED); + &tm->sensor[i], + THERMAL_TRIP_CONFIGURABLE_HI, + THERMAL_TRIP_ACTIVATION_ENABLED); if (rc) pr_err("high rearm failed"); } else { upper_thr = true; tm->sensor[i].thr_state.high_th_state = - THERMAL_DEVICE_DISABLED; + THERMAL_TRIP_ACTIVATION_DISABLED; } } @@ -543,15 +543,15 @@ static irqreturn_t tsens_irq_thread(int irq, void *data) if (th_temp < (temp/TSENS_SCALE_MILLIDEG)) { pr_debug("Re-arm Low threshold\n"); rc = tsens_tz_activate_trip_type( - &tm->sensor[i], - THERMAL_TRIP_CONFIGURABLE_LOW, - THERMAL_DEVICE_ENABLED); + &tm->sensor[i], + THERMAL_TRIP_CONFIGURABLE_LOW, + THERMAL_TRIP_ACTIVATION_ENABLED); if (rc) pr_err("low rearm failed"); } else { lower_thr = true; tm->sensor[i].thr_state.low_th_state = - THERMAL_DEVICE_DISABLED; + THERMAL_TRIP_ACTIVATION_DISABLED; } } spin_unlock_irqrestore(&tm->tsens_upp_low_lock, flags); diff --git a/drivers/thermal/tsens2xxx.c b/drivers/thermal/tsens2xxx.c index 0dc375fe5471..27fc88adfdf6 100644 --- a/drivers/thermal/tsens2xxx.c +++ b/drivers/thermal/tsens2xxx.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2012-2018, The Linux Foundation. All rights reserved. +/* Copyright (c) 2012-2019, 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 @@ -381,7 +381,8 @@ static irqreturn_t tsens_tm_critical_irq_thread(int irq, void *data) TSENS_TM_CRITICAL_INT_CLEAR( tm->tsens_tm_addr)); tm->sensor[i].thr_state. - crit_th_state = THERMAL_DEVICE_DISABLED; + crit_th_state = + THERMAL_TRIP_ACTIVATION_DISABLED; } spin_unlock_irqrestore(&tm->tsens_crit_lock, flags); } @@ -458,7 +459,8 @@ static irqreturn_t tsens_tm_irq_thread(int irq, void *data) } else { upper_thr = true; tm->sensor[i].thr_state. - high_th_state = THERMAL_DEVICE_DISABLED; + high_th_state = + THERMAL_TRIP_ACTIVATION_DISABLED; } } @@ -490,7 +492,8 @@ static irqreturn_t tsens_tm_irq_thread(int irq, void *data) } else { lower_thr = true; tm->sensor[i].thr_state. - low_th_state = THERMAL_DEVICE_DISABLED; + low_th_state = + THERMAL_TRIP_ACTIVATION_DISABLED; } } spin_unlock_irqrestore(&tm->tsens_upp_low_lock, flags); From feba4e5fbb082b3e86a8ebe7592fa1d494554f9b Mon Sep 17 00:00:00 2001 From: Naitik Bharadiya Date: Mon, 14 Oct 2019 16:07:42 +0530 Subject: [PATCH 33/63] soc: qcom: msm_bus: Fix compilation error with clang Remove self assigned variable to fix -Wself-assign warning with clang. Change-Id: Ia47d8a3f7a6e926d3186fc618827dda09d81f31f Signed-off-by: Naitik Bharadiya Signed-off-by: Swetha Chikkaboraiah --- drivers/soc/qcom/msm_bus/msm_bus_dbg.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/soc/qcom/msm_bus/msm_bus_dbg.c b/drivers/soc/qcom/msm_bus/msm_bus_dbg.c index df292336f08b..c6070498ca2c 100644 --- a/drivers/soc/qcom/msm_bus/msm_bus_dbg.c +++ b/drivers/soc/qcom/msm_bus/msm_bus_dbg.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2010-2012, 2014-2017, The Linux Foundation. All rights +/* Copyright (c) 2010-2012, 2014-2017, 2019 The Linux Foundation. All rights * reserved. * * This program is free software; you can redistribute it and/or modify @@ -577,7 +577,6 @@ static ssize_t msm_bus_dbg_update_request_write(struct file *file, list_for_each_entry(cldata, &cl_list, list) { if (strnstr(chid, cldata->pdata->name, cnt)) { found = 1; - cldata = cldata; strsep(&chid, " "); if (chid) { ret = kstrtoul(chid, 10, &index); From 83f0a01fca74f4a702a253020d350c94a0040217 Mon Sep 17 00:00:00 2001 From: Manu Gautam Date: Wed, 6 Mar 2019 15:17:26 +0530 Subject: [PATCH 34/63] usb: f_gsi: Fix typecasting of usb_prot_id usb_prot_id enum extends ipa_usb_teth_prot enum for various USB functions using F_GSI driver. Perform appropriate type-casting when using usb_prot_id as ipa_usb_teth_prot. Change-Id: Ie148bc5038e0de3fc0056d9f61ebf1c12185a8d1 Signed-off-by: Manu Gautam Signed-off-by: Swetha Chikkaboraiah --- drivers/usb/gadget/function/f_gsi.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/drivers/usb/gadget/function/f_gsi.c b/drivers/usb/gadget/function/f_gsi.c index 0715a28fe6fb..89f71403c9ed 100644 --- a/drivers/usb/gadget/function/f_gsi.c +++ b/drivers/usb/gadget/function/f_gsi.c @@ -531,7 +531,7 @@ static int ipa_connect_channels(struct gsi_data_port *d_port) (gsi->prot_id != USB_PROT_DIAG_IPA) ? IPA_CLIENT_USB_CONS : IPA_CLIENT_USB_DPL_CONS; in_params->ipa_ep_cfg.mode.mode = IPA_BASIC; - in_params->teth_prot = gsi->prot_id; + in_params->teth_prot = (enum ipa_usb_teth_prot)gsi->prot_id; in_params->gevntcount_low_addr = gsi_channel_info.gevntcount_low_addr; in_params->gevntcount_hi_addr = @@ -572,7 +572,7 @@ static int ipa_connect_channels(struct gsi_data_port *d_port) log_event_dbg("%s: USB GSI OUT OPS Completed", __func__); out_params->client = IPA_CLIENT_USB_PROD; out_params->ipa_ep_cfg.mode.mode = IPA_BASIC; - out_params->teth_prot = gsi->prot_id; + out_params->teth_prot = (enum ipa_usb_teth_prot)gsi->prot_id; out_params->gevntcount_low_addr = gsi_channel_info.gevntcount_low_addr; out_params->gevntcount_hi_addr = @@ -614,7 +614,7 @@ static int ipa_connect_channels(struct gsi_data_port *d_port) conn_params->usb_to_ipa_xferrscidx_valid = (gsi->prot_id != USB_PROT_DIAG_IPA) ? true : false; conn_params->ipa_to_usb_xferrscidx_valid = true; - conn_params->teth_prot = gsi->prot_id; + conn_params->teth_prot = (enum ipa_usb_teth_prot)gsi->prot_id; conn_params->teth_prot_params.max_xfer_size_bytes_to_dev = 23700; conn_params->teth_prot_params.max_xfer_size_bytes_to_dev = d_port->out_aggr_size; @@ -735,7 +735,8 @@ static void ipa_disconnect_work_handler(struct gsi_data_port *d_port) log_event_dbg("%s: Calling xdci_disconnect", __func__); ret = ipa_usb_xdci_disconnect(gsi->d_port.out_channel_handle, - gsi->d_port.in_channel_handle, gsi->prot_id); + gsi->d_port.in_channel_handle, + (enum ipa_usb_teth_prot)gsi->prot_id); if (ret) log_event_err("%s: IPA disconnect failed %d", __func__, ret); @@ -778,7 +779,8 @@ static int ipa_suspend_work_handler(struct gsi_data_port *d_port) log_event_dbg("%s: Calling xdci_suspend", __func__); ret = ipa_usb_xdci_suspend(gsi->d_port.out_channel_handle, - gsi->d_port.in_channel_handle, gsi->prot_id, + gsi->d_port.in_channel_handle, + (enum ipa_usb_teth_prot)gsi->prot_id, usb_gsi_remote_wakeup_allowed(f)); if (!ret) { d_port->sm_state = STATE_SUSPENDED; @@ -812,7 +814,7 @@ static void ipa_resume_work_handler(struct gsi_data_port *d_port) ret = ipa_usb_xdci_resume(gsi->d_port.out_channel_handle, gsi->d_port.in_channel_handle, - gsi->prot_id); + (enum ipa_usb_teth_prot)gsi->prot_id); if (ret) log_event_dbg("%s: xdci_resume ret %d", __func__, ret); @@ -3124,7 +3126,7 @@ static int gsi_bind(struct usb_configuration *c, struct usb_function *f) } gsi->d_port.ipa_usb_notify_cb = ipa_usb_notify_cb; - status = ipa_usb_init_teth_prot(gsi->prot_id, + status = ipa_usb_init_teth_prot((enum ipa_usb_teth_prot)gsi->prot_id, &gsi->d_port.ipa_init_params, gsi->d_port.ipa_usb_notify_cb, gsi); if (status) { @@ -3173,7 +3175,7 @@ static void gsi_unbind(struct usb_configuration *c, struct usb_function *f) * with ipa driver shall not fail due to unexpected state. */ drain_workqueue(gsi->d_port.ipa_usb_wq); - ipa_usb_deinit_teth_prot(gsi->prot_id); + ipa_usb_deinit_teth_prot((enum ipa_usb_teth_prot)gsi->prot_id); skip_ipa_dinit: if (gsi->prot_id == USB_PROT_RNDIS_IPA) { From e9181ee009d0bb3722a10e8bc91e00193f0b8196 Mon Sep 17 00:00:00 2001 From: Shadab Naseem Date: Mon, 25 Mar 2019 21:52:00 +0530 Subject: [PATCH 35/63] sysmon-qmi: Fix compilation error while using LLVM LLVM compiler gave compilation error for directly dereferencing completion datatype for conditional check. "warning: address of 'data->ind_recv.done' will always evaluate to 'true' [-Wpointer-bool-conversion]" Use completion API to fix it. Change-Id: I985212802fe37d4b0ebe1b45e90f52d6213864f7 Signed-off-by: Shadab Naseem Signed-off-by: Swetha Chikkaboraiah --- drivers/soc/qcom/sysmon-qmi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/soc/qcom/sysmon-qmi.c b/drivers/soc/qcom/sysmon-qmi.c index f4c7779f286d..2a94c9d71aa8 100644 --- a/drivers/soc/qcom/sysmon-qmi.c +++ b/drivers/soc/qcom/sysmon-qmi.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2017, The Linux Foundation. All rights reserved. + * Copyright (c) 2014-2017, 2020, 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 @@ -474,7 +474,7 @@ int sysmon_send_shutdown(struct subsys_desc *dest_desc) shutdown_ack_ret = wait_for_shutdown_ack(dest_desc); if (shutdown_ack_ret < 0) { pr_err("shutdown_ack SMP2P bit for %s not set\n", data->name); - if (!&data->ind_recv.done) { + if (!completion_done(&data->ind_recv)) { pr_err("QMI shutdown indication not received\n"); ret = shutdown_ack_ret; } From 2f3bd625dedfd87bcaef132ea3a9eb9150bc41c1 Mon Sep 17 00:00:00 2001 From: Naitik Bharadiya Date: Mon, 14 Oct 2019 16:13:58 +0530 Subject: [PATCH 36/63] block: Remove compiler built in function checks for bio_set_op_attrs With the new optimization changes and new flag support makes SDLLVM 8.0 to behave different on few built in compiler functions than that of GCC. This causing a compilation break with clang. So, remove compiler built in function checks that don't have any functional impact to fix this compilation errors. Change-Id: I71ba68baeba7df905c6f05eeb39cbfa97f20e1bb Signed-off-by: Naitik Bharadiya Signed-off-by: Swetha Chikkaboraiah --- include/linux/blk_types.h | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h index 42ad6b5de619..9aa6dfbb459a 100644 --- a/include/linux/blk_types.h +++ b/include/linux/blk_types.h @@ -106,14 +106,8 @@ struct bio { #define bio_op(bio) ((bio)->bi_opf >> BIO_OP_SHIFT) #define bio_set_op_attrs(bio, op, op_flags) do { \ - if (__builtin_constant_p(op)) \ - BUILD_BUG_ON((op) + 0U >= (1U << REQ_OP_BITS)); \ - else \ - WARN_ON_ONCE((op) + 0U >= (1U << REQ_OP_BITS)); \ - if (__builtin_constant_p(op_flags)) \ - BUILD_BUG_ON((op_flags) + 0U >= (1U << BIO_OP_SHIFT)); \ - else \ - WARN_ON_ONCE((op_flags) + 0U >= (1U << BIO_OP_SHIFT)); \ + WARN_ON_ONCE((op) + 0U >= (1U << REQ_OP_BITS)); \ + WARN_ON_ONCE((op_flags) + 0U >= (1U << BIO_OP_SHIFT)); \ (bio)->bi_opf = bio_flags(bio); \ (bio)->bi_opf |= (((op) + 0U) << BIO_OP_SHIFT); \ (bio)->bi_opf |= (op_flags); \ From a507c5b9f334cc9cbac105104f485b78455a26c7 Mon Sep 17 00:00:00 2001 From: Arun Kumar Neelakantam Date: Wed, 13 Mar 2019 18:31:20 +0530 Subject: [PATCH 37/63] soc: qcom: access smp2p_smem structure with I/O function Accessing I/O memory pointers directly cause un-aligned access when using the clang compiler. Avoid using direct iomem pointer access instead use I/O functions. CRs-Fixed: 2410460 Change-Id: I041b10739049de26174e5536bbd142f1deeada3b Signed-off-by: Arun Kumar Neelakantam Signed-off-by: Swetha Chikkaboraiah --- drivers/soc/qcom/msm_smp2p.c | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/drivers/soc/qcom/msm_smp2p.c b/drivers/soc/qcom/msm_smp2p.c index 35d836d356d5..0244d9e06114 100644 --- a/drivers/soc/qcom/msm_smp2p.c +++ b/drivers/soc/qcom/msm_smp2p.c @@ -1,6 +1,6 @@ /* drivers/soc/qcom/smp2p.c * - * Copyright (c) 2013-2016, The Linux Foundation. All rights reserved. + * Copyright (c) 2013-2016, 2019, 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 @@ -989,17 +989,29 @@ void smp2p_init_header(struct smp2p_smem __iomem *header_ptr, int local_pid, int remote_pid, uint32_t features, uint32_t version) { - header_ptr->magic = SMP2P_MAGIC; - SMP2P_SET_LOCAL_PID(header_ptr->rem_loc_proc_id, local_pid); - SMP2P_SET_REMOTE_PID(header_ptr->rem_loc_proc_id, remote_pid); - SMP2P_SET_FEATURES(header_ptr->feature_version, features); - SMP2P_SET_ENT_TOTAL(header_ptr->valid_total_ent, SMP2P_MAX_ENTRY); - SMP2P_SET_ENT_VALID(header_ptr->valid_total_ent, 0); - header_ptr->flags = 0; + uint32_t rem_loc_proc_id = 0; + uint32_t valid_total_ent = 0; + uint32_t feature_version = 0; + + writel_relaxed(SMP2P_MAGIC, &header_ptr->magic); + + SMP2P_SET_LOCAL_PID(rem_loc_proc_id, local_pid); + SMP2P_SET_REMOTE_PID(rem_loc_proc_id, remote_pid); + writel_relaxed(rem_loc_proc_id, &header_ptr->rem_loc_proc_id); + + SMP2P_SET_FEATURES(feature_version, features); + writel_relaxed(feature_version, &header_ptr->feature_version); + + SMP2P_SET_ENT_TOTAL(valid_total_ent, SMP2P_MAX_ENTRY); + SMP2P_SET_ENT_VALID(valid_total_ent, 0); + writel_relaxed(valid_total_ent, &header_ptr->valid_total_ent); + + writel_relaxed(0, &header_ptr->flags); /* ensure that all fields are valid before version is written */ wmb(); - SMP2P_SET_VERSION(header_ptr->feature_version, version); + SMP2P_SET_VERSION(feature_version, version); + writel_relaxed(feature_version, &header_ptr->feature_version); } /** From 2020183c30a268c912d96d4224482b363983297b Mon Sep 17 00:00:00 2001 From: Mukesh Ojha Date: Fri, 23 Nov 2018 16:32:02 +0530 Subject: [PATCH 38/63] AndroidKernel: Use TARGET_KERNEL_CROSS_COMPILE_PREFIX for both 32/64 bit TARGET_TOOLS_PREFIX is a new variable introduced in build environment which keeps the location of the toolchain from the android source, which was working for 64bit but giving unwind warnings for 32 bit targets. [ 7.353691] VFS: Mounted root (ext4 filesystem) readonly on device 253:0. [ 7.363324] Freeing unused kernel memory: 2048K [ 7.375778] unwind: Unknown symbol address c010130c [ 7.375802] unwind: Index not found c010130c [ 7.379466] unwind: Unknown symbol address c010130c [ 7.383992] unwind: Index not found c010130c [ 7.388578] unwind: Unknown symbol address c010130c [ 7.393096] unwind: Index not found c010130c [ 7.397690] unwind: Unknown symbol address c010130c [ 7.402227] unwind: Index not found c010130c [ 7.406806] unwind: Unknown symbol address c010130c [ 7.411331] unwind: Index not found c010130c To solve this let's make the toolchain path prefix change in the target BoardConfig file as per architecture(32/64) basis and avoid making change in kernel. Change-Id: I6ca9642aeabbba1b892e169816f3d6d260bd50d5 Signed-off-by: Mukesh Ojha Signed-off-by: Swetha Chikkaboraiah --- AndroidKernel.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AndroidKernel.mk b/AndroidKernel.mk index 2be10102651f..19b6d75d4123 100644 --- a/AndroidKernel.mk +++ b/AndroidKernel.mk @@ -44,7 +44,7 @@ TARGET_KERNEL_CROSS_COMPILE_PREFIX := $(strip $(TARGET_KERNEL_CROSS_COMPILE_PREF ifeq ($(TARGET_KERNEL_CROSS_COMPILE_PREFIX),) KERNEL_CROSS_COMPILE := arm-eabi- else -KERNEL_CROSS_COMPILE := $(shell pwd)/$(TARGET_TOOLS_PREFIX) +KERNEL_CROSS_COMPILE := $(TARGET_KERNEL_CROSS_COMPILE_PREFIX) endif ifeq ($(TARGET_PREBUILT_KERNEL),) From 2e9dce914ca4c0f419a89af9aaa5425c5b3a178e Mon Sep 17 00:00:00 2001 From: Neeraj Upadhyay Date: Mon, 4 Jun 2018 13:56:28 +0530 Subject: [PATCH 39/63] AndroidKernel: Compile VM kernel in addition to base defconfig Compile VM kernel defconfig, if specified, in addition to the base defconfig. Change-Id: Id40a4304be97144818fe8b71d2991273196903f0 Signed-off-by: Neeraj Upadhyay Signed-off-by: Swetha Chikkaboraiah --- AndroidKernel.mk | 57 ++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 53 insertions(+), 4 deletions(-) diff --git a/AndroidKernel.mk b/AndroidKernel.mk index 19b6d75d4123..7233829c3c84 100644 --- a/AndroidKernel.mk +++ b/AndroidKernel.mk @@ -6,6 +6,8 @@ ifeq ($(KERNEL_TARGET),) INSTALLED_KERNEL_TARGET := $(PRODUCT_OUT)/kernel endif +INSTALLED_KERNEL_VM_TARGET := $(PRODUCT_OUT)/kernel_vm + TARGET_KERNEL_MAKE_ENV := $(strip $(TARGET_KERNEL_MAKE_ENV)) ifeq ($(TARGET_KERNEL_MAKE_ENV),) KERNEL_MAKE_ENV := @@ -64,12 +66,16 @@ ifeq ($(TARGET_KERNEL),$(current_dir)) KERNEL_OUT := $(TARGET_OUT_INTERMEDIATES)/kernel/$(TARGET_KERNEL) KERNEL_SYMLINK := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ KERNEL_USR := $(KERNEL_SYMLINK)/usr + KERNEL_VM_OUT := $(TARGET_OUT_INTERMEDIATES)/kernel_vm/$(TARGET_KERNEL) + KERNEL_VM_SYMLINK := $(TARGET_OUT_INTERMEDIATES)/KERNEL_VM_OBJ + KERNEL_VM_USR := $(KERNEL_VM_SYMLINK)/usr else # Legacy style, kernel source directly under kernel KERNEL_LEGACY_DIR := true BUILD_ROOT_LOC := ../ TARGET_KERNEL_SOURCE := kernel KERNEL_OUT := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ + KERNEL_VM_OUT := $(TARGET_OUT_INTERMEDIATES)/KERNEL_VM_OBJ endif KERNEL_CONFIG := $(KERNEL_OUT)/.config @@ -80,26 +86,32 @@ else ifeq ($(TARGET_USES_UNCOMPRESSED_KERNEL),true) $(info Using uncompressed kernel) -TARGET_PREBUILT_INT_KERNEL := $(KERNEL_OUT)/arch/$(KERNEL_ARCH)/boot/Image +TARGET_PREBUILT_INT_KERNEL_ := arch/$(KERNEL_ARCH)/boot/Image else ifeq ($(KERNEL_ARCH),arm64) -TARGET_PREBUILT_INT_KERNEL := $(KERNEL_OUT)/arch/$(KERNEL_ARCH)/boot/Image.gz +TARGET_PREBUILT_INT_KERNEL_ := arch/$(KERNEL_ARCH)/boot/Image.gz else -TARGET_PREBUILT_INT_KERNEL := $(KERNEL_OUT)/arch/$(KERNEL_ARCH)/boot/zImage +TARGET_PREBUILT_INT_KERNEL_ := arch/$(KERNEL_ARCH)/boot/zImage endif endif ifeq ($(TARGET_KERNEL_APPEND_DTB), true) $(info Using appended DTB) -TARGET_PREBUILT_INT_KERNEL := $(TARGET_PREBUILT_INT_KERNEL)-dtb +TARGET_PREBUILT_INT_KERNEL_ := $(TARGET_PREBUILT_INT_KERNEL_)-dtb endif KERNEL_HEADERS_INSTALL := $(KERNEL_OUT)/usr KERNEL_MODULES_INSTALL ?= system KERNEL_MODULES_OUT ?= $(PRODUCT_OUT)/$(KERNEL_MODULES_INSTALL)/lib/modules +TARGET_PREBUILT_INT_KERNEL := $(KERNEL_OUT)/$(TARGET_PREBUILT_INT_KERNEL_) TARGET_PREBUILT_KERNEL := $(TARGET_PREBUILT_INT_KERNEL) +KERNEL_VM_CONFIG := $(KERNEL_VM_OUT)/.config +KERNEL_VM_HEADERS_INSTALL := $(KERNEL_VM_OUT)/usr +TARGET_PREBUILT_INT_KERNEL_VM := $(KERNEL_VM_OUT)/$(TARGET_PREBUILT_INT_KERNEL_) +TARGET_PREBUILT_KERNEL_VM := $(TARGET_PREBUILT_INT_KERNEL_VM) + define mv-modules mdpath=`find $(KERNEL_MODULES_OUT) -type f -name modules.dep`;\ if [ "$$mdpath" != "" ];then\ @@ -116,12 +128,49 @@ mpath=`dirname $$mdpath`; rm -rf $$mpath;\ fi endef +$(TARGET_PREBUILT_INT_KERNEL_VM): ; + ifneq ($(KERNEL_LEGACY_DIR),true) $(KERNEL_USR): $(KERNEL_HEADERS_INSTALL) rm -rf $(KERNEL_SYMLINK) ln -s kernel/$(TARGET_KERNEL) $(KERNEL_SYMLINK) $(TARGET_PREBUILT_INT_KERNEL): $(KERNEL_USR) + +ifneq ($(KERNEL_VM_DEFCONFIG),) +$(KERNEL_VM_USR): $(KERNEL_VM_HEADERS_INSTALL) + rm -rf $(KERNEL_VM_SYMLINK); + ln -s kernel_vm/$(TARGET_KERNEL) $(KERNEL_VM_SYMLINK); + +$(TARGET_PREBUILT_INT_KERNEL_VM): $(KERNEL_VM_USR) +endif +endif + +ifneq ($(KERNEL_VM_DEFCONFIG),) +$(KERNEL_VM_OUT): + mkdir -p $(KERNEL_VM_OUT); + +$(KERNEL_VM_CONFIG): $(KERNEL_VM_OUT) + $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_VM_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(KERNEL_VM_DEFCONFIG); + if [ ! -z "$(KERNEL_CONFIG_OVERRIDE)" ]; then \ + echo "Overriding kernel config with '$(KERNEL_CONFIG_OVERRIDE)'"; \ + echo $(KERNEL_CONFIG_OVERRIDE) >> $(KERNEL_VM_OUT)/.config; \ + $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_VM_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) oldconfig; fi; + +$(TARGET_PREBUILT_INT_KERNEL_VM): $(KERNEL_VM_OUT) $(KERNEL_VM_HEADERS_INSTALL) + echo "Building vm kernel..."; + rm -rf $(KERNEL_VM_OUT)/arch/$(KERNEL_ARCH)/boot/dts; + $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_VM_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(KERNEL_CFLAGS); + +$(KERNEL_VM_HEADERS_INSTALL): $(KERNEL_VM_OUT) + rm -f $(BUILD_ROOT_LOC)$(KERNEL_VM_CONFIG); + $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_VM_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_HEADER_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(KERNEL_VM_DEFCONFIG); + $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_VM_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_HEADER_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) headers_install; + if [ -d "$(KERNEL_VM_HEADERS_INSTALL)/include/bringup_headers" ]; then \ + cp -Rf $(KERNEL_VM_HEADERS_INSTALL)/include/bringup_headers/* $(KERNEL_VM_HEADERS_INSTALL)/include/ ; fi ; + if [ ! -z "$(KERNEL_CONFIG_OVERRIDE)" ]; then \ + echo $(KERNEL_CONFIG_OVERRIDE) >> $(KERNEL_VM_OUT)/.config; \ + $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_VM_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) oldconfig; fi; endif $(KERNEL_OUT): From 4dbd0f1d87497f5517751c70b7c3cd302a2a372b Mon Sep 17 00:00:00 2001 From: Prasad Sodagudi Date: Wed, 4 Oct 2017 14:44:24 -0700 Subject: [PATCH 40/63] AndroidKernel: Add LLVM support for Kernel Add necessary changes to be able to compile the Kernel with LLVM. Also update for KERNEL_VM_* specific rules. Change-Id: I147a7abc29ec66828e9626a74125d391f8aaa329 Signed-off-by: Prasad Sodagudi Signed-off-by: Satya Durga Srinivasu Prabhala Signed-off-by: Shadab Naseem Signed-off-by: Swetha Chikkaboraiah --- AndroidKernel.mk | 42 ++++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/AndroidKernel.mk b/AndroidKernel.mk index 7233829c3c84..9f914c018a16 100644 --- a/AndroidKernel.mk +++ b/AndroidKernel.mk @@ -52,9 +52,15 @@ endif ifeq ($(TARGET_PREBUILT_KERNEL),) KERNEL_GCC_NOANDROID_CHK := $(shell (echo "int main() {return 0;}" | $(KERNEL_CROSS_COMPILE)gcc -E -mno-android - > /dev/null 2>&1 ; echo $$?)) + +real_cc := +ifeq ($(KERNEL_LLVM_SUPPORT),true) +real_cc := REAL_CC=$(KERNEL_LLVM_BIN) CLANG_TRIPLE=aarch64-linux-gnu- +else ifeq ($(strip $(KERNEL_GCC_NOANDROID_CHK)),0) KERNEL_CFLAGS := KCFLAGS=-mno-android endif +endif mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST))) current_dir := $(notdir $(patsubst %/,%,$(dir $(mkfile_path)))) @@ -151,52 +157,52 @@ $(KERNEL_VM_OUT): mkdir -p $(KERNEL_VM_OUT); $(KERNEL_VM_CONFIG): $(KERNEL_VM_OUT) - $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_VM_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(KERNEL_VM_DEFCONFIG); + $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_VM_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) $(KERNEL_VM_DEFCONFIG); if [ ! -z "$(KERNEL_CONFIG_OVERRIDE)" ]; then \ echo "Overriding kernel config with '$(KERNEL_CONFIG_OVERRIDE)'"; \ echo $(KERNEL_CONFIG_OVERRIDE) >> $(KERNEL_VM_OUT)/.config; \ - $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_VM_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) oldconfig; fi; + $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_VM_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) oldconfig; fi; $(TARGET_PREBUILT_INT_KERNEL_VM): $(KERNEL_VM_OUT) $(KERNEL_VM_HEADERS_INSTALL) echo "Building vm kernel..."; rm -rf $(KERNEL_VM_OUT)/arch/$(KERNEL_ARCH)/boot/dts; - $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_VM_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(KERNEL_CFLAGS); + $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_VM_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) $(KERNEL_CFLAGS); $(KERNEL_VM_HEADERS_INSTALL): $(KERNEL_VM_OUT) rm -f $(BUILD_ROOT_LOC)$(KERNEL_VM_CONFIG); - $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_VM_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_HEADER_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(KERNEL_VM_DEFCONFIG); - $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_VM_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_HEADER_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) headers_install; + $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_VM_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_HEADER_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) $(KERNEL_VM_DEFCONFIG); + $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_VM_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_HEADER_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) headers_install; if [ -d "$(KERNEL_VM_HEADERS_INSTALL)/include/bringup_headers" ]; then \ cp -Rf $(KERNEL_VM_HEADERS_INSTALL)/include/bringup_headers/* $(KERNEL_VM_HEADERS_INSTALL)/include/ ; fi ; if [ ! -z "$(KERNEL_CONFIG_OVERRIDE)" ]; then \ echo $(KERNEL_CONFIG_OVERRIDE) >> $(KERNEL_VM_OUT)/.config; \ - $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_VM_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) oldconfig; fi; + $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_VM_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) oldconfig; fi; endif $(KERNEL_OUT): mkdir -p $(KERNEL_OUT) $(KERNEL_CONFIG): $(KERNEL_OUT) - $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(KERNEL_DEFCONFIG) + $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) $(KERNEL_DEFCONFIG) $(hide) if [ ! -z "$(KERNEL_CONFIG_OVERRIDE)" ]; then \ echo "Overriding kernel config with '$(KERNEL_CONFIG_OVERRIDE)'"; \ echo $(KERNEL_CONFIG_OVERRIDE) >> $(KERNEL_OUT)/.config; \ - $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) oldconfig; fi + $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) oldconfig; fi $(TARGET_PREBUILT_INT_KERNEL): $(KERNEL_OUT) $(KERNEL_HEADERS_INSTALL) $(hide) echo "Building kernel..." $(hide) rm -rf $(KERNEL_OUT)/arch/$(KERNEL_ARCH)/boot/dts - $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(KERNEL_CFLAGS) - $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(KERNEL_CFLAGS) modules - $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) INSTALL_MOD_PATH=$(BUILD_ROOT_LOC)../$(KERNEL_MODULES_INSTALL) INSTALL_MOD_STRIP=1 $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) modules_install + $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) $(KERNEL_CFLAGS) + $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) $(KERNEL_CFLAGS) modules + $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) INSTALL_MOD_PATH=$(BUILD_ROOT_LOC)../$(KERNEL_MODULES_INSTALL) INSTALL_MOD_STRIP=1 $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) modules_install $(mv-modules) $(clean-module-folder) $(KERNEL_HEADERS_INSTALL): $(KERNEL_OUT) $(hide) if [ ! -z "$(KERNEL_HEADER_DEFCONFIG)" ]; then \ rm -f $(BUILD_ROOT_LOC)$(KERNEL_CONFIG); \ - $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_HEADER_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(KERNEL_HEADER_DEFCONFIG); \ - $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_HEADER_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) headers_install;\ + $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_HEADER_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) $(KERNEL_HEADER_DEFCONFIG); \ + $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_HEADER_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) headers_install;\ if [ -d "$(KERNEL_HEADERS_INSTALL)/include/bringup_headers" ]; then \ cp -Rf $(KERNEL_HEADERS_INSTALL)/include/bringup_headers/* $(KERNEL_HEADERS_INSTALL)/include/ ;\ fi ;\ @@ -204,22 +210,22 @@ $(KERNEL_HEADERS_INSTALL): $(KERNEL_OUT) $(hide) if [ "$(KERNEL_HEADER_DEFCONFIG)" != "$(KERNEL_DEFCONFIG)" ]; then \ echo "Used a different defconfig for header generation"; \ rm -f $(BUILD_ROOT_LOC)$(KERNEL_CONFIG); \ - $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(KERNEL_DEFCONFIG); fi + $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) $(KERNEL_DEFCONFIG); fi $(hide) if [ ! -z "$(KERNEL_CONFIG_OVERRIDE)" ]; then \ echo "Overriding kernel config with '$(KERNEL_CONFIG_OVERRIDE)'"; \ echo $(KERNEL_CONFIG_OVERRIDE) >> $(KERNEL_OUT)/.config; \ - $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) oldconfig; fi + $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) oldconfig; fi .PHONY: kerneltags kerneltags: $(KERNEL_OUT) $(KERNEL_CONFIG) - $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) tags + $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) tags .PHONY: kernelconfig kernelconfig: $(KERNEL_OUT) $(KERNEL_CONFIG) env KCONFIG_NOTIMESTAMP=true \ - $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) menuconfig + $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) menuconfig env KCONFIG_NOTIMESTAMP=true \ - $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) savedefconfig + $(MAKE) -C $(TARGET_KERNEL_SOURCE) O=$(BUILD_ROOT_LOC)$(KERNEL_OUT) $(KERNEL_MAKE_ENV) ARCH=$(KERNEL_ARCH) CROSS_COMPILE=$(KERNEL_CROSS_COMPILE) $(real_cc) savedefconfig cp $(KERNEL_OUT)/defconfig $(TARGET_KERNEL_SOURCE)/arch/$(KERNEL_ARCH)/configs/$(KERNEL_DEFCONFIG) endif From 3a2966cabe9d4e31d456ea5c5c3d1c3e30210cf5 Mon Sep 17 00:00:00 2001 From: Raghavendra Rao Ananta Date: Mon, 16 Apr 2018 19:14:44 -0700 Subject: [PATCH 41/63] AndroidKernel: Add configuration for the LLVM path Set LLVM path depending on the configuration done by the build system. Change-Id: Ib4ebf15c17c2febfee44404df0d2582625f11516 Signed-off-by: Raghavendra Rao Ananta Signed-off-by: Swetha Chikkaboraiah --- AndroidKernel.mk | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/AndroidKernel.mk b/AndroidKernel.mk index 9f914c018a16..9c81d253bb70 100644 --- a/AndroidKernel.mk +++ b/AndroidKernel.mk @@ -49,6 +49,20 @@ else KERNEL_CROSS_COMPILE := $(TARGET_KERNEL_CROSS_COMPILE_PREFIX) endif +ifeq ($(KERNEL_LLVM_SUPPORT), true) + ifeq ($(KERNEL_SD_LLVM_SUPPORT), true) #Using sd-llvm compiler + ifeq ($(shell echo $(SDCLANG_PATH_2) | head -c 1),/) + KERNEL_LLVM_BIN := $(SDCLANG_PATH_2)/clang + else + KERNEL_LLVM_BIN := $(ANDROID_BUILD_TOP)/$(SDCLANG_PATH_2)/clang + endif + $(warning "Using sdllvm" $(KERNEL_LLVM_BIN)) + else + KERNEL_LLVM_BIN := $(ANDROID_BUILD_TOP)/$(CLANG) #Using aosp-llvm compiler + $(warning "Using aosp-llvm" $(KERNEL_LLVM_BIN)) + endif +endif + ifeq ($(TARGET_PREBUILT_KERNEL),) KERNEL_GCC_NOANDROID_CHK := $(shell (echo "int main() {return 0;}" | $(KERNEL_CROSS_COMPILE)gcc -E -mno-android - > /dev/null 2>&1 ; echo $$?)) From d5214a547e5d2429a18b73738c51aeaf9bd7392a Mon Sep 17 00:00:00 2001 From: Raghavendra Rao Ananta Date: Tue, 17 Apr 2018 16:50:06 -0700 Subject: [PATCH 42/63] AndroidKernel: Update the LLVM path Update the LLVM path due to a change in the compiler version. Change-Id: I7c6c46047b4bb6f4a9e3d49eec1ae252c42fdbd8 Signed-off-by: Raghavendra Rao Ananta Signed-off-by: Swetha Chikkaboraiah --- AndroidKernel.mk | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/AndroidKernel.mk b/AndroidKernel.mk index 9c81d253bb70..d3428c4a36f4 100644 --- a/AndroidKernel.mk +++ b/AndroidKernel.mk @@ -51,10 +51,10 @@ endif ifeq ($(KERNEL_LLVM_SUPPORT), true) ifeq ($(KERNEL_SD_LLVM_SUPPORT), true) #Using sd-llvm compiler - ifeq ($(shell echo $(SDCLANG_PATH_2) | head -c 1),/) - KERNEL_LLVM_BIN := $(SDCLANG_PATH_2)/clang + ifeq ($(shell echo $(SDCLANG_PATH) | head -c 1),/) + KERNEL_LLVM_BIN := $(SDCLANG_PATH)/clang else - KERNEL_LLVM_BIN := $(ANDROID_BUILD_TOP)/$(SDCLANG_PATH_2)/clang + KERNEL_LLVM_BIN := $(ANDROID_BUILD_TOP)/$(SDCLANG_PATH)/clang endif $(warning "Using sdllvm" $(KERNEL_LLVM_BIN)) else From e2524e090c8dedfd2d10d21fec2602ac6ecd158f Mon Sep 17 00:00:00 2001 From: Divya Sharma Date: Tue, 25 Sep 2018 14:43:30 -0700 Subject: [PATCH 43/63] ANDROID_BUILD_TOP is deprecated ANDROID_BUILD_TOP variable is deprecated and thus all paths are assumed to be relative to the top directory. However, this is causing problem when some of the paths are constructed in the Android build system and used in the non-Android makefiles that are usually executed NOT at the top directory but at a sub directory using -C option. As a result, the relative path from the Android build system become invalid in the non-Android makefiles. In order to overcome the restriction, ANDROID_BUILD_TOP is manually constructed when invoking the non-Android makefiles by using $$(pwd). The non-Android makefiles are expected to construct the absolute path by prepending ANDROID_BUILD_TOP to any path that came from the Android build system. Change-Id: Ia2e380cf329f56c8d36ad8dbde90d6a655f9509a Signed-off-by: Divya Sharma Signed-off-by: Bruce Levy Signed-off-by: Prasad Sodagudi Signed-off-by: Shadab Naseem Signed-off-by: Swetha Chikkaboraiah --- AndroidKernel.mk | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AndroidKernel.mk b/AndroidKernel.mk index d3428c4a36f4..ceb7bcb35511 100644 --- a/AndroidKernel.mk +++ b/AndroidKernel.mk @@ -54,11 +54,11 @@ ifeq ($(KERNEL_LLVM_SUPPORT), true) ifeq ($(shell echo $(SDCLANG_PATH) | head -c 1),/) KERNEL_LLVM_BIN := $(SDCLANG_PATH)/clang else - KERNEL_LLVM_BIN := $(ANDROID_BUILD_TOP)/$(SDCLANG_PATH)/clang + KERNEL_LLVM_BIN := $(shell pwd)/$(SDCLANG_PATH)/clang endif $(warning "Using sdllvm" $(KERNEL_LLVM_BIN)) else - KERNEL_LLVM_BIN := $(ANDROID_BUILD_TOP)/$(CLANG) #Using aosp-llvm compiler + KERNEL_LLVM_BIN := $(shell pwd)/$(CLANG) #Using aosp-llvm compiler $(warning "Using aosp-llvm" $(KERNEL_LLVM_BIN)) endif endif From 5a211ed7ae98c994faafcfe10101dab3ebb772b0 Mon Sep 17 00:00:00 2001 From: Mohammed Nayeem Ur Rahman Date: Wed, 1 Apr 2020 14:30:33 +0530 Subject: [PATCH 44/63] msm: adsprpc: Fix array index underflow problem Add check to restrict index underflow.This is to avoid that it does not access invalid index. Change-Id: Ib971033c5820ca4dab38ace3b106c7b1b42529e4 Acked-by: Gururaj Chalger Signed-off-by: Mohammed Nayeem Ur Rahman --- drivers/char/adsprpc.c | 76 +++++++++++++++++++++++++++++------------- 1 file changed, 52 insertions(+), 24 deletions(-) diff --git a/drivers/char/adsprpc.c b/drivers/char/adsprpc.c index 24935677567b..88c7cf1828a2 100644 --- a/drivers/char/adsprpc.c +++ b/drivers/char/adsprpc.c @@ -711,12 +711,23 @@ static void fastrpc_mmap_free(struct fastrpc_mmap *map, uint32_t flags) { struct fastrpc_apps *me = &gfa; struct fastrpc_file *fl; - int vmid; + int vmid, cid = -1, err = 0; struct fastrpc_session_ctx *sess; if (!map) return; fl = map->fl; + if (fl && !(map->flags == ADSP_MMAP_HEAP_ADDR || + map->flags == ADSP_MMAP_REMOTE_HEAP_ADDR)) { + cid = fl->cid; + VERIFY(err, cid >= ADSP_DOMAIN_ID && cid < NUM_CHANNELS); + if (err) { + err = -ECHRNG; + pr_err("adsprpc: ERROR:%s, Invalid channel id: %d, err:%d", + __func__, cid, err); + return; + } + } if (map->flags == ADSP_MMAP_HEAP_ADDR || map->flags == ADSP_MMAP_REMOTE_HEAP_ADDR) { map->refs--; @@ -795,20 +806,21 @@ static int fastrpc_mmap_create(struct fastrpc_file *fl, int fd, struct fastrpc_apps *me = &gfa; struct fastrpc_session_ctx *sess; struct fastrpc_apps *apps = fl->apps; - int cid = fl->cid; - struct fastrpc_channel_ctx *chan = NULL; struct fastrpc_mmap *map = NULL; + struct fastrpc_channel_ctx *chan = NULL; unsigned long attrs; dma_addr_t region_phys = 0; void *region_vaddr = NULL; unsigned long flags; - int err = 0, vmid; + int err = 0, vmid, cid = -1; - VERIFY(err, cid >= 0 && cid < NUM_CHANNELS); - if (err) + cid = fl->cid; + VERIFY(err, cid >= ADSP_DOMAIN_ID && cid < NUM_CHANNELS); + if (err) { + err = -ECHRNG; goto bail; + } chan = &apps->channel[cid]; - if (!fastrpc_mmap_find(fl, fd, va, len, mflags, 1, ppmap)) return 0; map = kzalloc(sizeof(*map), GFP_KERNEL); @@ -1847,12 +1859,22 @@ static int fastrpc_invoke_send(struct smq_invoke_ctx *ctx, { struct smq_msg *msg = &ctx->msg; struct fastrpc_file *fl = ctx->fl; - struct fastrpc_channel_ctx *channel_ctx = &fl->apps->channel[fl->cid]; - int err = 0, len; + int err = 0, len, cid = -1; + struct fastrpc_channel_ctx *channel_ctx = NULL; + + cid = fl->cid; + VERIFY(err, cid >= ADSP_DOMAIN_ID && cid < NUM_CHANNELS); + if (err) { + err = -ECHRNG; + goto bail; + } + channel_ctx = &fl->apps->channel[fl->cid]; VERIFY(err, NULL != channel_ctx->chan); - if (err) + if (err) { + err = -ECHRNG; goto bail; + } msg->pid = fl->tgid; msg->tid = current->pid; if (fl->sessionid) @@ -1971,11 +1993,22 @@ static int fastrpc_internal_invoke(struct fastrpc_file *fl, uint32_t mode, { struct smq_invoke_ctx *ctx = NULL; struct fastrpc_ioctl_invoke *invoke = &inv->inv; - int cid = fl->cid; - int interrupted = 0; - int err = 0; + int err = 0, cid = -1, interrupted = 0; struct timespec invoket = {0}; - int64_t *perf_counter = getperfcounter(fl, PERF_COUNT); + int64_t *perf_counter = NULL; + + cid = fl->cid; + VERIFY(err, cid >= ADSP_DOMAIN_ID && cid < NUM_CHANNELS); + if (err) { + err = -ECHRNG; + goto bail; + } + VERIFY(err, fl->sctx != NULL); + if (err) { + err = -EBADR; + goto bail; + } + perf_counter = getperfcounter(fl, PERF_COUNT); if (fl->profile) getnstimeofday(&invoket); @@ -1989,13 +2022,6 @@ static int fastrpc_internal_invoke(struct fastrpc_file *fl, uint32_t mode, } } - VERIFY(err, fl->sctx != NULL); - if (err) - goto bail; - VERIFY(err, fl->cid >= 0 && fl->cid < NUM_CHANNELS); - if (err) - goto bail; - if (!kernel) { VERIFY(err, 0 == context_restore_interrupted(fl, inv, &ctx)); @@ -3349,7 +3375,7 @@ static const struct file_operations debugfs_fops = { static int fastrpc_channel_open(struct fastrpc_file *fl) { struct fastrpc_apps *me = &gfa; - int cid, err = 0; + int cid = -1, err = 0; mutex_lock(&me->smd_mutex); @@ -3357,9 +3383,11 @@ static int fastrpc_channel_open(struct fastrpc_file *fl) if (err) goto bail; cid = fl->cid; - VERIFY(err, cid >= 0 && cid < NUM_CHANNELS); - if (err) + VERIFY(err, cid >= ADSP_DOMAIN_ID && cid < NUM_CHANNELS); + if (err) { + err = -ECHRNG; goto bail; + } if (me->channel[cid].ssrcount != me->channel[cid].prevssrcount) { if (!me->channel[cid].issubsystemup) { From ac1039f7d78f751e5af6a9eae28cbb968171cf70 Mon Sep 17 00:00:00 2001 From: Chris Fries Date: Mon, 3 Dec 2018 11:56:19 -0800 Subject: [PATCH 45/63] kbuild: Set KBUILD_CFLAGS before incl. arch Makefile (commit ae6b289a37890909fea0e4a1666e19377fa0ed2c upstream) Set the clang KBUILD_CFLAGS up before including arch/ Makefiles, so that ld-options (etc.) can work correctly. This fixes errors with clang such as ld-options trying to CC against your host architecture, but LD trying to link against your target architecture. Change-Id: Iba222928068571a7b9cc3801265fff88e66f1294 Signed-off-by: Chris Fries Signed-off-by: Nick Desaulniers Reviewed-by: Matthias Kaehlcke Tested-by: Matthias Kaehlcke Signed-off-by: Masahiro Yamada Signed-off-by: Greg Kroah-Hartman Git-commit: 740f140b5dc4f7553a268d153fc816948cbc8cbd Git-repo: https://source.codeaurora.org/quic/la/kernel/msm-4.14 Signed-off-by: Swetha Chikkaboraiah --- Makefile | 67 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 33 insertions(+), 34 deletions(-) diff --git a/Makefile b/Makefile index 188a66d79f82..a349a909b4e8 100644 --- a/Makefile +++ b/Makefile @@ -513,6 +513,39 @@ ifneq ($(filter install,$(MAKECMDGOALS)),) endif endif +ifeq ($(cc-name),clang) +ifneq ($(CROSS_COMPILE),) +CLANG_TARGET := -target $(notdir $(CROSS_COMPILE:%-=%)) +GCC_TOOLCHAIN := $(realpath $(dir $(shell which $(LD)))/..) +endif +ifneq ($(GCC_TOOLCHAIN),) +CLANG_GCC_TC := -gcc-toolchain $(GCC_TOOLCHAIN) +endif +KBUILD_CFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC) +KBUILD_AFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC) +KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,) +KBUILD_CFLAGS += $(call cc-disable-warning, unused-variable) +KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier) +KBUILD_CFLAGS += $(call cc-disable-warning, gnu) +KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member) +# Quiet clang warning: comparison of unsigned expression < 0 is always false +KBUILD_CFLAGS += $(call cc-disable-warning, tautological-compare) +# CLANG uses a _MergedGlobals as optimization, but this breaks modpost, as the +# source of a reference will be _MergedGlobals and not on of the whitelisted names. +# See modpost pattern 2 +KBUILD_CFLAGS += $(call cc-option, -mno-global-merge,) +KBUILD_CFLAGS += $(call cc-option, -fcatch-undefined-behavior) +KBUILD_CFLAGS += $(call cc-option, -no-integrated-as) +KBUILD_AFLAGS += $(call cc-option, -no-integrated-as) +else + +# These warnings generated too much noise in a regular build. +# Use make W=1 to enable them (see scripts/Makefile.build) +KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable) +KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable) +endif + + ifeq ($(mixed-targets),1) # =========================================================================== # We're called with mixed targets (*config and build targets). @@ -768,40 +801,6 @@ ifdef CONFIG_CC_STACKPROTECTOR endif KBUILD_CFLAGS += $(stackp-flag) -ifeq ($(cc-name),clang) -ifneq ($(CROSS_COMPILE),) -CLANG_TRIPLE ?= $(CROSS_COMPILE) -CLANG_TARGET := --target=$(notdir $(CLANG_TRIPLE:%-=%)) -GCC_TOOLCHAIN := $(realpath $(dir $(shell which $(LD)))/..) -endif -ifneq ($(GCC_TOOLCHAIN),) -CLANG_GCC_TC := --gcc-toolchain=$(GCC_TOOLCHAIN) -endif -KBUILD_CFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC) -KBUILD_AFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC) -KBUILD_CPPFLAGS += $(call cc-option,-Qunused-arguments,) -KBUILD_CFLAGS += $(call cc-disable-warning, unused-variable) -KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier) -KBUILD_CFLAGS += $(call cc-disable-warning, gnu) -KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member) -KBUILD_CFLAGS += $(call cc-disable-warning, duplicate-decl-specifier) -# Quiet clang warning: comparison of unsigned expression < 0 is always false -KBUILD_CFLAGS += $(call cc-disable-warning, tautological-compare) -# CLANG uses a _MergedGlobals as optimization, but this breaks modpost, as the -# source of a reference will be _MergedGlobals and not on of the whitelisted names. -# See modpost pattern 2 -KBUILD_CFLAGS += $(call cc-option, -mno-global-merge,) -KBUILD_CFLAGS += $(call cc-option, -fcatch-undefined-behavior) -KBUILD_CFLAGS += $(call cc-option, -no-integrated-as) -KBUILD_AFLAGS += $(call cc-option, -no-integrated-as) -else - -# These warnings generated too much noise in a regular build. -# Use make W=1 to enable them (see scripts/Makefile.build) -KBUILD_CFLAGS += $(call cc-disable-warning, unused-but-set-variable) -KBUILD_CFLAGS += $(call cc-disable-warning, unused-const-variable) -endif - ifdef CONFIG_FRAME_POINTER KBUILD_CFLAGS += -fno-omit-frame-pointer -fno-optimize-sibling-calls else From 9b8176abd23af9d2c02cf55040abfb9d91728964 Mon Sep 17 00:00:00 2001 From: Artem Borisov Date: Fri, 7 Dec 2018 11:20:28 +0400 Subject: [PATCH 46/63] kbuild: Fix 4.9.138 mismerge 740f140b5 was intended to move the clang KBUILD_CFLAGS before arch Makefile include, but because of merge issue it created an another set of CFLAGS that overlapped the old one. Let's do it the way it should be done. Change-Id: Iddc2aae1f870023e74feb28ccf56e439dd1facf6 Signed-off-by: Artem Borisov Git-repo: https://source.codeaurora.org/quic/la/kernel/msm-4.9 Git-commit: 93fb3699e63116c3ffa622a04f9dbb152577be2f [schikk@codeaurora.org: Removing redundant code is adressed in 3194924] Signed-off-by: Swetha Chikkaboraiah --- Makefile | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index a349a909b4e8..a4cffe2b0a4f 100644 --- a/Makefile +++ b/Makefile @@ -515,11 +515,15 @@ endif ifeq ($(cc-name),clang) ifneq ($(CROSS_COMPILE),) -CLANG_TARGET := -target $(notdir $(CROSS_COMPILE:%-=%)) +CLANG_TRIPLE ?= $(CROSS_COMPILE) +CLANG_TARGET := --target=$(notdir $(CLANG_TRIPLE:%-=%)) +ifeq ($(shell $(srctree)/scripts/clang-android.sh $(CC) $(CLANG_TARGET)), y) +$(error "Clang with Android --target detected. Did you specify CLANG_TRIPLE?") +endif GCC_TOOLCHAIN := $(realpath $(dir $(shell which $(LD)))/..) endif ifneq ($(GCC_TOOLCHAIN),) -CLANG_GCC_TC := -gcc-toolchain $(GCC_TOOLCHAIN) +CLANG_GCC_TC := --gcc-toolchain=$(GCC_TOOLCHAIN) endif KBUILD_CFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC) KBUILD_AFLAGS += $(CLANG_TARGET) $(CLANG_GCC_TC) @@ -528,6 +532,7 @@ KBUILD_CFLAGS += $(call cc-disable-warning, unused-variable) KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier) KBUILD_CFLAGS += $(call cc-disable-warning, gnu) KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member) +KBUILD_CFLAGS += $(call cc-disable-warning, duplicate-decl-specifier) # Quiet clang warning: comparison of unsigned expression < 0 is always false KBUILD_CFLAGS += $(call cc-disable-warning, tautological-compare) # CLANG uses a _MergedGlobals as optimization, but this breaks modpost, as the From c892a8d096243dd594d08848bcc1b7fc06b3f4da Mon Sep 17 00:00:00 2001 From: Veerabhadrarao Badiganti Date: Fri, 10 Aug 2018 14:43:02 +0530 Subject: [PATCH 47/63] mmc: host: sdhci-msm-ice: Fix clang warning with NOT operator usage Make the logical expression more explicit for removing dubiousness. With the present expression, clang warnings are reported. Adding parentheses also generates internal compilation warnings. So used an extra variable for removing ambiguity. Change-Id: Icd55088ca3985091efb4e27ff94f2cfb006a1855 Signed-off-by: Veerabhadrarao Badiganti --- drivers/mmc/host/sdhci-msm-ice.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/mmc/host/sdhci-msm-ice.c b/drivers/mmc/host/sdhci-msm-ice.c index 4d1e9d68239b..2682a93a59af 100644 --- a/drivers/mmc/host/sdhci-msm-ice.c +++ b/drivers/mmc/host/sdhci-msm-ice.c @@ -301,6 +301,7 @@ void sdhci_msm_ice_hci_update_noncq_cfg(struct sdhci_host *host, struct sdhci_pltfm_host *pltfm_host = sdhci_priv(host); struct sdhci_msm_host *msm_host = pltfm_host->priv; unsigned int crypto_params = 0; + unsigned int crypto_enable = !bypass; /* * The naming convention got changed between ICE2.0 and ICE3.0 * registers fields. Below is the equivalent names for @@ -311,7 +312,7 @@ void sdhci_msm_ice_hci_update_noncq_cfg(struct sdhci_host *host, */ /* Configure ICE bypass mode */ crypto_params |= - (!bypass & MASK_SDHCI_MSM_ICE_HCI_PARAM_CE) + (crypto_enable & MASK_SDHCI_MSM_ICE_HCI_PARAM_CE) << OFFSET_SDHCI_MSM_ICE_HCI_PARAM_CE; /* Configure Crypto Configure Index (CCI) */ crypto_params |= (key_index & From c78c484ed799bb06ebbb33a34106d70b8cb0b83d Mon Sep 17 00:00:00 2001 From: Sriharsha Allenki Date: Fri, 8 Nov 2019 15:27:54 +0530 Subject: [PATCH 48/63] lan78xx: Fix compilation failure for self assignment Compilation using a LLVM compiler raises an error for self assignment. Fix this compilation issue by removing the self assignment. Change-Id: I02f851e71bdcfaca942afefd032cf031d069dbeb Signed-off-by: Sriharsha Allenki --- drivers/net/usb/lan78xx.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c index f5a96678494b..530d5cc147ef 100644 --- a/drivers/net/usb/lan78xx.c +++ b/drivers/net/usb/lan78xx.c @@ -867,12 +867,13 @@ static int lan78xx_read_otp(struct lan78xx_net *dev, u32 offset, ret = lan78xx_read_raw_otp(dev, 0, 1, &sig); if (ret == 0) { - if (sig == OTP_INDICATOR_1) - offset = offset; - else if (sig == OTP_INDICATOR_2) - offset += 0x100; - else - ret = -EINVAL; + if (sig != OTP_INDICATOR_1) { + if (sig == OTP_INDICATOR_2) + offset += 0x100; + else + ret = -EINVAL; + } + if (!ret) ret = lan78xx_read_raw_otp(dev, offset, length, data); } From 28bd4942ef21c42a630933e88d2e836d5aee0fb2 Mon Sep 17 00:00:00 2001 From: Greg Hackmann Date: Tue, 25 Oct 2016 13:59:59 -0700 Subject: [PATCH 49/63] ANDROID: Kbuild, LLVMLinux: allow overriding clang target triple Android has an unusual setup where the kernel needs to target [arch]-linux-gnu to avoid Android userspace-specific flags and optimizations, but AOSP doesn't ship a matching binutils. Add a new variable CLANG_TRIPLE which can override the "-target" triple used to compile the kernel, while using a different CROSS_COMPILE to pick the binutils/gcc installation. For Android you'd do something like: export CLANG_TRIPLE=aarch64-linux-gnu- export CROSS_COMPILE=aarch64-linux-android- If you don't need something like this, leave CLANG_TRIPLE unset and it will default to CROSS_COMPILE. Change-Id: I85d63599c6ab8ed458071cdf9197d85b1f7f150b Signed-off-by: Greg Hackmann Bug: 118442619 Signed-off-by: Alistair Strachan Git-repo: https://android.googlesource.com/kernel/common/ Git-commit: 4dcb0afde6f464bdb512ebedab5b6ebfda3b8797 [schikk@codeaurora.org: resolve trivial merge conflicts] Signed-off-by: Swetha Chikkaboraiah --- scripts/clang-android.sh | 4 ++++ 1 file changed, 4 insertions(+) create mode 100755 scripts/clang-android.sh diff --git a/scripts/clang-android.sh b/scripts/clang-android.sh new file mode 100755 index 000000000000..9186c4f48576 --- /dev/null +++ b/scripts/clang-android.sh @@ -0,0 +1,4 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 + +$* -dM -E - &1 | grep -q __ANDROID__ && echo "y" From 8321e5438e0c663d75461ce1aa82bbf6bb4b2815 Mon Sep 17 00:00:00 2001 From: Kiran Gunda Date: Wed, 23 Oct 2019 19:29:15 +0530 Subject: [PATCH 50/63] regulator: qpnp-lcdb: Fix compilation error Address of a variable is used instead of using the variable itself. Fix it. Change-Id: I215e8d1f527755900f45367145def2bb7d6b82b1 Signed-off-by: Kiran Gunda --- drivers/regulator/qpnp-lcdb-regulator.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/regulator/qpnp-lcdb-regulator.c b/drivers/regulator/qpnp-lcdb-regulator.c index 3dfa3b1642d5..f0d19128fbda 100644 --- a/drivers/regulator/qpnp-lcdb-regulator.c +++ b/drivers/regulator/qpnp-lcdb-regulator.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved. + * Copyright (c) 2016-2018, 2020, 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 @@ -1865,7 +1865,7 @@ static int qpnp_lcdb_init_bst(struct qpnp_lcdb *lcdb) if (lcdb->bst.ps != -EINVAL) { rc = qpnp_lcdb_masked_write(lcdb, lcdb->base + LCDB_PS_CTL_REG, EN_PS_BIT, - &lcdb->bst.ps ? EN_PS_BIT : 0); + lcdb->bst.ps ? EN_PS_BIT : 0); if (rc < 0) { pr_err("Failed to disable BST PS rc=%d", rc); return rc; From 98c5b1f1cee948c5aa0c4fb58ef1df0fb62f9bd5 Mon Sep 17 00:00:00 2001 From: Prasad Sodagudi Date: Mon, 2 Oct 2017 15:19:57 -0700 Subject: [PATCH 51/63] Makefile: Disable undefined-optimized and tautological features Wundefined-optimized option was introduced by Qualcomm, but there are other options in kernel to test undefined behavior. So disable undefined-optimized feature by adding -Wno-undefined-optimized to CFLAGS. Also tautological-constant-out-of-range-compare is not getting disabled with tautological-compare option disable, so disable tautological-constant-out-of-range-compare feature explicitly. Change-Id: Ifc76f12323f3b5f6e1dd5ea4b75691bc2f3f8504 Signed-off-by: Prasad Sodagudi [snaseem@codeaurora.org: resolution of trivial merge conflicts] Signed-off-by: Shadab Naseem --- Makefile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Makefile b/Makefile index a4cffe2b0a4f..cef4ae8f2faa 100644 --- a/Makefile +++ b/Makefile @@ -533,6 +533,9 @@ KBUILD_CFLAGS += $(call cc-disable-warning, format-invalid-specifier) KBUILD_CFLAGS += $(call cc-disable-warning, gnu) KBUILD_CFLAGS += $(call cc-disable-warning, address-of-packed-member) KBUILD_CFLAGS += $(call cc-disable-warning, duplicate-decl-specifier) +KBUILD_CFLAGS += -Wno-undefined-optimized +KBUILD_CFLAGS += -Wno-tautological-constant-out-of-range-compare + # Quiet clang warning: comparison of unsigned expression < 0 is always false KBUILD_CFLAGS += $(call cc-disable-warning, tautological-compare) # CLANG uses a _MergedGlobals as optimization, but this breaks modpost, as the From d5bcd24c93a26d954f4a8af4320dc11b5911b9da Mon Sep 17 00:00:00 2001 From: Satya Durga Srinivasu Prabhala Date: Mon, 22 May 2017 17:00:49 -0700 Subject: [PATCH 52/63] scripts: set clang as REAL_CC to support LLVM by default To support LLVM by default, set REAL_CC to clang which overrides gcc. Also, white list warnings which are being treated as errors while compiling Kernel with clang compiler. Change-Id: I5df2375cb8a2f424521fdd862d550ab340a34c98 Signed-off-by: Satya Durga Srinivasu Prabhala Signed-off-by: Naitik Bharadiya --- scripts/build-all.py | 19 ++- scripts/gcc-wrapper.py | 351 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 364 insertions(+), 6 deletions(-) diff --git a/scripts/build-all.py b/scripts/build-all.py index 4a60ebc71d09..f5e5fa2a9bf9 100755 --- a/scripts/build-all.py +++ b/scripts/build-all.py @@ -1,6 +1,6 @@ #! /usr/bin/env python2 -# Copyright (c) 2009-2015, The Linux Foundation. All rights reserved. +# Copyright (c) 2009-2015, 2017, 2019, The Linux Foundation. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: @@ -45,6 +45,7 @@ build_dir = '../all-kernels' make_command = ["vmlinux", "modules", "dtbs"] all_options = {} compile64 = os.environ.get('CROSS_COMPILE64') +clang_bin = os.environ.get('CLANG_BIN') def error(msg): sys.stderr.write("error: %s\n" % msg) @@ -268,10 +269,18 @@ class Builder(): if not all_options.updateconfigs: # Build targets can be dependent upon the completion of # previous build targets, so build them one at a time. - cmd_line = ['make', - 'INSTALL_HDR_PATH=%s' % hdri_dir, - 'INSTALL_MOD_PATH=%s' % modi_dir, - 'O=%s' % dest_dir] + if os.environ.get('ARCH') == "arm64": + cmd_line = ['make', + 'INSTALL_HDR_PATH=%s' % hdri_dir, + 'INSTALL_MOD_PATH=%s' % modi_dir, + 'O=%s' % dest_dir, + 'REAL_CC=%s' % clang_bin] + else: + cmd_line = ['make', + 'INSTALL_HDR_PATH=%s' % hdri_dir, + 'INSTALL_MOD_PATH=%s' % modi_dir, + 'O=%s' % dest_dir] + build_targets = [] for c in make_command: if re.match(r'^-{1,2}\w', c): diff --git a/scripts/gcc-wrapper.py b/scripts/gcc-wrapper.py index 76fb91c57264..49c3fde846ce 100755 --- a/scripts/gcc-wrapper.py +++ b/scripts/gcc-wrapper.py @@ -1,7 +1,7 @@ #! /usr/bin/env python2 # -*- coding: utf-8 -*- -# Copyright (c) 2011-2016, The Linux Foundation. All rights reserved. +# Copyright (c) 2011-2017, The Linux Foundation. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: @@ -44,6 +44,355 @@ allowed_warnings = set([ "inet_connection_sock.c:430", "inet_connection_sock.c:467", "inet6_connection_sock.c:89", + "cpu.c:633", + "ftrace.c:140", + "page_alloc.c:513", + "page-writeback.c:2436", + "page_alloc.c:1312", + "core.c:928", + "statfs.c:318", + "statfs.c:319", + "page-writeback.c:2458", + "osq_lock.c:24", + "wakelock.c:80", + "statfs.c:320", + "page-writeback.c:2715", + "hooks.c:403", + "timer.c:699", + "ring_buffer.c:1804", + "topology.c:26", + "statfs.c:321", + "page-writeback.c:2762", + "hrtimer.c:408", + "statfs.c:322", + "page-writeback.c:2817", + "rng.c:36", + "vmscan.c:2058", + "keystore.c:1166", + "cfq-iosched.c:451", + "keystore.c:1185", + "vmscan.c:2745", + "vmscan.c:2970", + "cfq-iosched.c:590", + "zram_drv.c:330", + "regcache-rbtree.c:129", + "regcache-rbtree.c:130", + "cfq-iosched.c:591", + "workingset.c:292", + "workingset.c:296", + "workingset.c:478", + "cfq-iosched.c:981", + "regcache-rbtree.c:242", + "control_compat.c:111", + "rmap.c:1161", + "rmap.c:1201", + "regcache-rbtree.c:243", + "control_compat.c:128", + "slub.c:1316", + "br_if.c:436", + "net_namespace.c:293", + "psci.c:95", + "slub.c:1945", + "psci.c:104", + "control_compat.c:133", + "dmi_scan.c:396", + "uhid.c:240", + "control_compat.c:134", + "slub.c:1950", + "net_namespace.c:307", + "br_if.c:450", + "uhid.c:284", + "secureboot.c:19", + "control_compat.c:135", + "net_namespace.c:311", + "secureboot.c:22", + "zsmalloc.c:756", + "zsmalloc.c:784", + "control_compat.c:403", + "v4l2-compat-ioctl32.c:719", + "media-entity.c:25", + "zsmalloc.c:472", + "control_compat.c:404", + "timer_compat.c:53", + "v4l2-compat-ioctl32.c:724", + "bond_main.c:1031", + "zsmalloc.c:483", + "control_compat.c:409", + "timer_compat.c:54", + "v4l2-compat-ioctl32.c:727", + "main.c:764", + "control_compat.c:410", + "net_namespace.c:463", + "main.c:765", + "v4l2-compat-ioctl32.c:764", + "control_compat.c:411", + "net_namespace.c:467", + "main.c:766", + "inffast.c:31", + "timer_compat.c:55", + "main.c:767", + "rtnetlink.c:306", + "exthdrs.c:207", + "devinet.c:1256", + "pcm_compat.c:227", + "rtnetlink.c:477", + "main.c:768", + "nf_nat_h323.c:553", + "pcm_compat.c:235", + "main.c:789", + "exthdrs.c:209", + "pcm_compat.c:236", + "exthdrs.c:214", + "main.c:790", + "pcm_compat.c:237", + "main.c:798", + "nfnetlink_queue.c:466", + "mip6.c:234", + "pcm_compat.c:238", + "mip6.c:256", + "main.c:800", + "nf_conntrack_netlink.c:2550", + "pcm_compat.c:239", + "main.c:801", + "nf_conntrack_netlink.c:2787", + "rawmidi_compat.c:41", + "pcm_compat.c:240", + "main.c:802", + "nf_conntrack_netlink.c:2844", + "cls_api.c:48", + "pcm_compat.c:241", + "cls_api.c:736", + "nf_conntrack_netlink.c:2847", + "pcie_bus.c:359", + "rawmidi_compat.c:42", + "pcm_compat.c:242", + "nf_conntrack_netlink.c:2914", + "txrx.c:64", + "pcm_compat.c:243", + "nf_conntrack_netlink.c:3031", + "radiotap.c:119", + "devio.c:306", + "pcm_compat.c:244", + "nf_conntrack_netlink.c:3122", + "devio.c:307", + "pcm_compat.c:245", + "nf_conntrack_netlink.c:3126", + "devio.c:308", + "composite.c:626", + "pcm_compat.c:246", + "nf_conntrack_netlink.c:3130", + "composite.c:638", + "devio.c:309", + "pcm_compat.c:247", + "nf_conntrack_netlink.c:3203", + "composite.c:671", + "devio.c:1494", + "pcm_compat.c:248", + "nf_nat_core.c:232", + "devio.c:1499", + "core.c:143", + "pcm_compat.c:502", + "devio.c:1502", + "x_tables.c:324", + "pcm_compat.c:503", + "x_tables.c:344", + "devio.c:1515", + "pcm_compat.c:504", + "devio.c:1516", + "pcm_compat.c:532", + "devio.c:1517", + "rawmidi_compat.c:43", + "pcm_compat.c:533", + "pcm_compat.c:534", + "rawmidi_compat.c:44", + "pcm_compat.c:535", + "pcm_compat.c:537", + "pcm_compat.c:538", + "pcm_compat.c:539", + "rawmidi_compat.c:72", + "rawmidi_compat.c:88", + "rawmidi_compat.c:89", + "rawmidi_compat.c:90", + "user-offsets.c:18", + "ubd_kern.c:867", + "time.c:21", + "process.c:156", + "process.c:579", + "task_work.c:103", + "slab.c:384", + "process.c:306", + "slab.c:653", + "hrtimer.c:1372", + "ntp.c:243", + "cputime.c:258", + "rt.c:1060", + "fair.c:2592", + "slab.c:659", + "fair.c:2596", + "select.c:599", + "fair.c:3474", + "eventpoll.c:1626", + "rt.c:1062", + "fair.c:4683", + "eventpoll.c:1627", + "fair.c:4704", + "ethtool.c:2528", + "dev.c:3928", + "fair.c:4721", + "dev.c:4064", + "fair.c:4722", + "slub.c:279", + "slub.c:1303", + "slub.c:1328", + "media-entity.c:41", + "net1080.c:381", + "net1080.c:382", + "net1080.c:420", + "net1080.c:487", + "net1080.c:271", + "range.h:25", + "kdev_t.h:64", + "mmu.c:623", + "sys.c:2193", + "shmem.c:1769", + "core.c:6813", + "shmem.c:4145", + "fcntl.c:548", + "fcntl.c:550", + "percpu.c:2310", + "libfs.c:1043", + "ioctl.c:571", + "random.c:61", + "i2c-core.c:2958", + "compat_ioctl.c:733", + "irq-gic-v3-its.c:1279", + "super.c:788", + "mballoc.c:692", + "dm-ioctl.c:942", + "super.c:2608", + "dm-bufio.c:1876", + "compat_ioctl.c:1532", + "ndisc.c:1328", + "binfmt_elf.c:2226", + "mc.c:80", + "xfrm6_tunnel.c:143", + "mmc.c:80", + "fdt.c:1178", + "mmc.c:81", + "act_api.c:456", + "fdt_strerror.c:94", + "mmc.c:82", + "mmc.c:83", + "mmc.c:84", + "fdt.c:1184", + "mmc.c:85", + "sd.c:83", + "mmc.c:86", + "sd.c:84", + "sd.c:85", + "mmc.c:87", + "mmc.c:88", + "sd.c:86", + "mmc.c:89", + "mmc.c:90", + "sd.c:87", + "mmc.c:91", + "sd.c:88", + "mmc.c:92", + "sd.c:89", + "mmc.c:98", + "mmc.c:99", + "sd.c:90", + "mmc.c:100", + "mmc.c:101", + "sd.c:91", + "mmc.c:102", + "sd.c:93", + "mmc.c:103", + "sd.c:94", + "mmc.c:104", + "sd.c:108", + "mmc.c:105", + "sd.c:112", + "mmc.c:106", + "sd.c:113", + "mmc.c:108", + "mmc.c:109", + "sd.c:115", + "mmc.c:145", + "sd.c:117", + "mmc.c:152", + "sd.c:118", + "mmc.c:153", + "sd.c:120", + "mmc.c:154", + "sd.c:122", + "sd.c:123", + "mmc.c:156", + "helpers.c:125", + "sd.c:734", + "mmc.c:158", + "mmc.c:159", + "mmc.c:161", + "mmc.c:163", + "sd.c:126", + "mmc.c:164", + "sd.c:127", + "mmc.c:167", + "sd.c:128", + "mmc.c:168", + "sd.c:129", + "helpers.c:145", + "mmc.c:169", + "mmc.c:170", + "mmc.c:171", + "sd.c:130", + "sd.c:733", + "mmc.c:172", + "sd.c:131", + "mmc.c:173", + "sd.c:132", + "mmc.c:174", + "mmc.c:177", + "sd.c:133", + "sd.c:135", + "mmc.c:178", + "sd.c:767", + "spmi-pmic-arb.c:382", + "sd.c:138", + "sd.c:768", + "sysrq.c:146", + "sd.c:154", + "sd.c:797", + "sd.c:155", + "sd.c:157", + "sd.c:158", + "sd.c:164", + "sd.c:798", + "sd.c:199", + "sd.c:206", + "sd.c:207", + "sd.c:210", + "sd.c:212", + "sd.c:218", + "sd.c:257", + "sd.c:261", + "sd.c:262", + "sd.c:264", + "sd.c:828", + "f_hid.c:913", + "sd.c:829", + "f_hid.c:914", + "sd.c:919", + "f_hid.c:915", + "sd.h:187", + "sd.h:182", + "sd.h:172", + "page_alloc.c:7235", + "atomic.h:156", + "atomic.h:176", + "atomic.h:181", + "atomic.h:197", ]) # Capture the name of the object file, can find it. From 44321d05db05e94959a6908db7aafb2957ee1111 Mon Sep 17 00:00:00 2001 From: Prasad Sodagudi Date: Tue, 3 Oct 2017 11:08:38 -0700 Subject: [PATCH 53/63] scripts: Clean up the gcc-wrapper white list Update the white list of warnings for the latest kernel release based on current CFLAG settings. Disabled undefined-optimized and tautological features, so clean up the gcc-wrapper list based on current settings. Change-Id: If6a733c35b4b09b2357ced7997fb2ff16204c766 Signed-off-by: Prasad Sodagudi --- scripts/gcc-wrapper.py | 353 ----------------------------------------- 1 file changed, 353 deletions(-) diff --git a/scripts/gcc-wrapper.py b/scripts/gcc-wrapper.py index 49c3fde846ce..3d1d6fbcaa04 100755 --- a/scripts/gcc-wrapper.py +++ b/scripts/gcc-wrapper.py @@ -40,359 +40,6 @@ import subprocess # force LANG to be set to en_US.UTF-8 to get consistent warnings. allowed_warnings = set([ - "core.c:144", - "inet_connection_sock.c:430", - "inet_connection_sock.c:467", - "inet6_connection_sock.c:89", - "cpu.c:633", - "ftrace.c:140", - "page_alloc.c:513", - "page-writeback.c:2436", - "page_alloc.c:1312", - "core.c:928", - "statfs.c:318", - "statfs.c:319", - "page-writeback.c:2458", - "osq_lock.c:24", - "wakelock.c:80", - "statfs.c:320", - "page-writeback.c:2715", - "hooks.c:403", - "timer.c:699", - "ring_buffer.c:1804", - "topology.c:26", - "statfs.c:321", - "page-writeback.c:2762", - "hrtimer.c:408", - "statfs.c:322", - "page-writeback.c:2817", - "rng.c:36", - "vmscan.c:2058", - "keystore.c:1166", - "cfq-iosched.c:451", - "keystore.c:1185", - "vmscan.c:2745", - "vmscan.c:2970", - "cfq-iosched.c:590", - "zram_drv.c:330", - "regcache-rbtree.c:129", - "regcache-rbtree.c:130", - "cfq-iosched.c:591", - "workingset.c:292", - "workingset.c:296", - "workingset.c:478", - "cfq-iosched.c:981", - "regcache-rbtree.c:242", - "control_compat.c:111", - "rmap.c:1161", - "rmap.c:1201", - "regcache-rbtree.c:243", - "control_compat.c:128", - "slub.c:1316", - "br_if.c:436", - "net_namespace.c:293", - "psci.c:95", - "slub.c:1945", - "psci.c:104", - "control_compat.c:133", - "dmi_scan.c:396", - "uhid.c:240", - "control_compat.c:134", - "slub.c:1950", - "net_namespace.c:307", - "br_if.c:450", - "uhid.c:284", - "secureboot.c:19", - "control_compat.c:135", - "net_namespace.c:311", - "secureboot.c:22", - "zsmalloc.c:756", - "zsmalloc.c:784", - "control_compat.c:403", - "v4l2-compat-ioctl32.c:719", - "media-entity.c:25", - "zsmalloc.c:472", - "control_compat.c:404", - "timer_compat.c:53", - "v4l2-compat-ioctl32.c:724", - "bond_main.c:1031", - "zsmalloc.c:483", - "control_compat.c:409", - "timer_compat.c:54", - "v4l2-compat-ioctl32.c:727", - "main.c:764", - "control_compat.c:410", - "net_namespace.c:463", - "main.c:765", - "v4l2-compat-ioctl32.c:764", - "control_compat.c:411", - "net_namespace.c:467", - "main.c:766", - "inffast.c:31", - "timer_compat.c:55", - "main.c:767", - "rtnetlink.c:306", - "exthdrs.c:207", - "devinet.c:1256", - "pcm_compat.c:227", - "rtnetlink.c:477", - "main.c:768", - "nf_nat_h323.c:553", - "pcm_compat.c:235", - "main.c:789", - "exthdrs.c:209", - "pcm_compat.c:236", - "exthdrs.c:214", - "main.c:790", - "pcm_compat.c:237", - "main.c:798", - "nfnetlink_queue.c:466", - "mip6.c:234", - "pcm_compat.c:238", - "mip6.c:256", - "main.c:800", - "nf_conntrack_netlink.c:2550", - "pcm_compat.c:239", - "main.c:801", - "nf_conntrack_netlink.c:2787", - "rawmidi_compat.c:41", - "pcm_compat.c:240", - "main.c:802", - "nf_conntrack_netlink.c:2844", - "cls_api.c:48", - "pcm_compat.c:241", - "cls_api.c:736", - "nf_conntrack_netlink.c:2847", - "pcie_bus.c:359", - "rawmidi_compat.c:42", - "pcm_compat.c:242", - "nf_conntrack_netlink.c:2914", - "txrx.c:64", - "pcm_compat.c:243", - "nf_conntrack_netlink.c:3031", - "radiotap.c:119", - "devio.c:306", - "pcm_compat.c:244", - "nf_conntrack_netlink.c:3122", - "devio.c:307", - "pcm_compat.c:245", - "nf_conntrack_netlink.c:3126", - "devio.c:308", - "composite.c:626", - "pcm_compat.c:246", - "nf_conntrack_netlink.c:3130", - "composite.c:638", - "devio.c:309", - "pcm_compat.c:247", - "nf_conntrack_netlink.c:3203", - "composite.c:671", - "devio.c:1494", - "pcm_compat.c:248", - "nf_nat_core.c:232", - "devio.c:1499", - "core.c:143", - "pcm_compat.c:502", - "devio.c:1502", - "x_tables.c:324", - "pcm_compat.c:503", - "x_tables.c:344", - "devio.c:1515", - "pcm_compat.c:504", - "devio.c:1516", - "pcm_compat.c:532", - "devio.c:1517", - "rawmidi_compat.c:43", - "pcm_compat.c:533", - "pcm_compat.c:534", - "rawmidi_compat.c:44", - "pcm_compat.c:535", - "pcm_compat.c:537", - "pcm_compat.c:538", - "pcm_compat.c:539", - "rawmidi_compat.c:72", - "rawmidi_compat.c:88", - "rawmidi_compat.c:89", - "rawmidi_compat.c:90", - "user-offsets.c:18", - "ubd_kern.c:867", - "time.c:21", - "process.c:156", - "process.c:579", - "task_work.c:103", - "slab.c:384", - "process.c:306", - "slab.c:653", - "hrtimer.c:1372", - "ntp.c:243", - "cputime.c:258", - "rt.c:1060", - "fair.c:2592", - "slab.c:659", - "fair.c:2596", - "select.c:599", - "fair.c:3474", - "eventpoll.c:1626", - "rt.c:1062", - "fair.c:4683", - "eventpoll.c:1627", - "fair.c:4704", - "ethtool.c:2528", - "dev.c:3928", - "fair.c:4721", - "dev.c:4064", - "fair.c:4722", - "slub.c:279", - "slub.c:1303", - "slub.c:1328", - "media-entity.c:41", - "net1080.c:381", - "net1080.c:382", - "net1080.c:420", - "net1080.c:487", - "net1080.c:271", - "range.h:25", - "kdev_t.h:64", - "mmu.c:623", - "sys.c:2193", - "shmem.c:1769", - "core.c:6813", - "shmem.c:4145", - "fcntl.c:548", - "fcntl.c:550", - "percpu.c:2310", - "libfs.c:1043", - "ioctl.c:571", - "random.c:61", - "i2c-core.c:2958", - "compat_ioctl.c:733", - "irq-gic-v3-its.c:1279", - "super.c:788", - "mballoc.c:692", - "dm-ioctl.c:942", - "super.c:2608", - "dm-bufio.c:1876", - "compat_ioctl.c:1532", - "ndisc.c:1328", - "binfmt_elf.c:2226", - "mc.c:80", - "xfrm6_tunnel.c:143", - "mmc.c:80", - "fdt.c:1178", - "mmc.c:81", - "act_api.c:456", - "fdt_strerror.c:94", - "mmc.c:82", - "mmc.c:83", - "mmc.c:84", - "fdt.c:1184", - "mmc.c:85", - "sd.c:83", - "mmc.c:86", - "sd.c:84", - "sd.c:85", - "mmc.c:87", - "mmc.c:88", - "sd.c:86", - "mmc.c:89", - "mmc.c:90", - "sd.c:87", - "mmc.c:91", - "sd.c:88", - "mmc.c:92", - "sd.c:89", - "mmc.c:98", - "mmc.c:99", - "sd.c:90", - "mmc.c:100", - "mmc.c:101", - "sd.c:91", - "mmc.c:102", - "sd.c:93", - "mmc.c:103", - "sd.c:94", - "mmc.c:104", - "sd.c:108", - "mmc.c:105", - "sd.c:112", - "mmc.c:106", - "sd.c:113", - "mmc.c:108", - "mmc.c:109", - "sd.c:115", - "mmc.c:145", - "sd.c:117", - "mmc.c:152", - "sd.c:118", - "mmc.c:153", - "sd.c:120", - "mmc.c:154", - "sd.c:122", - "sd.c:123", - "mmc.c:156", - "helpers.c:125", - "sd.c:734", - "mmc.c:158", - "mmc.c:159", - "mmc.c:161", - "mmc.c:163", - "sd.c:126", - "mmc.c:164", - "sd.c:127", - "mmc.c:167", - "sd.c:128", - "mmc.c:168", - "sd.c:129", - "helpers.c:145", - "mmc.c:169", - "mmc.c:170", - "mmc.c:171", - "sd.c:130", - "sd.c:733", - "mmc.c:172", - "sd.c:131", - "mmc.c:173", - "sd.c:132", - "mmc.c:174", - "mmc.c:177", - "sd.c:133", - "sd.c:135", - "mmc.c:178", - "sd.c:767", - "spmi-pmic-arb.c:382", - "sd.c:138", - "sd.c:768", - "sysrq.c:146", - "sd.c:154", - "sd.c:797", - "sd.c:155", - "sd.c:157", - "sd.c:158", - "sd.c:164", - "sd.c:798", - "sd.c:199", - "sd.c:206", - "sd.c:207", - "sd.c:210", - "sd.c:212", - "sd.c:218", - "sd.c:257", - "sd.c:261", - "sd.c:262", - "sd.c:264", - "sd.c:828", - "f_hid.c:913", - "sd.c:829", - "f_hid.c:914", - "sd.c:919", - "f_hid.c:915", - "sd.h:187", - "sd.h:182", - "sd.h:172", - "page_alloc.c:7235", - "atomic.h:156", - "atomic.h:176", - "atomic.h:181", - "atomic.h:197", ]) # Capture the name of the object file, can find it. From 9d862df4b9e72bd230306dc7553ad1d8f3b16c42 Mon Sep 17 00:00:00 2001 From: Satya Durga Srinivasu Prabhala Date: Tue, 30 May 2017 16:03:32 -0700 Subject: [PATCH 54/63] scripts: build-all.py: append llvm to the config file To detect that the Kernel is being compiled with llvm, append llvm to the config file. Change-Id: Iba2f4f83f5ab091c7906dc66ad11cc88bcdfe2b9 Signed-off-by: Satya Durga Srinivasu Prabhala --- scripts/build-all.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/build-all.py b/scripts/build-all.py index f5e5fa2a9bf9..c057b122a5af 100755 --- a/scripts/build-all.py +++ b/scripts/build-all.py @@ -326,7 +326,7 @@ def scan_configs(): if 'CROSS_COMPILE64' in os.environ: for p in arch64_pats: for n in glob.glob('arch/arm64/configs/' + p): - name = os.path.basename(n)[:-10] + "-64" + name = os.path.basename(n)[:-10] + "-llvm" + "-64" names.append(Builder(name, n)) return names From 8b6014b9846216df6f993d6d38a9a660105054b7 Mon Sep 17 00:00:00 2001 From: Jeevan Shriram Date: Thu, 29 Mar 2018 12:21:40 -0700 Subject: [PATCH 55/63] scripts: build-all.py: update regex to compile all defconfigs Update regex to populate all sdm*_defconfig and compile with build-all script. Change-Id: Ia4aa0f6b684b647b173f0ca18e6979fb0d957149 Signed-off-by: Jeevan Shriram [schikk@codeaurora.org: resolve trivial merge conflicts] Signed-off-by: Swetha Chikkaboraiah --- scripts/build-all.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/build-all.py b/scripts/build-all.py index c057b122a5af..1a7bd417ecd7 100755 --- a/scripts/build-all.py +++ b/scripts/build-all.py @@ -311,12 +311,12 @@ def scan_configs(): r'apq*_defconfig', r'qsd*_defconfig', r'mpq*_defconfig', - r'sdm[0-9]*_defconfig', + r'sdm*_defconfig', r'sdx*_defconfig', ) arch64_pats = ( r'msm*_defconfig', - r'sdm[0-9]*_defconfig', + r'sdm*_defconfig', r'sdx*_defconfig', ) for p in arch_pats: From 006cdbe0d01bbda88d68c9a2c59e369d8d0c84c6 Mon Sep 17 00:00:00 2001 From: Bryan Huntsman Date: Fri, 25 May 2018 13:05:57 -0700 Subject: [PATCH 56/63] scripts/build-all: remove all defconfig manipulation options Simplifiy the script by removing all options and code for manipulating defconfigs. Change-Id: Ic8c583d501165501035c2c43b69e5b5c57b97fb0 Signed-off-by: Bryan Huntsman Signed-off-by: Naitik Bharadiya --- scripts/build-all.py | 85 ++++++++++++-------------------------------- 1 file changed, 23 insertions(+), 62 deletions(-) diff --git a/scripts/build-all.py b/scripts/build-all.py index 1a7bd417ecd7..65902063934b 100755 --- a/scripts/build-all.py +++ b/scripts/build-all.py @@ -266,43 +266,31 @@ class Builder(): steps.append(ExecStep(['make', 'O=%s' % dest_dir, self.confname], env=self.make_env)) - if not all_options.updateconfigs: - # Build targets can be dependent upon the completion of - # previous build targets, so build them one at a time. - if os.environ.get('ARCH') == "arm64": - cmd_line = ['make', - 'INSTALL_HDR_PATH=%s' % hdri_dir, - 'INSTALL_MOD_PATH=%s' % modi_dir, - 'O=%s' % dest_dir, - 'REAL_CC=%s' % clang_bin] + # Build targets can be dependent upon the completion of + # previous build targets, so build them one at a time. + if os.environ.get('ARCH') == "arm64": + cmd_line = ['make', + 'INSTALL_HDR_PATH=%s' % hdri_dir, + 'INSTALL_MOD_PATH=%s' % modi_dir, + 'O=%s' % dest_dir, + 'REAL_CC=%s' % clang_bin] + else: + cmd_line = ['make', + 'INSTALL_HDR_PATH=%s' % hdri_dir, + 'INSTALL_MOD_PATH=%s' % modi_dir, + 'O=%s' % dest_dir] + + build_targets = [] + for c in make_command: + if re.match(r'^-{1,2}\w', c): + cmd_line.append(c) else: - cmd_line = ['make', - 'INSTALL_HDR_PATH=%s' % hdri_dir, - 'INSTALL_MOD_PATH=%s' % modi_dir, - 'O=%s' % dest_dir] - - build_targets = [] - for c in make_command: - if re.match(r'^-{1,2}\w', c): - cmd_line.append(c) - else: - build_targets.append(c) - for t in build_targets: - steps.append(ExecStep(cmd_line + [t], env=self.make_env)) - - # Copy the defconfig back. - if all_options.configs or all_options.updateconfigs: - steps.append(ExecStep(['make', 'O=%s' % dest_dir, - 'savedefconfig'], env=self.make_env)) - steps.append(CopyfileStep(savedefconfig, defconfig)) + build_targets.append(c) + for t in build_targets: + steps.append(ExecStep(cmd_line + [t], env=self.make_env)) return steps -def update_config(file, str): - print 'Updating %s with \'%s\'\n' % (file, str) - with open(file, 'a') as defconfig: - defconfig.write(str + '\n') - def scan_configs(): """Get the full list of defconfigs appropriate for this tree.""" names = [] @@ -343,8 +331,6 @@ def build_many(targets): tracker = BuildTracker(parallel) for target in targets: - if all_options.updateconfigs: - update_config(target.defconfig, all_options.updateconfigs) steps = target.build() tracker.add_sequence(target.log_name, target.name, steps) tracker.run() @@ -360,25 +346,14 @@ def main(): usage = (""" %prog [options] all -- Build all targets %prog [options] target target ... -- List specific targets - %prog [options] perf -- Build all perf targets - %prog [options] noperf -- Build all non-perf targets""") + """) parser = OptionParser(usage=usage, version=version) - parser.add_option('--configs', action='store_true', - dest='configs', - help="Copy configs back into tree") parser.add_option('--list', action='store_true', dest='list', help='List available targets') parser.add_option('-v', '--verbose', action='store_true', dest='verbose', help='Output to stdout in addition to log file') - parser.add_option('--oldconfig', action='store_true', - dest='oldconfig', - help='Only process "make oldconfig"') - parser.add_option('--updateconfigs', - dest='updateconfigs', - help="Update defconfigs with provided option setting, " - "e.g. --updateconfigs=\'CONFIG_USE_THING=y\'") parser.add_option('-j', '--jobs', type='int', dest="jobs", help="Number of simultaneous jobs") parser.add_option('-l', '--load-average', type='int', @@ -401,25 +376,11 @@ def main(): print " %s" % target.name sys.exit(0) - if options.oldconfig: - make_command = ["oldconfig"] - elif options.make_target: + if options.make_target: make_command = options.make_target if args == ['all']: build_many(configs) - elif args == ['perf']: - targets = [] - for t in configs: - if "perf" in t.name: - targets.append(t) - build_many(targets) - elif args == ['noperf']: - targets = [] - for t in configs: - if "perf" not in t.name: - targets.append(t) - build_many(targets) elif len(args) > 0: all_configs = {} for t in configs: From 64937057b64320544248f3b46e26568a244b4e92 Mon Sep 17 00:00:00 2001 From: Bryan Huntsman Date: Mon, 4 Jun 2018 14:18:41 -0700 Subject: [PATCH 57/63] scripts/build-all: look for nested vendor/ defconfig directories Look for additional defconfigs in 'arch/arm[64]/configs/vendor/'. Change-Id: I13a1675d8563611eee17a02445e0329ff5f7a215 Signed-off-by: Bryan Huntsman --- scripts/build-all.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/scripts/build-all.py b/scripts/build-all.py index 65902063934b..c591e26959af 100755 --- a/scripts/build-all.py +++ b/scripts/build-all.py @@ -230,7 +230,7 @@ class Builder(): self.name = name self.defconfig = defconfig - self.confname = self.defconfig.split('/')[-1] + self.confname = re.sub('arch/arm[64]*/configs/', '', self.defconfig) # Determine if this is a 64-bit target based on the location # of the defconfig. @@ -316,6 +316,13 @@ def scan_configs(): for n in glob.glob('arch/arm64/configs/' + p): name = os.path.basename(n)[:-10] + "-llvm" + "-64" names.append(Builder(name, n)) + for defconfig in glob.glob('arch/arm*/configs/vendor/*_defconfig'): + target = os.path.basename(defconfig)[:-10] + name = target + "-llvm" + if 'arch/arm64' in defconfig: + name = name + "-64" + names.append(Builder(name, defconfig)) + return names def build_many(targets): From e8eed3990c242873cf064efdc491a169eca8a567 Mon Sep 17 00:00:00 2001 From: Bryan Huntsman Date: Mon, 4 Jun 2018 15:16:23 -0700 Subject: [PATCH 58/63] scripts/build-all: remove pattern-based defconfig detection All the defconfigs we care about should be in arch/arm[64]/configs/vendor/ so remove the pattern-based detection logic. Change-Id: I1359db11caffb618d8fb44e02ea2c08efb4041fa Signed-off-by: Bryan Huntsman [schikk@codeaurora.org: resolve trivial merge conflicts] Signed-off-by: Swetha Chikkaboraiah --- scripts/build-all.py | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/scripts/build-all.py b/scripts/build-all.py index c591e26959af..33721acbcf4e 100755 --- a/scripts/build-all.py +++ b/scripts/build-all.py @@ -302,20 +302,10 @@ def scan_configs(): r'sdm*_defconfig', r'sdx*_defconfig', ) - arch64_pats = ( - r'msm*_defconfig', - r'sdm*_defconfig', - r'sdx*_defconfig', - ) for p in arch_pats: for n in glob.glob('arch/arm/configs/' + p): name = os.path.basename(n)[:-10] names.append(Builder(name, n)) - if 'CROSS_COMPILE64' in os.environ: - for p in arch64_pats: - for n in glob.glob('arch/arm64/configs/' + p): - name = os.path.basename(n)[:-10] + "-llvm" + "-64" - names.append(Builder(name, n)) for defconfig in glob.glob('arch/arm*/configs/vendor/*_defconfig'): target = os.path.basename(defconfig)[:-10] name = target + "-llvm" From a0ae6de484b87459e846f88240855c609a42a5b7 Mon Sep 17 00:00:00 2001 From: Swetha Chikkaboraiah Date: Fri, 5 Jun 2020 12:45:24 +0530 Subject: [PATCH 59/63] defconfig: Create symbolic link for arm64 defconfigs Create symbolic link for arm64 defconfigs under vendor/ subdirectory. Change-Id: I53571cce9a24833528a50667344203706bf9a8f6 Signed-off-by: Swetha Chikkaboraiah --- arch/arm64/configs/vendor/sdm670-perf_defconfig | 1 + arch/arm64/configs/vendor/sdm670_defconfig | 1 + arch/arm64/configs/vendor/sdm845-perf_defconfig | 1 + arch/arm64/configs/vendor/sdm845_defconfig | 1 + 4 files changed, 4 insertions(+) create mode 120000 arch/arm64/configs/vendor/sdm670-perf_defconfig create mode 120000 arch/arm64/configs/vendor/sdm670_defconfig create mode 120000 arch/arm64/configs/vendor/sdm845-perf_defconfig create mode 120000 arch/arm64/configs/vendor/sdm845_defconfig diff --git a/arch/arm64/configs/vendor/sdm670-perf_defconfig b/arch/arm64/configs/vendor/sdm670-perf_defconfig new file mode 120000 index 000000000000..257612fde762 --- /dev/null +++ b/arch/arm64/configs/vendor/sdm670-perf_defconfig @@ -0,0 +1 @@ +../sdm670-perf_defconfig \ No newline at end of file diff --git a/arch/arm64/configs/vendor/sdm670_defconfig b/arch/arm64/configs/vendor/sdm670_defconfig new file mode 120000 index 000000000000..825b44e2be51 --- /dev/null +++ b/arch/arm64/configs/vendor/sdm670_defconfig @@ -0,0 +1 @@ +../sdm670_defconfig \ No newline at end of file diff --git a/arch/arm64/configs/vendor/sdm845-perf_defconfig b/arch/arm64/configs/vendor/sdm845-perf_defconfig new file mode 120000 index 000000000000..2c16f8aafe04 --- /dev/null +++ b/arch/arm64/configs/vendor/sdm845-perf_defconfig @@ -0,0 +1 @@ +../sdm845-perf_defconfig \ No newline at end of file diff --git a/arch/arm64/configs/vendor/sdm845_defconfig b/arch/arm64/configs/vendor/sdm845_defconfig new file mode 120000 index 000000000000..3272438c52b0 --- /dev/null +++ b/arch/arm64/configs/vendor/sdm845_defconfig @@ -0,0 +1 @@ +../sdm845_defconfig \ No newline at end of file From e7467167c9d7c71eb6cc4eb4711b6755a572cf0d Mon Sep 17 00:00:00 2001 From: Akhil P Oommen Date: Thu, 16 Jul 2020 00:49:09 +0530 Subject: [PATCH 60/63] msm: kgsl: Mark the scratch buffer as privileged Mark the scratch buffer as privileged so that it can only be accessed by GPU through the ringbuffer. To accomplish this, we need to: 1. Move the preemption data out of the scratch buffer. 2. Disable the shadow rptr feature. 3. Trigger RPTR update from GPU using a WHERE_AM_I packet. 4. Add support for the new ucode. Change-Id: I9b388f55f53b69028b9bbb2306cb43fd1297c52f Signed-off-by: Akhil P Oommen Signed-off-by: Archana Sriram --- drivers/gpu/msm/adreno.c | 15 ++++++++- drivers/gpu/msm/adreno.h | 9 ++--- drivers/gpu/msm/adreno_a5xx.c | 15 +++++---- drivers/gpu/msm/adreno_a5xx.h | 4 +-- drivers/gpu/msm/adreno_a5xx_preempt.c | 8 ++--- drivers/gpu/msm/adreno_a6xx.c | 6 ++-- drivers/gpu/msm/adreno_a6xx.h | 4 +-- drivers/gpu/msm/adreno_a6xx_preempt.c | 35 ++++++++++---------- drivers/gpu/msm/adreno_ioctl.c | 4 +-- drivers/gpu/msm/adreno_pm4types.h | 4 ++- drivers/gpu/msm/adreno_ringbuffer.c | 47 +++++++++++++++++++++++++-- drivers/gpu/msm/adreno_ringbuffer.h | 5 ++- drivers/gpu/msm/kgsl.h | 13 ++------ 13 files changed, 112 insertions(+), 57 deletions(-) diff --git a/drivers/gpu/msm/adreno.c b/drivers/gpu/msm/adreno.c index 59dbdc4dcccc..7ea471d924a2 100644 --- a/drivers/gpu/msm/adreno.c +++ b/drivers/gpu/msm/adreno.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2002,2007-2018, The Linux Foundation. All rights reserved. +/* Copyright (c) 2002,2007-2018,2020, 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 @@ -3681,6 +3681,19 @@ static void adreno_gpu_model(struct kgsl_device *device, char *str, ADRENO_CHIPID_PATCH(adreno_dev->chipid) + 1); } +u32 adreno_get_ucode_version(const u32 *data) +{ + u32 version; + + version = data[1]; + + if ((version & 0xf) != 0xa) + return version; + + version &= ~0xfff; + return version | ((data[3] & 0xfff000) >> 12); +} + static const struct kgsl_functable adreno_functable = { /* Mandatory functions */ .regread = adreno_regread, diff --git a/drivers/gpu/msm/adreno.h b/drivers/gpu/msm/adreno.h index 8e219583ed01..e14e800e729e 100644 --- a/drivers/gpu/msm/adreno.h +++ b/drivers/gpu/msm/adreno.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2008-2018, The Linux Foundation. All rights reserved. +/* Copyright (c) 2008-2018,2020, 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 @@ -277,8 +277,8 @@ enum adreno_preempt_states { /** * struct adreno_preemption * @state: The current state of preemption - * @counters: Memory descriptor for the memory where the GPU writes the - * preemption counters on switch + * @scratch: Memory descriptor for the memory where the GPU writes the + * current ctxt record address and preemption counters on switch * @timer: A timer to make sure preemption doesn't stall * @work: A work struct for the preemption worker (for 5XX) * @token_submit: Indicates if a preempt token has been submitted in @@ -290,7 +290,7 @@ enum adreno_preempt_states { */ struct adreno_preemption { atomic_t state; - struct kgsl_memdesc counters; + struct kgsl_memdesc scratch; struct timer_list timer; struct work_struct work; bool token_submit; @@ -1142,6 +1142,7 @@ void adreno_cx_dbgc_regread(struct kgsl_device *adreno_device, unsigned int offsetwords, unsigned int *value); void adreno_cx_dbgc_regwrite(struct kgsl_device *device, unsigned int offsetwords, unsigned int value); +u32 adreno_get_ucode_version(const u32 *data); #define ADRENO_TARGET(_name, _id) \ static inline int adreno_is_##_name(struct adreno_device *adreno_dev) \ diff --git a/drivers/gpu/msm/adreno_a5xx.c b/drivers/gpu/msm/adreno_a5xx.c index 2a3ae3ed6add..118f7017fd0b 100644 --- a/drivers/gpu/msm/adreno_a5xx.c +++ b/drivers/gpu/msm/adreno_a5xx.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2014-2018, The Linux Foundation. All rights reserved. +/* Copyright (c) 2014-2018,2020, 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 @@ -2168,12 +2168,15 @@ static int a5xx_post_start(struct adreno_device *adreno_dev) *cmds++ = 0xF; } - if (adreno_is_preemption_enabled(adreno_dev)) + if (adreno_is_preemption_enabled(adreno_dev)) { cmds += _preemption_init(adreno_dev, rb, cmds, NULL); + rb->_wptr = rb->_wptr - (42 - (cmds - start)); + ret = adreno_ringbuffer_submit_spin_nosync(rb, NULL, 2000); + } else { + rb->_wptr = rb->_wptr - (42 - (cmds - start)); + ret = adreno_ringbuffer_submit_spin(rb, NULL, 2000); + } - rb->_wptr = rb->_wptr - (42 - (cmds - start)); - - ret = adreno_ringbuffer_submit_spin(rb, NULL, 2000); if (ret) adreno_spin_idle_debug(adreno_dev, "hw initialization failed to idle\n"); @@ -2510,7 +2513,7 @@ static int _load_firmware(struct kgsl_device *device, const char *fwfile, memcpy(firmware->memdesc.hostptr, &fw->data[4], fw->size - 4); firmware->size = (fw->size - 4) / sizeof(uint32_t); - firmware->version = *(unsigned int *)&fw->data[4]; + firmware->version = adreno_get_ucode_version((u32 *)fw->data); done: release_firmware(fw); diff --git a/drivers/gpu/msm/adreno_a5xx.h b/drivers/gpu/msm/adreno_a5xx.h index 3d89d73df317..1d81f9cc5424 100644 --- a/drivers/gpu/msm/adreno_a5xx.h +++ b/drivers/gpu/msm/adreno_a5xx.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2015-2017, The Linux Foundation. All rights reserved. +/* Copyright (c) 2015-2017,2020, 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 @@ -112,7 +112,7 @@ void a5xx_crashdump_init(struct adreno_device *adreno_dev); void a5xx_hwcg_set(struct adreno_device *adreno_dev, bool on); -#define A5XX_CP_RB_CNTL_DEFAULT (((ilog2(4) << 8) & 0x1F00) | \ +#define A5XX_CP_RB_CNTL_DEFAULT ((1 << 27) | ((ilog2(4) << 8) & 0x1F00) | \ (ilog2(KGSL_RB_DWORDS >> 1) & 0x3F)) /* GPMU interrupt multiplexor */ #define FW_INTR_INFO (0) diff --git a/drivers/gpu/msm/adreno_a5xx_preempt.c b/drivers/gpu/msm/adreno_a5xx_preempt.c index d5da56261d39..c7cfa51c3f0a 100644 --- a/drivers/gpu/msm/adreno_a5xx_preempt.c +++ b/drivers/gpu/msm/adreno_a5xx_preempt.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2014-2017, The Linux Foundation. All rights reserved. +/* Copyright (c) 2014-2017,2020, 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 @@ -575,7 +575,7 @@ static void a5xx_preemption_close(struct kgsl_device *device) unsigned int i; del_timer(&preempt->timer); - kgsl_free_global(device, &preempt->counters); + kgsl_free_global(device, &preempt->scratch); a5xx_preemption_iommu_close(adreno_dev); FOR_EACH_RINGBUFFER(adreno_dev, rb, i) { @@ -602,14 +602,14 @@ int a5xx_preemption_init(struct adreno_device *adreno_dev) (unsigned long) adreno_dev); /* Allocate mem for storing preemption counters */ - ret = kgsl_allocate_global(device, &preempt->counters, + ret = kgsl_allocate_global(device, &preempt->scratch, adreno_dev->num_ringbuffers * A5XX_CP_CTXRECORD_PREEMPTION_COUNTER_SIZE, 0, 0, "preemption_counters"); if (ret) goto err; - addr = preempt->counters.gpuaddr; + addr = preempt->scratch.gpuaddr; /* Allocate mem for storing preemption switch record */ FOR_EACH_RINGBUFFER(adreno_dev, rb, i) { diff --git a/drivers/gpu/msm/adreno_a6xx.c b/drivers/gpu/msm/adreno_a6xx.c index 517b813b4dcc..929b8c51625a 100644 --- a/drivers/gpu/msm/adreno_a6xx.c +++ b/drivers/gpu/msm/adreno_a6xx.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2017-2018, The Linux Foundation. All rights reserved. +/* Copyright (c) 2017-2018,2020, 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 @@ -1069,7 +1069,7 @@ static int a6xx_post_start(struct adreno_device *adreno_dev) rb->_wptr = rb->_wptr - (42 - (cmds - start)); - ret = adreno_ringbuffer_submit_spin(rb, NULL, 2000); + ret = adreno_ringbuffer_submit_spin_nosync(rb, NULL, 2000); if (ret) adreno_spin_idle_debug(adreno_dev, "hw preemption initialization failed to idle\n"); @@ -1176,7 +1176,7 @@ static int _load_firmware(struct kgsl_device *device, const char *fwfile, if (!ret) { memcpy(firmware->memdesc.hostptr, &fw->data[4], fw->size - 4); firmware->size = (fw->size - 4) / sizeof(uint32_t); - firmware->version = *(unsigned int *)&fw->data[4]; + firmware->version = adreno_get_ucode_version((u32 *)fw->data); } release_firmware(fw); diff --git a/drivers/gpu/msm/adreno_a6xx.h b/drivers/gpu/msm/adreno_a6xx.h index bf1111c6204c..7b8690635f2f 100644 --- a/drivers/gpu/msm/adreno_a6xx.h +++ b/drivers/gpu/msm/adreno_a6xx.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2017, The Linux Foundation. All rights reserved. +/* Copyright (c) 2017,2020, 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 @@ -103,7 +103,7 @@ struct cpu_gpu_lock { /* Size of the performance counter save/restore block (in bytes) */ #define A6XX_CP_PERFCOUNTER_SAVE_RESTORE_SIZE (4 * 1024) -#define A6XX_CP_RB_CNTL_DEFAULT (((ilog2(4) << 8) & 0x1F00) | \ +#define A6XX_CP_RB_CNTL_DEFAULT ((1 << 27) | ((ilog2(4) << 8) & 0x1F00) | \ (ilog2(KGSL_RB_DWORDS >> 1) & 0x3F)) /* Preemption functions */ diff --git a/drivers/gpu/msm/adreno_a6xx_preempt.c b/drivers/gpu/msm/adreno_a6xx_preempt.c index b0644b53f815..c2495654b98a 100644 --- a/drivers/gpu/msm/adreno_a6xx_preempt.c +++ b/drivers/gpu/msm/adreno_a6xx_preempt.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2017-2018, The Linux Foundation. All rights reserved. +/* Copyright (c) 2017-2018,2020, 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 @@ -336,8 +336,8 @@ void a6xx_preemption_trigger(struct adreno_device *adreno_dev) kgsl_sharedmem_writel(device, &iommu->smmu_info, PREEMPT_SMMU_RECORD(context_idr), contextidr); - kgsl_sharedmem_readq(&device->scratch, &gpuaddr, - SCRATCH_PREEMPTION_CTXT_RESTORE_ADDR_OFFSET(next->id)); + kgsl_sharedmem_readq(&preempt->scratch, &gpuaddr, + next->id * sizeof(u64)); /* * Set a keepalive bit before the first preemption register write. @@ -537,12 +537,10 @@ unsigned int a6xx_preemption_pre_ibsubmit( rb->perfcounter_save_restore_desc.gpuaddr); if (context) { - struct kgsl_device *device = KGSL_DEVICE(adreno_dev); struct adreno_context *drawctxt = ADRENO_CONTEXT(context); struct adreno_ringbuffer *rb = drawctxt->rb; - uint64_t dest = - SCRATCH_PREEMPTION_CTXT_RESTORE_GPU_ADDR(device, - rb->id); + uint64_t dest = adreno_dev->preempt.scratch.gpuaddr + + sizeof(u64) * rb->id; *cmds++ = cp_mem_packet(adreno_dev, CP_MEM_WRITE, 2, 2); cmds += cp_gpuaddr(adreno_dev, cmds, dest); @@ -560,9 +558,8 @@ unsigned int a6xx_preemption_post_ibsubmit(struct adreno_device *adreno_dev, struct adreno_ringbuffer *rb = adreno_dev->cur_rb; if (rb) { - struct kgsl_device *device = KGSL_DEVICE(adreno_dev); - uint64_t dest = SCRATCH_PREEMPTION_CTXT_RESTORE_GPU_ADDR(device, - rb->id); + uint64_t dest = adreno_dev->preempt.scratch.gpuaddr + + sizeof(u64) * rb->id; *cmds++ = cp_mem_packet(adreno_dev, CP_MEM_WRITE, 2, 2); cmds += cp_gpuaddr(adreno_dev, cmds, dest); @@ -714,7 +711,7 @@ static void a6xx_preemption_close(struct kgsl_device *device) unsigned int i; del_timer(&preempt->timer); - kgsl_free_global(device, &preempt->counters); + kgsl_free_global(device, &preempt->scratch); a6xx_preemption_iommu_close(adreno_dev); FOR_EACH_RINGBUFFER(adreno_dev, rb, i) { @@ -744,15 +741,19 @@ int a6xx_preemption_init(struct adreno_device *adreno_dev) setup_timer(&preempt->timer, _a6xx_preemption_timer, (unsigned long) adreno_dev); - /* Allocate mem for storing preemption counters */ - ret = kgsl_allocate_global(device, &preempt->counters, - adreno_dev->num_ringbuffers * - A6XX_CP_CTXRECORD_PREEMPTION_COUNTER_SIZE, 0, 0, - "preemption_counters"); + /* + * Allocate a scratch buffer to keep the below table: + * Offset: What + * 0x0: Context Record address + * 0x10: Preemption Counters + */ + ret = kgsl_allocate_global(device, &preempt->scratch, PAGE_SIZE, 0, 0, + "preemption_scratch"); if (ret) goto err; - addr = preempt->counters.gpuaddr; + addr = preempt->scratch.gpuaddr + + KGSL_PRIORITY_MAX_RB_LEVELS * sizeof(u64); /* Allocate mem for storing preemption switch record */ FOR_EACH_RINGBUFFER(adreno_dev, rb, i) { diff --git a/drivers/gpu/msm/adreno_ioctl.c b/drivers/gpu/msm/adreno_ioctl.c index aa8c2bf76d41..3212dad6f457 100644 --- a/drivers/gpu/msm/adreno_ioctl.c +++ b/drivers/gpu/msm/adreno_ioctl.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2002,2007-2017, The Linux Foundation. All rights reserved. +/* Copyright (c) 2002,2007-2017,2020 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 @@ -108,7 +108,7 @@ static long adreno_ioctl_preemption_counters_query( levels_to_copy = gpudev->num_prio_levels; if (copy_to_user((void __user *) (uintptr_t) read->counters, - adreno_dev->preempt.counters.hostptr, + adreno_dev->preempt.scratch.hostptr, levels_to_copy * size_level)) return -EFAULT; diff --git a/drivers/gpu/msm/adreno_pm4types.h b/drivers/gpu/msm/adreno_pm4types.h index 2a330b4474aa..543496399044 100644 --- a/drivers/gpu/msm/adreno_pm4types.h +++ b/drivers/gpu/msm/adreno_pm4types.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2002,2007-2017, The Linux Foundation. All rights reserved. +/* Copyright (c) 2002,2007-2017,2020 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 @@ -103,6 +103,8 @@ /* A5XX Enable yield in RB only */ #define CP_YIELD_ENABLE 0x1C +#define CP_WHERE_AM_I 0x62 + /* Enable/Disable/Defer A5x global preemption model */ #define CP_PREEMPT_ENABLE_GLOBAL 0x69 diff --git a/drivers/gpu/msm/adreno_ringbuffer.c b/drivers/gpu/msm/adreno_ringbuffer.c index f2b1b2dfe7ea..5dbbaf0c9374 100644 --- a/drivers/gpu/msm/adreno_ringbuffer.c +++ b/drivers/gpu/msm/adreno_ringbuffer.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2002,2007-2019, The Linux Foundation. All rights reserved. +/* Copyright (c) 2002,2007-2020, 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 @@ -178,7 +178,7 @@ void adreno_ringbuffer_submit(struct adreno_ringbuffer *rb, adreno_ringbuffer_wptr(adreno_dev, rb); } -int adreno_ringbuffer_submit_spin(struct adreno_ringbuffer *rb, +int adreno_ringbuffer_submit_spin_nosync(struct adreno_ringbuffer *rb, struct adreno_submit_time *time, unsigned int timeout) { struct adreno_device *adreno_dev = ADRENO_RB_DEVICE(rb); @@ -187,6 +187,38 @@ int adreno_ringbuffer_submit_spin(struct adreno_ringbuffer *rb, return adreno_spin_idle(adreno_dev, timeout); } +/* + * adreno_ringbuffer_submit_spin() - Submit the cmds and wait until GPU is idle + * @rb: Pointer to ringbuffer + * @time: Pointer to adreno_submit_time + * @timeout: timeout value in ms + * + * Add commands to the ringbuffer and wait until GPU goes to idle. This routine + * inserts a WHERE_AM_I packet to trigger a shadow rptr update. So, use + * adreno_ringbuffer_submit_spin_nosync() if the previous cmd in the RB is a + * CSY packet because CSY followed by WHERE_AM_I is not legal. + */ +int adreno_ringbuffer_submit_spin(struct adreno_ringbuffer *rb, + struct adreno_submit_time *time, unsigned int timeout) +{ + struct adreno_device *adreno_dev = ADRENO_RB_DEVICE(rb); + struct kgsl_device *device = KGSL_DEVICE(adreno_dev); + unsigned int *cmds; + + if (adreno_is_a3xx(adreno_dev)) + return adreno_ringbuffer_submit_spin_nosync(rb, time, timeout); + + cmds = adreno_ringbuffer_allocspace(rb, 3); + if (IS_ERR(cmds)) + return PTR_ERR(cmds); + + *cmds++ = cp_packet(adreno_dev, CP_WHERE_AM_I, 2); + cmds += cp_gpuaddr(adreno_dev, cmds, + SCRATCH_RPTR_GPU_ADDR(device, rb->id)); + + return adreno_ringbuffer_submit_spin_nosync(rb, time, timeout); +} + unsigned int *adreno_ringbuffer_allocspace(struct adreno_ringbuffer *rb, unsigned int dwords) { @@ -314,11 +346,12 @@ int adreno_ringbuffer_probe(struct adreno_device *adreno_dev, bool nopreempt) struct kgsl_device *device = KGSL_DEVICE(adreno_dev); struct adreno_gpudev *gpudev = ADRENO_GPU_DEVICE(adreno_dev); int i; + unsigned int priv = KGSL_MEMDESC_RANDOM | KGSL_MEMDESC_PRIVILEGED; int status = -ENOMEM; if (!adreno_is_a3xx(adreno_dev)) { status = kgsl_allocate_global(device, &device->scratch, - PAGE_SIZE, 0, KGSL_MEMDESC_RANDOM, "scratch"); + PAGE_SIZE, 0, priv, "scratch"); if (status != 0) return status; } @@ -524,6 +557,8 @@ adreno_ringbuffer_addcmds(struct adreno_ringbuffer *rb, if (gpudev->preemption_post_ibsubmit && adreno_is_preemption_enabled(adreno_dev)) total_sizedwords += 10; + else if (!adreno_is_a3xx(adreno_dev)) + total_sizedwords += 3; /* * a5xx uses 64 bit memory address. pm4 commands that involve read/write @@ -735,6 +770,12 @@ adreno_ringbuffer_addcmds(struct adreno_ringbuffer *rb, adreno_is_preemption_enabled(adreno_dev)) ringcmds += gpudev->preemption_post_ibsubmit(adreno_dev, ringcmds); + else if (!adreno_is_a3xx(adreno_dev)) { + *ringcmds++ = cp_packet(adreno_dev, CP_WHERE_AM_I, 2); + ringcmds += cp_gpuaddr(adreno_dev, ringcmds, + SCRATCH_RPTR_GPU_ADDR(device, rb->id)); + } + /* * If we have more ringbuffer commands than space reserved diff --git a/drivers/gpu/msm/adreno_ringbuffer.h b/drivers/gpu/msm/adreno_ringbuffer.h index 8e0c32108f96..ee617778a0cf 100644 --- a/drivers/gpu/msm/adreno_ringbuffer.h +++ b/drivers/gpu/msm/adreno_ringbuffer.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2002,2007-2019, The Linux Foundation. All rights reserved. +/* Copyright (c) 2002,2007-2020, 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 @@ -180,6 +180,9 @@ int adreno_ringbuffer_issue_internal_cmds(struct adreno_ringbuffer *rb, void adreno_ringbuffer_submit(struct adreno_ringbuffer *rb, struct adreno_submit_time *time); +int adreno_ringbuffer_submit_spin_nosync(struct adreno_ringbuffer *rb, + struct adreno_submit_time *time, unsigned int timeout); + int adreno_ringbuffer_submit_spin(struct adreno_ringbuffer *rb, struct adreno_submit_time *time, unsigned int timeout); diff --git a/drivers/gpu/msm/kgsl.h b/drivers/gpu/msm/kgsl.h index b9f5017fac77..4d065b9431f4 100644 --- a/drivers/gpu/msm/kgsl.h +++ b/drivers/gpu/msm/kgsl.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2008-2019, The Linux Foundation. All rights reserved. +/* Copyright (c) 2008-2020, 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 @@ -71,13 +71,11 @@ /* * SCRATCH MEMORY: The scratch memory is one page worth of data that * is mapped into the GPU. This allows for some 'shared' data between - * the GPU and CPU. For example, it will be used by the GPU to write - * each updated RPTR for each RB. + * the GPU and CPU. * * Used Data: * Offset: Length(bytes): What * 0x0: 4 * KGSL_PRIORITY_MAX_RB_LEVELS: RB0 RPTR - * 0x10: 8 * KGSL_PRIORITY_MAX_RB_LEVELS: RB0 CTXT RESTORE ADDR */ /* Shadow global helpers */ @@ -85,13 +83,6 @@ #define SCRATCH_RPTR_GPU_ADDR(dev, id) \ ((dev)->scratch.gpuaddr + SCRATCH_RPTR_OFFSET(id)) -#define SCRATCH_PREEMPTION_CTXT_RESTORE_ADDR_OFFSET(id) \ - (SCRATCH_RPTR_OFFSET(KGSL_PRIORITY_MAX_RB_LEVELS) + \ - ((id) * sizeof(uint64_t))) -#define SCRATCH_PREEMPTION_CTXT_RESTORE_GPU_ADDR(dev, id) \ - ((dev)->scratch.gpuaddr + \ - SCRATCH_PREEMPTION_CTXT_RESTORE_ADDR_OFFSET(id)) - /* Timestamp window used to detect rollovers (half of integer range) */ #define KGSL_TIMESTAMP_WINDOW 0x80000000 From 7c4f07f3e6aee969b6c2b4e1edd6351df3176db2 Mon Sep 17 00:00:00 2001 From: Rohan Sethi Date: Thu, 6 Aug 2020 12:45:10 +0530 Subject: [PATCH 61/63] msm: kgsl: Fix possible use-after-free while adding context to active list Consider a scenario where a context is valid when the check is made in adreno_dispatcher_queue_cmds(), but by the time we reach _track_context(), context has been detached. We would try to delete the entry from the active context list as part of detaching the context though the entry is not added yet. Now in _track_context() the context is actually added. When the context is finally destroyed, we would be left with invalid entry in the list. Next time when a context is added, an attempt would be made to use a freed entry. Fix this by moving the entry deletion part under drawctxt lock. Change-Id: Idab7cbf10987598b3e6395b2d50c20d1990d1f02 Signed-off-by: Puranam V G Tejaswi Signed-off-by: Rohan Sethi --- drivers/gpu/msm/adreno_drawctxt.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/msm/adreno_drawctxt.c b/drivers/gpu/msm/adreno_drawctxt.c index 6876796bf124..7c1d9b2b4ae1 100644 --- a/drivers/gpu/msm/adreno_drawctxt.c +++ b/drivers/gpu/msm/adreno_drawctxt.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2002,2007-2017, The Linux Foundation. All rights reserved. +/* Copyright (c) 2002,2007-2017,2020 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 @@ -485,11 +485,12 @@ void adreno_drawctxt_detach(struct kgsl_context *context) drawctxt = ADRENO_CONTEXT(context); rb = drawctxt->rb; + spin_lock(&drawctxt->lock); + spin_lock(&adreno_dev->active_list_lock); list_del_init(&drawctxt->active_node); spin_unlock(&adreno_dev->active_list_lock); - spin_lock(&drawctxt->lock); count = drawctxt_detach_drawobjs(drawctxt, list); spin_unlock(&drawctxt->lock); From 4e2570d6721fba65698f394d066b471d0a8225f6 Mon Sep 17 00:00:00 2001 From: Jeya R Date: Wed, 29 Jul 2020 12:10:54 +0530 Subject: [PATCH 62/63] msm: ADSPRPC: Size check before allocating memory from DMA For allocating memory from DMA we need to do a size check. This validation is required to avoid any improper paging request. We already have the range in which the size is expected to be. Change-Id: I9328c77704b712b0238815f8b410bd5b37036dcf Acked-by: Ekansh Gupta Signed-off-by: Jeya R --- drivers/char/adsprpc.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/char/adsprpc.c b/drivers/char/adsprpc.c index 88c7cf1828a2..4f64fecd89e4 100644 --- a/drivers/char/adsprpc.c +++ b/drivers/char/adsprpc.c @@ -111,6 +111,7 @@ #define FASTRPC_STATIC_HANDLE_MAX (20) #define FASTRPC_LATENCY_CTRL_ENB (1) +#define MAX_SIZE_LIMIT (0x78000000) #define INIT_FILELEN_MAX (2*1024*1024) #define INIT_MEMLEN_MAX (8*1024*1024) @@ -655,12 +656,20 @@ static int fastrpc_mmap_find(struct fastrpc_file *fl, int fd, static int dma_alloc_memory(dma_addr_t *region_phys, void **vaddr, size_t size, unsigned long dma_attrs) { + int err = 0; struct fastrpc_apps *me = &gfa; if (me->dev == NULL) { pr_err("device adsprpc-mem is not initialized\n"); return -ENODEV; } + VERIFY(err, size > 0 && size < MAX_SIZE_LIMIT); + if (err) { + err = -EFAULT; + pr_err("adsprpc: %s: invalid allocation size 0x%zx\n", + __func__, size); + return err; + } *vaddr = dma_alloc_attrs(me->dev, size, region_phys, GFP_KERNEL, dma_attrs); if (IS_ERR_OR_NULL(*vaddr)) { From 404ad2140f183541714b2e9288af8f29d13568d9 Mon Sep 17 00:00:00 2001 From: VijayaKumar T M Date: Wed, 5 Aug 2020 14:05:26 +0530 Subject: [PATCH 63/63] msm: camera: cci: Fix incorrect use of cci config ioctl The cci configuration will be transitioned to a new API that does not require routing through the v4l layer. This is work-in-progrss so in the mean time prevent the device from being exposed as configurable from userspace. The ioctl will still be exposed to kernel users so fix the arg size as well. We want size of struct not pointer. CRs-Fixed: 2702760 Change-Id: I9c7bd8f76980603dbf27e1c5bc9b19f8a3b8a39a Signed-off-by: Fernando Pacheco Signed-off-by: VijayaKumar T M --- .../msm/camera/cam_sensor_module/cam_cci/cam_cci_dev.c | 5 ++--- .../msm/camera/cam_sensor_module/cam_cci/cam_cci_dev.h | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/drivers/media/platform/msm/camera/cam_sensor_module/cam_cci/cam_cci_dev.c b/drivers/media/platform/msm/camera/cam_sensor_module/cam_cci/cam_cci_dev.c index c8ca85dafdba..8de8c09bb397 100644 --- a/drivers/media/platform/msm/camera/cam_sensor_module/cam_cci/cam_cci_dev.c +++ b/drivers/media/platform/msm/camera/cam_sensor_module/cam_cci/cam_cci_dev.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2017-2018, The Linux Foundation. All rights reserved. +/* Copyright (c) 2017-2018, 2020 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 @@ -303,8 +303,7 @@ static int cam_cci_platform_probe(struct platform_device *pdev) sizeof(new_cci_dev->device_name)); new_cci_dev->v4l2_dev_str.name = new_cci_dev->device_name; - new_cci_dev->v4l2_dev_str.sd_flags = - (V4L2_SUBDEV_FL_HAS_DEVNODE | V4L2_SUBDEV_FL_HAS_EVENTS); + new_cci_dev->v4l2_dev_str.sd_flags = V4L2_SUBDEV_FL_HAS_EVENTS; new_cci_dev->v4l2_dev_str.ent_function = CAM_CCI_DEVICE_TYPE; new_cci_dev->v4l2_dev_str.token = diff --git a/drivers/media/platform/msm/camera/cam_sensor_module/cam_cci/cam_cci_dev.h b/drivers/media/platform/msm/camera/cam_sensor_module/cam_cci/cam_cci_dev.h index d48ffd15b4f9..e37707be7244 100644 --- a/drivers/media/platform/msm/camera/cam_sensor_module/cam_cci/cam_cci_dev.h +++ b/drivers/media/platform/msm/camera/cam_sensor_module/cam_cci/cam_cci_dev.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2017-2018, The Linux Foundation. All rights reserved. +/* Copyright (c) 2017-2018, 2020 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 @@ -295,6 +295,6 @@ static inline struct v4l2_subdev *cam_cci_get_subdev(void) #endif #define VIDIOC_MSM_CCI_CFG \ - _IOWR('V', BASE_VIDIOC_PRIVATE + 23, struct cam_cci_ctrl *) + _IOWR('V', BASE_VIDIOC_PRIVATE + 23, struct cam_cci_ctrl) #endif /* _CAM_CCI_DEV_H_ */