diff -drupN a/drivers/devfreq/devfreq.c b/drivers/devfreq/devfreq.c --- a/drivers/devfreq/devfreq.c 2018-08-06 17:23:04.000000000 +0300 +++ b/drivers/devfreq/devfreq.c 2022-06-12 05:28:14.000000000 +0300 @@ -594,23 +594,17 @@ struct devfreq *devfreq_add_device(struc list_add(&devfreq->node, &devfreq_list); governor = find_devfreq_governor(devfreq->governor_name); - if (IS_ERR(governor)) { - dev_err(dev, "%s: Unable to find governor for the device\n", - __func__); - err = PTR_ERR(governor); - goto err_init; - } - - devfreq->governor = governor; - err = devfreq->governor->event_handler(devfreq, DEVFREQ_GOV_START, - NULL); + if (!IS_ERR(governor)) + devfreq->governor = governor; + if (devfreq->governor) + err = devfreq->governor->event_handler(devfreq, + DEVFREQ_GOV_START, NULL); + mutex_unlock(&devfreq_list_lock); if (err) { dev_err(dev, "%s: Unable to start governor for the device\n", __func__); goto err_init; } - mutex_unlock(&devfreq_list_lock); - return devfreq; err_init: