Thermal: Fix oops and unlocking in thermal_sys.c
[platform/adaptation/renesas_rcar/renesas_kernel.git] / drivers / thermal / thermal_sys.c
index a69f24c..8f0f37b 100644 (file)
@@ -252,8 +252,8 @@ static void bind_cdev(struct thermal_cooling_device *cdev)
                }
 
                tzp = pos->tzp;
-               if (!tzp->tbp)
-                       return;
+               if (!tzp || !tzp->tbp)
+                       continue;
 
                for (i = 0; i < tzp->num_tbps; i++) {
                        if (tzp->tbp[i].cdev || !tzp->tbp[i].match)
@@ -289,7 +289,7 @@ static void bind_tz(struct thermal_zone_device *tz)
                goto exit;
        }
 
-       if (!tzp->tbp)
+       if (!tzp || !tzp->tbp)
                goto exit;
 
        list_for_each_entry(pos, &thermal_cdev_list, node) {
@@ -387,12 +387,13 @@ static void update_temperature(struct thermal_zone_device *tz)
        ret = tz->ops->get_temp(tz, &temp);
        if (ret) {
                pr_warn("failed to read out thermal zone %d\n", tz->id);
-               return;
+               goto exit;
        }
 
        tz->last_temperature = tz->temperature;
        tz->temperature = temp;
 
+exit:
        mutex_unlock(&tz->lock);
 }