Received: by 2002:ac0:a5a7:0:0:0:0:0 with SMTP id m36-v6csp4846400imm; Tue, 31 Jul 2018 00:47:25 -0700 (PDT) X-Google-Smtp-Source: AAOMgpc5PvRzj2uRU5hUx28zg+g1Qs57GqJW+NkHYddpGDPtdOm/NH1auuxpT+BmXxzSze3RGaMl X-Received: by 2002:a17:902:bf44:: with SMTP id u4-v6mr19646007pls.84.1533023245046; Tue, 31 Jul 2018 00:47:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1533023245; cv=none; d=google.com; s=arc-20160816; b=G5MV7p7A39cDCpBzEs85TUbFTFEnYRhaABE4seT6BgdnCKGAxTFWgltULWoXmWS+34 rvvoXIivlz3MxUw0hmsnkGSPPuAezx559GTZs9HnAX75I/VJVRjDhrpm7TYmQgRdNfJj xS75EGGBDeBanSnusiZhJyN2iWj/ckYkKIWG1RNCKBj4LRlO0BJNg9LxJHR0jDUi8+B+ B1KPXDcI7UDUNvwPqxz41bbHCcbEQlP2x8hTYClMpGyyHNKwXFi+b82968GhLqvfX0K5 MuzZnDfrdkgHJCBZcW09DMlM0ivSooSgpeNc6QKHuPc5iBsc90IjFL/VZdyL0SD41J28 8F6g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:arc-authentication-results; bh=I5qvFxPjfq3PjrmWcPqbikuZTIAAWaKZ3jCNNYg+de4=; b=fHXmVPs7PZ6ck1LOx+/sgcl+wVw175SjSI7H4yYpMPzu/VsptDzzWpTIG1wrYQyFxv F6v0lRxtP/PZvNJHwyhI8VWTFKWaYsqyCvoKBcGWAwBu9M5Zm+wQ2U3vIN6f/e4VyqJe nKsfJbgtWBnP91M8gSPS3/25BcX6F6FcyJtwsEz2E6Bn5Yh7qqexsqjPl41jEX9QcF0x bnqOHGmwa+YyRJhNuhG63SoDXeuy4/ZgqHltv22iRh4nXOmCPDUfzlX03E4t/QpHwsKN JjyajRuixd2mMI/UKH/Fse4vU9DbhNzgnaZwc3ab+CZREk4Ch6uLuB9S5HWE1E05a04y wu+w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k125-v6si12510986pgk.315.2018.07.31.00.47.10; Tue, 31 Jul 2018 00:47:25 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728750AbeGaJZY (ORCPT + 99 others); Tue, 31 Jul 2018 05:25:24 -0400 Received: from mga14.intel.com ([192.55.52.115]:45074 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727135AbeGaJZX (ORCPT ); Tue, 31 Jul 2018 05:25:23 -0400 X-Amp-Result: UNKNOWN X-Amp-Original-Verdict: FILE UNKNOWN X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 31 Jul 2018 00:46:22 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.51,426,1526367600"; d="scan'208";a="71329441" Received: from paasikivi.fi.intel.com ([10.237.72.42]) by orsmga003.jf.intel.com with ESMTP; 31 Jul 2018 00:46:19 -0700 Received: by paasikivi.fi.intel.com (Postfix, from userid 1000) id F27C820790; Tue, 31 Jul 2018 10:46:18 +0300 (EEST) Date: Tue, 31 Jul 2018 10:46:18 +0300 From: Sakari Ailus To: Satendra Singh Thakur Cc: Mauro Carvalho Chehab , Hans Verkuil , Al Viro , linux-media@vger.kernel.org, linux-kernel@vger.kernel.org, vineet.j@samsung.com, hemanshu.s@samsung.com, sst2005@gmail.com Subject: Re: [PATCH] videobuf2/vb2_buffer_done: Changing the position of spinlock to protect only the required code Message-ID: <20180731074618.ef6n7qulhlhoqwxb@paasikivi.fi.intel.com> References: <20180727082146epcas5p10374c04f0767dbbe409c8171c49d7c9a~FLBKL7utW2249922499epcas5p1c@epcas5p1.samsung.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180727082146epcas5p10374c04f0767dbbe409c8171c49d7c9a~FLBKL7utW2249922499epcas5p1c@epcas5p1.samsung.com> User-Agent: NeoMutt/20170113 (1.7.2) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Satendra, Thanks for the patch. On Fri, Jul 27, 2018 at 01:51:36PM +0530, Satendra Singh Thakur wrote: > 1.Currently, in the func vb2_buffer_done, spinlock protects > following code > vb->state = VB2_BUF_STATE_QUEUED; > list_add_tail(&vb->done_entry, &q->done_list); > spin_unlock_irqrestore(&q->done_lock, flags); > vb->state = state; > atomic_dec(&q->owned_by_drv_count); > 2.The spinlock is mainly needed to protect list related ops and > vb->state = STATE_ERROR or STATE_DONE as in other funcs > vb2_discard_done > __vb2_get_done_vb > vb2_core_poll. > 3. Therefore, spinlock is mainly needed for > list_add, list_del, list_first_entry ops > and state = STATE_DONE and STATE_ERROR to protect > done_list queue. > 3. Hence, state = STATE_QUEUED doesn't need spinlock protection. > 4. Also atomic_dec dones't require the same as its already atomic. > > Signed-off-by: Satendra Singh Thakur > --- > drivers/media/common/videobuf2/videobuf2-core.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/media/common/videobuf2/videobuf2-core.c b/drivers/media/common/videobuf2/videobuf2-core.c > index f32ec73..968b403 100644 > --- a/drivers/media/common/videobuf2/videobuf2-core.c > +++ b/drivers/media/common/videobuf2/videobuf2-core.c > @@ -923,17 +923,17 @@ void vb2_buffer_done(struct vb2_buffer *vb, enum vb2_buffer_state state) > call_void_memop(vb, finish, vb->planes[plane].mem_priv); > } > > - spin_lock_irqsave(&q->done_lock, flags); > if (state == VB2_BUF_STATE_QUEUED || > state == VB2_BUF_STATE_REQUEUEING) { > vb->state = VB2_BUF_STATE_QUEUED; > } else { You could move flags here as well. I wonder what others think. > /* Add the buffer to the done buffers list */ > + spin_lock_irqsave(&q->done_lock, flags); > list_add_tail(&vb->done_entry, &q->done_list); > vb->state = state; The state could be assigned without holding the lock here. > + spin_unlock_irqrestore(&q->done_lock, flags); > } > atomic_dec(&q->owned_by_drv_count); > - spin_unlock_irqrestore(&q->done_lock, flags); > > trace_vb2_buf_done(q, vb); > -- Kind regards, Sakari Ailus sakari.ailus@linux.intel.com