Received: by 2002:a25:683:0:0:0:0:0 with SMTP id 125csp344736ybg; Mon, 1 Jun 2020 02:55:55 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxZ/5A/18LsbH/A+1nV2r/XO6dah9JxxaZNl4zrHpHoiatckfXYUDBySzkGg884cbvQLCFL X-Received: by 2002:a17:906:49c7:: with SMTP id w7mr18330838ejv.216.1591005355588; Mon, 01 Jun 2020 02:55:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1591005355; cv=none; d=google.com; s=arc-20160816; b=ZrcZlRaYUpCWB8PXwKjgOBd5sVuRAbcyDNi+35WqxZk297mjYH2mHno/zE/V2gRmxw DJo67JSlL/1TrInl16PWYweAeI+WyGRpK7uSH8JJ6XyT3nF+WM2GvLR+da/dlT7nK88T f8CQOuaV6xkvxPPNg/fSSgsLr7sVYHEsWcCALrlgKG7NcfDKSWd4O4rAjhbn+TAVRzdc L+9IldVmQa66L53cNuoW+qTDMScYU0y0aGgRF7nSnb784fduqHobRt9HvDld39vUJcfJ 2bOVkDDpUTT7sFRYgQ8uIwBD34hyFUpfwgBwxN2Ih2kAvSCzEt70PwBdsJ+OTBTti41X lzpw== 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 :robot-unsubscribe:robot-id:message-id:mime-version:references :in-reply-to:cc:subject:to:reply-to:from:date; bh=FY7+iCBfdiDqdeQXveKzCEpZDl0WWxQ215qs2pD72QE=; b=Tf9/yVuSumi01o6ezxJGPOV3jn7ErQJEnGsnh6t/MAwe5PvKf/yiAn74TvEWS0h42A XDoQy2OTBlJTOoJwRUPZm43dZKbJ9RcG2lQuPZyOyOxzvXTCpiVapyVuwUoH9Ddq8lGf 0ZxXpqQcb4ATOLLPtvjkHP57RX/Ax+LVCx1azWRwtZNbX62f3he8PX0NSCZxfl9kpKk8 ftmIn4MHx6cF66hvwUmFksJKF6DKhRPN+ZnwxdSyLHr4gPdPyhOOSL/RDNawczHD1ENs mn7P29xSwuck58tOsa5rIURqORUxamW7jo4r28LsTu+aVh7f+y4larmcPxEWi82eM6sv 809A== 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 be9si558543edb.16.2020.06.01.02.55.33; Mon, 01 Jun 2020 02:55:55 -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 S1727994AbgFAJxG (ORCPT + 99 others); Mon, 1 Jun 2020 05:53:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44432 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726389AbgFAJwf (ORCPT ); Mon, 1 Jun 2020 05:52:35 -0400 Received: from Galois.linutronix.de (Galois.linutronix.de [IPv6:2a0a:51c0:0:12e:550::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 15ADEC061A0E; Mon, 1 Jun 2020 02:52:35 -0700 (PDT) Received: from [5.158.153.53] (helo=tip-bot2.lab.linutronix.de) by Galois.linutronix.de with esmtpsa (TLS1.2:DHE_RSA_AES_256_CBC_SHA256:256) (Exim 4.80) (envelope-from ) id 1jfh7P-0003hh-4G; Mon, 01 Jun 2020 11:52:31 +0200 Received: from [127.0.1.1] (localhost [IPv6:::1]) by tip-bot2.lab.linutronix.de (Postfix) with ESMTP id C637B1C0244; Mon, 1 Jun 2020 11:52:30 +0200 (CEST) Date: Mon, 01 Jun 2020 09:52:30 -0000 From: "tip-bot2 for Mike Galbraith" Reply-to: linux-kernel@vger.kernel.org To: linux-tip-commits@vger.kernel.org Subject: [tip: locking/core] zram: Use local lock to protect per-CPU data Cc: Mike Galbraith , Sebastian Andrzej Siewior , Ingo Molnar , Peter Zijlstra , x86 , LKML In-Reply-To: <20200527201119.1692513-8-bigeasy@linutronix.de> References: <20200527201119.1692513-8-bigeasy@linutronix.de> MIME-Version: 1.0 Message-ID: <159100515059.17951.4923007968333025082.tip-bot2@tip-bot2> X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit 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 The following commit has been merged into the locking/core branch of tip: Commit-ID: 19f545b6e07f753c4dc639c2f0ab52345733b6a8 Gitweb: https://git.kernel.org/tip/19f545b6e07f753c4dc639c2f0ab52345733b6a8 Author: Mike Galbraith AuthorDate: Wed, 27 May 2020 22:11:19 +02:00 Committer: Ingo Molnar CommitterDate: Thu, 28 May 2020 10:31:10 +02:00 zram: Use local lock to protect per-CPU data The zcomp driver uses per-CPU compression. The per-CPU data pointer is acquired with get_cpu_ptr() which implicitly disables preemption. It allocates memory inside the preempt disabled region which conflicts with the PREEMPT_RT semantics. Replace the implicit preemption control with an explicit local lock. This allows RT kernels to substitute it with a real per CPU lock, which serializes the access but keeps the code section preemptible. On non RT kernels this maps to preempt_disable() as before, i.e. no functional change. [bigeasy: Use local_lock(), description, drop reordering] Signed-off-by: Mike Galbraith Signed-off-by: Sebastian Andrzej Siewior Signed-off-by: Ingo Molnar Acked-by: Peter Zijlstra Link: https://lore.kernel.org/r/20200527201119.1692513-8-bigeasy@linutronix.de --- drivers/block/zram/zcomp.c | 7 +++++-- drivers/block/zram/zcomp.h | 3 +++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/block/zram/zcomp.c b/drivers/block/zram/zcomp.c index 912e3e6..5ee8e3f 100644 --- a/drivers/block/zram/zcomp.c +++ b/drivers/block/zram/zcomp.c @@ -110,12 +110,13 @@ ssize_t zcomp_available_show(const char *comp, char *buf) struct zcomp_strm *zcomp_stream_get(struct zcomp *comp) { - return get_cpu_ptr(comp->stream); + local_lock(&comp->stream->lock); + return this_cpu_ptr(comp->stream); } void zcomp_stream_put(struct zcomp *comp) { - put_cpu_ptr(comp->stream); + local_unlock(&comp->stream->lock); } int zcomp_compress(struct zcomp_strm *zstrm, @@ -159,6 +160,8 @@ int zcomp_cpu_up_prepare(unsigned int cpu, struct hlist_node *node) int ret; zstrm = per_cpu_ptr(comp->stream, cpu); + local_lock_init(&zstrm->lock); + ret = zcomp_strm_init(zstrm, comp); if (ret) pr_err("Can't allocate a compression stream\n"); diff --git a/drivers/block/zram/zcomp.h b/drivers/block/zram/zcomp.h index 72c2ee4..40f6420 100644 --- a/drivers/block/zram/zcomp.h +++ b/drivers/block/zram/zcomp.h @@ -5,8 +5,11 @@ #ifndef _ZCOMP_H_ #define _ZCOMP_H_ +#include struct zcomp_strm { + /* The members ->buffer and ->tfm are protected by ->lock. */ + local_lock_t lock; /* compression/decompression buffer */ void *buffer; struct crypto_comp *tfm;