mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/
synced 2026-11-13 07:31:07 +00:00
When a DBC is released, the device sends a QAIC_TRANS_DEACTIVATE_FROM_DEV
transaction to the host over the QAIC_CONTROL MHI channel. QAIC handles
this by calling decode_deactivate() to release the resources allocated for
that DBC. Since that handling is done in the qaic_manage_ioctl() context,
if the user goes away before receiving and handling the deactivation, the
host will be out-of-sync with the DBCs available for use, and the DBC
resources will not be freed unless the device is removed. If another user
loads and requests to activate a network, then the device assigns the same
DBC to that network, QAIC will "indefinitely" wait for dbc->in_use = false,
leading the user process to hang.
As a solution to this, handle QAIC_TRANS_DEACTIVATE_FROM_DEV transactions
that are received after the user has gone away.
Fixes:
|
History
|
|
|---|---|---|
| .. | ||
| Kconfig | ||
| Makefile | ||
| mhi_controller.c | ||
| mhi_controller.h | ||
| qaic.h | ||
| qaic_control.c | ||
| qaic_data.c | ||
| qaic_debugfs.c | ||
| qaic_debugfs.h | ||
| qaic_drv.c | ||
| qaic_ras.c | ||
| qaic_ras.h | ||
| qaic_ssr.c | ||
| qaic_ssr.h | ||
| qaic_sysfs.c | ||
| qaic_timesync.c | ||
| qaic_timesync.h | ||
| sahara.c | ||
| sahara.h | ||