Received: by 2002:a25:868d:0:0:0:0:0 with SMTP id z13csp36991ybk; Tue, 19 May 2020 14:52:30 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwAxCQcNrxS8qn642wDtaEKhPw91/64KDYneXI6JeikLQW65ICrufxMvhhfDKJEw5AZPfZ6 X-Received: by 2002:a17:906:86d6:: with SMTP id j22mr1128668ejy.1.1589925150677; Tue, 19 May 2020 14:52:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1589925150; cv=none; d=google.com; s=arc-20160816; b=dExB97eg6yt4Zt/KHJrzAdGy8VfQ9KPSFRD5LW8X7MfCyfEVLl2SjvZEFLgJfD0lqU UnWnqvpY6eQ8NlawyRMUSoTq/Exo45CSj4smxxdR4J87PGe8srocn/WfM/cepGZZGYKr lbcybcST5Hjmq02pluj/8t2ddx6NhSwoT+Un6aPYYJE1l6/iQmBWUKS10JURGZC6unUy X/G9YishyYhQbzjjMHe1Mh0tfsRoiYANfxZd+RvIBnATthEOCm8/kTn78dxKWRcsZsm0 Ldp9/WSp5j6BTgftMjt48UYfY2ZH0UHHG9BQ+NU1Fm1OVaB7WqWIrMBjjrjtf92E6pQT T5BQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=UmigHx4BW8UOIynqAPFCArO8Ak7spa6ugzxCvPtvbYY=; b=rJpGS59o6JySBiWJKrXlPz765AcSXOsJMxvNhhkIwMtrwtMZ/YAGkDIrpc7HdMYHzF Cyw3GlRa2xKl0vUC3aY7kyXoZxlidLav0BtFOCyhTYiCXnxdSyZ6Mf0icLK0+RiqraxJ ZIOC6IIGfrYextrMzvK+ck+Q98JXx61K/qJO4kxpvMqSqIvQrW5l21ggFubjL90yAUaE Le0AVODO7TAKJCoCgUbyeKWOp53r2VSg7vJg542vLRpUevLTEd7Hjg8rebycl3aipOFZ OPqroaq8y4HLSDI39j6ROYvP7C5UGXMvPUbemRFMS2FxCn8ILVnenpxNrgVi/ERABfkV sJ0A== ARC-Authentication-Results: i=1; mx.google.com; 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 o11si575635ejb.746.2020.05.19.14.52.08; Tue, 19 May 2020 14:52:30 -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; 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 S1728615AbgESVsH (ORCPT + 99 others); Tue, 19 May 2020 17:48:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41056 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728566AbgESVsB (ORCPT ); Tue, 19 May 2020 17:48:01 -0400 Received: from Galois.linutronix.de (Galois.linutronix.de [IPv6:2a0a:51c0:0:12e:550::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EE3F5C08C5C0 for ; Tue, 19 May 2020 14:48:00 -0700 (PDT) Received: from [5.158.153.53] (helo=debian-buster-darwi.lab.linutronix.de.) by Galois.linutronix.de with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.80) (envelope-from ) id 1jbA5a-0002zR-UN; Tue, 19 May 2020 23:47:55 +0200 From: "Ahmed S. Darwish" To: Peter Zijlstra , Ingo Molnar , Will Deacon Cc: Thomas Gleixner , "Paul E. McKenney" , "Sebastian A. Siewior" , Steven Rostedt , LKML , "Ahmed S. Darwish" Subject: [PATCH v1 25/25] hrtimer: Use sequence counter with associated raw spinlock Date: Tue, 19 May 2020 23:45:47 +0200 Message-Id: <20200519214547.352050-26-a.darwish@linutronix.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200519214547.352050-1-a.darwish@linutronix.de> References: <20200519214547.352050-1-a.darwish@linutronix.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Linutronix-Spam-Score: -1.0 X-Linutronix-Spam-Level: - X-Linutronix-Spam-Status: No , -1.0 points, 5.0 required, ALL_TRUSTED=-1,SHORTCIRCUIT=-0.0001 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org A sequence counter write side critical section must be protected by some form of locking to serialize writers. A plain seqcount_t does not contain the information of which lock must be held when entering a write side critical section. Use the new seqcount_raw_spinlock_t data type, which allows to associate a raw spinlock with the sequence counter. This enables lockdep to verify that the raw spinlock used for writer serialization is held when the write side critical section is entered. If lockdep is disabled this lock association is compiled out and has neither storage size nor runtime overhead. Signed-off-by: Ahmed S. Darwish --- include/linux/hrtimer.h | 2 +- kernel/time/hrtimer.c | 13 ++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/include/linux/hrtimer.h b/include/linux/hrtimer.h index 15c8ac313678..25993b86ac5c 100644 --- a/include/linux/hrtimer.h +++ b/include/linux/hrtimer.h @@ -159,7 +159,7 @@ struct hrtimer_clock_base { struct hrtimer_cpu_base *cpu_base; unsigned int index; clockid_t clockid; - seqcount_t seq; + seqcount_raw_spinlock_t seq; struct hrtimer *running; struct timerqueue_head active; ktime_t (*get_time)(void); diff --git a/kernel/time/hrtimer.c b/kernel/time/hrtimer.c index d89da1c7e005..c4038511d5c9 100644 --- a/kernel/time/hrtimer.c +++ b/kernel/time/hrtimer.c @@ -135,7 +135,11 @@ static const int hrtimer_clock_to_base_table[MAX_CLOCKS] = { * timer->base->cpu_base */ static struct hrtimer_cpu_base migration_cpu_base = { - .clock_base = { { .cpu_base = &migration_cpu_base, }, }, + .clock_base = { { + .cpu_base = &migration_cpu_base, + .seq = SEQCNT_RAW_SPINLOCK_ZERO(migration_cpu_base.seq, + &migration_cpu_base.lock), + }, }, }; #define migration_base migration_cpu_base.clock_base[0] @@ -1998,8 +2002,11 @@ int hrtimers_prepare_cpu(unsigned int cpu) int i; for (i = 0; i < HRTIMER_MAX_CLOCK_BASES; i++) { - cpu_base->clock_base[i].cpu_base = cpu_base; - timerqueue_init_head(&cpu_base->clock_base[i].active); + struct hrtimer_clock_base *clock_b = &cpu_base->clock_base[i]; + + clock_b->cpu_base = cpu_base; + seqcount_raw_spinlock_init(&clock_b->seq, &cpu_base->lock); + timerqueue_init_head(&clock_b->active); } cpu_base->cpu = cpu; -- 2.20.1