nvadsp: adspff: Handle kthread creation failure

kthread_create call may return ERR_PTR(-ENOMEM) or ERR_PTR(-EINTR)
in case of memory allocation failure or if the newly created thread
receives a fatal signal. Handle the conditions by returning and not
attempting to wake up the thread.

Bug 200688338

Change-Id: Ibde3a847202476f52fca38d145091c540ace19c4
Signed-off-by: Niranjan Dighe <ndighe@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/2633986
(cherry picked from commit 4d382d925befd445cddfc10c556d7c06b980b920)
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nvidia/+/2729780
Reviewed-by: svcacv <svcacv@nvidia.com>
Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com>
Reviewed-by: svc-mobile-cert <svc-mobile-cert@nvidia.com>
Reviewed-by: svc_kernel_abi <svc_kernel_abi@nvidia.com>
Reviewed-by: Nitin Pai <npai@nvidia.com>
GVS: Gerrit_Virtual_Submit
Tested-by: Uday Gupta <udayg@nvidia.com>
This commit is contained in:
Niranjan Dighe
2021-11-30 10:58:45 +05:30
committed by Laxman Dewangan
parent e6c266d6bf
commit 4bcb44fbf9

View File

@@ -663,6 +663,16 @@ int adspff_init(struct platform_device *pdev)
return -1;
}
adspff_kthread = kthread_create(adspff_kthread_fn,
NULL, "adspp_kthread");
if ((adspff_kthread == ERR_PTR(-ENOMEM)) ||
(adspff_kthread == ERR_PTR(-EINTR))) {
pr_err("adspff kthread_create failed, error = %s\n",
(adspff_kthread == ERR_PTR(-ENOMEM)) ?
"-ENOMEM" : "-EINTR");
return -1;
}
adspff = ADSPFF_SHARED_STATE(app_info->mem.shared);
ret = nvadsp_mbox_open(&rx_mbox, &adspff->mbox_id,
@@ -684,10 +694,7 @@ int adspff_init(struct platform_device *pdev)
INIT_LIST_HEAD(&adspff_kthread_msgq_head);
INIT_LIST_HEAD(&file_list);
// kthread inIt
init_waitqueue_head(&wait_queue);
adspff_kthread = kthread_create(adspff_kthread_fn,
NULL, "adspp_kthread");
#if KERNEL_VERSION(5, 9, 0) > LINUX_VERSION_CODE
sched_setscheduler(adspff_kthread, SCHED_FIFO, &param);