Skip to content

Commit c56f9ec

Browse files
basuamdJiri Kosina
authored andcommitted
HID: amd_sfh: Switch to device-managed dmam_alloc_coherent()
Using the device-managed version allows to simplify clean-up in probe() error path. Additionally, this device-managed ensures proper cleanup, which helps to resolve memory errors, page faults, btrfs going read-only, and btrfs disk corruption. Fixes: 4b2c53d ("SFH:Transport Driver to add support of AMD Sensor Fusion Hub (SFH)") Tested-by: Chris Hixon <[email protected]> Tested-by: Richard <[email protected]> Tested-by: Skyler <[email protected]> Reported-by: Chris Hixon <[email protected]> Closes: https://lore.kernel.org/all/[email protected]/ Link: https://bugzilla.kernel.org/show_bug.cgi?id=219331 Signed-off-by: Basavaraj Natikar <[email protected]> Signed-off-by: Jiri Kosina <[email protected]>
1 parent 7a5ab80 commit c56f9ec

File tree

1 file changed

+3
-11
lines changed

1 file changed

+3
-11
lines changed

drivers/hid/amd-sfh-hid/amd_sfh_client.c

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -236,9 +236,9 @@ int amd_sfh_hid_client_init(struct amd_mp2_dev *privdata)
236236
cl_data->in_data = in_data;
237237

238238
for (i = 0; i < cl_data->num_hid_devices; i++) {
239-
in_data->sensor_virt_addr[i] = dma_alloc_coherent(dev, sizeof(int) * 8,
240-
&cl_data->sensor_dma_addr[i],
241-
GFP_KERNEL);
239+
in_data->sensor_virt_addr[i] = dmam_alloc_coherent(dev, sizeof(int) * 8,
240+
&cl_data->sensor_dma_addr[i],
241+
GFP_KERNEL);
242242
if (!in_data->sensor_virt_addr[i]) {
243243
rc = -ENOMEM;
244244
goto cleanup;
@@ -331,7 +331,6 @@ int amd_sfh_hid_client_init(struct amd_mp2_dev *privdata)
331331
int amd_sfh_hid_client_deinit(struct amd_mp2_dev *privdata)
332332
{
333333
struct amdtp_cl_data *cl_data = privdata->cl_data;
334-
struct amd_input_data *in_data = cl_data->in_data;
335334
int i, status;
336335

337336
for (i = 0; i < cl_data->num_hid_devices; i++) {
@@ -351,12 +350,5 @@ int amd_sfh_hid_client_deinit(struct amd_mp2_dev *privdata)
351350
cancel_delayed_work_sync(&cl_data->work_buffer);
352351
amdtp_hid_remove(cl_data);
353352

354-
for (i = 0; i < cl_data->num_hid_devices; i++) {
355-
if (in_data->sensor_virt_addr[i]) {
356-
dma_free_coherent(&privdata->pdev->dev, 8 * sizeof(int),
357-
in_data->sensor_virt_addr[i],
358-
cl_data->sensor_dma_addr[i]);
359-
}
360-
}
361353
return 0;
362354
}

0 commit comments

Comments
 (0)