• Zijun Hu's avatar
    Bluetooth: qca: Fix BT enable failure again for QCA6390 after warm reboot · 88e72239
    Zijun Hu authored
    Commit 272970be ("Bluetooth: hci_qca: Fix driver shutdown on closed
    serdev") will cause below regression issue:
    
    BT can't be enabled after below steps:
    cold boot -> enable BT -> disable BT -> warm reboot -> BT enable failure
    if property enable-gpios is not configured within DT|ACPI for QCA6390.
    
    The commit is to fix a use-after-free issue within qca_serdev_shutdown()
    by adding condition to avoid the serdev is flushed or wrote after closed
    but also introduces this regression issue regarding above steps since the
    VSC is not sent to reset controller during warm reboot.
    
    Fixed by sending the VSC to reset controller within qca_serdev_shutdown()
    once BT was ever enabled, and the use-after-free issue is also fixed by
    this change since the serdev is still opened before it is flushed or wrote.
    
    Verified by the reported machine Dell XPS 13 9310 laptop over below two
    kernel commits:
    commit e00fc2700a3f ("Bluetooth: btusb: Fix triggering coredump
    implementation for QCA") of bluetooth-next tree.
    commit b23d98d4 ("Bluetooth: btusb: Fix triggering coredump
    implementation for QCA") of linus mainline tree.
    
    Fixes: 272970be ("Bluetooth: hci_qca: Fix driver shutdown on closed serdev")
    Cc: stable@vger.kernel.org
    Reported-by: default avatarWren Turkal <wt@penguintechs.org>
    Closes: https://bugzilla.kernel.org/show_bug.cgi?id=218726Signed-off-by: default avatarZijun Hu <quic_zijuhu@quicinc.com>
    Tested-by: default avatarWren Turkal <wt@penguintechs.org>
    Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
    88e72239
hci_qca.c 67.1 KB