• Francesco Dolcini's avatar
    Bluetooth: btnxpuart: fix recv_buf() return value · 94d05394
    Francesco Dolcini authored
    Serdev recv_buf() callback is supposed to return the amount of bytes
    consumed, therefore an int in between 0 and count.
    
    Do not return a negative number in case of issue, just print an error
    and return count. Before this change, in case of error, the returned
    negative number was internally converted to 0 in ttyport_receive_buf,
    now when the receive buffer is corrupted we return the size of the whole
    received data (`count`). This should allow for better recovery in case
    receiver/transmitter get out of sync if some data is lost.
    
    This fixes a WARN in ttyport_receive_buf().
    
      Bluetooth: hci0: Frame reassembly failed (-84)
      ------------[ cut here ]------------
      serial serial0: receive_buf returns -84 (count = 6)
      WARNING: CPU: 0 PID: 37 at drivers/tty/serdev/serdev-ttyport.c:37 ttyport_receive_buf+0xd8/0xf8
      Modules linked in: mwifiex_sdio(+) ...
      CPU: 0 PID: 37 Comm: kworker/u4:2 Not tainted 6.7.0-rc2-00147-gf1a09972 #1
      Hardware name: Toradex Verdin AM62 WB on Verdin Development Board (DT)
      Workqueue: events_unbound flush_to_ldisc
      pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
      pc : ttyport_receive_buf+0xd8/0xf8
      lr : ttyport_receive_buf+0xd8/0xf8
    ...
      Call trace:
       ttyport_receive_buf+0xd8/0xf8
       flush_to_ldisc+0xbc/0x1a4
       process_scheduled_works+0x16c/0x28c
    
    Closes: https://lore.kernel.org/all/ZWEIhcUXfutb5SY6@francesco-nb.int.toradex.com/
    Fixes: 689ca16e ("Bluetooth: NXP: Add protocol support for NXP Bluetooth chipsets")
    Signed-off-by: default avatarFrancesco Dolcini <francesco.dolcini@toradex.com>
    Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
    94d05394
btnxpuart.c 37.7 KB