Received: by 2002:ab2:2997:0:b0:1ec:cbc4:63fb with SMTP id n23csp399532lqb; Thu, 29 Feb 2024 04:37:59 -0800 (PST) X-Forwarded-Encrypted: i=3; AJvYcCX3SxjhRIJUCeylfU9ccORwS4xeVbyO3TUPrWldRr6wyhISJNFFo2TC7sSDcU3qBqeWJeCJYBOVrDZCl5bsBRZJZKJCrjnKvme9KfD1Kw== X-Google-Smtp-Source: AGHT+IEzE6kg1K9V4nnQP2k6DquHxm1Adb2ASMP5hA+6nKSe2camxKrd7IcV+UqGfI8nOjGAKcSw X-Received: by 2002:a0c:d80e:0:b0:68f:b8e0:aa3b with SMTP id h14-20020a0cd80e000000b0068fb8e0aa3bmr1918504qvj.14.1709210279356; Thu, 29 Feb 2024 04:37:59 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1709210279; cv=pass; d=google.com; s=arc-20160816; b=QiIRC6Ijb7QYIw/+3ht8Qbbf3TebWv/ih71Uskxr7ToL+7wNx0kzvuOakOtkBLs6MM e1H6vjRyjHBoibI/77Jxf0xVh9b9L7MHZL5853oX7hEDWrLJSyxM5CQmjNof/7GQ7kas j01xQael5wwoXKNz3ITdQuDYWfB3bJIlXSgdtGcxjjpe7Eo+jkrr2ql3HkXuWriCn8pR jtUHRw13LNx+QdQwZleDdcIlRvumG9ohTfq+pFrZqjMGLHO8l2d8S0lus50efCjZNNzD BdTaINeCrCuQiVHtQuEVU+TORoPEcBzowDx7EhR3eI2jv4LNCUPleZN3pjpnVsdF03om irPw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=to:cc:date:subject:mime-version:list-unsubscribe:list-subscribe :list-id:precedence:content-transfer-encoding:from:message-id :dkim-signature; bh=lPBJoIJYfKW+bOc4tNQX2WIoMB8SZ331BN+JVibczvM=; fh=Ay+4YVndf9a1vdujoZkpoceKx6I/T6Y3EKN+9lkHdaY=; b=EoD1sub9aBeKr50Rub2NEIyuY/LYNlhlScfJTqUTiu/FjfDwYYgZtOB4dQZSe/oNp0 OfHRvuookIBvJQmH0OYb6sXNPV+bSFh/7ERq4Tu5EXZ10WmLqJYtTWKLEF0S4/+x79ot 4g/LDhzR05cq3QV2eSzmJC87OHDzd+7CF5G35KTSIXpUR7jBROmLE9QPygkUSmiFjGz+ Sl3cjXbbMlAnXzINkWDqOKUXpIS8f1bhQfC+pPMrOgxBEDo3ZvU3zJVrZDB9ItvDUsAG fId9Ll2zglxx830zVRdHnt32dEmSzIyafZAIalI7w1XOpuqWph3QFcxgBHa+nNAiQAJB mb9Q==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@qq.com header.s=s201512 header.b=K4OItbXt; arc=pass (i=1 spf=pass spfdomain=qq.com dkim=pass dkdomain=qq.com dmarc=pass fromdomain=qq.com); spf=pass (google.com: domain of linux-kernel+bounces-86707-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-86707-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=qq.com Return-Path: Received: from ny.mirrors.kernel.org (ny.mirrors.kernel.org. [2604:1380:45d1:ec00::1]) by mx.google.com with ESMTPS id m9-20020a0562141bc900b0068f3a8597f2si1200023qvc.333.2024.02.29.04.37.59 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 29 Feb 2024 04:37:59 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel+bounces-86707-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) client-ip=2604:1380:45d1:ec00::1; Authentication-Results: mx.google.com; dkim=pass header.i=@qq.com header.s=s201512 header.b=K4OItbXt; arc=pass (i=1 spf=pass spfdomain=qq.com dkim=pass dkdomain=qq.com dmarc=pass fromdomain=qq.com); spf=pass (google.com: domain of linux-kernel+bounces-86707-linux.lists.archive=gmail.com@vger.kernel.org designates 2604:1380:45d1:ec00::1 as permitted sender) smtp.mailfrom="linux-kernel+bounces-86707-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=qq.com Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ny.mirrors.kernel.org (Postfix) with ESMTPS id 1C1BA1C22018 for ; Thu, 29 Feb 2024 12:37:59 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 419937D3FC; Thu, 29 Feb 2024 12:37:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=qq.com header.i=@qq.com header.b="K4OItbXt" Received: from out203-205-221-209.mail.qq.com (out203-205-221-209.mail.qq.com [203.205.221.209]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4701076F1B; Thu, 29 Feb 2024 12:37:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=203.205.221.209 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709210270; cv=none; b=cH93bH2SHYvaHIktCYUp9SRAo7gQQ6iBLB5caJjqbWAEE8LTLhjwcnYedXrHtidvUoMTyuF0zZVOd0z1qC32ySbSMT5l5ak4oZAvp6svICGmR+nMb7stZZcVCbo2cKb+HMB/OMqweqLhqS5jlaOcyk3ZVOGF+n0MrbKilfDS21E= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1709210270; c=relaxed/simple; bh=AvGhLOoKUDqqy9KaIaDf0K9xjzbSMlNJ6ya8jzTrjSI=; h=Message-ID:From:Content-Type:Mime-Version:Subject:Date:Cc:To; b=HeXizdHOQnOTbFgMBhGiLuXT/oLN9c8xDLoU0FLYtvBVokGPu3l01tW9hVtxxyAfGz33Tr3IL6GsEaKYQUKr+8O4oVkf3jANLZnMgou+HAloX8c88gp2QcK03VpdZpKvzDsWSACnJaKU/pJXEcMdByXZ6Dmi1PHZPPmOeo03s3o= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=qq.com; spf=pass smtp.mailfrom=qq.com; dkim=pass (1024-bit key) header.d=qq.com header.i=@qq.com header.b=K4OItbXt; arc=none smtp.client-ip=203.205.221.209 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=qq.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=qq.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qq.com; s=s201512; t=1709209958; bh=lPBJoIJYfKW+bOc4tNQX2WIoMB8SZ331BN+JVibczvM=; h=From:Subject:Date:Cc:To; b=K4OItbXtUVSDzD90OE2deqKL3o81qj5w/x++G126gryOJpinruIsEJsXLpUknzQDQ gsrSgkCH455BoZPPleKE6LSG2XXOGRSnjGOKDDnaqsg8WgijPK6Xrp6HHWjllUOAVe itTsx+Thy1I+d+axVe/WUhYcbKKOGrdaLLdsEMyM= Received: from smtpclient.apple ([218.94.142.74]) by newxmesmtplogicsvrsza10-0.qq.com (NewEsmtp) with SMTP id 8248FCE4; Thu, 29 Feb 2024 20:32:36 +0800 X-QQ-mid: xmsmtpt1709209956tvfil1jbg Message-ID: X-QQ-XMAILINFO: MyirvGjpKb1jPrWLUXj9WwmoiT7Fe5PHrvoNodMCtIuEN94qQ6LfBJ6O+jPPii dfrFYDRbk19ZS6ICkj668m0rWPei6Jcs0LVFh3oMMMUo41yhTSmDg6v1UqRCj3CiRZYOzjXgfv+5 7202rc+HsDU6Ay/wYNDgiAJ5jp5eKGEnIlNHSZ/AuagG+ekdz2B24zfPN5V6O8VxSPupLS1Ctuht k55xkXENTcpb9NeGoTT+k5eWvq5pSUgUdKgsoyzfw7KW7ll5CUWcUKrQnlXpq+5XoNxXF6Y74MOH ecvLkCJIVAoJ5xP9gI1PEA6iX+w4MAS1w0bWgR0D4uMQWPkjLE75XMaqkB5mGL9sq6dUhF0fg2CN MyhdtynXCF46czDHAeUT4iiNZYS/mffjjbxVg1mHLiVj7r6mwlUVkB9tYHWf42D+0n6W7053fhqh V0nPTQjgDCTQ0mdHLx3nEbxZ6itcLanuSXfZZZlRXXoNXB43VxekacERGawWwWs+bwiOkxnmox7K TCFw11Kj6VKXt3Ia4Y2LosCc1KW7klCXvkWgpVpgcSCsUDx+YafBnImnks+7S+0PODD+93lB43+7 fTbd3Zh1JpQyvnHfTGG0fJbN2MD8zQ3BMrNYqAFx5izJT12ICgQS/TiyS5rhaOmKgRKowFaHOIL0 N6c8cBkxFZec/yinC7CaZwhCp5SSzJfAVNZ2MyP+0l5JhVMGBrGuEI4LwBYKH1YiyzSjCRxfD+mb HwJtQTOSYv96n2J4t3AkV3RCvnQRWeI787F3tNiMAUkBOovDwW9QhRScauRN0/RqU+NkBqbzLl5R HsAwMpiJeAvvj/jNLw9hDJUKwKUAVgiWMSv0nYtlmQ6UkZdMtbchRUuFZmcLHZlvzqe6jOpxbpPJ +lwA4B3NiB2y5SYUtRZL1r2k/kPdC5PYrvchTN/1ITweYTfbCrm8pkJPNQ5xMGC8uM1xWkae54jJ MR/uEAA6Ad/cVXL17DX/HctnDgUS8PW1pGpQ8MPbRkNaucl3LawlusD+holGYvq9zcXJ5J40Rcku lA454eINztXv75KBEwa/KEjeBDpe5lmRtXvqo7U+g4Q+vja66salhkeOEaC4E= X-QQ-XMRINFO: Mp0Kj//9VHAxr69bL5MkOOs= From: linke Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.100.2.1.4\)) Subject: Re: [PATCH] ring-buffer: use READ_ONCE() to read cpu_buffer->commit_page in concurrent environment X-OQ-MSGID: Date: Thu, 29 Feb 2024 20:32:26 +0800 Cc: lilinke99@qq.com, linux-kernel@vger.kernel.org, linux-trace-kernel@vger.kernel.org, mathieu.desnoyers@efficios.com, mhiramat@kernel.org To: rostedt@goodmis.org X-Mailer: Apple Mail (2.3774.100.2.1.4) Hi Steven, sorry for the late reply. > > Now the reason for the above READ_ONCE() is because the variables *are* > going to be used again. We do *not* want the compiler to play any games > with that. > I don't think it is because the variables are going to be used again. Compiler optimizations barely do bad things in single thread programs. It is because cpu_buffer->commit_page may change concurrently and should be accessed atomically. /* Make sure commit page didn't change */ curr_commit_page = READ_ONCE(cpu_buffer->commit_page); curr_commit_ts = READ_ONCE(curr_commit_page->page->time_stamp); /* If the commit page changed, then there's more data */ if (curr_commit_page != commit_page || curr_commit_ts != commit_ts) return 0; This code read cpu_buffer->commit_page and time_stamp again to check whether commit page changed. It shows that cpu_buffer->commit_page and time_stamp may be changed by other threads. commit_page = cpu_buffer->commit_page; commit_ts = commit_page->page->time_stamp; So the commit_page and time_stamp above is read while other threads may change it. I think it is a data race if it is not atomic. Thus it is necessary to use READ_ONCE() here.