RE: [PATCH v1 2/2] Bluetooth: btintel_pcie: Fix alive context state handling

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

 



Hi Luiz,

>Subject: Re: [PATCH v1 2/2] Bluetooth: btintel_pcie: Fix alive context state
>handling
>
>Hi Kiran,
>
>On Sun, Jul 6, 2025 at 11:30 PM Kiran K <kiran.k@xxxxxxxxx> wrote:
>>
>> Firmware raises alive interrpt on sending 0xfc01 command. Alive
>> context maintained in driver needs to be updated before sending 0xfc01
>> (Intel
>> Reset) or 0x03c0 (HCI Reset) to avoid the potential race condition
>> where the context is also updated in threaded irq.
>
>This should be a little more specific, like explaining what is alive interrupt
>supposed to mean or if we cannot do any communication wheel these are
>pending?
Ack.  I will update the commit message.

>
>> Signed-off-by: Kiran K <kiran.k@xxxxxxxxx>
>> Signed-off-by: Sai Teja Aluvala <aluvala.sai.teja@xxxxxxxxx>
>> Fixes: 05c200c8f029 ("Bluetooth: btintel_pcie: Add handshake between
>> driver and firmware")
>> ---
>>  drivers/bluetooth/btintel_pcie.c | 25 ++++++++++++++-----------
>>  1 file changed, 14 insertions(+), 11 deletions(-)
>>
>> diff --git a/drivers/bluetooth/btintel_pcie.c
>> b/drivers/bluetooth/btintel_pcie.c
>> index f893ad6fc87a..d29103b102e4 100644
>> --- a/drivers/bluetooth/btintel_pcie.c
>> +++ b/drivers/bluetooth/btintel_pcie.c
>> @@ -1988,10 +1988,6 @@ static int btintel_pcie_send_frame(struct hci_dev
>*hdev,
>>                                 btintel_pcie_inject_cmd_complete(hdev, opcode);
>>                 }
>>
>> -               /* Firmware raises alive interrupt on HCI_OP_RESET or 0xfc01*/
>> -               if (opcode == HCI_OP_RESET || opcode == 0xfc01)
>> -                       data->gp0_received = false;
>> -
>>                 hdev->stat.cmd_tx++;
>>                 break;
>>         case HCI_ACLDATA_PKT:
>> @@ -2012,6 +2008,20 @@ static int btintel_pcie_send_frame(struct hci_dev
>*hdev,
>>         memcpy(skb_push(skb, BTINTEL_PCIE_HCI_TYPE_LEN), &type,
>>                BTINTEL_PCIE_HCI_TYPE_LEN);
>>
>> +       if (type == BTINTEL_PCIE_HCI_CMD_PKT) {
>> +               /* Firmware raises alive interrupt on HCI_OP_RESET or 0xfc01*/
>> +               if (opcode == HCI_OP_RESET || opcode == 0xfc01) {
>> +                       data->gp0_received = false;
>
>This type of flags should really be made into atomic flags so they can be
>checked atomically, anyway this shouldn't block these fixes but something I
>very much look forward to be changed.
Ack.
>
>> +                       old_ctxt = data->alive_intr_ctxt;
>> +                       data->alive_intr_ctxt =
>> +                               (opcode == 0xfc01 ? BTINTEL_PCIE_INTEL_HCI_RESET1 :
>> +                                       BTINTEL_PCIE_HCI_RESET);
>> +                       bt_dev_dbg(data->hdev, "sending cmd: 0x%4.4x alive context
>changed: %s  ->  %s",
>> +                                  opcode, btintel_pcie_alivectxt_state2str(old_ctxt),
>> +                                  btintel_pcie_alivectxt_state2str(data->alive_intr_ctxt));
>> +               }
>> +       }
>> +
>>         ret = btintel_pcie_send_sync(data, skb);
>>         if (ret) {
>>                 hdev->stat.err_tx++;
>> @@ -2021,13 +2031,6 @@ static int btintel_pcie_send_frame(struct
>> hci_dev *hdev,
>>
>>         if (type == BTINTEL_PCIE_HCI_CMD_PKT &&
>>             (opcode == HCI_OP_RESET || opcode == 0xfc01)) {
>> -               old_ctxt = data->alive_intr_ctxt;
>> -               data->alive_intr_ctxt =
>> -                       (opcode == 0xfc01 ? BTINTEL_PCIE_INTEL_HCI_RESET1 :
>> -                               BTINTEL_PCIE_HCI_RESET);
>> -               bt_dev_dbg(data->hdev, "sent cmd: 0x%4.4x alive context changed:
>%s  ->  %s",
>> -                          opcode, btintel_pcie_alivectxt_state2str(old_ctxt),
>> -                          btintel_pcie_alivectxt_state2str(data->alive_intr_ctxt));
>>                 ret = wait_event_timeout(data->gp0_wait_q,
>>                                          data->gp0_received,
>>
>> msecs_to_jiffies(BTINTEL_DEFAULT_INTR_TIMEOUT_MS));
>> --
>> 2.43.0
>>
>>
>
>
>--
>Luiz Augusto von Dentz

Thanks,
Kiran





[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