public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Steve Young <sdyoung@vt220.org>
To: linux-kernel@vger.kernel.org, akpm@osdl.org
Subject: Re: [PATCH] change pts allocation behaviour in tty_io.c, v2
Date: Fri, 7 May 2004 03:48:24 -0600	[thread overview]
Message-ID: <20040507094824.GA25043@eviltron.local.lan> (raw)
In-Reply-To: <20040507084242.GA11389@eviltron.local.lan>

On Fri, May 07, 2004 at 02:42:42AM -0600, Steve Young wrote:
>   Here is a patch to change the way ptses are allocated.  It applies against
> 2.6.6-rc3.  Basically it tries to humour old glibc by always obtaining a pts

  I realized this won't properly cope when driver->num < MAX_PREFERRED_PTY.
Use this patch instead.  I've tested it on my box.

  Thanks,
  Steve.

diff -ur linux-2.6.5-virgin/drivers/char/tty_io.c linux-2.6.5-eviltron/drivers/char/tty_io.c
--- linux-2.6.5-virgin/drivers/char/tty_io.c	2004-05-07 03:39:25.085624064 -0600
+++ linux-2.6.5-eviltron/drivers/char/tty_io.c	2004-05-07 03:37:51.697821168 -0600
@@ -1362,14 +1362,25 @@
 #ifdef CONFIG_UNIX98_PTYS
 	if (device == MKDEV(TTYAUX_MAJOR,2)) {
 		/* find a device that is not in use. */
-		static int next_ptmx_dev = 0;
+		static int next_ptmx_dev = MAX_PREFERRED_PTY;
 		retval = -1;
 		driver = ptm_driver;
-		while (driver->refcount < pty_limit) {
-			index = next_ptmx_dev;
-			next_ptmx_dev = (next_ptmx_dev+1) % driver->num;
-			if (!init_dev(driver, index, &tty))
-				goto ptmx_found; /* ok! */
+		/* first, try and allocate a pty < 256 for old glibc */
+		for (index = 0; index < MAX_PREFERRED_PTY && driver->refcount < pty_limit && index < driver->num; index++) {
+			if (!init_dev(driver, index, &tty)) 
+				goto ptmx_found;
+		}
+		/* nothing below MAX_PREFERRED_PTY, try something higher, unless
+		 * we've already run out of options */
+		if (index != driver->num) {
+			while (driver->refcount < pty_limit) {
+				index = next_ptmx_dev;
+				next_ptmx_dev = (next_ptmx_dev+1) % driver->num;
+				if (!next_ptmx_dev) 
+					next_ptmx_dev = MAX_PREFERRED_PTY;
+				if (!init_dev(driver, index, &tty)) 
+					goto ptmx_found; /* ok! */
+			}
 		}
 		return -EIO; /* no free ptys */
 	ptmx_found:

diff -ur linux-2.6.5-virgin/include/linux/tty.h linux-2.6.5-eviltron/include/linux/tty.h
--- linux-2.6.5-virgin/include/linux/tty.h	2004-05-07 03:39:26.953340128 -0600
+++ linux-2.6.5-eviltron/include/linux/tty.h	2004-05-07 01:43:55.000000000 -0600
@@ -35,6 +35,7 @@
 #define NR_UNIX98_PTY_DEFAULT	4096      /* Default maximum for Unix98 ptys */
 #define NR_UNIX98_PTY_MAX	(1 << MINORBITS) /* Absolute limit */
 #define NR_LDISCS		16
+#define MAX_PREFERRED_PTY	256			/* we prefer to allocate ptys beneath this number */
 
 /*
  * These are set up by the setup-routine at boot-time:

  reply	other threads:[~2004-05-07  9:48 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-05-07  8:42 [PATCH] change pts allocation behaviour in Steve Young
2004-05-07  9:48 ` Steve Young [this message]
2004-05-07 11:14 ` Andrew Morton
2004-05-07 11:52   ` Steve Young
2004-05-07 19:09     ` Andrew Morton

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=20040507094824.GA25043@eviltron.local.lan \
    --to=sdyoung@vt220.org \
    --cc=akpm@osdl.org \
    --cc=linux-kernel@vger.kernel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox