Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
iccsense: fix memory leak
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
- Loading branch information
Showing
with
9 additions
and
7 deletions.
-
+9
−7
drm/nouveau/nvkm/subdev/iccsense/base.c
|
@@ -276,6 +276,8 @@ nvkm_iccsense_oneinit(struct nvkm_subdev *subdev) |
|
|
struct pwr_rail_t *r = &stbl.rail[i]; |
|
|
struct nvkm_iccsense_rail *rail; |
|
|
struct nvkm_iccsense_sensor *sensor; |
|
|
int (*read)(struct nvkm_iccsense *, |
|
|
struct nvkm_iccsense_rail *); |
|
|
|
|
|
if (!r->mode || r->resistor_mohm == 0) |
|
|
continue; |
|
@@ -284,31 +286,31 @@ nvkm_iccsense_oneinit(struct nvkm_subdev *subdev) |
|
|
if (!sensor) |
|
|
continue; |
|
|
|
|
|
rail = kmalloc(sizeof(*rail), GFP_KERNEL); |
|
|
if (!rail) |
|
|
return -ENOMEM; |
|
|
|
|
|
switch (sensor->type) { |
|
|
case NVBIOS_EXTDEV_INA209: |
|
|
if (r->rail != 0) |
|
|
continue; |
|
|
rail->read = nvkm_iccsense_ina209_read; |
|
|
read = nvkm_iccsense_ina209_read; |
|
|
break; |
|
|
case NVBIOS_EXTDEV_INA219: |
|
|
if (r->rail != 0) |
|
|
continue; |
|
|
rail->read = nvkm_iccsense_ina219_read; |
|
|
read = nvkm_iccsense_ina219_read; |
|
|
break; |
|
|
case NVBIOS_EXTDEV_INA3221: |
|
|
if (r->rail >= 3) |
|
|
continue; |
|
|
rail->read = nvkm_iccsense_ina3221_read; |
|
|
read = nvkm_iccsense_ina3221_read; |
|
|
break; |
|
|
default: |
|
|
continue; |
|
|
} |
|
|
|
|
|
rail = kmalloc(sizeof(*rail), GFP_KERNEL); |
|
|
if (!rail) |
|
|
return -ENOMEM; |
|
|
sensor->rail_mask |= 1 << r->rail; |
|
|
rail->read = read; |
|
|
rail->sensor = sensor; |
|
|
rail->idx = r->rail; |
|
|
rail->mohm = r->resistor_mohm; |
|
|