lkml.org 
[lkml]   [2024]   [Feb]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v18 25/41] ALSA: usb-audio: Do not allow USB offload path if PCM device is in use
    Date
    Add proper checks and updates to the USB substream once receiving a USB QMI
    stream enable request. If the substream is already in use from the non
    offload path, reject the stream enable request. In addition, update the
    USB substream opened parameter when enabling the offload path, so the
    non offload path can be blocked.

    Signed-off-by: Wesley Cheng <quic_wcheng@quicinc.com>
    ---
    sound/usb/qcom/qc_audio_offload.c | 15 ++++++++++++++-
    1 file changed, 14 insertions(+), 1 deletion(-)

    diff --git a/sound/usb/qcom/qc_audio_offload.c b/sound/usb/qcom/qc_audio_offload.c
    index 3b7780cb288a..db68c6c605eb 100644
    --- a/sound/usb/qcom/qc_audio_offload.c
    +++ b/sound/usb/qcom/qc_audio_offload.c
    @@ -1460,12 +1460,17 @@ static void handle_uaudio_stream_req(struct qmi_handle *handle,
    goto response;
    }

    + mutex_lock(&chip->mutex);
    if (req_msg->enable) {
    - if (info_idx < 0 || chip->system_suspend) {
    + if (info_idx < 0 || chip->system_suspend || subs->opened) {
    ret = -EBUSY;
    + mutex_unlock(&chip->mutex);
    +
    goto response;
    }
    + subs->opened = 1;
    }
    + mutex_unlock(&chip->mutex);

    if (req_msg->service_interval_valid) {
    ret = get_data_interval_from_si(subs,
    @@ -1487,6 +1492,11 @@ static void handle_uaudio_stream_req(struct qmi_handle *handle,
    if (!ret)
    ret = prepare_qmi_response(subs, req_msg, &resp,
    info_idx);
    + if (ret < 0) {
    + mutex_lock(&chip->mutex);
    + subs->opened = 0;
    + mutex_unlock(&chip->mutex);
    + }
    } else {
    info = &uadev[pcm_card_num].info[info_idx];
    if (info->data_ep_pipe) {
    @@ -1510,6 +1520,9 @@ static void handle_uaudio_stream_req(struct qmi_handle *handle,
    }

    disable_audio_stream(subs);
    + mutex_lock(&chip->mutex);
    + subs->opened = 0;
    + mutex_unlock(&chip->mutex);
    }

    response:
    \
     
     \ /
      Last update: 2024-05-27 15:25    [W:4.089 / U:0.168 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site