[RFC][PATCH 2.5.70] Static tunable semvmx and semaem

From: Arvind Kandhare (arvind.kan@wipro.com)
Date: Fri Jun 06 2003 - 00:53:23 EST


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),

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sat Jun 07 2003 - 22:00:29 EST