All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
To: Christoph Lameter <clameter@sgi.com>
Cc: Eric Dumazet <dada1@cosmosbay.com>,
	Pekka Enberg <penberg@cs.helsinki.fi>,
	Torsten Kaiser <just.for.lkml@googlemail.com>,
	Ingo Molnar <mingo@elte.hu>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: [PATCH] Slub Freeoffset check overflow
Date: Fri, 29 Feb 2008 08:28:48 -0500	[thread overview]
Message-ID: <20080229132848.GA10565@Krystal> (raw)
In-Reply-To: <Pine.LNX.4.64.0802282107090.5947@schroedinger.engr.sgi.com>

* Christoph Lameter (clameter@sgi.com) wrote:
> On Thu, 28 Feb 2008, Mathieu Desnoyers wrote:
> 
> > * Christoph Lameter (clameter@sgi.com) wrote:
> > > On Thu, 28 Feb 2008, Mathieu Desnoyers wrote:
> > > 
> > > > In short, the we also use the versioning to check for change of slab.
> 
> Then we do not need the page->end field anymore right? I will try 
> to rediff your patch against current slab-mm and see how we can proceed 
> from there.


Slub Freeoffset check overflow

Check for overflow of the freeoffset version number.

I just thought adding this check in CONFIG_SLUB_DEBUG makes sense. It's
really unlikely that enough interrupt handlers will nest over the slub
fast path, and each of them do about a million alloc/free on 32 bits or
a huge amount of alloc/free on 64 bits, but just in case, it seems good
to warn if we detect we are half-way to a version overflow.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
---
 mm/slub.c |   32 ++++++++++++++++++++++++++------
 1 file changed, 26 insertions(+), 6 deletions(-)

Index: linux-2.6-lttng/mm/slub.c
===================================================================
--- linux-2.6-lttng.orig/mm/slub.c	2008-02-29 08:05:01.000000000 -0500
+++ linux-2.6-lttng/mm/slub.c	2008-02-29 08:16:13.000000000 -0500
@@ -1660,7 +1660,7 @@ static __always_inline void *slab_alloc(
  */
 
 #ifdef SLUB_FASTPATH
-	unsigned long freeoffset, newoffset;
+	unsigned long freeoffset, newoffset, resoffset;
 
 	c = get_cpu_slab(s, raw_smp_processor_id());
 	do {
@@ -1682,8 +1682,18 @@ static __always_inline void *slab_alloc(
 		newoffset = freeoffset;
 		newoffset &= ~c->off_mask;
 		newoffset |= (unsigned long)object[c->offset] & c->off_mask;
-	} while (cmpxchg_local(&c->freeoffset, freeoffset, newoffset)
-			!= freeoffset);
+		resoffset = cmpxchg_local(&c->freeoffset, freeoffset,
+				newoffset);
+#ifdef CONFIG_SLUB_DEBUG
+		/*
+		 * Just to be paranoid : warn if we detect that enough
+		 * allocations nested on top of us to get the counter to go
+		 * half-way to overflow. That would be insane to do that much
+		 * allocations in interrupt handers, but check it anyway.
+		 */
+		WARN_ON(resoffset - freeoffset > -1UL >> 1);
+#endif
+	} while (resoffset != freeoffset);
 #else
 	unsigned long flags;
 
@@ -1822,7 +1832,7 @@ static __always_inline void slab_free(st
 	struct kmem_cache_cpu *c;
 
 #ifdef SLUB_FASTPATH
-	unsigned long freeoffset, newoffset;
+	unsigned long freeoffset, newoffset, resoffset;
 
 	c = get_cpu_slab(s, raw_smp_processor_id());
 	debug_check_no_locks_freed(object, s->objsize);
@@ -1850,8 +1860,18 @@ static __always_inline void slab_free(st
 		newoffset = freeoffset + c->off_mask + 1;
 		newoffset &= ~c->off_mask;
 		newoffset |= (unsigned long)object & c->off_mask;
-	} while (cmpxchg_local(&c->freeoffset, freeoffset, newoffset)
-			!= freeoffset);
+		resoffset = cmpxchg_local(&c->freeoffset, freeoffset,
+				newoffset);
+#ifdef CONFIG_SLUB_DEBUG
+		/*
+		 * Just to be paranoid : warn if we detect that enough
+		 * allocations nested on top of us to get the counter to go
+		 * half-way to overflow. That would be insane to do that much
+		 * allocations in interrupt handers, but check it anyway.
+		 */
+		WARN_ON(resoffset - freeoffset > -1UL >> 1);
+#endif
+	} while (resoffset != freeoffset);
 #else
 	unsigned long flags;
 

-- 
Mathieu Desnoyers
Computer Engineering Ph.D. Student, Ecole Polytechnique de Montreal
OpenPGP key fingerprint: 8CD5 52C3 8E3C 4140 715F  BA06 3F25 A8FE 3BAE 9A68

  parent reply	other threads:[~2008-02-29 13:28 UTC|newest]

Thread overview: 102+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-02-15 21:23 Linux 2.6.25-rc2 Linus Torvalds
2008-02-16  2:08 ` Rafael J. Wysocki
2008-02-16  5:44 ` [BUG] Linux 2.6.25-rc2 - Kernel Ooops while running dbench Kamalesh Babulal
2008-02-18 12:59   ` Andrew Morton
2008-02-18 12:59     ` Andrew Morton
2008-02-18 14:25     ` Jeff Garzik
2008-02-18 16:11       ` Frans Pop
2008-02-18 16:11         ` Frans Pop
2008-03-03 11:51     ` Pekka Enberg
2008-03-03 11:51       ` Pekka Enberg
2008-03-04  4:03       ` Kamalesh Babulal
2008-03-04  4:03         ` Kamalesh Babulal
2008-02-16  6:10 ` [BUG] Linux 2.6.25-rc2 - Regression from 2.6.24-rc1-git1 softlockup while bootup on powerpc Kamalesh Babulal
2008-02-16  6:10   ` Kamalesh Babulal
2008-02-17 19:29   ` Jens Axboe
2008-02-17 19:29     ` Jens Axboe
2008-02-19  8:04     ` KAMEZAWA Hiroyuki
2008-02-19  8:04       ` KAMEZAWA Hiroyuki
2008-02-19  8:36       ` Jens Axboe
2008-02-19  8:36         ` Jens Axboe
2008-02-19  8:47         ` KAMEZAWA Hiroyuki
2008-02-19  8:47           ` KAMEZAWA Hiroyuki
2008-02-19  8:58           ` Jens Axboe
2008-02-19  8:58             ` Jens Axboe
2008-02-19  9:07             ` KAMEZAWA Hiroyuki
2008-02-19  9:07               ` KAMEZAWA Hiroyuki
2008-02-19  9:09               ` Jens Axboe
2008-02-19  9:09                 ` Jens Axboe
2008-02-19  9:02         ` KAMEZAWA Hiroyuki
2008-02-19  9:02           ` KAMEZAWA Hiroyuki
2008-02-19  9:01           ` Jens Axboe
2008-02-19  9:01             ` Jens Axboe
2008-02-19 13:19         ` Kamalesh Babulal
2008-02-19 13:19           ` Kamalesh Babulal
2008-02-22  7:24         ` Andrew Morton
2008-02-22  7:24           ` Andrew Morton
2008-02-22  7:40           ` Jens Axboe
2008-02-22  7:40             ` Jens Axboe
2008-02-17 20:08   ` Rafael J. Wysocki
2008-02-17 20:08     ` Rafael J. Wysocki
2008-02-16 16:52 ` Linux 2.6.25-rc2 Jan Engelhardt
2008-02-16 19:14 ` Linux 2.6.25-rc2 regression: LVM cannot find volume group Tilman Schmidt
2008-02-16 20:12   ` Alan Cox
2008-02-16 22:37     ` Jiri Slaby
2008-02-18  0:57       ` Tilman Schmidt
2008-02-18  1:22         ` Jeff Chua
2008-02-18 10:35           ` Tilman Schmidt
2008-02-19  1:53       ` Alasdair G Kergon
2008-02-19  8:56         ` Tilman Schmidt
2008-02-16 21:38 ` Linux 2.6.25-rc2 Torsten Kaiser
2008-02-17 20:25   ` Rafael J. Wysocki
2008-02-17 21:32     ` Torsten Kaiser
2008-02-18 23:54   ` Linus Torvalds
2008-02-19  6:44     ` Torsten Kaiser
2008-02-19  6:11   ` Ingo Molnar
2008-02-19  6:54     ` Torsten Kaiser
2008-02-19  7:21       ` Pekka Enberg
2008-02-19 10:27         ` Ingo Molnar
2008-02-19 10:45           ` Pekka Enberg
2008-02-19 13:02           ` Mathieu Desnoyers
2008-02-19 14:00             ` Ingo Molnar
2008-02-19 14:02         ` Mathieu Desnoyers
2008-02-19 14:21           ` Pekka Enberg
2008-02-19 14:38             ` Pekka Enberg
2008-02-19 14:55               ` Ingo Molnar
2008-02-19 14:57                 ` Ingo Molnar
2008-02-19 15:54                   ` Pekka Enberg
2008-02-19 15:52                 ` Pekka Enberg
2008-02-20  0:36                   ` Zhang, Yanmin
2008-02-20  2:08                     ` Zhang, Yanmin
2008-02-20  6:53                       ` Zhang, Yanmin
2008-02-20  7:10                         ` Pekka Enberg
2008-02-19 16:20               ` Linus Torvalds
2008-02-19 16:45                 ` Ingo Molnar
2008-02-19 16:48                   ` Ingo Molnar
2008-02-19 19:27                 ` Torsten Kaiser
2008-02-19 20:08             ` Mathieu Desnoyers
2008-02-27 23:32               ` Christoph Lameter
2008-02-28  1:57                 ` Andrew Morton
2008-02-28  2:43                   ` Christoph Lameter
2008-02-28  8:14                   ` Ingo Molnar
2008-02-28 11:15                     ` Alan Cox
2008-02-28 11:13                   ` Jiri Kosina
2008-02-19 16:27           ` Eric Dumazet
2008-02-19 16:38             ` Linus Torvalds
2008-02-19 20:03             ` Mathieu Desnoyers
2008-02-27 23:34               ` Christoph Lameter
2008-02-28  5:55                 ` [PATCH] Implement slub fastpath in terms of freebase and freeoffset Mathieu Desnoyers
2008-02-28 19:08                   ` Christoph Lameter
2008-02-28 23:25                     ` Mathieu Desnoyers
2008-02-29  0:57                       ` Christoph Lameter
2008-02-29  1:56                         ` Mathieu Desnoyers
2008-02-29  2:12                           ` Christoph Lameter
2008-02-29  3:32                             ` Mathieu Desnoyers
2008-02-29  5:11                               ` Christoph Lameter
2008-02-29 13:03                                 ` Mathieu Desnoyers
2008-02-29 19:57                                   ` Christoph Lameter
2008-02-29 13:28                                 ` Mathieu Desnoyers [this message]
2008-03-04  6:17                                   ` [PATCH] Slub Freeoffset check overflow (updated) Mathieu Desnoyers
2008-03-04  7:15                                     ` Christoph Lameter
2008-02-27 23:32             ` Linux 2.6.25-rc2 Christoph Lameter
2008-02-19 18:39           ` Torsten Kaiser

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=20080229132848.GA10565@Krystal \
    --to=mathieu.desnoyers@polymtl.ca \
    --cc=clameter@sgi.com \
    --cc=dada1@cosmosbay.com \
    --cc=just.for.lkml@googlemail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=penberg@cs.helsinki.fi \
    --cc=torvalds@linux-foundation.org \
    /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.