[PATCH 4 of 5]

Juan Perez-Sanchez <[email protected]>
Newsgroups org.kernel.vger.linux-8086
Message-ID <CAD6VGuYx1TA9jB=mLT7KPgNF1cweouUFr+H9zRi3UZtMUxe0uA@mail.gmail.com>
Hi,

This patch makes:

-Some functions still used peek*/poke* to access userspace. Those
were replaced by architecture neutral get_user_*/put_user_*.

-Unused functions peekd, pokeb, poked, get_bp, get_sp were removed.
Files for the first 3 functions remain in the source tree, together
with many other unused files. Unused variables "end" (in function
stack_check), "arch_segs", "marker" (in file sleepwake.c) and code
to initialize their never used contents was removed

-Messages for printing startup errors were moved from init_task()
to a single print statement in function run_init_process().

-Code size was reduced by 160 bytes and data reduced by 124 bytes.

Greetings,

Juan
elks-2d.patch (text/x-patch, 9.7 KB)
diff -Nur elks.orig/arch/i86/drivers/char/ntty.c elks/arch/i86/drivers/char/ntty.c
--- elks.orig/arch/i86/drivers/char/ntty.c	2014-04-26 22:12:31.000000000 -0500
+++ elks/arch/i86/drivers/char/ntty.c	2014-10-14 12:03:22.000000000 -0500
@@ -175,7 +175,7 @@
     pi = (char *)len;
     while ((int)(pi--)) {
 	tty_charout(tty,
-	   (unsigned char) peekb(current->t_regs.ds, (__u16)(data++))
+	    get_user_char((void *)(data++))
 	   /* , blocking */ );
     }
     return len;
@@ -207,12 +207,12 @@
 	    if (!rawmode && (j == 04))	/* CTRL-D */
 		break;
 	    if (rawmode || (j != '\b')) {
-		pokeb(current->t_regs.ds, (__u16) (data + ((int)pi)), ch);
+		put_user_char(ch, (void *)(data++));
 		++pi;
 		tty_echo(tty, ch);
 	    } else if (((int)pi) > 0) {
 		--pi;
-		k = ((peekb(current->t_regs.ds, (__u16) (data + ((int)pi)))
+		k = ((get_user_char((void *)(data++))
 		      == '\t') ? TAB_SPACES : 1);
 		do {
 		    tty_echo(tty, ch);
@@ -248,10 +248,10 @@
 	if (!rawmode && (j == 04))	/* CTRL-D */
 	    break;
 	if (rawmode || (j != '\b')) {
-	    pokeb(current->t_regs.ds, (__u16) (data + i++), ch);
+	    put_user_char(ch, (void *)(data + i++));
 	    tty_echo(tty, ch);
 	} else if (i > 0) {
-	    lch = ((peekb(current->t_regs.ds, (__u16) (data + --i)) == '\t')
+	    lch = ((get_user_char((void *)(data + --i)) == '\t')
 			? TAB_SPACES : 1);
 	    for (k = 0; k < lch; k++)
 		tty_echo(tty, ch);
diff -Nur elks.orig/arch/i86/drivers/char/pty.c elks/arch/i86/drivers/char/pty.c
--- elks.orig/arch/i86/drivers/char/pty.c	2014-04-26 22:12:31.000000000 -0500
+++ elks/arch/i86/drivers/char/pty.c	2014-10-14 12:03:22.000000000 -0500
@@ -110,7 +110,7 @@
 	    } else
 		break;
 	debug2(" rc[%u,%u]", (int)pi, len);
-	pokeb(current->t_regs.ds, (__u16) (data + ((int)pi)), ch);
+	put_user_char(ch, (void *)(data++));
 	++pi;
     }
     debug1("{%u}\n", (int)pi);
@@ -132,7 +132,7 @@
     l = (file->f_flags & O_NONBLOCK) ? 0 : 1;
     pi = 0;
     while (((int)pi) < len) {
-	ch = (unsigned char) peekb(current->t_regs.ds, (__u16) (data + ((int)pi)));
+	ch = get_user_char((void *)(data++));
 	if (chq_addch(&tty->inq, ch, l) == -1)
 	    if (l) {
 		debug("failed: INTR\n");
diff -Nur elks.orig/arch/i86/kernel/process.c elks/arch/i86/kernel/process.c
--- elks.orig/arch/i86/kernel/process.c	2014-10-14 11:28:39.000000000 -0500
+++ elks/arch/i86/kernel/process.c	2014-10-14 12:13:50.000000000 -0500
@@ -222,8 +222,10 @@
     *pip++ = 0;
     *pip++ = (unsigned short int) &ar[6];
     *pip++ = 0;
-    if(num = sys_execve(cmd, ar, 18))
+    if(num = sys_execve(cmd, ar, 18)) {
+	printk("sys_execve(\"%s\", args, 18) => %d.\n", cmd, -num);
 	return num;
+    }
 #ifndef S_SPLINT_S
     /* Brackets round the following code are required as a work around
      * for a bug in the compiler which causes it to jump past the asm
@@ -244,16 +246,17 @@
 void stack_check(void)
 {
     register __ptask currentp = current;
-    register segext_t end;
+/*    register segext_t end;*/ /* Unused variable "end" */
+
     if ((currentp->t_begstack > currentp->t_enddata) &&
 	(currentp->t_regs.sp < currentp->t_endbrk)) {
-	end = currentp->t_endbrk;
+/*	end = currentp->t_endbrk;*/
 	goto stack_overflow;
     }
-#ifdef CONFIG_EXEC_ELKS 
-    else if (currentp->t_regs.sp > currentp->t_endseg){
-        end = 0xffff;
-	goto stack_overflow; 
+#ifdef CONFIG_EXEC_ELKS
+    else if(currentp->t_regs.sp > currentp->t_endseg) {
+/*        end = 0xffff;*/
+	goto stack_overflow;
     }
 #endif
     return;
diff -Nur elks.orig/arch/i86/kernel/system.c elks/arch/i86/kernel/system.c
--- elks.orig/arch/i86/kernel/system.c	2014-10-14 11:28:39.000000000 -0500
+++ elks/arch/i86/kernel/system.c	2014-10-14 12:03:22.000000000 -0500
@@ -7,7 +7,6 @@
 
 #include <arch/segment.h>
 
-__arch_mminit arch_segs;
 int arch_cpu;			/* Processor type */
 extern long int basmem;
 
@@ -28,29 +27,6 @@
 
 void setup_arch(seg_t *start, seg_t *end)
 {
-#ifndef S_SPLINT_S
-/*
- *	Save segments
- */
-#asm
-	mov bx, #_arch_segs
-        mov [bx], cs
-	mov [bx+2], di
-        mov [bx+8], ss
-	mov [bx+6], si
-
-!	This is out of order to save a segment load and a few bytes :)
-
-        mov [bx+4], ds
-	mov [bx+10], dx
-
-!	mov ds, ax
-
-#endasm
-#endif
-
-    arch_segs.lowss = arch_segs.endss;
-
 #ifdef CONFIG_COMPAQ_FAST
 
 /*
diff -Nur elks.orig/arch/i86/lib/Makefile elks/arch/i86/lib/Makefile
--- elks.orig/arch/i86/lib/Makefile	2014-10-14 11:34:03.000000000 -0500
+++ elks/arch/i86/lib/Makefile	2014-10-14 12:03:22.000000000 -0500
@@ -38,7 +38,7 @@
 # miscellaneous
 
 JOBJS		=inport.o inportb.o outport.o outportb.o \
-		 peekb.o peekw.o peekd.o pokeb.o pokew.o poked.o bitops.o \
+		 peekb.o peekw.o pokew.o bitops.o \
 		 memmove.o string.o fmemset.o border.o
 #		 ntohl.o ntohs.o
 
diff -Nur elks.orig/arch/i86/mm/segment.c elks/arch/i86/mm/segment.c
--- elks.orig/arch/i86/mm/segment.c	2014-04-26 22:12:31.000000000 -0500
+++ elks/arch/i86/mm/segment.c	2014-10-14 12:03:22.000000000 -0500
@@ -1,23 +1,17 @@
 /*
  *	Fetch segment registers
- */ 
+ */
 
 #include <arch/segment.h>
 
 #ifndef S_SPLINT_S
 #asm
 
-	.globl  _get_bp
 	.globl	_get_cs
 	.globl	_get_ds
 	.globl	_get_es
-	.globl  _get_sp
 	.globl	_get_ss
 
-_get_bp:
-	mov 	ax, bp
-	ret
-
 _get_cs:
 	mov	ax, cs
 	ret
@@ -30,10 +24,6 @@
 	mov	ax, es
 	ret
 
-_get_sp:
-	mov	ax, sp
-	ret
-
 _get_ss:
 	mov	ax, ss
 	ret
diff -Nur elks.orig/arch/i86/mm/user.c elks/arch/i86/mm/user.c
--- elks.orig/arch/i86/mm/user.c	2014-04-26 22:12:31.000000000 -0500
+++ elks/arch/i86/mm/user.c	2014-10-14 12:03:22.000000000 -0500
@@ -233,7 +233,7 @@
     int c = 0;
 
     while (len-- && !c)
-	c = peekb(current->t_regs.ds, (__u16) p1++) - *p2++;
+	c = get_user_char((void *)(p1++)) - *p2++;
 
     return c;
 }
diff -Nur elks.orig/include/arch/segment.h elks/include/arch/segment.h
--- elks.orig/include/arch/segment.h	2014-04-26 22:12:31.000000000 -0500
+++ elks/include/arch/segment.h	2014-10-14 12:03:22.000000000 -0500
@@ -6,7 +6,6 @@
 #if 1
 
 extern __u16 get_cs(void), get_ds(void), get_es(void), get_ss(void);
-extern __u16 get_bp(void);
 
 #else
 
@@ -16,7 +15,6 @@
 #define get_ds()	asm("mov ax,ds")
 #define get_es()	asm("mov ax,es")
 #define get_ss()	asm("mov ax,ss")
-#define get_bp()	asm("mov ax,bp")
 
 #endif
 
diff -Nur elks.orig/include/arch/types.h elks/include/arch/types.h
--- elks.orig/include/arch/types.h	2014-04-26 22:12:31.000000000 -0500
+++ elks/include/arch/types.h	2014-10-14 12:03:22.000000000 -0500
@@ -40,15 +40,6 @@
 
 typedef __u16			__pptr;
 
-struct _mminit {
-    __u16	cs, endcs,
-		ds, endds,
-		ss, endss,
-		    lowss;
-};
-
-typedef struct _mminit		__arch_mminit, *__parch_mminit;
-
 /*@+namechecks@*/
 
 #ifndef NULL
diff -Nur elks.orig/include/linuxmt/mm.h elks/include/linuxmt/mm.h
--- elks.orig/include/linuxmt/mm.h	2014-04-26 22:12:31.000000000 -0500
+++ elks/include/linuxmt/mm.h	2014-10-14 12:03:22.000000000 -0500
@@ -49,13 +49,10 @@
 extern int do_swapper_run(struct task_struct *);
 extern unsigned int mm_get_usage(int,int);
 
-extern void pokeb(__u16,__u16,__u8);
 extern void pokew(__u16,__u16,__u16);
-extern void poked(__u16,__u16,__u32);
 
 extern __u8  peekb(__u16,__u16);
 extern __u16 peekw(__u16,__u16);
-extern __u32 peekd(__u16,__u16);
 
 extern void fmemcpy(__u16,__u16,__u16,__u16,__u16);
 extern void fmemset(__u16,__u16,__u16,__u16);
diff -Nur elks.orig/init/main.c elks/init/main.c
--- elks.orig/init/main.c	2014-10-14 11:28:39.000000000 -0500
+++ elks/init/main.c	2014-10-14 12:03:22.000000000 -0500
@@ -1,4 +1,4 @@
-/* $Header$ 
+/* $Header$
  */
 
 #include <linuxmt/config.h>
@@ -68,7 +68,7 @@
     kfork_proc(init_task);
     wake_up_process(&task[1]);
 
-    /* 
+    /*
      * We are now the idle task. We won't run unless no other process can run.
      */
     while (1){
@@ -103,30 +103,26 @@
      * So, I've modified the ELKS kernel to follow this tradition.
      */
 
-    num = run_init_process("/sbin/init", args);
-	printk("sys_execve(\"/sbin/init\",args,18) => %d.\n",num);
-	num = run_init_process("/etc/init", args);
-	    printk("sys_execve(\"/etc/init\",args,18) => %d.\n",num);
-	    num = run_init_process("/bin/init", args);
-		printk("sys_execve(\"/bin/init\",args,18) => %d.\n",num);
+    run_init_process("/etc/init", args);
+    run_init_process("/sbin/init", args);
+    run_init_process("/bin/init", args);
 
 #ifdef CONFIG_CONSOLE_SERIAL
-		num = sys_open("/dev/ttyS0", 2, 0);
+	num = sys_open("/dev/ttyS0", 2, 0);
 #else
-		num = sys_open("/dev/tty0", 2, 0);
+	num = sys_open("/dev/tty0", 2, 0);
 #endif
-		if (num < 0)
-		    printk("Unable to open /dev/tty (error %u)\n", -num);
+	if (num < 0)
+	    printk("Unable to open /dev/tty (error %u)\n", -num);
 
-		if (sys_dup(num) != 1)
-	    	printk("dup failed\n");
-		sys_dup(num);
-		sys_dup(num);
-		printk("No init - running /bin/sh\n");
-
-		num = run_init_process("/bin/sash", args);
-		printk("sys_execve(\"/bin/sh\",args,18) => %d.\n",num);
-	    	    panic("No init or sh found");
+	if (sys_dup(num) != 1)
+	    printk("dup failed\n");
+	sys_dup(num);
+	sys_dup(num);
+	printk("No init - running /bin/sh\n");
+
+    run_init_process("/bin/sash", args);
+    panic("No init or sh found");
 }
 
 /*
diff -Nur elks.orig/kernel/sleepwake.c elks/kernel/sleepwake.c
--- elks.orig/kernel/sleepwake.c	2014-04-26 22:12:31.000000000 -0500
+++ elks/kernel/sleepwake.c	2014-10-14 12:03:22.000000000 -0500
@@ -37,15 +37,13 @@
     pcurrent->waitpt = NULL;
 }
 
-int marker;
-
 static void __sleep_on(register struct wait_queue *p, __s16 state)
 {
     register __ptask pcurrent = current;
 
     if (pcurrent == &task[0]) {
 	printk("task[0] trying to sleep ");
-	panic("from %x", marker);
+	panic("from %x", (int)p);
     }
     pcurrent->state = state;
     wait_set(p);
@@ -55,7 +53,6 @@
 
 void sleep_on(struct wait_queue *p)
 {
-    marker = (int) peekw(get_ds(), get_bp() + 2);
     __sleep_on(p, TASK_UNINTERRUPTIBLE);
 }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.