All of lore.kernel.org
 help / color / mirror / Atom feed
From: Frederik Deweerdt <deweerdt@free.fr>
To: linux-kernel@vger.kernel.org
Cc: akpm@osdl.org, acme@mandriva.com, marcel@holtmann.org, jet@gyve.org
Subject: [03/04 mm-patch, rfc] Add lightweight rwlock to net/dccp/ccid.c (was Re: [mm-patch] bluetooth: use GFP_ATOMIC in *_sock_create's sk_alloc)
Date: Fri, 28 Jul 2006 18:28:15 +0200	[thread overview]
Message-ID: <20060728162815.GC1227@slug> (raw)
In-Reply-To: <20060728162320.GB1227@slug>

[-- Attachment #1: Type: text/plain, Size: 277 bytes --]

This patch is part of the lw_rwlock patchset, it removes the
ccids_{read,write}_{lock,unlock} functions which have been moved
to linux/lw_rwlock.h and made more generic.
                                          
Signed-off-by: Frederik Deweerdt <frederik.deweerdt@gmail.com>


[-- Attachment #2: net_dccp_ccid.c-use-lw_rwlocks.patch --]
[-- Type: text/plain, Size: 3512 bytes --]

--- v2.6.18-rc2-mm1~ori/net/dccp/ccid.c	2006-06-18 03:49:35.000000000 +0200
+++ v2.6.18-rc2-mm1/net/dccp/ccid.c	2006-07-28 16:19:32.000000000 +0200
@@ -12,48 +12,11 @@
  */
 
 #include "ccid.h"
+#include <linux/lw_rwlock.h>
 
 static struct ccid_operations *ccids[CCID_MAX];
-#if defined(CONFIG_SMP) || defined(CONFIG_PREEMPT)
-static atomic_t ccids_lockct = ATOMIC_INIT(0);
-static DEFINE_SPINLOCK(ccids_lock);
-
-/*
- * The strategy is: modifications ccids vector are short, do not sleep and
- * veeery rare, but read access should be free of any exclusive locks.
- */
-static void ccids_write_lock(void)
-{
-	spin_lock(&ccids_lock);
-	while (atomic_read(&ccids_lockct) != 0) {
-		spin_unlock(&ccids_lock);
-		yield();
-		spin_lock(&ccids_lock);
-	}
-}
-
-static inline void ccids_write_unlock(void)
-{
-	spin_unlock(&ccids_lock);
-}
+static DEFINE_LW_RWLOCK(ccids_lock);
 
-static inline void ccids_read_lock(void)
-{
-	atomic_inc(&ccids_lockct);
-	spin_unlock_wait(&ccids_lock);
-}
-
-static inline void ccids_read_unlock(void)
-{
-	atomic_dec(&ccids_lockct);
-}
-
-#else
-#define ccids_write_lock() do { } while(0)
-#define ccids_write_unlock() do { } while(0)
-#define ccids_read_lock() do { } while(0)
-#define ccids_read_unlock() do { } while(0)
-#endif
 
 static kmem_cache_t *ccid_kmem_cache_create(int obj_size, const char *fmt,...)
 {
@@ -103,13 +66,13 @@ int ccid_register(struct ccid_operations
 	if (ccid_ops->ccid_hc_tx_slab == NULL)
 		goto out_free_rx_slab;
 
-	ccids_write_lock();
+	lw_write_lock(&ccids_lock);
 	err = -EEXIST;
 	if (ccids[ccid_ops->ccid_id] == NULL) {
 		ccids[ccid_ops->ccid_id] = ccid_ops;
 		err = 0;
 	}
-	ccids_write_unlock();
+	lw_write_unlock(&ccids_lock);
 	if (err != 0)
 		goto out_free_tx_slab;
 
@@ -131,9 +94,9 @@ EXPORT_SYMBOL_GPL(ccid_register);
 
 int ccid_unregister(struct ccid_operations *ccid_ops)
 {
-	ccids_write_lock();
+	lw_write_lock(&ccids_lock);
 	ccids[ccid_ops->ccid_id] = NULL;
-	ccids_write_unlock();
+	lw_write_unlock(&ccids_lock);
 
 	ccid_kmem_cache_destroy(ccid_ops->ccid_hc_tx_slab);
 	ccid_ops->ccid_hc_tx_slab = NULL;
@@ -152,15 +115,15 @@ struct ccid *ccid_new(unsigned char id, 
 	struct ccid_operations *ccid_ops;
 	struct ccid *ccid = NULL;
 
-	ccids_read_lock();
+	lw_read_lock(&ccids_lock);
 #ifdef CONFIG_KMOD
 	if (ccids[id] == NULL) {
 		/* We only try to load if in process context */
-		ccids_read_unlock();
+		lw_read_unlock(&ccids_lock);
 		if (gfp & GFP_ATOMIC)
 			goto out;
 		request_module("net-dccp-ccid-%d", id);
-		ccids_read_lock();
+		lw_read_lock(&ccids_lock);
 	}
 #endif
 	ccid_ops = ccids[id];
@@ -170,7 +133,7 @@ struct ccid *ccid_new(unsigned char id, 
 	if (!try_module_get(ccid_ops->ccid_owner))
 		goto out_unlock;
 
-	ccids_read_unlock();
+	lw_read_unlock(&ccids_lock);
 
 	ccid = kmem_cache_alloc(rx ? ccid_ops->ccid_hc_rx_slab :
 				     ccid_ops->ccid_hc_tx_slab, gfp);
@@ -191,7 +154,7 @@ struct ccid *ccid_new(unsigned char id, 
 out:
 	return ccid;
 out_unlock:
-	ccids_read_unlock();
+	lw_read_unlock(&ccids_lock);
 	goto out;
 out_free_ccid:
 	kmem_cache_free(rx ? ccid_ops->ccid_hc_rx_slab :
@@ -235,10 +198,10 @@ static void ccid_delete(struct ccid *cci
 			ccid_ops->ccid_hc_tx_exit(sk);
 		kmem_cache_free(ccid_ops->ccid_hc_tx_slab,  ccid);
 	}
-	ccids_read_lock();
+	lw_read_lock(&ccids_lock);
 	if (ccids[ccid_ops->ccid_id] != NULL)
 		module_put(ccid_ops->ccid_owner);
-	ccids_read_unlock();
+	lw_read_unlock(&ccids_lock);
 }
 
 void ccid_hc_rx_delete(struct ccid *ccid, struct sock *sk)

  reply	other threads:[~2006-07-28 16:28 UTC|newest]

Thread overview: 124+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-07-27  8:56 2.6.18-rc2-mm1 Andrew Morton
2006-07-27 10:27 ` [PATCH] Require mmap handler for a.out executables (was Re: 2.6.18-rc2-mm1) Eugene Teo
2006-07-27 11:40 ` [patch -mm] s390: remove s390 touch_nmi_watchdog() define Heiko Carstens
2006-07-27 12:26 ` 2.6.18-rc2-mm1 Frederik Deweerdt
2006-07-27 12:39   ` [patch] fix "efi_init_e820_map undefined" warning Frederik Deweerdt
2006-07-27 13:12 ` Should cpuset ABBA deadlock fix be in 2.6.18-rc2-mmx? Paul Jackson
2006-07-27 18:22   ` Andrew Morton
2006-07-27 19:32     ` Paul Jackson
2006-07-27 13:32 ` 2.6.18-rc2-mm1 Michal Piotrowski
2006-07-27 18:59   ` 2.6.18-rc2-mm1 Michal Piotrowski
2006-07-29 12:15     ` 2.6.18-rc2-mm1 Michal Piotrowski
2006-07-29 12:17       ` 2.6.18-rc2-mm1 Michal Piotrowski
2006-07-28  8:17   ` 2.6.18-rc2-mm1 Michal Piotrowski
2006-07-28  8:34     ` 2.6.18-rc2-mm1 Andrew Morton
2006-07-28 18:49       ` 2.6.18-rc2-mm1 Matt Helsley
2006-07-28 19:53         ` 2.6.18-rc2-mm1 Michal Piotrowski
2006-07-28 20:39           ` 2.6.18-rc2-mm1 Matt Helsley
2006-07-28 21:34             ` 2.6.18-rc2-mm1 Andrew Morton
2006-07-29  2:04             ` 2.6.18-rc2-mm1 Valdis.Kletnieks
2006-07-29 22:34             ` 2.6.18-rc2-mm1 Shailabh Nagar
2006-07-29 23:38               ` 2.6.18-rc2-mm1 Michal Piotrowski
2006-07-28 17:57     ` 2.6.18-rc2-mm1 Matt Helsley
2006-07-27 14:04 ` 2.6.18-rc2-mm1 Andy Whitcroft
2006-07-27 14:48   ` 2.6.18-rc2-mm1 Andy Whitcroft
2006-07-27 15:37 ` [PATCH] highmem: fixed ip27-memory.c build error Yoichi Yuasa
2006-07-27 18:16 ` [-mm patch] arch/i386/pci/mmconfig.c: fixes Adrian Bunk
2006-07-28  8:09 ` 2.6.18-rc2-mm1 Reuben Farrelly
2006-07-28  8:35 ` [mm-patch] bluetooth: use GFP_ATOMIC in *_sock_create's sk_alloc Frederik Deweerdt
2006-07-28  9:00   ` Marcel Holtmann
2006-07-28 12:36     ` Frederik Deweerdt
2006-07-28  9:17   ` Masatake YAMATO
2006-07-28 12:32     ` Frederik Deweerdt
2006-07-28 13:12       ` Masatake YAMATO
2006-07-28 16:15         ` [01/04 mm-patch, rfc] Add lightweight rwlock (was Re: [mm-patch] bluetooth: use GFP_ATOMIC in *_sock_create's sk_alloc) Frederik Deweerdt
2006-07-28 16:23           ` [02/04 " Frederik Deweerdt
2006-07-28 16:28             ` Frederik Deweerdt [this message]
2006-07-28 16:33               ` [04/04 mm-patch, rfc] Add lightweight rwlock to net/bluetooth/af_bluetooth.c " Frederik Deweerdt
2006-07-31  7:06           ` [01/04 mm-patch, rfc] Add lightweight rwlock Masatake YAMATO
2006-08-01  9:06             ` Frederik Deweerdt
2006-07-28  8:56 ` 2.6.18-rc2-mm1 Michal Piotrowski
2006-07-28  9:23   ` 2.6.18-rc2-mm1 Andrew Morton
2006-07-28 15:53 ` [PATCH] 2.6.18-rc2-mm1 i386 add_memory_region undefined Valdis.Kletnieks
2006-07-28 18:20 ` 2.6.18-rc2-mm1 - hard lockups on Dell C840 Valdis.Kletnieks
2006-07-28 18:44 ` 2.6.18-rc2-mm1 timer int 0 doesn't work Paul Fulghum
2006-07-28 21:48   ` Andrew Morton
2006-07-28 22:10     ` Paul Fulghum
2006-07-28 23:38     ` Andi Kleen
2006-07-29  0:15       ` Paul Fulghum
2006-07-29  1:16         ` Paul Fulghum
2006-07-29  1:24           ` Andrew Morton
2006-07-29  2:37             ` Paul Fulghum
2006-07-29  2:58             ` Eric W. Biederman
2006-07-29  4:03             ` Ingo Molnar
2006-07-30 23:00               ` Steven Rostedt
2006-07-29  2:36           ` Andi Kleen
2006-07-29 15:33       ` Paul Fulghum
2006-07-29 19:50         ` Eric W. Biederman
2006-07-29 22:05           ` Paul Fulghum
2006-07-31  5:31             ` Andi Kleen
2006-07-31 13:32               ` Paul Fulghum
2006-07-28 19:46 ` Kubuntu's udev broken with 2.6.18-rc2-mm1 Andrew James Wade
2006-07-27 19:56   ` Andrew Morton
2006-07-27 20:12     ` Greg KH
2006-07-28 14:33       ` Andrew James Wade
2006-07-30 14:01         ` Laurent Riffard
2006-07-31  0:03           ` Greg KH
2006-07-31  2:27             ` Andrew James Wade
2006-07-31  3:37               ` Greg KH
2006-07-31  4:22                 ` Andrew Morton
2006-07-31  4:35                   ` Greg KH
2006-07-31  4:50                     ` Andrew Morton
2006-07-31  5:15                       ` Greg KH
2006-07-31  6:00                         ` Andrew Morton
2006-07-31  7:54                           ` bert hubert
2006-07-31  8:30                             ` Jesper Juhl
2006-07-31 11:14                           ` Alan Cox
2006-07-31  8:10                 ` Laurent Riffard
2006-08-01  3:01                 ` Andrew James Wade
2006-07-27 21:28     ` Valdis.Kletnieks
2006-07-29 17:48 ` [-mm patch] security/selinux/hooks.c: make 4 functions static Adrian Bunk
2006-07-30  0:37   ` James Morris
2006-07-29 17:58 ` swsusp regression (s2dsk) [Was: 2.6.18-rc2-mm1] Jiri Slaby
2006-07-29 17:58   ` Jiri Slaby
2006-07-29 17:58   ` Jiri Slaby
2006-07-29 18:59   ` Rafael J. Wysocki
2006-07-29 18:59     ` Rafael J. Wysocki
2006-07-29 23:06     ` Jiri Slaby
2006-07-29 23:06       ` Jiri Slaby
2006-07-29 23:10       ` Rafael J. Wysocki
2006-07-29 23:10         ` Rafael J. Wysocki
2006-07-29 23:59         ` Jiri Slaby
2006-07-29 23:59           ` Jiri Slaby
2006-07-30  0:03         ` Jiri Slaby
2006-07-30  0:03           ` Jiri Slaby
2006-07-29 23:22       ` Pavel Machek
2006-07-29 23:22         ` Pavel Machek
2006-07-29 23:58         ` Jiri Slaby
2006-07-29 23:58           ` Jiri Slaby
2006-07-30  0:06           ` Pavel Machek
2006-07-30  0:06             ` Pavel Machek
2006-07-30  7:31             ` Rafael J. Wysocki
2006-07-30  7:31               ` Rafael J. Wysocki
2006-07-30  8:08               ` Jiri Slaby
2006-07-30  8:08                 ` Jiri Slaby
2006-07-30  9:28                 ` Rafael J. Wysocki
2006-07-30  9:28                   ` Rafael J. Wysocki
2006-07-30 10:54                   ` Jiri Slaby
2006-07-30 10:54                     ` Jiri Slaby
2006-07-30 11:08                     ` Pavel Machek
2006-07-30 11:34                     ` Rafael J. Wysocki
2006-07-30 11:34                       ` Rafael J. Wysocki
2006-07-31 13:59                       ` Takashi Iwai
2006-07-31 13:59                         ` [Alsa-devel] " Takashi Iwai
2006-07-31 14:03                         ` Pavel Machek
2006-07-30 11:36           ` James Courtier-Dutton
2006-07-30 11:36             ` James Courtier-Dutton
2006-07-30 11:35 ` 2.6.18-rc2-mm1 fails to reboot properly on Dell Latitude CPiA Christian Trefzer
2006-07-31  4:42 ` 2.6.18-rc2-mm1 Reuben Farrelly
2006-07-31  4:57   ` 2.6.18-rc2-mm1 Andrew Morton
2006-07-31  5:25     ` 2.6.18-rc2-mm1 Andi Kleen
2006-08-03 15:59 ` [2.6 patch] DVB_CORE must select I2C Adrian Bunk
2006-08-03 16:10   ` [v4l-dvb-maintainer] " Manu Abraham
2006-08-03 16:30   ` Trent Piepho
2006-08-03 19:13     ` Mauro Carvalho Chehab

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=20060728162815.GC1227@slug \
    --to=deweerdt@free.fr \
    --cc=acme@mandriva.com \
    --cc=akpm@osdl.org \
    --cc=jet@gyve.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=marcel@holtmann.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.