All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joel Fernandes <joelaf@google.com>
To: linux-kernel@vger.kernel.org
Cc: Steven Rostedt <rostedt@goodmis.org>,
	Joel Fernandes <joelaf@google.com>,
	Anton Vorontsov <anton@enomsg.org>,
	Colin Cross <ccross@android.com>,
	Kees Cook <keescook@chromium.org>,
	Tony Luck <tony.luck@intel.com>
Subject: [PATCH 1/7] pstore: Make spinlock per zone instead of global
Date: Fri,  7 Oct 2016 22:28:28 -0700	[thread overview]
Message-ID: <1475904515-24970-2-git-send-email-joelaf@google.com> (raw)
In-Reply-To: <1475904515-24970-1-git-send-email-joelaf@google.com>

Currently pstore has a global spinlock for all zones. Since the zones are
independent and modify different areas of memory, there's no need to have
a global lock, make the lock per-zone to protect the respective zone.

Signed-off-by: Joel Fernandes <joelaf@google.com>
---
 fs/pstore/ram_core.c       | 11 +++++------
 include/linux/pstore_ram.h |  1 +
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/fs/pstore/ram_core.c b/fs/pstore/ram_core.c
index 3975dee..cb92055 100644
--- a/fs/pstore/ram_core.c
+++ b/fs/pstore/ram_core.c
@@ -48,8 +48,6 @@ static inline size_t buffer_start(struct persistent_ram_zone *prz)
 	return atomic_read(&prz->buffer->start);
 }
 
-static DEFINE_RAW_SPINLOCK(buffer_lock);
-
 /* increase and wrap the start pointer, returning the old value */
 static size_t buffer_start_add(struct persistent_ram_zone *prz, size_t a)
 {
@@ -57,7 +55,7 @@ static size_t buffer_start_add(struct persistent_ram_zone *prz, size_t a)
 	int new;
 	unsigned long flags;
 
-	raw_spin_lock_irqsave(&buffer_lock, flags);
+	raw_spin_lock_irqsave(&prz->buffer_lock, flags);
 
 	old = atomic_read(&prz->buffer->start);
 	new = old + a;
@@ -65,7 +63,7 @@ static size_t buffer_start_add(struct persistent_ram_zone *prz, size_t a)
 		new -= prz->buffer_size;
 	atomic_set(&prz->buffer->start, new);
 
-	raw_spin_unlock_irqrestore(&buffer_lock, flags);
+	raw_spin_unlock_irqrestore(&prz->buffer_lock, flags);
 
 	return old;
 }
@@ -77,7 +75,7 @@ static void buffer_size_add(struct persistent_ram_zone *prz, size_t a)
 	size_t new;
 	unsigned long flags;
 
-	raw_spin_lock_irqsave(&buffer_lock, flags);
+	raw_spin_lock_irqsave(&prz->buffer_lock, flags);
 
 	old = atomic_read(&prz->buffer->size);
 	if (old == prz->buffer_size)
@@ -89,7 +87,7 @@ static void buffer_size_add(struct persistent_ram_zone *prz, size_t a)
 	atomic_set(&prz->buffer->size, new);
 
 exit:
-	raw_spin_unlock_irqrestore(&buffer_lock, flags);
+	raw_spin_unlock_irqrestore(&prz->buffer_lock, flags);
 }
 
 static void notrace persistent_ram_encode_rs8(struct persistent_ram_zone *prz,
@@ -493,6 +491,7 @@ static int persistent_ram_post_init(struct persistent_ram_zone *prz, u32 sig,
 
 	prz->buffer->sig = sig;
 	persistent_ram_zap(prz);
+	prz->buffer_lock = __RAW_SPIN_LOCK_UNLOCKED(buffer_lock);
 
 	return 0;
 }
diff --git a/include/linux/pstore_ram.h b/include/linux/pstore_ram.h
index c668c86..244d242 100644
--- a/include/linux/pstore_ram.h
+++ b/include/linux/pstore_ram.h
@@ -40,6 +40,7 @@ struct persistent_ram_zone {
 	void *vaddr;
 	struct persistent_ram_buffer *buffer;
 	size_t buffer_size;
+	raw_spinlock_t buffer_lock;
 
 	/* ECC correction */
 	char *par_buffer;
-- 
2.7.4

  reply	other threads:[~2016-10-08  5:29 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-08  5:28 [RFC 0/7] pstore: Improve performance of ftrace backend with ramoops Joel Fernandes
2016-10-08  5:28 ` Joel Fernandes [this message]
2016-10-08  5:44   ` [PATCH 1/7] pstore: Make spinlock per zone instead of global Joel Fernandes
2016-10-10 23:44   ` Kees Cook
2016-10-08  5:28 ` [PATCH 2/7] pstore: locking: dont lock unless caller asks to Joel Fernandes
2016-10-10 23:48   ` Kees Cook
2016-10-11 14:41     ` Joel Fernandes
2016-10-08  5:28 ` [PATCH 3/7] pstore: Remove case of PSTORE_TYPE_PMSG write using deprecated function Joel Fernandes
2016-10-10 23:52   ` Kees Cook
2016-10-11 14:46     ` Joel Fernandes
2016-10-08  5:28 ` [PATCH 4/7] pstore: Make ramoops_init_przs generic for other prz arrays Joel Fernandes
2016-10-10 23:55   ` Kees Cook
2016-10-08  5:28 ` [PATCH 5/7] ramoops: Split ftrace buffer space into per-CPU zones Joel Fernandes
2016-10-09 17:15   ` Joel Fernandes
2016-10-10 23:59     ` Kees Cook
2016-10-11  0:00       ` Kees Cook
2016-10-16 17:40       ` Joel Fernandes
2016-10-18 20:37         ` Kees Cook
2016-10-08  5:28 ` [PATCH 6/7] pstore: Add support to store timestamp counter in ftrace records Joel Fernandes
2016-10-08  5:28 ` [PATCH 7/7] pstore: Merge per-CPU ftrace zones into one zone for output Joel Fernandes
2016-10-11  9:57 ` [RFC 0/7] pstore: Improve performance of ftrace backend with ramoops Steven Rostedt
2016-10-20  7:17 [PATCH " Joel Fernandes
2016-10-20  7:17 ` [PATCH 1/7] pstore: Make spinlock per zone instead of global Joel Fernandes

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1475904515-24970-2-git-send-email-joelaf@google.com \
    --to=joelaf@google.com \
    --cc=anton@enomsg.org \
    --cc=ccross@android.com \
    --cc=keescook@chromium.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=tony.luck@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.