Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp3378867pxa; Tue, 25 Aug 2020 21:09:01 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyTIYzA5h1gG8qxPe695bphK5h5c7MSc7jxdFrFV6SibBHYxjYn9rHeHAhK0hWhHepYEwBO X-Received: by 2002:a17:906:b34c:: with SMTP id cd12mr13157746ejb.504.1598414940952; Tue, 25 Aug 2020 21:09:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1598414940; cv=none; d=google.com; s=arc-20160816; b=QgOHxNDBUkcrZYiNXK4rYdwDvx6GaSIzMnDTV6WIQJePNDAeaGGSYkq4VS2rzKVOhm Ca7DZrXMTSc3lFch3fF73u4+EmNH8a/xz3faYo326kDo6Oupn1CfYCuWfjUIjfp4YvUE msFYP6TTcSkfKgNjwE4CNP5jil4uIu4b1DQ21OXW5MmF23PCiNAJU2meK4kEj7WjxQFH 4KESHLwtaZ4CbhUvV0xyY1KtGu9nzVLI06+5kkIUqTKOetTtc3/NtINRIGpHgkQAxZR3 pvwZqCsVoRJs7IgG5nICdmb7dkvVGK0WCgBvHM1gE2CQh4VE/+kIpY+Rctl0JbZ34OjS xoLg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=95OkwIst0BgaPvc79h1qg3LdSl4GbI3ESVZ1x5Cd4z0=; b=RCcvbB7cRaf+BNmwDaDD/W9vU6Q/ClqBb1sKzXwD9XyDoYFY01OvOkykJdiXFBYODB z9CvGe2vdqXvY8+fdxzatQa7UE9+c5zHMo0Zk3+AodjMtogOpDtlO9nBRrx3FHt1LKC5 4agpl7PcFAFmJrQAbkjOBgOzvbBtrOP18N8muGsWXJV8+jSRzmQfsqhNTtEQDDLSXiKI vxStAm3kQcRLE/E/d47RswOdcNgIO+JLmSC3JpGIfgWrItfhaTWwXqnxRq+XjTsypSyf z25EekrB1Ui6SnUOQYavdVy/EkSUxamrpAIYjQ7KaSQ6ssJ6DKzoKfU3O3VWuBWuJC9u EMnw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@vanguardiasur-com-ar.20150623.gappssmtp.com header.s=20150623 header.b=w3AavdH0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id dg23si660475edb.12.2020.08.25.21.08.38; Tue, 25 Aug 2020 21:09:00 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@vanguardiasur-com-ar.20150623.gappssmtp.com header.s=20150623 header.b=w3AavdH0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726040AbgHZEIG (ORCPT + 99 others); Wed, 26 Aug 2020 00:08:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47222 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725950AbgHZEIF (ORCPT ); Wed, 26 Aug 2020 00:08:05 -0400 Received: from mail-ej1-x644.google.com (mail-ej1-x644.google.com [IPv6:2a00:1450:4864:20::644]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8506EC061756 for ; Tue, 25 Aug 2020 21:08:05 -0700 (PDT) Received: by mail-ej1-x644.google.com with SMTP id d26so979150ejr.1 for ; Tue, 25 Aug 2020 21:08:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vanguardiasur-com-ar.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=95OkwIst0BgaPvc79h1qg3LdSl4GbI3ESVZ1x5Cd4z0=; b=w3AavdH0CyRLn2mOVhiA8ofnTFU2tiv0idnEtoYtPz2RJ4kF6Y16v7krJTN6PSVAFI YR1pnuK23K1JhzKFqWreGiH4MtMtarkOxlWLpDr3vMdndO+OG5/lqVb3r5urLv3+46nn YgrMtlYOPz/AxSuSPEpBGYlGH9F2WAGGF8SnQC/rU8xeogtu/Jrlh4Efjnj3Fw9z2dZ6 yVkSaZDlIMNQ75L92889n7mCEM4f0TZJkOt5JT1I2lgQIgAc3D293N+xVqJ+7RBLBC6H fzJFjCo72iJ56EM3VKIh/X5dLkztY3hRPylFz5oAJadMaKa3a6g5ryQmWCilInZ+jQ4S KlFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=95OkwIst0BgaPvc79h1qg3LdSl4GbI3ESVZ1x5Cd4z0=; b=JlLe4iy7Lg1vtgoAfau2tItXMN9YKerVCdqdg3XRTlzrnVe3DKMpX3RHpj2XtpGCid vgKyv6fsTFyZX73fjrAloZxf1/FdDMO5SIRbvLXIoDWvr49BorJk81ILsAFw+VXva48R YXNsXJhIrFqhx8YVyERsupHFwRBBeaxYaCr9XmMSJ9owBKsUe6fydMF+cuKKrgaWgxc4 LJyvXpfB+Mah0ZXzBmc7VHOYM9elp3/CzRq7vl2d/ETXTQ5GqOF4Mehnvg/wssMEPLwB UZluWAkJrqW3tpQSXsSNrSqpBHuajfzDQlTbWv7RvXDO9CZs+Uje8GHEHJjCswqEKg4l pavQ== X-Gm-Message-State: AOAM530r+Vgijfb+ZJSe71S98q3EPypkLsg/CZ/S8rMbG/w/RGGRLepA /G1XjddleCjVf6/dMSv28lX5N1MioA74ANO6zoIQYyG+sJt6bw== X-Received: by 2002:a17:906:c108:: with SMTP id do8mr14361365ejc.88.1598414883304; Tue, 25 Aug 2020 21:08:03 -0700 (PDT) MIME-Version: 1.0 References: <20200825145556.637323-1-gnurou@gmail.com> <20200825145556.637323-2-gnurou@gmail.com> In-Reply-To: <20200825145556.637323-2-gnurou@gmail.com> From: Ezequiel Garcia Date: Wed, 26 Aug 2020 01:07:52 -0300 Message-ID: Subject: Re: [PATCH 1/2] media: v4l2-mem2mem: consider OUTPUT queue first when polling To: Alexandre Courbot Cc: Mauro Carvalho Chehab , Hans Verkuil , Nicolas Dufresne , linux-media , Linux Kernel Mailing List Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Alexandre, On Tue, 25 Aug 2020 at 11:56, Alexandre Courbot wrote: > > If poll() is called on a m2m device with the EPOLLOUT event after the > last buffer of the CAPTURE queue is dequeued, any buffer available on > OUTPUT queue will never be signaled because v4l2_m2m_poll_for_data() > starts by checking whether dst_q->last_buffer_dequeued is set and > returns EPOLLIN in this case, without looking at the state of the OUTPUT > queue. > > Fix this by checking the state of the OUTPUT queue before considering > that early-return case. > > This also has the side-effect of bringing the two blocks of code dealing > with the CAPTURE queue next to one another, and saves us one spin > lock/unlock cycle, for what it's worth. > > Signed-off-by: Alexandre Courbot Change looks good to me. Reviewed-by: Ezequiel Garcia Do you think it qualifies for -stable? The issue has been here since the dawn of time. Thanks, Ezequiel > --- > drivers/media/v4l2-core/v4l2-mem2mem.c | 23 +++++++++++------------ > 1 file changed, 11 insertions(+), 12 deletions(-) > > diff --git a/drivers/media/v4l2-core/v4l2-mem2mem.c b/drivers/media/v4l2-core/v4l2-mem2mem.c > index 95a8f2dc5341d..0d0192119af20 100644 > --- a/drivers/media/v4l2-core/v4l2-mem2mem.c > +++ b/drivers/media/v4l2-core/v4l2-mem2mem.c > @@ -862,6 +862,15 @@ static __poll_t v4l2_m2m_poll_for_data(struct file *file, > list_empty(&dst_q->queued_list))) > return EPOLLERR; > > + spin_lock_irqsave(&src_q->done_lock, flags); > + if (!list_empty(&src_q->done_list)) > + src_vb = list_first_entry(&src_q->done_list, struct vb2_buffer, > + done_entry); > + if (src_vb && (src_vb->state == VB2_BUF_STATE_DONE > + || src_vb->state == VB2_BUF_STATE_ERROR)) > + rc |= EPOLLOUT | EPOLLWRNORM; > + spin_unlock_irqrestore(&src_q->done_lock, flags); > + > spin_lock_irqsave(&dst_q->done_lock, flags); > if (list_empty(&dst_q->done_list)) { > /* > @@ -870,21 +879,11 @@ static __poll_t v4l2_m2m_poll_for_data(struct file *file, > */ > if (dst_q->last_buffer_dequeued) { > spin_unlock_irqrestore(&dst_q->done_lock, flags); > - return EPOLLIN | EPOLLRDNORM; > + rc |= EPOLLIN | EPOLLRDNORM; > + return rc; > } > } > - spin_unlock_irqrestore(&dst_q->done_lock, flags); > > - spin_lock_irqsave(&src_q->done_lock, flags); > - if (!list_empty(&src_q->done_list)) > - src_vb = list_first_entry(&src_q->done_list, struct vb2_buffer, > - done_entry); > - if (src_vb && (src_vb->state == VB2_BUF_STATE_DONE > - || src_vb->state == VB2_BUF_STATE_ERROR)) > - rc |= EPOLLOUT | EPOLLWRNORM; > - spin_unlock_irqrestore(&src_q->done_lock, flags); > - > - spin_lock_irqsave(&dst_q->done_lock, flags); > if (!list_empty(&dst_q->done_list)) > dst_vb = list_first_entry(&dst_q->done_list, struct vb2_buffer, > done_entry); > -- > 2.28.0 >