Re: [PATCH] Bluetooth: btrsi: fix bt tx timeout issue

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Aug 29, 2018 at 2:24 PM Siva Rebbagondla <siva8118@xxxxxxxxx> wrote:
>
> From: Sanjay Kumar Konduri <sanjay.konduri@xxxxxxxxxxxxxxxxxx>
>
> observed sometimes data is coming with unaligned address from kernel
> BT stack. If unaligned address is passed, some data in payload is
> stripped when packet is loading to firmware and this results, BT
> connection timeout is happening.
>
> sh# hciconfig hci0 up
> Can't init device hci0: hci0 command 0x0c03 tx timeout
>
> Fixed this by moving the data to aligned address.
>
> Signed-off-by: Sanjay Kumar Konduri <sanjay.konduri@xxxxxxxxxxxxxxxxxx>
> Signed-off-by: Siva Rebbagondla <siva.rebbagondla@xxxxxxxxxxxxxxxxxx>
> ---
>  drivers/bluetooth/btrsi.c | 13 ++++++++++++-
>  1 file changed, 12 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/bluetooth/btrsi.c b/drivers/bluetooth/btrsi.c
> index 60d1419..3951f7b 100644
> --- a/drivers/bluetooth/btrsi.c
> +++ b/drivers/bluetooth/btrsi.c
> @@ -21,8 +21,9 @@
>  #include <net/rsi_91x.h>
>  #include <net/genetlink.h>
>
> -#define RSI_HEADROOM_FOR_BT_HAL        16
> +#define RSI_DMA_ALIGN  8
>  #define RSI_FRAME_DESC_SIZE    16
> +#define RSI_HEADROOM_FOR_BT_HAL        (RSI_FRAME_DESC_SIZE + RSI_DMA_ALIGN)
>
>  struct rsi_hci_adapter {
>         void *priv;
> @@ -70,6 +71,16 @@ static int rsi_hci_send_pkt(struct hci_dev *hdev, struct sk_buff *skb)
>                 bt_cb(new_skb)->pkt_type = hci_skb_pkt_type(skb);
>                 kfree_skb(skb);
>                 skb = new_skb;
> +               if (!IS_ALIGNED((unsigned long)skb->data, RSI_DMA_ALIGN)) {
> +                       u8 *skb_data = skb->data;
> +                       int skb_len = skb->len;
> +
> +                       skb_push(skb, RSI_DMA_ALIGN);
> +                       skb_pull(skb, PTR_ALIGN(skb->data,
> +                                               RSI_DMA_ALIGN) - skb->data);
> +                       memmove(skb->data, skb_data, skb_len);
> +                       skb_trim(skb, skb_len);
> +               }
>         }
>
>         return h_adapter->proto_ops->coex_send_pkt(h_adapter->priv, skb,
> --
> 2.7.4
>
Kindly ignore this.
Instead of adding linux-kernel@xxxxxxxxxxxxxxx, I have added
linux-wireless@xxxxxxxxxxxxxxx, which results, this
patch is showing in linux-wireless patch work.
I will resend this patch by removing, "linux-wireless" from mailing list.

Thanks,
Siva Rebbagondla.



[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux