Re: [PATCH] USB: atm: speedtch: do not use assignment in if condition

From: kernel test robot
Date: Sat Oct 05 2024 - 05:51:36 EST


Hi Manuel,

kernel test robot noticed the following build errors:

[auto build test ERROR on usb/usb-testing]
[also build test ERROR on usb/usb-next usb/usb-linus linus/master v6.12-rc1 next-20241004]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Manuel-Quintero-F/USB-atm-speedtch-do-not-use-assignment-in-if-condition/20241004-113643
base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git usb-testing
patch link: https://lore.kernel.org/r/20241004030512.2036-1-sakunix%40yahoo.com
patch subject: [PATCH] USB: atm: speedtch: do not use assignment in if condition
config: alpha-allyesconfig (https://download.01.org/0day-ci/archive/20241005/202410051738.GFfOxDuk-lkp@xxxxxxxxx/config)
compiler: alpha-linux-gcc (GCC) 13.3.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20241005/202410051738.GFfOxDuk-lkp@xxxxxxxxx/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202410051738.GFfOxDuk-lkp@xxxxxxxxx/

All error/warnings (new ones prefixed by >>):

drivers/usb/atm/speedtch.c: In function 'speedtch_upload_firmware':
>> drivers/usb/atm/speedtch.c:327:85: error: expected ')' before 'if'
327 | ret = usb_set_interface(usb_dev, INTERFACE_DATA, instance->params.altsetting
| ~ ^
| )
328 |
329 | if (ret < 0) {
| ~~
>> drivers/usb/atm/speedtch.c:346:20: error: expected ';' before '}' token
346 | return ret;
| ^
| ;
347 | }
| ~
>> drivers/usb/atm/speedtch.c:317:17: error: label 'out_free' used but not defined
317 | goto out_free;
| ^~~~
>> drivers/usb/atm/speedtch.c:247:17: error: label 'out' used but not defined
247 | goto out;
| ^~~~
>> drivers/usb/atm/speedtch.c:347:1: warning: no return statement in function returning non-void [-Wreturn-type]
347 | }
| ^
drivers/usb/atm/speedtch.c: At top level:
>> drivers/usb/atm/speedtch.c:160:13: warning: 'speedtch_test_sequence' defined but not used [-Wunused-function]
160 | static void speedtch_test_sequence(struct speedtch_instance_data *instance)
| ^~~~~~~~~~~~~~~~~~~~~~
>> drivers/usb/atm/speedtch.c:144:13: warning: 'speedtch_set_swbuff' defined but not used [-Wunused-function]
144 | static void speedtch_set_swbuff(struct speedtch_instance_data *instance, int state)
| ^~~~~~~~~~~~~~~~~~~


vim +327 drivers/usb/atm/speedtch.c

143
> 144 static void speedtch_set_swbuff(struct speedtch_instance_data *instance, int state)
145 {
146 struct usbatm_data *usbatm = instance->usbatm;
147 struct usb_device *usb_dev = usbatm->usb_dev;
148 int ret;
149
150 ret = usb_control_msg(usb_dev, usb_sndctrlpipe(usb_dev, 0),
151 0x32, 0x40, state ? 0x01 : 0x00, 0x00, NULL, 0, CTRL_TIMEOUT);
152 if (ret < 0)
153 usb_warn(usbatm,
154 "%sabling SW buffering: usb_control_msg returned %d\n",
155 state ? "En" : "Dis", ret);
156 else
157 usb_dbg(usbatm, "speedtch_set_swbuff: %sbled SW buffering\n", state ? "En" : "Dis");
158 }
159
> 160 static void speedtch_test_sequence(struct speedtch_instance_data *instance)
161 {
162 struct usbatm_data *usbatm = instance->usbatm;
163 struct usb_device *usb_dev = usbatm->usb_dev;
164 unsigned char *buf = instance->scratch_buffer;
165 int ret;
166
167 /* URB 147 */
168 buf[0] = 0x1c;
169 buf[1] = 0x50;
170 ret = usb_control_msg(usb_dev, usb_sndctrlpipe(usb_dev, 0),
171 0x01, 0x40, 0x0b, 0x00, buf, 2, CTRL_TIMEOUT);
172 if (ret < 0)
173 usb_warn(usbatm, "%s failed on URB147: %d\n", __func__, ret);
174
175 /* URB 148 */
176 buf[0] = 0x32;
177 buf[1] = 0x00;
178 ret = usb_control_msg(usb_dev, usb_sndctrlpipe(usb_dev, 0),
179 0x01, 0x40, 0x02, 0x00, buf, 2, CTRL_TIMEOUT);
180 if (ret < 0)
181 usb_warn(usbatm, "%s failed on URB148: %d\n", __func__, ret);
182
183 /* URB 149 */
184 buf[0] = 0x01;
185 buf[1] = 0x00;
186 buf[2] = 0x01;
187 ret = usb_control_msg(usb_dev, usb_sndctrlpipe(usb_dev, 0),
188 0x01, 0x40, 0x03, 0x00, buf, 3, CTRL_TIMEOUT);
189 if (ret < 0)
190 usb_warn(usbatm, "%s failed on URB149: %d\n", __func__, ret);
191
192 /* URB 150 */
193 buf[0] = 0x01;
194 buf[1] = 0x00;
195 buf[2] = 0x01;
196 ret = usb_control_msg(usb_dev, usb_sndctrlpipe(usb_dev, 0),
197 0x01, 0x40, 0x04, 0x00, buf, 3, CTRL_TIMEOUT);
198 if (ret < 0)
199 usb_warn(usbatm, "%s failed on URB150: %d\n", __func__, ret);
200
201 /* Extra initialisation in recent drivers - gives higher speeds */
202
203 /* URBext1 */
204 buf[0] = instance->params.ModemMode;
205 ret = usb_control_msg(usb_dev, usb_sndctrlpipe(usb_dev, 0),
206 0x01, 0x40, 0x11, 0x00, buf, 1, CTRL_TIMEOUT);
207 if (ret < 0)
208 usb_warn(usbatm, "%s failed on URBext1: %d\n", __func__, ret);
209
210 /* URBext2 */
211 /* This seems to be the one which actually triggers the higher sync
212 rate -- it does require the new firmware too, although it works OK
213 with older firmware */
214 ret = usb_control_msg(usb_dev, usb_sndctrlpipe(usb_dev, 0),
215 0x01, 0x40, 0x14, 0x00,
216 instance->params.ModemOption,
217 MODEM_OPTION_LENGTH, CTRL_TIMEOUT);
218 if (ret < 0)
219 usb_warn(usbatm, "%s failed on URBext2: %d\n", __func__, ret);
220
221 /* URBext3 */
222 buf[0] = instance->params.BMaxDSL & 0xff;
223 buf[1] = instance->params.BMaxDSL >> 8;
224 ret = usb_control_msg(usb_dev, usb_sndctrlpipe(usb_dev, 0),
225 0x01, 0x40, 0x12, 0x00, buf, 2, CTRL_TIMEOUT);
226 if (ret < 0)
227 usb_warn(usbatm, "%s failed on URBext3: %d\n", __func__, ret);
228 }
229
230 static int speedtch_upload_firmware(struct speedtch_instance_data *instance,
231 const struct firmware *fw1,
232 const struct firmware *fw2)
233 {
234 unsigned char *buffer;
235 struct usbatm_data *usbatm = instance->usbatm;
236 struct usb_device *usb_dev = usbatm->usb_dev;
237 int actual_length;
238 int ret = 0;
239 int offset;
240
241 usb_dbg(usbatm, "%s entered\n", __func__);
242
243 buffer = (unsigned char *)__get_free_page(GFP_KERNEL);
244 if (!buffer) {
245 ret = -ENOMEM;
246 usb_dbg(usbatm, "%s: no memory for buffer!\n", __func__);
> 247 goto out;
248 }
249
250 if (!usb_ifnum_to_if(usb_dev, 2)) {
251 ret = -ENODEV;
252 usb_dbg(usbatm, "%s: interface not found!\n", __func__);
253 goto out_free;
254 }
255
256 /* URB 7 */
257 if (dl_512_first) { /* some modems need a read before writing the firmware */
258 ret = usb_bulk_msg(usb_dev, usb_rcvbulkpipe(usb_dev, ENDPOINT_FIRMWARE),
259 buffer, 0x200, &actual_length, 2000);
260
261 if (ret < 0 && ret != -ETIMEDOUT)
262 usb_warn(usbatm, "%s: read BLOCK0 from modem failed (%d)!\n", __func__, ret);
263 else
264 usb_dbg(usbatm, "%s: BLOCK0 downloaded (%d bytes)\n", __func__, ret);
265 }
266
267 /* URB 8 : both leds are static green */
268 for (offset = 0; offset < fw1->size; offset += PAGE_SIZE) {
269 int thislen = min_t(int, PAGE_SIZE, fw1->size - offset);
270 memcpy(buffer, fw1->data + offset, thislen);
271
272 ret = usb_bulk_msg(usb_dev, usb_sndbulkpipe(usb_dev, ENDPOINT_FIRMWARE),
273 buffer, thislen, &actual_length, DATA_TIMEOUT);
274
275 if (ret < 0) {
276 usb_err(usbatm, "%s: write BLOCK1 to modem failed (%d)!\n", __func__, ret);
277 goto out_free;
278 }
279 usb_dbg(usbatm, "%s: BLOCK1 uploaded (%zu bytes)\n", __func__, fw1->size);
280 }
281
282 /* USB led blinking green, ADSL led off */
283
284 /* URB 11 */
285 ret = usb_bulk_msg(usb_dev, usb_rcvbulkpipe(usb_dev, ENDPOINT_FIRMWARE),
286 buffer, 0x200, &actual_length, DATA_TIMEOUT);
287
288 if (ret < 0) {
289 usb_err(usbatm, "%s: read BLOCK2 from modem failed (%d)!\n", __func__, ret);
290 goto out_free;
291 }
292 usb_dbg(usbatm, "%s: BLOCK2 downloaded (%d bytes)\n", __func__, actual_length);
293
294 /* URBs 12 to 139 - USB led blinking green, ADSL led off */
295 for (offset = 0; offset < fw2->size; offset += PAGE_SIZE) {
296 int thislen = min_t(int, PAGE_SIZE, fw2->size - offset);
297 memcpy(buffer, fw2->data + offset, thislen);
298
299 ret = usb_bulk_msg(usb_dev, usb_sndbulkpipe(usb_dev, ENDPOINT_FIRMWARE),
300 buffer, thislen, &actual_length, DATA_TIMEOUT);
301
302 if (ret < 0) {
303 usb_err(usbatm, "%s: write BLOCK3 to modem failed (%d)!\n", __func__, ret);
304 goto out_free;
305 }
306 }
307 usb_dbg(usbatm, "%s: BLOCK3 uploaded (%zu bytes)\n", __func__, fw2->size);
308
309 /* USB led static green, ADSL led static red */
310
311 /* URB 142 */
312 ret = usb_bulk_msg(usb_dev, usb_rcvbulkpipe(usb_dev, ENDPOINT_FIRMWARE),
313 buffer, 0x200, &actual_length, DATA_TIMEOUT);
314
315 if (ret < 0) {
316 usb_err(usbatm, "%s: read BLOCK4 from modem failed (%d)!\n", __func__, ret);
> 317 goto out_free;
318 }
319
320 /* success */
321 usb_dbg(usbatm, "%s: BLOCK4 downloaded (%d bytes)\n", __func__, actual_length);
322
323 /* Delay to allow firmware to start up. We can do this here
324 because we're in our own kernel thread anyway. */
325 msleep_interruptible(1000);
326
> 327 ret = usb_set_interface(usb_dev, INTERFACE_DATA, instance->params.altsetting
328
329 if (ret < 0) {
330 usb_err(usbatm, "%s: setting interface to %d failed (%d)!\n", __func__, instance->params.altsetting, ret);
331 goto out_free;
332 }
333
334 /* Enable software buffering, if requested */
335 if (sw_buffering)
336 speedtch_set_swbuff(instance, 1);
337
338 /* Magic spell; don't ask us what this does */
339 speedtch_test_sequence(instance);
340
341 ret = 0;
342
343 out_free:
344 free_page((unsigned long)buffer);
345 out:
> 346 return ret;
> 347 }
348

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki