public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] SysV IPC loop speedups, kernel 2.4.3
@ 2001-04-18  6:00 Scott Maxwell
  0 siblings, 0 replies; only message in thread
From: Scott Maxwell @ 2001-04-18  6:00 UTC (permalink / raw)
  To: linux-kernel; +Cc: manfreds

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

This patch contains a couple of micro-optimizations for the loops in
ipc/msg.c's load_msg() and store_msg().  It works fine for me under
2.4.3.

-- 
-------------------------+--------------------------------------------
R H L U  Scott Maxwell:  | ``Life results from the non-random survival
E A I X     maxwell@     |   of randomly varying replicators.''
D T N 6 ScottMaxwell.org |     -- Richard Dawkins

[-- Attachment #2: ipc-msg-loop.patch --]
[-- Type: text/plain, Size: 1844 bytes --]

diff -urN linux-2.4.3/ipc/msg.c linux/ipc/msg.c
--- linux-2.4.3/ipc/msg.c	Mon Feb 19 10:18:18 2001
+++ linux/ipc/msg.c	Tue Apr 17 22:34:36 2001
@@ -177,28 +177,30 @@
 		goto out_err;
 	}
 
-	len -= alen;
-	src = ((char*)src)+alen;
-	pseg = &msg->next;
-	while(len > 0) {
-		struct msg_msgseg* seg;
-		alen = len;
-		if(alen > DATALEN_SEG)
-			alen = DATALEN_SEG;
-		seg = (struct msg_msgseg *) kmalloc (sizeof(*seg) + alen, GFP_KERNEL);
-		if(seg==NULL) {
-			err=-ENOMEM;
-			goto out_err;
-		}
-		*pseg = seg;
-		seg->next = NULL;
-		if(copy_from_user (seg+1, src, alen)) {
-			err = -EFAULT;
-			goto out_err;
+	if (len > DATALEN_MSG) {
+		pseg = &msg->next;
+		while(len > alen) {
+			struct msg_msgseg* seg;
+
+			len -= alen;
+			src = ((char*)src)+alen;
+
+			alen = len;
+			if(alen > DATALEN_SEG)
+				alen = DATALEN_SEG;
+			seg = (struct msg_msgseg *) kmalloc (sizeof(*seg) + alen, GFP_KERNEL);
+			if(seg==NULL) {
+				err=-ENOMEM;
+				goto out_err;
+			}
+			*pseg = seg;
+			seg->next = NULL;
+			if(copy_from_user (seg+1, src, alen)) {
+				err = -EFAULT;
+				goto out_err;
+			}
+			pseg = &seg->next;
 		}
-		pseg = &seg->next;
-		len -= alen;
-		src = ((char*)src)+alen;
 	}
 	return msg;
 
@@ -218,18 +220,20 @@
 	if(copy_to_user (dest, msg+1, alen))
 		return -1;
 
-	len -= alen;
-	dest = ((char*)dest)+alen;
-	seg = msg->next;
-	while(len > 0) {
-		alen = len;
-		if(alen > DATALEN_SEG)
-			alen = DATALEN_SEG;
-		if(copy_to_user (dest, seg+1, alen))
-			return -1;
-		len -= alen;
-		dest = ((char*)dest)+alen;
-		seg=seg->next;
+	if (len > DATALEN_MSG) {
+		seg = msg->next;
+		while(len > alen) {
+			len -= alen;
+			dest = ((char*)dest)+alen;
+
+			alen = len;
+			if(alen > DATALEN_SEG)
+				alen = DATALEN_SEG;
+			if(copy_to_user (dest, seg+1, alen))
+				return -1;
+
+			seg=seg->next;
+		}
 	}
 	return 0;
 }

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2001-04-18  9:21 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2001-04-18  6:00 [PATCH] SysV IPC loop speedups, kernel 2.4.3 Scott Maxwell

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox