* [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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).