* [bug report] SFH:Transport Driver to add support of AMD Sensor Fusion Hub (SFH)
@ 2020-11-02 14:01 Dan Carpenter
0 siblings, 0 replies; only message in thread
From: Dan Carpenter @ 2020-11-02 14:01 UTC (permalink / raw)
To: sandeep.singh; +Cc: linux-input
Hello Sandeep Singh,
The patch 4b2c53d93a4b: "SFH:Transport Driver to add support of AMD
Sensor Fusion Hub (SFH)" from Oct 10, 2020, leads to the following
static checker warning:
drivers/hid/amd-sfh-hid/amd_sfh_client.c:222 amd_sfh_hid_client_init()
warn: '&cl_data->work.timer' not released on lines: 202,222.
drivers/hid/amd-sfh-hid/amd_sfh_client.c
134 int amd_sfh_hid_client_init(struct amd_mp2_dev *privdata)
135 {
136 struct amdtp_cl_data *cl_data = privdata->cl_data;
137 struct amd_mp2_sensor_info info;
138 struct device *dev;
139 u32 feature_report_size;
140 u32 input_report_size;
141 u8 cl_idx;
142 int rc, i;
143
144 dev = &privdata->pdev->dev;
145 cl_data = kzalloc(sizeof(*cl_data), GFP_KERNEL);
146 if (!cl_data)
147 return -ENOMEM;
148
149 cl_data->num_hid_devices = amd_mp2_get_sensor_num(privdata, &cl_data->sensor_idx[0]);
150
151 INIT_DELAYED_WORK(&cl_data->work, amd_sfh_work);
152 INIT_DELAYED_WORK(&cl_data->work_buffer, amd_sfh_work_buffer);
I think the INIT_DELAYED_WORK() allocates a bunch of debug stuff but I'm
not 100% positive... Maybe there is nothing to free. Does anyone know?
153 INIT_LIST_HEAD(&req_list.list);
154
155 for (i = 0; i < cl_data->num_hid_devices; i++) {
156 cl_data->sensor_virt_addr[i] = dma_alloc_coherent(dev, sizeof(int) * 8,
157 &cl_data->sensor_phys_addr[i],
158 GFP_KERNEL);
159 cl_data->sensor_sts[i] = 0;
160 cl_data->sensor_requested_cnt[i] = 0;
161 cl_data->cur_hid_dev = i;
162 cl_idx = cl_data->sensor_idx[i];
163 cl_data->report_descr_sz[i] = get_descr_sz(cl_idx, descr_size);
164 if (!cl_data->report_descr_sz[i]) {
165 rc = -EINVAL;
166 goto cleanup;
167 }
168 feature_report_size = get_descr_sz(cl_idx, feature_size);
169 if (!feature_report_size) {
170 rc = -EINVAL;
171 goto cleanup;
172 }
173 input_report_size = get_descr_sz(cl_idx, input_size);
174 if (!input_report_size) {
175 rc = -EINVAL;
176 goto cleanup;
177 }
178 cl_data->feature_report[i] = kzalloc(feature_report_size, GFP_KERNEL);
179 if (!cl_data->feature_report[i]) {
180 rc = -ENOMEM;
181 goto cleanup;
182 }
183 cl_data->input_report[i] = kzalloc(input_report_size, GFP_KERNEL);
184 if (!cl_data->input_report[i]) {
185 rc = -ENOMEM;
186 goto cleanup;
187 }
188 info.period = msecs_to_jiffies(AMD_SFH_IDLE_LOOP);
189 info.sensor_idx = cl_idx;
190 info.phys_address = cl_data->sensor_phys_addr[i];
191
192 cl_data->report_descr[i] = kzalloc(cl_data->report_descr_sz[i], GFP_KERNEL);
193 if (!cl_data->report_descr[i]) {
194 rc = -ENOMEM;
195 goto cleanup;
196 }
197 rc = get_report_descriptor(cl_idx, cl_data->report_descr[i]);
198 if (rc)
199 return rc;
^^^^^^^^^^
This should "goto cleanup"
200 rc = amdtp_hid_probe(cl_data->cur_hid_dev, cl_data);
201 if (rc)
202 return rc;
^^^^^^^^^^
Same
203 amd_start_sensor(privdata, info);
204 cl_data->sensor_sts[i] = 1;
205 }
206 privdata->cl_data = cl_data;
207 schedule_delayed_work(&cl_data->work_buffer, msecs_to_jiffies(AMD_SFH_IDLE_LOOP));
208 return 0;
209
210 cleanup:
211 for (i = 0; i < cl_data->num_hid_devices; i++) {
212 if (cl_data->sensor_virt_addr[i]) {
213 dma_free_coherent(&privdata->pdev->dev, 8 * sizeof(int),
214 cl_data->sensor_virt_addr[i],
215 cl_data->sensor_phys_addr[i]);
216 }
217 kfree(cl_data->feature_report[i]);
218 kfree(cl_data->input_report[i]);
219 kfree(cl_data->report_descr[i]);
220 }
221 kfree(cl_data);
222 return rc;
223 }
regards,
dan carpenter
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2020-11-02 14:03 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-11-02 14:01 [bug report] SFH:Transport Driver to add support of AMD Sensor Fusion Hub (SFH) Dan Carpenter
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.