Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

HID: logitech-dj: Remove duplicate error logging

logi_dj_recv_query_paired_devices() and logi_dj_recv_switch_to_dj_mode()
both have 2 callers which all log an error if the function fails. Move
the error logging to inside these 2 functions to remove the duplicated
error logging in the callers.

While at it also move the logi_dj_recv_send_report() call error handling
in logi_dj_recv_switch_to_dj_mode() to directly after the call. That call
only fails if the report cannot be found and in that case it does nothing,
so the msleep() is not necessary on failures.

Fixes: 6f20d3261265 ("HID: logitech-dj: Fix error handling in logi_dj_recv_switch_to_dj_mode()")
Cc: stable@vger.kernel.org
Signed-off-by: Hans de Goede <johannes.goede@oss.qualcomm.com>
Signed-off-by: Jiri Kosina <jkosina@suse.com>

authored by

Hans de Goede and committed by
Jiri Kosina
ca389a55 a78eb69d

+23 -33
+23 -33
drivers/hid/hid-logitech-dj.c
··· 805 805 struct dj_workitem workitem; 806 806 unsigned long flags; 807 807 int count; 808 - int retval; 809 808 810 809 dbg_hid("%s\n", __func__); 811 810 ··· 841 842 logi_dj_recv_destroy_djhid_device(djrcv_dev, &workitem); 842 843 break; 843 844 case WORKITEM_TYPE_UNKNOWN: 844 - retval = logi_dj_recv_query_paired_devices(djrcv_dev); 845 - if (retval) { 846 - hid_err(djrcv_dev->hidpp, "%s: logi_dj_recv_query_paired_devices error: %d\n", 847 - __func__, retval); 848 - } 845 + logi_dj_recv_query_paired_devices(djrcv_dev); 849 846 break; 850 847 case WORKITEM_TYPE_EMPTY: 851 848 dbg_hid("%s: device list is empty\n", __func__); ··· 1234 1239 1235 1240 djrcv_dev->last_query = jiffies; 1236 1241 1237 - if (djrcv_dev->type != recvr_type_dj) 1238 - return logi_dj_recv_query_hidpp_devices(djrcv_dev); 1242 + if (djrcv_dev->type != recvr_type_dj) { 1243 + retval = logi_dj_recv_query_hidpp_devices(djrcv_dev); 1244 + goto out; 1245 + } 1239 1246 1240 1247 dj_report = kzalloc(sizeof(struct dj_report), GFP_KERNEL); 1241 1248 if (!dj_report) ··· 1247 1250 dj_report->report_type = REPORT_TYPE_CMD_GET_PAIRED_DEVICES; 1248 1251 retval = logi_dj_recv_send_report(djrcv_dev, dj_report); 1249 1252 kfree(dj_report); 1253 + out: 1254 + if (retval < 0) 1255 + hid_err(djrcv_dev->hidpp, "%s error:%d\n", __func__, retval); 1256 + 1250 1257 return retval; 1251 1258 } 1252 1259 ··· 1276 1275 (u8)timeout; 1277 1276 1278 1277 retval = logi_dj_recv_send_report(djrcv_dev, dj_report); 1278 + if (retval) 1279 + goto out; 1279 1280 1280 1281 /* 1281 1282 * Ugly sleep to work around a USB 3.0 bug when the receiver is ··· 1286 1283 * 50 msec should gives enough time to the receiver to be ready. 1287 1284 */ 1288 1285 msleep(50); 1289 - 1290 - if (retval) { 1291 - kfree(dj_report); 1292 - return retval; 1293 - } 1294 1286 } 1295 1287 1296 1288 /* ··· 1311 1313 HIDPP_REPORT_SHORT_LENGTH, HID_OUTPUT_REPORT, 1312 1314 HID_REQ_SET_REPORT); 1313 1315 1316 + out: 1314 1317 kfree(dj_report); 1318 + 1319 + if (retval < 0) 1320 + hid_err(hdev, "%s error:%d\n", __func__, retval); 1321 + 1315 1322 return retval; 1316 1323 } 1317 1324 ··· 1838 1835 1839 1836 if (has_hidpp) { 1840 1837 retval = logi_dj_recv_switch_to_dj_mode(djrcv_dev, 0); 1841 - if (retval < 0) { 1842 - hid_err(hdev, "%s: logi_dj_recv_switch_to_dj_mode returned error:%d\n", 1843 - __func__, retval); 1838 + if (retval < 0) 1844 1839 goto switch_to_dj_mode_fail; 1845 - } 1846 1840 } 1847 1841 1848 1842 /* This is enabling the polling urb on the IN endpoint */ ··· 1857 1857 spin_lock_irqsave(&djrcv_dev->lock, flags); 1858 1858 djrcv_dev->ready = true; 1859 1859 spin_unlock_irqrestore(&djrcv_dev->lock, flags); 1860 - retval = logi_dj_recv_query_paired_devices(djrcv_dev); 1861 - if (retval < 0) { 1862 - hid_err(hdev, "%s: logi_dj_recv_query_paired_devices error:%d\n", 1863 - __func__, retval); 1864 - /* 1865 - * This can happen with a KVM, let the probe succeed, 1866 - * logi_dj_recv_queue_unknown_work will retry later. 1867 - */ 1868 - } 1860 + /* 1861 + * This can fail with a KVM. Ignore errors to let the probe 1862 + * succeed, logi_dj_recv_queue_unknown_work will retry later. 1863 + */ 1864 + logi_dj_recv_query_paired_devices(djrcv_dev); 1869 1865 } 1870 1866 1871 1867 return 0; ··· 1878 1882 #ifdef CONFIG_PM 1879 1883 static int logi_dj_reset_resume(struct hid_device *hdev) 1880 1884 { 1881 - int retval; 1882 1885 struct dj_receiver_dev *djrcv_dev = hid_get_drvdata(hdev); 1883 1886 1884 1887 if (!djrcv_dev || djrcv_dev->hidpp != hdev) 1885 1888 return 0; 1886 1889 1887 - retval = logi_dj_recv_switch_to_dj_mode(djrcv_dev, 0); 1888 - if (retval < 0) { 1889 - hid_err(hdev, "%s: logi_dj_recv_switch_to_dj_mode returned error:%d\n", 1890 - __func__, retval); 1891 - } 1892 - 1890 + logi_dj_recv_switch_to_dj_mode(djrcv_dev, 0); 1893 1891 return 0; 1894 1892 } 1895 1893 #endif