]> Zhao Yanbai Git Server - minix.git/commitdiff
Grant system dynamic-only.
authorBen Gras <ben@minix3.org>
Fri, 30 Jun 2006 14:40:29 +0000 (14:40 +0000)
committerBen Gras <ben@minix3.org>
Fri, 30 Jun 2006 14:40:29 +0000 (14:40 +0000)
drivers/pci/Makefile
drivers/tty/tty.c
include/minix/safecopies.h
lib/other/Makefile.in
lib/other/_brk.c
lib/other/_sbrk.c [new file with mode: 0755]
lib/syslib/safecopies.c
lib/sysutil/kputc.c
servers/fs/Makefile
servers/fs/main.c

index 74eb771cc47b5157068af7eeed228c3f8d3bcc2f..00b2b1c4eedbac483adf1e508e493295ab6d30f5 100644 (file)
@@ -21,7 +21,7 @@ OBJ = main.o pci.o pci_table.o
 all build:     $(DRIVER)
 $(DRIVER):     $(OBJ) 
        $(CC) -o $@ $(LDFLAGS) $(OBJ) $(LIBS)
-       install -S 4096 $(DRIVER)
+       install -S 16k $(DRIVER)
 
 # install with other drivers
 install:       /usr/sbin/$(DRIVER)
index 64193dd97c637a86e801136c0eabd91d85d3ca52..2934deadc583a736ba94f19795d1c1e3431e526a 100644 (file)
@@ -212,6 +212,7 @@ PUBLIC void main(void)
                continue;
        }
        case DIAGNOSTICS:               /* a server wants to print some */
+               printf("WARNING: old DIAGNOSTICS from %d\n", tty_mess.m_source);
                do_diagnostics(&tty_mess, 0);
                continue;
        case DIAGNOSTICS_S: 
index 53366e1d2c58ecc9375d5a39c04bc003d1d43b9e..293ca21622c5d3ee8e16c94ab01c79f5adee1853 100644 (file)
@@ -69,7 +69,6 @@ _PROTOTYPE( cp_grant_id_t cpf_grant_direct, (endpoint_t, vir_bytes, size_t, int)
 _PROTOTYPE( cp_grant_id_t cpf_grant_indirect, (endpoint_t, endpoint_t, cp_grant_id_t));
 _PROTOTYPE( cp_grant_id_t cpf_grant_magic, (endpoint_t, endpoint_t, vir_bytes, size_t, int));
 _PROTOTYPE( int cpf_revoke, (cp_grant_id_t grant_id));
-_PROTOTYPE( int cpf_preallocate, (cp_grant_t *, int));
 _PROTOTYPE( int cpf_lookup, (cp_grant_id_t g, endpoint_t *ep, endpoint_t *ep2));
 
 _PROTOTYPE( int cpf_getgrants, (cp_grant_id_t *grant_ids, int n));
index 05ae64f233ecb1efe79686bdebe6af7a4053d770..8f99cff13b16c3ecbc8471e4bf03090c847a968e 100644 (file)
@@ -6,6 +6,7 @@ LIBRARIES=libc
 
 libc_FILES=" \
        _brk.c \
+       _sbrk.c \
        _devctl.c \
        __pm_findproc.c \
        _getnpid.c \
index 391b36e187ffae380a55378659db950134888512..5ce5e0f638629bcbf8f169d9d594eb843d96bfcd 100755 (executable)
@@ -27,18 +27,3 @@ char *addr;
   return(0);
 }
 
-
-PUBLIC char *sbrk(incr)
-int incr;
-{
-  char *newsize, *oldsize;
-
-  oldsize = _brksize;
-  newsize = _brksize + incr;
-  if ((incr > 0 && newsize < oldsize) || (incr < 0 && newsize > oldsize))
-       return( (char *) -1);
-  if (brk(newsize) == 0)
-       return(oldsize);
-  else
-       return( (char *) -1);
-}
diff --git a/lib/other/_sbrk.c b/lib/other/_sbrk.c
new file mode 100755 (executable)
index 0000000..9f95f58
--- /dev/null
@@ -0,0 +1,20 @@
+#include <lib.h>
+#define sbrk   _sbrk
+#include <unistd.h>
+
+extern char *_brksize;
+
+PUBLIC char *sbrk(incr)
+int incr;
+{
+  char *newsize, *oldsize;
+
+  oldsize = _brksize;
+  newsize = _brksize + incr;
+  if ((incr > 0 && newsize < oldsize) || (incr < 0 && newsize > oldsize))
+       return( (char *) -1);
+  if (brk(newsize) == 0)
+       return(oldsize);
+  else
+       return( (char *) -1);
+}
index 87f03411b7732a167e6d846cd71b59c2a5bc70bd..0559f976f0027f4d907c719b3de84f9ff9cb170d 100644 (file)
    }
 
 PRIVATE cp_grant_t *grants = NULL;
-PRIVATE int ngrants = 0, dynamic = 1;
-
-PUBLIC int
-cpf_preallocate(cp_grant_t *new_grants, int new_ngrants)
-{
-/* Use a statically allocated block of grants as our grant table.
- * This means we can't grow it dynamically any more.
- *
- * This function is used in processes that can't safely call realloc().
- */
-       int s;
-
-       /* If any table is already in place, we can't change it. */
-       if(ngrants > 0) {
-               errno = EBUSY;
-               return -1;
-       }
-
-       /* Update kernel about the table. */
-       if((s=sys_setgrant(new_grants, new_ngrants))) {
-               return -1;
-       }
-
-       /* Update internal data. dynamic = 0 means no realloc()ing will be done
-        * and we can't grow beyond this size.
-        */
-       grants = new_grants;
-       ngrants = new_ngrants;
-       dynamic = 0;
-
-       return 0;
-}
+PRIVATE int ngrants = 0;
 
 PRIVATE void
 cpf_grow(void)
 {
-/* Grow the grants table if possible. If a preallocated block has been
- * submitted ('dynamic' is clear), we can't grow it. Otherwise, realloc().
- * Caller is expected to check 'ngrants' to see if the call was successful.
- */
+/* Grow the grants table if possible. */
        cp_grant_t *new_grants;
        cp_grant_id_t g;
        int new_size;
 
-       /* Can't grow if static block already assigned. */
-       if(!dynamic)
-               return;
-
        new_size = (1+ngrants)*2;
        assert(new_size > ngrants);
 
index ba1f23fe91b47da4b2e47f086964c299f5af8de7..f9d8db313a72a1630b5e6d86b4120e3e8b85f604 100644 (file)
@@ -25,21 +25,24 @@ int c;
 #define PRINTPROCS (sizeof(procs)/sizeof(procs[0]))
        int procs[] = OUTPUT_PROCS_ARRAY;
        static int firstprint = 1;
-       static cp_grant_t printgrant_buffer[PRINTPROCS];
        static cp_grant_id_t printgrants[PRINTPROCS];
        int p;
 
        if(firstprint) {
+               for(p = 0; procs[p] != NONE; p++) {
+                       printgrants[p] = GRANT_INVALID;
+               }
+
+               firstprint = 0;
+
                /* First time? Initialize grant table;
                 * Grant printing processes read copy access to our
-                * print buffer. (So buffer can't be on stack!)
+                * print buffer forever. (So buffer can't be on stack!)
                 */
-               cpf_preallocate(printgrant_buffer, PRINTPROCS);
                for(p = 0; procs[p] != NONE; p++) {
                        printgrants[p] = cpf_grant_direct(procs[p], print_buf,
                                sizeof(print_buf), CPF_READ);
                }
-               firstprint = 0;
        }
 
        for(p = 0; procs[p] != NONE; p++) {
index fbd28cd5e8c851a0b30f1aeecf7cbffa719c198a..64bf4b26ce2dc7857b1ccf2c4482f1aa2d599efb 100644 (file)
@@ -22,7 +22,7 @@ OBJ = main.o open.o read.o write.o pipe.o dmap.o \
 install all build:     $(SERVER)
 $(SERVER):     $(OBJ)
        $(CC) -o $@ $(LDFLAGS) $(OBJ) $(LIBS)
-       install -S 1024w $@
+       install -S 16k $@
 
 # clean up local files
 clean:
index 64c5a03ce731e146874cc69c44bec51f77ebc1ab..f69cb8db886864a4286d76493059a30cdd778e6e 100644 (file)
@@ -225,22 +225,6 @@ PRIVATE void fs_init()
   message mess;
   int s;
 
-/* Maximum number of outstanding grants is one full i/o
- * vector, and all processes hanging on SUSPENDed i/o, and
- * grants for printf() to tty and log.
- *
- * Space is declared for it here, and cpf_preallocate()
- * uses it internally and internally tells the kernel
- * about it. FS then never touches the data again directly,
- * only through the cpf_* library routines.
- */
-#define NGRANTS (NR_PROCS + NR_IOREQS + 10)
-  static cp_grant_t grants[NGRANTS];
-
-  /* Set data copy grant table, as FS can't allocate it dynamically. */
-  if(cpf_preallocate(grants, NGRANTS) != OK)
-       panic(__FILE__,"cpf_preallocate failed", NO_NUM);
-
   /* Initialize the process table with help of the process manager messages. 
    * Expect one message for each system process with its slot number and pid. 
    * When no more processes follow, the magic process number NONE is sent.