public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [RFC][PATCH 2.5.70] Static tunable semvmx and semaem
@ 2003-06-06  5:53 Arvind Kandhare
  2003-06-06  6:50 ` William Lee Irwin III
  2003-06-06 16:52 ` Manfred Spraul
  0 siblings, 2 replies; 6+ messages in thread
From: Arvind Kandhare @ 2003-06-06  5:53 UTC (permalink / raw)
  To: manfreds, William Lee Irwin III
  Cc: linux-kernel, akpm, indou.takao, Dave Jones, Arvind Kandhare

Hi,
Please find below patch(RFC) for implementing semvmx and semaem
as static tunable parameters.

These can be modified at boot time using command line interface.

Please comment/suggest.

cheers,
Arvind

diff -Naur linux-2.5.70/include/linux/sysctl.h linux-2.5.70.n/include/linux/sysctl.h
--- linux-2.5.70/include/linux/sysctl.h	Tue May 27 06:30:40 2003
+++ linux-2.5.70.n/include/linux/sysctl.h	Wed Jun  4 16:21:19 2003
@@ -130,6 +130,8 @@
  	KERN_PIDMAX=55, 
	/* int: PID # limit */
    	KERN_CORE_PATTERN=56,	/* string: pattern for core-file names */
  	KERN_PANIC_ON_OOPS=57,  /* int: whether we will panic on an oops */
+ 
KERN_SEMVMX=58,  	/* int: maximum limit on semval */
+ 
KERN_SEMAEM=59, 
	/* int: maximun limit on semaem */
  };


diff -Naur linux-2.5.70/init/main.c linux-2.5.70.n/init/main.c
--- linux-2.5.70/init/main.c	Tue May 27 06:30:25 2003
+++ linux-2.5.70.n/init/main.c	Wed Jun  4 16:19:46 2003
@@ -67,6 +67,9 @@

  extern char *linux_banner;

+extern unsigned int semvmx;
+extern unsigned int semaem;
+
  static int init(void *);

  extern void init_IRQ(void);
@@ -141,6 +144,29 @@

  __setup("maxcpus=", maxcpus);

+static int __init _semvmx(char *str)
+{
+ 
get_option(&str, &semvmx);
+ 
if(semvmx>65535 || semvmx <=0)
+ 
{
+ 
	semvmx=32767;
+ 
}
+ 
return 1;
+}
+__setup("semvmx=", _semvmx);
+
+static int __init _semaem(char *str)
+{
+ 
get_option(&str, &semaem);
+ 
if(semaem>32767 || semaem <=0)
+ 
{
+ 
	semaem=16384;
+ 
}
+ 
return 1;
+}
+__setup("semaem=", _semaem);
+
+
  static char * argv_init[MAX_INIT_ARGS+2] = { "init", NULL, };
  char * envp_init[MAX_INIT_ENVS+2] = { "HOME=/", "TERM=linux", NULL, };

diff -Naur linux-2.5.70/ipc/sem.c linux-2.5.70.n/ipc/sem.c
--- linux-2.5.70/ipc/sem.c	Tue May 27 06:30:38 2003
+++ linux-2.5.70.n/ipc/sem.c	Wed Jun  4 17:01:46 2003
@@ -102,6 +102,9 @@
  #define sc_semopm	(sem_ctls[2])
  #define sc_semmni	(sem_ctls[3])

+unsigned int semvmx=32767;
+int semaem=16384;
+
  static int used_sems;

  void __init sem_init (void)
@@ -280,7 +283,7 @@
  	 
	/*
  	 		 *	Exceeding the undo range is an error.
  	 
	 */
- 
		if (undo < (-SEMAEM - 1) || undo > SEMAEM)
+ 
		if (undo < (-semaem - 1) || undo > semaem)
  	 
	{
  	 
		/* Don't undo the undo */
  	 
		sop->sem_flg &= ~SEM_UNDO;
@@ -290,7 +293,7 @@
  		}
  		if (curr->semval < 0)
  	 
	goto would_block;
- 
	if (curr->semval > SEMVMX)
+ 
	if (curr->semval > semvmx)
  	 
	goto out_of_range;
  	}

@@ -482,7 +485,7 @@
  		seminfo.semmns = sc_semmns;
  		seminfo.semmsl = sc_semmsl;
  		seminfo.semopm = sc_semopm;
- 
	seminfo.semvmx = SEMVMX;
+ 
	seminfo.semvmx = semvmx;
  		seminfo.semmnu = SEMMNU;
  		seminfo.semmap = SEMMAP;
  		seminfo.semume = SEMUME;
@@ -492,7 +495,7 @@
  	 
	seminfo.semaem = used_sems;
  		} else {
  	 
	seminfo.semusz = SEMUSZ;
- 
		seminfo.semaem = SEMAEM;
+ 
		seminfo.semaem = semaem;
  		}
  		max_id = sem_ids.max_id;
  		up(&sem_ids.sem);
@@ -613,7 +616,7 @@
  		}

  		for (i = 0; i < nsems; i++) {
- 
		if (sem_io[i] > SEMVMX) {
+ 
		if (sem_io[i] > semvmx) {
  	 
		err = -ERANGE;
  	 
		goto out_free;
  	 
	}
@@ -672,7 +675,7 @@
  		int val = arg.val;
  		struct sem_undo *un;
  		err = -ERANGE;
- 
	if (val > SEMVMX || val < 0)
+ 
	if (val > semvmx || val < 0)
  	 
	goto out_unlock;

  		for (un = sma->undo; un; un = un->id_next)
diff -Naur linux-2.5.70/kernel/sysctl.c linux-2.5.70.n/kernel/sysctl.c
--- linux-2.5.70/kernel/sysctl.c	Tue May 27 06:30:23 2003
+++ linux-2.5.70.n/kernel/sysctl.c	Wed Jun  4 17:02:52 2003
@@ -79,6 +79,8 @@
  extern int msg_ctlmnb;
  extern int msg_ctlmni;
  extern int sem_ctls[];
+extern unsigned int  semvmx;
+extern int semaem;
  #endif

  #ifdef __sparc__
@@ -237,6 +239,10 @@
  	 0644, NULL, &proc_dointvec},
  	{KERN_SEM, "sem", &sem_ctls, 4*sizeof (int),
  	 0644, NULL, &proc_dointvec},
+ 
{KERN_SEMVMX, "semvmx", &semvmx, sizeof (int),
+ 
0444, NULL, &proc_dointvec},
+ 
{KERN_SEMAEM, "semaem", &semaem, sizeof (int),
+ 
0444, NULL, &proc_dointvec},
  #endif
  #ifdef CONFIG_MAGIC_SYSRQ
  	{KERN_SYSRQ, "sysrq", &sysrq_enabled, sizeof (int),



^ permalink raw reply	[flat|nested] 6+ messages in thread
* Re: [RFC][PATCH 2.5.70] Static tunable semvmx and semaem
@ 2003-06-06 15:02 Arvind Kandhare
  0 siblings, 0 replies; 6+ messages in thread
From: Arvind Kandhare @ 2003-06-06 15:02 UTC (permalink / raw)
  To: wli, linux-kernel; +Cc: indou.takao, davej, manfred

William Lee Irwin III wrote:


> I think the __setup()'s should be moved to ipc/sem.c;


It is always better if all the initializations related to
IPC V semaphores are in ipc/sem.c file. Thanks for the suggestion.
Below is the updated patch with __setup()calls in ipc/sem.c.

Thanks,
Arvind
P.S. I've changed my mail client to evaluation and cross checked whether
the patches works. Please get back to me in case there are any issues
while patching.

diff -Naur linux-2.5.70/include/linux/sysctl.h linux-2.5.70.n/include/linux/sysctl.h
--- linux-2.5.70/include/linux/sysctl.h	Tue May 27 06:30:40 2003
+++ linux-2.5.70.n/include/linux/sysctl.h	Fri Jun  6 19:33:19 2003
@@ -130,6 +130,8 @@
 	KERN_PIDMAX=55,		/* int: PID # limit */
   	KERN_CORE_PATTERN=56,	/* string: pattern for core-file names */
 	KERN_PANIC_ON_OOPS=57,  /* int: whether we will panic on an oops */
+	KERN_SEMVMX=58,  	/* int: maximum limit on semval */
+	KERN_SEMAEM=59,		/* int: maximun limit on semaem */
 };
 

diff -Naur linux-2.5.70/ipc/sem.c linux-2.5.70.n/ipc/sem.c
--- linux-2.5.70/ipc/sem.c	Tue May 27 06:30:38 2003
+++ linux-2.5.70.n/ipc/sem.c	Fri Jun  6 19:35:19 2003
@@ -102,6 +102,9 @@
 #define sc_semopm	(sem_ctls[2])
 #define sc_semmni	(sem_ctls[3])
 
+unsigned int semvmx=32767;
+int semaem=16384;
+
 static int used_sems;
 
 void __init sem_init (void)
@@ -280,7 +283,7 @@
 			/*
 	 		 *	Exceeding the undo range is an error.
 			 */
-			if (undo < (-SEMAEM - 1) || undo > SEMAEM)
+			if (undo < (-semaem - 1) || undo > semaem)
 			{
 				/* Don't undo the undo */
 				sop->sem_flg &= ~SEM_UNDO;
@@ -290,7 +293,7 @@
 		}
 		if (curr->semval < 0)
 			goto would_block;
-		if (curr->semval > SEMVMX)
+		if (curr->semval > semvmx)
 			goto out_of_range;
 	}
 
@@ -482,7 +485,7 @@
 		seminfo.semmns = sc_semmns;
 		seminfo.semmsl = sc_semmsl;
 		seminfo.semopm = sc_semopm;
-		seminfo.semvmx = SEMVMX;
+		seminfo.semvmx = semvmx;
 		seminfo.semmnu = SEMMNU;
 		seminfo.semmap = SEMMAP;
 		seminfo.semume = SEMUME;
@@ -492,7 +495,7 @@
 			seminfo.semaem = used_sems;
 		} else {
 			seminfo.semusz = SEMUSZ;
-			seminfo.semaem = SEMAEM;
+			seminfo.semaem = semaem;
 		}
 		max_id = sem_ids.max_id;
 		up(&sem_ids.sem);
@@ -613,7 +616,7 @@
 		}
 
 		for (i = 0; i < nsems; i++) {
-			if (sem_io[i] > SEMVMX) {
+			if (sem_io[i] > semvmx) {
 				err = -ERANGE;
 				goto out_free;
 			}
@@ -672,7 +675,7 @@
 		int val = arg.val;
 		struct sem_undo *un;
 		err = -ERANGE;
-		if (val > SEMVMX || val < 0)
+		if (val > semvmx || val < 0)
 			goto out_unlock;
 
 		for (un = sma->undo; un; un = un->id_next)
@@ -1295,6 +1298,29 @@
 	unlock_kernel();
 }
 
+static int __init _semvmx(char *str)
+{
+	get_option(&str, &semvmx);
+	if(semvmx>65535 || semvmx <=0)
+	{
+		semvmx=32767;
+	}
+	return 1;
+}
+__setup("semvmx=", _semvmx);
+
+static int __init _semaem(char *str)
+{
+	get_option(&str, &semaem);
+	if(semaem>32767 || semaem <=0)
+	{
+		semaem=16384;
+	}
+	return 1;
+}
+__setup("semaem=", _semaem);
+
+
 #ifdef CONFIG_PROC_FS
 static int sysvipc_sem_read_proc(char *buffer, char **start, off_t offset, int length, int *eof, void *data)
 {
diff -Naur linux-2.5.70/kernel/sysctl.c linux-2.5.70.n/kernel/sysctl.c
--- linux-2.5.70/kernel/sysctl.c	Tue May 27 06:30:23 2003
+++ linux-2.5.70.n/kernel/sysctl.c	Fri Jun  6 19:49:30 2003
@@ -79,6 +79,8 @@
 extern int msg_ctlmnb;
 extern int msg_ctlmni;
 extern int sem_ctls[];
+extern unsigned int  semvmx;
+extern int semaem;
 #endif
 
 #ifdef __sparc__
@@ -237,6 +239,10 @@
 	 0644, NULL, &proc_dointvec},
 	{KERN_SEM, "sem", &sem_ctls, 4*sizeof (int),
 	 0644, NULL, &proc_dointvec},
+	{KERN_SEMVMX, "semvmx", &semvmx, sizeof (int),
+	0444, NULL, &proc_dointvec},
+	{KERN_SEMAEM, "semaem", &semaem, sizeof (int),
+	0444, NULL, &proc_dointvec},
 #endif
 #ifdef CONFIG_MAGIC_SYSRQ
 	{KERN_SYSRQ, "sysrq", &sysrq_enabled, sizeof (int),



^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2003-06-06 16:39 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-06-06  5:53 [RFC][PATCH 2.5.70] Static tunable semvmx and semaem Arvind Kandhare
2003-06-06  6:50 ` William Lee Irwin III
2003-06-06  9:01   ` Arvind Kandhare
2003-06-06 13:12     ` William Lee Irwin III
2003-06-06 16:52 ` Manfred Spraul
  -- strict thread matches above, loose matches on Subject: below --
2003-06-06 15:02 Arvind Kandhare

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