diff --git a/drivers/soc/qcom/rimps_memlat.c b/drivers/soc/qcom/rimps_memlat.c index e38e28db3c57..c83a16f5ea32 100644 --- a/drivers/soc/qcom/rimps_memlat.c +++ b/drivers/soc/qcom/rimps_memlat.c @@ -207,7 +207,12 @@ static ssize_t store_##name(struct kobject *kobj, \ unsigned int val; \ struct memlat_mon *mon = to_memlat_mon(kobj); \ struct memlat_cpu_grp *cpu_grp = mon->cpu_grp; \ - struct scmi_memlat_vendor_ops *ops = cpu_grp->handle->memlat_ops; \ + struct scmi_memlat_vendor_ops *ops = NULL; \ + if (cpu_grp && cpu_grp->handle && \ + cpu_grp->handle->memlat_ops) \ + ops = cpu_grp->handle->memlat_ops; \ + else \ + return -ENODEV; \ ret = kstrtouint(buf, 10, &val); \ if (ret < 0) \ return ret; \ @@ -248,11 +253,14 @@ static ssize_t store_min_freq(struct kobject *kobj, unsigned int val; struct memlat_mon *mon = to_memlat_mon(kobj); struct memlat_cpu_grp *cpu_grp = mon->cpu_grp; - struct scmi_memlat_vendor_ops *ops = cpu_grp->handle->memlat_ops; + struct scmi_memlat_vendor_ops *ops = NULL; unsigned int min_freq; unsigned int max_freq; - if (!ops) + if (cpu_grp && cpu_grp->handle && + cpu_grp->handle->memlat_ops) + ops = cpu_grp->handle->memlat_ops; + else return -ENODEV; if (mon->mon_type == L3_MEMLAT) { @@ -290,11 +298,14 @@ static ssize_t store_max_freq(struct kobject *kobj, unsigned int val; struct memlat_mon *mon = to_memlat_mon(kobj); struct memlat_cpu_grp *cpu_grp = mon->cpu_grp; - struct scmi_memlat_vendor_ops *ops = cpu_grp->handle->memlat_ops; + struct scmi_memlat_vendor_ops *ops = NULL; unsigned int min_freq; unsigned int max_freq; - if (!ops) + if (cpu_grp && cpu_grp->handle && + cpu_grp->handle->memlat_ops) + ops = cpu_grp->handle->memlat_ops; + else return -ENODEV; if (mon->mon_type == L3_MEMLAT) {