diff options
| -rw-r--r-- | arch/arm/boot/dts/qcom/vplatform-lfv-msm8996-ivi-la.dts | 31 | ||||
| -rw-r--r-- | arch/arm/boot/dts/qcom/vplatform-lfv-msm8996-telematics.dts | 29 | ||||
| -rw-r--r-- | arch/arm64/configs/msm-auto-gvm-perf_defconfig | 9 | ||||
| -rw-r--r-- | arch/arm64/configs/msm-auto-gvm_defconfig | 9 | ||||
| -rw-r--r-- | drivers/crypto/msm/qcedev.c | 22 | ||||
| -rw-r--r-- | drivers/crypto/msm/qcrypto.c | 4 | ||||
| -rw-r--r-- | drivers/media/platform/msm/vidc/msm_vidc_common.c | 6 | ||||
| -rw-r--r-- | drivers/net/wireless/cnss2/main.c | 24 | ||||
| -rw-r--r-- | drivers/net/wireless/cnss2/pci.c | 12 | ||||
| -rw-r--r-- | drivers/soc/qcom/hab/hab.c | 41 | ||||
| -rw-r--r-- | drivers/soc/qcom/hab/hab.h | 7 | ||||
| -rw-r--r-- | drivers/soc/qcom/hab/hab_vchan.c | 18 | ||||
| -rw-r--r-- | drivers/soc/qcom/hab/khab.c | 23 | ||||
| -rw-r--r-- | include/linux/habmm.h | 13 | ||||
| -rw-r--r-- | include/linux/sched.h | 19 | ||||
| -rw-r--r-- | include/net/cnss2.h | 1 | ||||
| -rw-r--r-- | include/uapi/linux/habmm.h | 11 | ||||
| -rw-r--r-- | kernel/sched/fair.c | 2 |
18 files changed, 247 insertions, 34 deletions
diff --git a/arch/arm/boot/dts/qcom/vplatform-lfv-msm8996-ivi-la.dts b/arch/arm/boot/dts/qcom/vplatform-lfv-msm8996-ivi-la.dts index 2e5504e7d965..219cc7427da9 100644 --- a/arch/arm/boot/dts/qcom/vplatform-lfv-msm8996-ivi-la.dts +++ b/arch/arm/boot/dts/qcom/vplatform-lfv-msm8996-ivi-la.dts @@ -55,6 +55,37 @@ }; }; +&soc { + qcom,cnss { + compatible = "qcom,cnss"; + wlan-bootstrap-gpio = <&tlmm 46 0>; + vdd-wlan-en-supply = <&wlan_en_vreg>; + vdd-wlan-supply = <&rome_vreg>; + vdd-wlan-io-supply = <&pm8994_s4>; + vdd-wlan-xtal-supply = <&pm8994_l30>; + vdd-wlan-core-supply = <&pm8994_s3>; + wlan-ant-switch-supply = <&pm8994_l18_pin_ctrl>; + qcom,wlan-en-vreg-support; + qcom,notify-modem-status; + pinctrl-names = "bootstrap_active", "bootstrap_sleep"; + pinctrl-0 = <&cnss_bootstrap_active>; + pinctrl-1 = <&cnss_bootstrap_sleep>; + + qcom,msm-bus,name = "msm-cnss"; + qcom,msm-bus,num-cases = <4>; + qcom,msm-bus,num-paths = <1>; + qcom,msm-bus,vectors-KBps = + /* No vote */ + <45 512 0 0>, + /* Up to 200 Mbps */ + <45 512 41421 1520000>, + /* Up to 400 Mbps */ + <45 512 96650 1520000>, + /* Up to 800 Mbps */ + <45 512 207108 14432000>; + }; +}; + &reserved_memory { pmem_shared: pmem_shared_region { reg = <0 0xd0000000 0 0x30000000>; diff --git a/arch/arm/boot/dts/qcom/vplatform-lfv-msm8996-telematics.dts b/arch/arm/boot/dts/qcom/vplatform-lfv-msm8996-telematics.dts index cd8e49244b24..83f87d0ee2ff 100644 --- a/arch/arm/boot/dts/qcom/vplatform-lfv-msm8996-telematics.dts +++ b/arch/arm/boot/dts/qcom/vplatform-lfv-msm8996-telematics.dts @@ -89,6 +89,35 @@ }; }; + qcom,hab { + compatible = "qcom,hab"; + vmid = <2>; + + mmidgrp600: mmidgrp600 { + grp-start-id = <600>; + role = "fe"; + remote-vmids = <0>; + }; + + mmidgrp700: mmidgrp700 { + grp-start-id = <700>; + role = "fe"; + remote-vmids = <0>; + }; + + mmidgrp800: mmidgrp800 { + grp-start-id = <800>; + role = "fe"; + remote-vmids = <0>; + }; + + mmidgrp900: mmidgrp900 { + grp-start-id = <900>; + role = "fe"; + remote-vmids = <0>; + }; + }; + qcom,cnss { compatible = "qcom,cnss"; wlan-bootstrap-gpio = <&tlmm 46 0>; diff --git a/arch/arm64/configs/msm-auto-gvm-perf_defconfig b/arch/arm64/configs/msm-auto-gvm-perf_defconfig index e47e10664bed..ddd28492ca72 100644 --- a/arch/arm64/configs/msm-auto-gvm-perf_defconfig +++ b/arch/arm64/configs/msm-auto-gvm-perf_defconfig @@ -164,6 +164,8 @@ CONFIG_RMNET_DATA_FC=y CONFIG_RMNET_DATA_DEBUG_PKT=y CONFIG_CAN=y CONFIG_CAN_RH850=y +CONFIG_CFG80211=y +CONFIG_CFG80211_INTERNAL_REGDB=y CONFIG_IPC_ROUTER=y CONFIG_IPC_ROUTER_SECURITY=y CONFIG_DEVTMPFS=y @@ -190,6 +192,12 @@ CONFIG_PPP_DEFLATE=y CONFIG_PPPOE=y CONFIG_PPP_ASYNC=y CONFIG_PPP_SYNC_TTY=y +CONFIG_WCNSS_MEM_PRE_ALLOC=y +CONFIG_CNSS_CRYPTO=y +CONFIG_ATH_CARDS=y +CONFIG_CLD_LL_CORE=y +CONFIG_CNSS2=y +CONFIG_CNSS2_DEBUG=y CONFIG_INPUT_EVDEV=y CONFIG_INPUT_EVBUG=m CONFIG_INPUT_JOYSTICK=y @@ -288,6 +296,7 @@ CONFIG_MSM_BOOT_STATS=y CONFIG_MSM_BOOT_TIME_MARKER=y CONFIG_MSM_SUBSYSTEM_RESTART=y CONFIG_MSM_PIL=y +CONFIG_MSM_PIL_SSR_GENERIC=y CONFIG_MSM_PIL_MSS_QDSP6V5=y CONFIG_ANDROID=y CONFIG_ANDROID_BINDER_IPC=y diff --git a/arch/arm64/configs/msm-auto-gvm_defconfig b/arch/arm64/configs/msm-auto-gvm_defconfig index 446152e4322f..aaece212396a 100644 --- a/arch/arm64/configs/msm-auto-gvm_defconfig +++ b/arch/arm64/configs/msm-auto-gvm_defconfig @@ -163,6 +163,8 @@ CONFIG_RMNET_DATA_FC=y CONFIG_RMNET_DATA_DEBUG_PKT=y CONFIG_CAN=y CONFIG_CAN_RH850=y +CONFIG_CFG80211=y +CONFIG_CFG80211_INTERNAL_REGDB=y CONFIG_IPC_ROUTER=y CONFIG_IPC_ROUTER_SECURITY=y CONFIG_DEVTMPFS=y @@ -189,6 +191,12 @@ CONFIG_PPP_DEFLATE=y CONFIG_PPPOE=y CONFIG_PPP_ASYNC=y CONFIG_PPP_SYNC_TTY=y +CONFIG_WCNSS_MEM_PRE_ALLOC=y +CONFIG_CNSS_CRYPTO=y +CONFIG_ATH_CARDS=y +CONFIG_CLD_LL_CORE=y +CONFIG_CNSS2=y +CONFIG_CNSS2_DEBUG=y CONFIG_INPUT_EVDEV=y CONFIG_INPUT_EVBUG=m CONFIG_INPUT_JOYSTICK=y @@ -294,6 +302,7 @@ CONFIG_MSM_BOOT_STATS=y CONFIG_MSM_BOOT_TIME_MARKER=y CONFIG_MSM_SUBSYSTEM_RESTART=y CONFIG_MSM_PIL=y +CONFIG_MSM_PIL_SSR_GENERIC=y CONFIG_MSM_PIL_MSS_QDSP6V5=y CONFIG_ANDROID=y CONFIG_ANDROID_BINDER_IPC=y diff --git a/drivers/crypto/msm/qcedev.c b/drivers/crypto/msm/qcedev.c index a55f236961b8..953159c66159 100644 --- a/drivers/crypto/msm/qcedev.c +++ b/drivers/crypto/msm/qcedev.c @@ -1,6 +1,6 @@ /* Qualcomm CE device driver. * - * Copyright (c) 2010-2017, The Linux Foundation. All rights reserved. + * Copyright (c) 2010-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 @@ -843,6 +843,7 @@ static int qcedev_sha_final(struct qcedev_async_req *qcedev_areq, memset(&handle->sha_ctxt.trailing_buf[0], 0, 64); kzfree(k_buf_src); + qcedev_areq->sha_req.sreq.src = NULL; return err; } @@ -1012,6 +1013,7 @@ static int qcedev_hmac_get_ohash(struct qcedev_async_req *qcedev_areq, handle->sha_ctxt.first_blk = 0; kzfree(k_src); + qcedev_areq->sha_req.sreq.src = NULL; return err; } @@ -1166,8 +1168,10 @@ static int qcedev_vbuf_ablk_cipher_max_xfer(struct qcedev_async_req *areq, if (err == 0 && copy_to_user( (void __user *)creq->vbuf.dst[dst_i].vaddr, (k_align_dst + byteoffset), - creq->vbuf.dst[dst_i].len)) - return -EFAULT; + creq->vbuf.dst[dst_i].len)) { + err = -EFAULT; + goto exit; + } k_align_dst += creq->vbuf.dst[dst_i].len + byteoffset; @@ -1176,9 +1180,11 @@ static int qcedev_vbuf_ablk_cipher_max_xfer(struct qcedev_async_req *areq, } else { if (err == 0 && copy_to_user( (void __user *)creq->vbuf.dst[dst_i].vaddr, - (k_align_dst + byteoffset), - creq->data_len)) - return -EFAULT; + (k_align_dst + byteoffset), + creq->data_len)) { + err = -EFAULT; + goto exit; + } k_align_dst += creq->data_len; creq->vbuf.dst[dst_i].len -= creq->data_len; @@ -1187,7 +1193,9 @@ static int qcedev_vbuf_ablk_cipher_max_xfer(struct qcedev_async_req *areq, } } *di = dst_i; - +exit: + areq->cipher_req.creq.src = NULL; + areq->cipher_req.creq.dst = NULL; return err; }; diff --git a/drivers/crypto/msm/qcrypto.c b/drivers/crypto/msm/qcrypto.c index f38fc422b35e..2bfd0525c529 100644 --- a/drivers/crypto/msm/qcrypto.c +++ b/drivers/crypto/msm/qcrypto.c @@ -1,6 +1,6 @@ /* Qualcomm Crypto driver * - * Copyright (c) 2010-2017, The Linux Foundation. All rights reserved. + * Copyright (c) 2010-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 @@ -3923,7 +3923,7 @@ static int _sha_hmac_setkey(struct crypto_ahash *tfm, const u8 *key, struct qcrypto_sha_ctx *sha_ctx = crypto_tfm_ctx(&tfm->base); uint8_t *in_buf; int ret = 0; - struct scatterlist sg; + struct scatterlist sg = {0}; struct ahash_request *ahash_req; struct completion ahash_req_complete; diff --git a/drivers/media/platform/msm/vidc/msm_vidc_common.c b/drivers/media/platform/msm/vidc/msm_vidc_common.c index ca72d0fa31a1..17c5066ae13f 100644 --- a/drivers/media/platform/msm/vidc/msm_vidc_common.c +++ b/drivers/media/platform/msm/vidc/msm_vidc_common.c @@ -3145,7 +3145,7 @@ static int set_output_buffers(struct msm_vidc_inst *inst, { int rc = 0; struct msm_smem *handle; - struct internal_buf *binfo; + struct internal_buf *binfo = NULL; u32 smem_flags = 0, buffer_size; struct hal_buffer_requirements *output_buf, *extradata_buf; int i; @@ -3251,10 +3251,10 @@ static int set_output_buffers(struct msm_vidc_inst *inst, } return rc; fail_set_buffers: - kfree(binfo); -fail_kzalloc: msm_comm_smem_free(inst, handle); err_no_mem: + kfree(binfo); +fail_kzalloc: return rc; } diff --git a/drivers/net/wireless/cnss2/main.c b/drivers/net/wireless/cnss2/main.c index bcea74ad6685..dcaf3203f197 100644 --- a/drivers/net/wireless/cnss2/main.c +++ b/drivers/net/wireless/cnss2/main.c @@ -571,7 +571,8 @@ static int cnss_driver_call_probe(struct cnss_plat_data *plat_priv) goto out; } - if (test_bit(CNSS_DRIVER_RECOVERY, &plat_priv->driver_state)) { + if (test_bit(CNSS_DRIVER_RECOVERY, &plat_priv->driver_state) && + test_bit(CNSS_DRIVER_PROBED, &plat_priv->driver_state)) { ret = plat_priv->driver_ops->reinit(pci_priv->pci_dev, pci_priv->pci_device_id); if (ret) { @@ -588,6 +589,7 @@ static int cnss_driver_call_probe(struct cnss_plat_data *plat_priv) ret); goto out; } + clear_bit(CNSS_DRIVER_RECOVERY, &plat_priv->driver_state); clear_bit(CNSS_DRIVER_LOADING, &plat_priv->driver_state); set_bit(CNSS_DRIVER_PROBED, &plat_priv->driver_state); } @@ -614,7 +616,8 @@ static int cnss_driver_call_remove(struct cnss_plat_data *plat_priv) return -EINVAL; } - if (test_bit(CNSS_DRIVER_RECOVERY, &plat_priv->driver_state)) { + if (test_bit(CNSS_DRIVER_RECOVERY, &plat_priv->driver_state) && + test_bit(CNSS_DRIVER_PROBED, &plat_priv->driver_state)) { plat_priv->driver_ops->shutdown(pci_priv->pci_dev); } else if (test_bit(CNSS_DRIVER_UNLOADING, &plat_priv->driver_state)) { plat_priv->driver_ops->remove(pci_priv->pci_dev); @@ -652,7 +655,9 @@ static int cnss_fw_ready_hdlr(struct cnss_plat_data *plat_priv) complete(&plat_priv->power_up_complete); } - if (ret) + if (ret && test_bit(CNSS_DEV_ERR_NOTIFY, &plat_priv->driver_state)) + goto out; + else if (ret) goto shutdown; return 0; @@ -662,6 +667,10 @@ shutdown: cnss_suspend_pci_link(plat_priv->bus_priv); cnss_power_off_device(plat_priv); + clear_bit(CNSS_FW_READY, &plat_priv->driver_state); + clear_bit(CNSS_FW_MEM_READY, &plat_priv->driver_state); + +out: return ret; } @@ -1179,8 +1188,10 @@ static void cnss_qca6290_crash_shutdown(struct cnss_plat_data *plat_priv) if (test_bit(CNSS_DRIVER_RECOVERY, &plat_priv->driver_state) || test_bit(CNSS_DRIVER_LOADING, &plat_priv->driver_state) || - test_bit(CNSS_DRIVER_UNLOADING, &plat_priv->driver_state)) + test_bit(CNSS_DRIVER_UNLOADING, &plat_priv->driver_state)) { + cnss_pr_dbg("Ignore crash shutdown\n"); return; + } ret = cnss_pci_set_mhi_state(pci_priv, CNSS_MHI_RDDM_KERNEL_PANIC); if (ret) { @@ -1538,11 +1549,6 @@ static int cnss_driver_recovery_hdlr(struct cnss_plat_data *plat_priv, if (!test_bit(CNSS_FW_READY, &plat_priv->driver_state)) { set_bit(CNSS_FW_BOOT_RECOVERY, &plat_priv->driver_state); - } else if (test_bit(CNSS_DRIVER_LOADING, - &plat_priv->driver_state)) { - cnss_pr_err("Driver probe is in progress, ignore recovery\n"); - ret = -EINVAL; - goto out; } break; } diff --git a/drivers/net/wireless/cnss2/pci.c b/drivers/net/wireless/cnss2/pci.c index 39deddd4db07..2ee0edda1b5b 100644 --- a/drivers/net/wireless/cnss2/pci.c +++ b/drivers/net/wireless/cnss2/pci.c @@ -1177,14 +1177,22 @@ void cnss_pci_clear_dump_info(struct cnss_pci_data *pci_priv) static void cnss_mhi_notify_status(enum MHI_CB_REASON reason, void *priv) { struct cnss_pci_data *pci_priv = priv; - struct cnss_plat_data *plat_priv = pci_priv->plat_priv; + struct cnss_plat_data *plat_priv; enum cnss_recovery_reason cnss_reason = CNSS_REASON_RDDM; - if (!pci_priv) + if (!pci_priv) { + cnss_pr_err("pci_priv is NULL"); return; + } + + plat_priv = pci_priv->plat_priv; cnss_pr_dbg("MHI status cb is called with reason %d\n", reason); + if (plat_priv->driver_ops && plat_priv->driver_ops->update_status) + plat_priv->driver_ops->update_status(pci_priv->pci_dev, + CNSS_FW_DOWN); + set_bit(CNSS_DEV_ERR_NOTIFY, &plat_priv->driver_state); del_timer(&plat_priv->fw_boot_timer); diff --git a/drivers/soc/qcom/hab/hab.c b/drivers/soc/qcom/hab/hab.c index 4136f2995046..1e568c79fcae 100644 --- a/drivers/soc/qcom/hab/hab.c +++ b/drivers/soc/qcom/hab/hab.c @@ -521,14 +521,18 @@ static int hab_initialize_pchan_entry(struct hab_device *mmid_device, ret = habhyp_commdev_alloc((void **)&pchan, is_be, pchan_name, vmid_remote, mmid_device); - if (ret == 0) { - pr_debug("pchan %s added, vmid local %d, remote %d, is_be %d, total %d\n", - pchan_name, vmid_local, vmid_remote, is_be, - mmid_device->pchan_cnt); - } else { + if (ret) { pr_err("failed %d to allocate pchan %s, vmid local %d, remote %d, is_be %d, total %d\n", ret, pchan_name, vmid_local, vmid_remote, is_be, mmid_device->pchan_cnt); + } else { + /* local/remote id setting should be kept in lower level */ + pchan->vmid_local = vmid_local; + pchan->vmid_remote = vmid_remote; + pr_debug("pchan %s mmid %s local %d remote %d role %d\n", + pchan_name, mmid_device->name, + pchan->vmid_local, pchan->vmid_remote, + pchan->dom_id); } return ret; @@ -780,10 +784,12 @@ static long hab_ioctl(struct file *filep, unsigned int cmd, unsigned long arg) struct hab_close *close_param; struct hab_recv *recv_param; struct hab_send *send_param; + struct hab_info *info_param; struct hab_message *msg; void *send_data; unsigned char data[256] = { 0 }; long ret = 0; + char names[30]; if (_IOC_SIZE(cmd) && (cmd & IOC_IN)) { if (_IOC_SIZE(cmd) > sizeof(data)) @@ -873,6 +879,31 @@ static long hab_ioctl(struct file *filep, unsigned int cmd, unsigned long arg) case IOCTL_HAB_VC_UNIMPORT: ret = hab_mem_unimport(ctx, (struct hab_unimport *)data, 0); break; + case IOCTL_HAB_VC_QUERY: + info_param = (struct hab_info *)data; + if (!info_param->names || !info_param->namesize || + info_param->namesize > sizeof(names)) { + pr_err("wrong vm info vcid %X, names %llX, sz %d\n", + info_param->vcid, info_param->names, + info_param->namesize); + ret = -EINVAL; + break; + } + ret = hab_vchan_query(ctx, info_param->vcid, + (uint64_t *)&info_param->ids, + names, info_param->namesize, 0); + if (!ret) { + if (copy_to_user((void __user *)info_param->names, + names, + info_param->namesize)) { + pr_err("copy_to_user failed: vc=%x size=%d\n", + info_param->vcid, + info_param->namesize*2); + info_param->namesize = 0; + ret = -EFAULT; + } + } + break; default: ret = -ENOIOCTLCMD; } diff --git a/drivers/soc/qcom/hab/hab.h b/drivers/soc/qcom/hab/hab.h index f13d6f44b929..dcf2c751df30 100644 --- a/drivers/soc/qcom/hab/hab.h +++ b/drivers/soc/qcom/hab/hab.h @@ -194,6 +194,10 @@ struct physical_channel { void *hyp_data; int dom_id; + int vmid_local; + int vmid_remote; + char vmname_local[12]; + char vmname_remote[12]; int closed; spinlock_t rxbuf_lock; @@ -504,6 +508,9 @@ int fill_default_gvm_settings(struct local_vmid *settings, bool hab_is_loopback(void); +int hab_vchan_query(struct uhab_context *ctx, int32_t vcid, uint64_t *ids, + char *names, size_t name_size, uint32_t flags); + /* Global singleton HAB instance */ extern struct hab_driver hab_driver; diff --git a/drivers/soc/qcom/hab/hab_vchan.c b/drivers/soc/qcom/hab/hab_vchan.c index 91ae173f7e83..e8b8866d570d 100644 --- a/drivers/soc/qcom/hab/hab_vchan.c +++ b/drivers/soc/qcom/hab/hab_vchan.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved. +/* Copyright (c) 2016-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 @@ -211,3 +211,19 @@ void hab_vchan_put(struct virtual_channel *vchan) if (vchan) kref_put(&vchan->refcount, hab_vchan_schedule_free); } + +int hab_vchan_query(struct uhab_context *ctx, int32_t vcid, uint64_t *ids, + char *names, size_t name_size, uint32_t flags) +{ + struct virtual_channel *vchan = hab_get_vchan_fromvcid(vcid, ctx); + + if (!vchan || vchan->otherend_closed) + return -ENODEV; + + *ids = vchan->pchan->vmid_local | + ((uint64_t)vchan->pchan->vmid_remote) << 32; + names[0] = 0; + names[name_size/2] = 0; + + return 0; +} diff --git a/drivers/soc/qcom/hab/khab.c b/drivers/soc/qcom/hab/khab.c index 05e6aa2fa7ca..3fdd11f7daf7 100644 --- a/drivers/soc/qcom/hab/khab.c +++ b/drivers/soc/qcom/hab/khab.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved. +/* Copyright (c) 2016-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 @@ -138,3 +138,24 @@ int32_t habmm_unimport(int32_t handle, return hab_mem_unimport(hab_driver.kctx, ¶m, 1); } EXPORT_SYMBOL(habmm_unimport); + +int32_t habmm_socket_query(int32_t handle, + struct hab_socket_info *info, + uint32_t flags) +{ + int ret; + uint64_t ids; + char nm[sizeof(info->vmname_remote) + sizeof(info->vmname_local)]; + + ret = hab_vchan_query(hab_driver.kctx, handle, &ids, nm, sizeof(nm), 1); + if (!ret) { + info->vmid_local = ids & 0xFFFFFFFF; + info->vmid_remote = (ids & 0xFFFFFFFF00000000UL) > 32; + + strlcpy(info->vmname_local, nm, sizeof(info->vmname_local)); + strlcpy(info->vmname_remote, &nm[sizeof(info->vmname_local)], + sizeof(info->vmname_remote)); + } + return ret; +} +EXPORT_SYMBOL(habmm_socket_query); diff --git a/include/linux/habmm.h b/include/linux/habmm.h index 4d3a81f536d9..1c27ee4f14f7 100644 --- a/include/linux/habmm.h +++ b/include/linux/habmm.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved. +/* Copyright (c) 2016-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 @@ -35,4 +35,15 @@ int32_t habmm_import(int32_t handle, void **buff_shared, uint32_t size_bytes, int32_t habmm_unimport(int32_t handle, uint32_t export_id, void *buff_shared, uint32_t flags); +struct hab_socket_info { + int32_t vmid_remote; /* habmm's vmid */ + int32_t vmid_local; + /* name from hypervisor framework if available */ + char vmname_remote[12]; + char vmname_local[12]; +}; + +int32_t habmm_socket_query(int32_t handle, struct hab_socket_info *info, + uint32_t flags); + #endif diff --git a/include/linux/sched.h b/include/linux/sched.h index fcfed59cedc4..000b0f02ce37 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h @@ -184,6 +184,22 @@ extern void sched_get_nr_running_avg(int *avg, int *iowait_avg, int *big_avg, unsigned int *big_max_nr); extern u64 sched_get_cpu_last_busy_time(int cpu); +#ifdef CONFIG_SMP +extern u32 sched_get_wake_up_idle(struct task_struct *p); +extern int sched_set_wake_up_idle(struct task_struct *p, int wake_up_idle); +#else +static inline u32 sched_get_wake_up_idle(struct task_struct *p) +{ + return 0; +} + +static inline int sched_set_wake_up_idle(struct task_struct *p, + int wake_up_idle) +{ + return 0; +} +#endif /* CONFIG_SMP */ + extern void calc_global_load(unsigned long ticks); #if defined(CONFIG_SMP) && defined(CONFIG_NO_HZ_COMMON) @@ -2547,9 +2563,6 @@ struct sched_load { unsigned long predicted_load; }; -extern int sched_set_wake_up_idle(struct task_struct *p, int wake_up_idle); -extern u32 sched_get_wake_up_idle(struct task_struct *p); - struct cpu_cycle_counter_cb { u64 (*get_cpu_cycle_counter)(int cpu); }; diff --git a/include/net/cnss2.h b/include/net/cnss2.h index 053114979a87..f80d87533a99 100644 --- a/include/net/cnss2.h +++ b/include/net/cnss2.h @@ -88,6 +88,7 @@ enum cnss_driver_status { CNSS_INITIALIZED, CNSS_LOAD_UNLOAD, CNSS_RECOVERY, + CNSS_FW_DOWN, }; struct cnss_ce_tgt_pipe_cfg { diff --git a/include/uapi/linux/habmm.h b/include/uapi/linux/habmm.h index 8586048e20c0..b1b6561f2552 100644 --- a/include/uapi/linux/habmm.h +++ b/include/uapi/linux/habmm.h @@ -59,6 +59,14 @@ struct hab_unimport { __u32 flags; }; +struct hab_info { + __s32 vcid; + __u64 ids; /* high part remote; low part local */ + __u64 names; + __u32 namesize; /* single name length */ + __u32 flags; +}; + #define HAB_IOC_TYPE 0x0A #define HAB_MAX_MSG_SIZEBYTES 0x1000 #define HAB_MAX_EXPORT_SIZE 0x8000000 @@ -163,4 +171,7 @@ struct hab_unimport { #define IOCTL_HAB_VC_UNIMPORT \ _IOW(HAB_IOC_TYPE, 0x9, struct hab_unimport) +#define IOCTL_HAB_VC_QUERY \ + _IOWR(HAB_IOC_TYPE, 0xA, struct hab_info) + #endif /* HABMM_H */ diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index ce683b0021fd..23e37b0674df 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -2641,6 +2641,7 @@ u32 sched_get_wake_up_idle(struct task_struct *p) return !!enabled; } +EXPORT_SYMBOL(sched_get_wake_up_idle); int sched_set_wake_up_idle(struct task_struct *p, int wake_up_idle) { @@ -2653,6 +2654,7 @@ int sched_set_wake_up_idle(struct task_struct *p, int wake_up_idle) return 0; } +EXPORT_SYMBOL(sched_set_wake_up_idle); static const u32 runnable_avg_yN_inv[] = { 0xffffffff, 0xfa83b2da, 0xf5257d14, 0xefe4b99a, 0xeac0c6e6, 0xe5b906e6, |
