OSDN Git Service

Merge "soc: qcom: ipc_router_smd_xprt: Set pointer to NULL after free"
authorLinux Build Service Account <lnxbuild@localhost>
Wed, 28 Mar 2018 22:28:05 +0000 (15:28 -0700)
committerGerrit - the friendly Code Review server <code-review@localhost>
Wed, 28 Mar 2018 22:28:04 +0000 (15:28 -0700)
18 files changed:
arch/arm/boot/dts/qcom/vplatform-lfv-msm8996-ivi-la.dts
arch/arm/boot/dts/qcom/vplatform-lfv-msm8996-telematics.dts
arch/arm64/configs/msm-auto-gvm-perf_defconfig
arch/arm64/configs/msm-auto-gvm_defconfig
drivers/crypto/msm/qcedev.c
drivers/crypto/msm/qcrypto.c
drivers/media/platform/msm/vidc/msm_vidc_common.c
drivers/net/wireless/cnss2/main.c
drivers/net/wireless/cnss2/pci.c
drivers/soc/qcom/hab/hab.c
drivers/soc/qcom/hab/hab.h
drivers/soc/qcom/hab/hab_vchan.c
drivers/soc/qcom/hab/khab.c
include/linux/habmm.h
include/linux/sched.h
include/net/cnss2.h
include/uapi/linux/habmm.h
kernel/sched/fair.c

index 2e5504e..219cc74 100644 (file)
        };
 };
 
+&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>;
index cd8e492..83f87d0 100644 (file)
                };
        };
 
+       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>;
index e47e106..ddd2849 100644 (file)
@@ -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
index 446152e..aaece21 100644 (file)
@@ -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
index a55f236..953159c 100644 (file)
@@ -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;
 };
 
index f38fc42..2bfd052 100644 (file)
@@ -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;
 
index ca72d0f..17c5066 100644 (file)
@@ -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;
 }
 
index bcea74a..dcaf320 100644 (file)
@@ -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;
        }
index 39deddd..2ee0edd 100644 (file)
@@ -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);
 
index 4136f29..1e568c7 100644 (file)
@@ -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;
        }
index f13d6f4..dcf2c75 100644 (file)
@@ -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;
 
index 91ae173..e8b8866 100644 (file)
@@ -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;
+}
index 05e6aa2..3fdd11f 100644 (file)
@@ -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, &param, 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);
index 4d3a81f..1c27ee4 100644 (file)
@@ -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
index fcfed59..000b0f0 100644 (file)
@@ -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);
 };
index 0531149..f80d875 100644 (file)
@@ -88,6 +88,7 @@ enum cnss_driver_status {
        CNSS_INITIALIZED,
        CNSS_LOAD_UNLOAD,
        CNSS_RECOVERY,
+       CNSS_FW_DOWN,
 };
 
 struct cnss_ce_tgt_pipe_cfg {
index 8586048..b1b6561 100644 (file)
@@ -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 */
index ce683b0..23e37b0 100644 (file)
@@ -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,