Re: [PATCH] Bluetooth: virtio_bt: fix device removal
From: "Michael S. Tsirkin" <mst@redhat.com>
Date: 2021-11-25 20:47:04
Also in:
linux-bluetooth, lkml
On Thu, Nov 25, 2021 at 09:02:01PM +0100, Marcel Holtmann wrote:
Hi Michael,quoted
Device removal is clearly out of virtio spec: it attempts to remove unused buffers from a VQ before invoking device reset. To fix, make open/close NOPs and do all cleanup/setup in probe/remove.so the virtbt_{open,close} as NOP is not really what a driver is suppose to be doing. These are transport enable/disable callbacks from the BT Core towards the driver. It maps to a device being enabled/disabled by something like bluetoothd for example. So if disabled, I expect that no resources/queues are in use. Maybe I misunderstand the virtio spec in that regard, but I would like to keep this fundamental concept of a Bluetooth driver. It does work with all other transports like USB, SDIO, UART etc.quoted
The cost here is a single skb wasted on an unused bt device - which seems modest.There should be no buffer used if the device is powered off. We also don’t have any USB URBs in-flight if the transport is not active.quoted
NB: with this fix in place driver still suffers from a race condition if an interrupt triggers while device is being reset. Work on a fix for that issue is in progress.In the virtbt_close() callback we should deactivate all interrupts. Regards Marcel
If you want to do that then device has to be reset on close, and fully reinitialized on open. Can you work on a patch like that? Given I don't have the device such a rework is probably more than I can undertake. -- MST _______________________________________________ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization